Compare commits

..

19 Commits

Author SHA1 Message Date
Conduitry
3dd947089d site: mention host in preload and in page store 2019-06-11 11:33:18 -04:00
Conduitry
a5872477ad add --host option to sapper export 2019-06-11 11:32:27 -04:00
Conduitry
c4f92a597d add tests 2019-06-11 11:32:00 -04:00
Conduitry
57b11b4b67 expose host in preload and page store 2019-06-11 11:13:44 -04:00
Richard Harris
e2f13aad7a -> v0.27.4 2019-06-10 08:53:30 -04:00
Richard Harris
fdacbb93bb -> v0.27.3 2019-06-09 20:20:02 -04:00
Rich Harris
fb8bf5c9b0 Merge pull request #732 from sveltejs/fix-resolution
Fix resolution
2019-06-09 20:16:30 -04:00
Richard Harris
8baf694e6d revert previous unpleasantness 2019-06-09 20:10:56 -04:00
Richard Harris
b6c693934d update lockfile 2019-06-09 20:00:57 -04:00
Richard Harris
c42de4cc44 Merge branch 'master' into fix-resolution 2019-06-09 18:58:25 -04:00
Richard Harris
ff6db7d8af merge 2019-06-09 18:57:59 -04:00
Richard Harris
6c9a90e87d rewrite source code to point at correct files 2019-06-09 18:55:00 -04:00
Richard Harris
a1d3927958 update deps 2019-06-09 18:16:40 -04:00
Conduitry
d0caad5303 -> v0.27.2 2019-06-08 18:50:52 -04:00
cudr
b1e84687c0 repair regexp routes 2019-06-08 18:34:09 -04:00
Conduitry
993bd6cc5b site: make readme more relevant 2019-06-06 17:17:14 -04:00
Conduitry
d4ee7ab040 site: quote degit repo argument (#726) 2019-06-06 17:13:11 -04:00
Poluektov Dmitriy
43e7f0d30d fix: cli ignores --output option (#723) 2019-06-06 06:57:17 -04:00
Conduitry
d7e2662298 site: bump sapper 2019-05-25 18:51:53 -04:00
25 changed files with 309 additions and 279 deletions

View File

@@ -1,5 +1,21 @@
# sapper changelog
## 0.27.4
* Update devalue
## 0.27.3
* Accommodate Svelte 3.5.0
## 0.27.2
* Fix routes with regular expressions ([#707](https://github.com/sveltejs/sapper/issues/707))
* Fix `sapper build --output` option ([#723](https://github.com/sveltejs/sapper/pull/723))
## 0.27.1
* Prevent infinite loop if `preload` errors ([#677](https://github.com/sveltejs/sapper/pull/677))
@@ -623,4 +639,4 @@
## 0.1.0
* First public preview
* First public preview

250
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "sapper",
"version": "0.27.0",
"version": "0.27.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -43,15 +43,15 @@
"dev": true
},
"@types/mocha": {
"version": "5.2.6",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz",
"integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==",
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
"integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
"dev": true
},
"@types/node": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.0.tgz",
"integrity": "sha512-Jrb/x3HT4PTJp6a4avhmJCDEVrPdqLfl3e8GGMbpkGGdwAV5UGlIs4vVEfsHHfylZVOKZWpOqmqFH8CbfOZ6kg==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.7.tgz",
"integrity": "sha512-1YKeT4JitGgE4SOzyB9eMwO0nGVNkNEsm9qlIt1Lqm/tG2QEiSMTD4kS3aO6L+w5SClLVxALmIBESK6Mk5wX0A==",
"dev": true
},
"@types/puppeteer": {
@@ -301,9 +301,9 @@
}
},
"agent-base": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
"integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
"integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
"dev": true,
"requires": {
"es6-promisify": "^5.0.0"
@@ -602,9 +602,9 @@
"dev": true
},
"bluebird": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz",
"integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==",
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
"integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
"dev": true
},
"bn.js": {
@@ -854,9 +854,9 @@
"dev": true
},
"chokidar": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz",
"integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
"integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
@@ -880,9 +880,9 @@
"dev": true
},
"chrome-trace-event": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
"integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
"integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@@ -1043,9 +1043,9 @@
"dev": true
},
"cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
"dev": true
},
"copy-concurrently": {
@@ -1243,9 +1243,9 @@
}
},
"devalue": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/devalue/-/devalue-1.1.0.tgz",
"integrity": "sha512-mKj+DaZuxevfmjI78VdlkBr+NDmwaDAKQz0t5RDSmhwBn6m5z82KDnVRKVFeUvlMOmI1fzkAUx4USdqGGhas6g==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/devalue/-/devalue-1.1.1.tgz",
"integrity": "sha512-ULnighb7iXHiG+T3hoePM8LfaJWuMV/8TBYcdkYD2eOSRtGfZGVtc/66+gIx6BHRVOwEWGfUsMwzcDF7LxRwgw==",
"dev": true
},
"diff": {
@@ -1383,9 +1383,9 @@
}
},
"es6-promise": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
"integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==",
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
"dev": true
},
"es6-promisify": {
@@ -1502,9 +1502,9 @@
}
},
"eslint-plugin-import": {
"version": "2.17.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz",
"integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==",
"version": "2.17.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.3.tgz",
"integrity": "sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q==",
"dev": true,
"requires": {
"array-includes": "^3.0.3",
@@ -1517,7 +1517,7 @@
"lodash": "^4.17.11",
"minimatch": "^3.0.4",
"read-pkg-up": "^2.0.0",
"resolve": "^1.10.0"
"resolve": "^1.11.0"
},
"dependencies": {
"debug": {
@@ -1611,9 +1611,9 @@
"dev": true
},
"estree-walker": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz",
"integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==",
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
"integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
"dev": true
},
"esutils": {
@@ -3105,6 +3105,15 @@
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
"dev": true
},
"is-reference": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.2.tgz",
"integrity": "sha512-Kn5g8c7XHKejFOpTf2QN9YjiHHKl5xRj+2uAZf9iM2//nkBNi/NNeB5JMoun28nEaUVHyPUzqzhfRlfAirEjXg==",
"dev": true,
"requires": {
"@types/estree": "0.0.39"
}
},
"is-regex": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
@@ -3135,6 +3144,12 @@
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
"dev": true
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -3459,9 +3474,9 @@
}
},
"mime": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz",
"integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==",
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
"integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
"dev": true
},
"mimic-fn": {
@@ -3618,6 +3633,12 @@
"path-exists": "^3.0.0"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
},
"p-limit": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
@@ -3674,9 +3695,9 @@
"dev": true
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"mute-stream": {
@@ -3697,9 +3718,9 @@
}
},
"nan": {
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
"integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==",
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"dev": true,
"optional": true
},
@@ -3729,9 +3750,9 @@
"dev": true
},
"neo-async": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
"integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"dev": true
},
"nice-try": {
@@ -3759,9 +3780,9 @@
}
},
"node-fetch": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz",
"integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==",
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
"integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
"dev": true
},
"node-libs-browser": {
@@ -4382,9 +4403,9 @@
"dev": true
},
"puppeteer": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.15.0.tgz",
"integrity": "sha512-D2y5kwA9SsYkNUmcBzu9WZ4V1SGHiQTmgvDZSx6sRYFsgV25IebL4V6FaHjF6MbwLK9C6f3G3pmck9qmwM8H3w==",
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.17.0.tgz",
"integrity": "sha512-3EXZSximCzxuVKpIHtyec8Wm2dWZn1fc5tQi34qWfiUgubEVYHjUvr0GOJojqf3mifI6oyKnCdrGxaOI+lWReA==",
"dev": true,
"requires": {
"debug": "^4.1.0",
@@ -4533,9 +4554,9 @@
"dev": true
},
"resolve": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz",
"integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==",
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
"integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
@@ -4589,34 +4610,27 @@
}
},
"rollup": {
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-1.11.3.tgz",
"integrity": "sha512-81MR7alHcFKxgWzGfG7jSdv+JQxSOIOD/Fa3iNUmpzbd7p+V19e1l9uffqT8/7YAHgGOzmoPGN3Fx3L2ptOf5g==",
"version": "1.14.5",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-1.14.5.tgz",
"integrity": "sha512-XKegaT6NhrKuBvFQCeLfDJ7bNpfnWIMQfLx9+Qe34rrKaVOtNGVIf5vyIKuwS4JlF2l/nA7RvEsItXqyF0ZFZg==",
"dev": true,
"requires": {
"@types/estree": "0.0.39",
"@types/node": "^11.13.9",
"@types/node": "^12.0.7",
"acorn": "^6.1.1"
},
"dependencies": {
"@types/node": {
"version": "11.13.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.10.tgz",
"integrity": "sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA==",
"dev": true
}
}
},
"rollup-plugin-commonjs": {
"version": "9.3.4",
"resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz",
"integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==",
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.0.tgz",
"integrity": "sha512-B8MoX5GRpj3kW4+YaFO/di2JsZkBxNjVmZ9LWjUoTAjq8N9wc7HObMXPsrvolVV9JXVtYSscflXM14A19dXPNQ==",
"dev": true,
"requires": {
"estree-walker": "^0.6.0",
"is-reference": "^1.1.2",
"magic-string": "^0.25.2",
"resolve": "^1.10.0",
"rollup-pluginutils": "^2.6.0"
"resolve": "^1.10.1",
"rollup-pluginutils": "^2.7.0"
}
},
"rollup-plugin-json": {
@@ -4629,15 +4643,16 @@
}
},
"rollup-plugin-node-resolve": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.3.tgz",
"integrity": "sha512-r+WaesPzdGEynpLZLALFEDugA4ACa5zn7bc/+LVX4vAXQQ8IgDHv0xfsSvJ8tDXUtprfBtrDtRFg27ifKjcJTg==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.0.1.tgz",
"integrity": "sha512-9s3dTu44SKQZM/Pwll42GpqXgT+WdvO0Ga01lF8cwZqJGqRUATtD+GrP3uIzZdpnbPonEJbVasfFt80VGPQqKw==",
"dev": true,
"requires": {
"@types/resolve": "0.0.8",
"builtin-modules": "^3.1.0",
"is-module": "^1.0.0",
"resolve": "^1.10.0"
"resolve": "^1.11.0",
"rollup-pluginutils": "^2.8.0"
}
},
"rollup-plugin-replace": {
@@ -4687,13 +4702,12 @@
"dev": true
},
"rollup-pluginutils": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz",
"integrity": "sha512-aGQwspEF8oPKvg37u3p7h0cYNwmJR1sCBMZGZ5b9qy8HGtETknqjzcxrDRrcAnJNXN18lBH4Q9vZYth/p4n8jQ==",
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz",
"integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==",
"dev": true,
"requires": {
"estree-walker": "^0.6.0",
"micromatch": "^3.1.10"
"estree-walker": "^0.6.1"
}
},
"run-async": {
@@ -4715,18 +4729,18 @@
}
},
"rxjs": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.1.tgz",
"integrity": "sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==",
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
"integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
},
"sade": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/sade/-/sade-1.4.2.tgz",
"integrity": "sha512-MTrQm+Nhl4m1mbssYDgAculC/HbShjj08QtHnA2GTpzivfU5aUp8EoHlECmrIHEaa8hZRZSp2Gygv8VMlpXEBw==",
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/sade/-/sade-1.5.0.tgz",
"integrity": "sha512-d1BuDwSfXR3vKnV00YF09f5SgzZsexB0A3YR8c95KhiGlJwwepxPVEQZC17XOBxPeQZ5I7OZszsSHy0JloOcMA==",
"dev": true,
"requires": {
"mri": "^1.1.0"
@@ -5259,9 +5273,9 @@
}
},
"svelte": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.2.2.tgz",
"integrity": "sha512-B6ePpPodCQodVFDwv/uByaWs0KvXojaXZiB/db1x7WXbyxgLJ8xZF3j1lk5M83Ox0AWlX0fQnCTAaZmfT6xqdw==",
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.5.1.tgz",
"integrity": "sha512-iMnuyteFGQ8Yl68G/DHTHY1sLwoAMya1eS0ZOHIm/dqn2etR8WEe8hUAoluLryde4Cft4gvMhtHV3NhE60nBmQ==",
"dev": true
},
"svelte-dev-helper": {
@@ -5271,9 +5285,9 @@
"dev": true
},
"svelte-loader": {
"version": "2.13.3",
"resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.13.3.tgz",
"integrity": "sha512-ZvNWbR77lZ04nCHqnN0XFxKCQ+fynARCy+kxwogagW3k2NTJWg2QfJwN1J9d4ch+OZwcGPgGZITVr7FGB3hPmQ==",
"version": "2.13.4",
"resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.13.4.tgz",
"integrity": "sha512-seAB2Tn/OkJA8TvTY1fVlWdDCwyribzEagT6qPkTK8RGpG6NugPnjyKJv2jN72Sya4yGIo/fc874c6Je5L7vHA==",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
@@ -5281,9 +5295,9 @@
}
},
"table": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/table/-/table-5.3.0.tgz",
"integrity": "sha512-6V2qlZHIbbZQGzoP3Ghcj/IQDPhBvQYjZE4W4JEyFMkbzHziIzG6jxmAD87BZ1ZXgwPwgu3MzvCUGMOFRN7wlw==",
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz",
"integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==",
"dev": true,
"requires": {
"ajv": "^6.9.1",
@@ -5327,9 +5341,9 @@
"dev": true
},
"terser": {
"version": "3.17.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
"integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz",
"integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==",
"dev": true,
"requires": {
"commander": "^2.19.0",
@@ -5338,19 +5352,21 @@
}
},
"terser-webpack-plugin": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz",
"integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz",
"integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==",
"dev": true,
"requires": {
"cacache": "^11.0.2",
"cacache": "^11.3.2",
"find-cache-dir": "^2.0.0",
"is-wsl": "^1.1.0",
"loader-utils": "^1.2.3",
"schema-utils": "^1.0.0",
"serialize-javascript": "^1.4.0",
"serialize-javascript": "^1.7.0",
"source-map": "^0.6.1",
"terser": "^3.16.1",
"webpack-sources": "^1.1.0",
"worker-farm": "^1.5.2"
"terser": "^4.0.0",
"webpack-sources": "^1.3.0",
"worker-farm": "^1.7.0"
}
},
"text-table": {
@@ -5502,9 +5518,9 @@
"dev": true
},
"uglify-js": {
"version": "3.5.11",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.11.tgz",
"integrity": "sha512-izPJg8RsSyqxbdnqX36ExpbH3K7tDBsAU/VfNv89VkMFy3z39zFjunQGsSHOlGlyIfGLGprGeosgQno3bo2/Kg==",
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
"integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
"requires": {
"commander": "~2.20.0",
"source-map": "~0.6.1"
@@ -5699,9 +5715,9 @@
}
},
"webpack": {
"version": "4.31.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.31.0.tgz",
"integrity": "sha512-n6RVO3X0LbbipoE62akME9K/JI7qYrwwufs20VvgNNpqUoH4860KkaxJTbGq5bgkVZF9FqyyTG/0WPLH3PVNJA==",
"version": "4.33.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.33.0.tgz",
"integrity": "sha512-ggWMb0B2QUuYso6FPZKUohOgfm+Z0sVFs8WwWuSH1IAvkWs428VDNmOlAxvHGTB9Dm/qOB/qtE5cRx5y01clxw==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.8.5",
@@ -6085,9 +6101,9 @@
}
},
"yootils": {
"version": "0.0.15",
"resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.15.tgz",
"integrity": "sha512-GvGLuJ7XHJPGEUQ52vh8fh+vPjfikuGcu7yBswfrsNsHqnAoytOVuSb69eM0j8wQIjMz0U3kY3YsfwMhJgfG9w==",
"version": "0.0.16",
"resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.16.tgz",
"integrity": "sha512-aIVecm5ucOzwhtKbl0zkfg0ZSOUR9c2da0k8cIc9umjjzkvVCWUUX/UHZ1CLPsv4wmJLqt0aWeLB7p9n9JDwYQ==",
"dev": true
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "sapper",
"version": "0.27.1",
"version": "0.27.4",
"description": "Military-grade apps, engineered by Svelte",
"bin": {
"sapper": "./sapper"
@@ -25,43 +25,43 @@
"string-hash": "^1.1.3"
},
"devDependencies": {
"@types/mocha": "^5.2.6",
"@types/node": "^12.0.0",
"@types/mocha": "^5.2.7",
"@types/node": "^12.0.7",
"@types/puppeteer": "^1.12.4",
"agadoo": "^1.0.1",
"cheap-watch": "^1.0.2",
"cookie": "^0.3.1",
"devalue": "^1.1.0",
"cookie": "^0.4.0",
"devalue": "^1.1.1",
"eslint": "^5.16.0",
"eslint-plugin-import": "^2.17.2",
"eslint-plugin-import": "^2.17.3",
"kleur": "^3.0.3",
"mocha": "^6.1.4",
"node-fetch": "^2.5.0",
"node-fetch": "^2.6.0",
"npm-run-all": "^4.1.5",
"polka": "^0.5.2",
"port-authority": "^1.0.5",
"pretty-bytes": "^5.2.0",
"puppeteer": "^1.15.0",
"puppeteer": "^1.17.0",
"require-relative": "^0.8.7",
"rollup": "^1.11.3",
"rollup-plugin-commonjs": "^9.3.4",
"rollup": "^1.14.5",
"rollup-plugin-commonjs": "^10.0.0",
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-node-resolve": "^4.2.3",
"rollup-plugin-node-resolve": "^5.0.1",
"rollup-plugin-replace": "^2.2.0",
"rollup-plugin-string": "^3.0.0",
"rollup-plugin-sucrase": "^2.1.0",
"rollup-plugin-svelte": "^5.0.3",
"sade": "^1.4.2",
"sade": "^1.5.0",
"sirv": "^0.4.2",
"sucrase": "^3.10.1",
"svelte": "^3.2.2",
"svelte-loader": "^2.13.3",
"webpack": "^4.31.0",
"svelte": "^3.5.0",
"svelte-loader": "^2.13.4",
"webpack": "^4.33.0",
"webpack-format-messages": "^2.0.5",
"yootils": "0.0.15"
"yootils": "0.0.16"
},
"peerDependencies": {
"svelte": "^3.2.2"
"svelte": "^3.5.0"
},
"scripts": {
"test": "mocha --opts mocha.opts",

View File

@@ -1,4 +1,4 @@
import { writable } from 'svelte/store.mjs';
import { writable } from 'svelte/store';
import App from '@sapper/internal/App.svelte';
import { root_preload, ErrorComponent, ignore, components, routes } from '@sapper/internal/manifest-client';
import {
@@ -121,7 +121,7 @@ export function select_target(url: URL): Target {
const part = route.parts[route.parts.length - 1];
const params = part.params ? part.params(match) : {};
const page = { path, query, params };
const page = { host: location.host, path, query, params };
return { href: url.href, route, match, page };
}
@@ -129,7 +129,7 @@ export function select_target(url: URL): Target {
}
export function handle_error(url: URL) {
const { pathname, search } = location;
const { host, pathname, search } = location;
const { session, preloaded, status, error } = initial_data;
if (!root_preloaded) {
@@ -154,7 +154,7 @@ export function handle_error(url: URL) {
}
const query = extract_query(search);
render(null, [], props, { path: pathname, query, params: {} });
render(null, [], props, { host, path: pathname, query, params: {} });
}
export function scroll_state() {
@@ -301,6 +301,7 @@ export async function hydrate_target(target: Target): Promise<{
if (!root_preloaded) {
root_preloaded = initial_data.preloaded[0] || root_preload.call(preload_context, {
host: page.host,
path: page.path,
query: page.query,
params: {}
@@ -338,6 +339,7 @@ export async function hydrate_target(target: Target): Promise<{
if (ready || !initial_data.preloaded[i + 1]) {
preloaded = preload
? await preload.call(preload_context, {
host: page.host,
path: page.path,
query: page.query,
params: part.params ? part.params(target.match) : {}

View File

@@ -56,6 +56,7 @@ export type Redirect = {
};
export type Page = {
host: string;
path: string;
params: Record<string, string>;
query: Record<string, string | string[]>;

View File

@@ -1,4 +1,4 @@
import { writable } from 'svelte/store.mjs';
import { writable } from 'svelte/store';
import fs from 'fs';
import path from 'path';
import cookie from 'cookie';
@@ -149,6 +149,7 @@ export function get_page_handler(
try {
const root_preloaded = manifest.root_preload
? manifest.root_preload.call(preload_context, {
host: req.headers.host,
path: req.path,
query: req.query,
params: {}
@@ -168,6 +169,7 @@ export function get_page_handler(
return part.preload
? part.preload.call(preload_context, {
host: req.headers.host,
path: req.path,
query: req.query,
params
@@ -218,6 +220,7 @@ export function get_page_handler(
stores: {
page: {
subscribe: writable({
host: req.headers.host,
path: req.path,
query: req.query,
params

View File

@@ -1,88 +1,17 @@
# sapper-template
## Running locally
The default [Sapper](https://github.com/sveltejs/sapper) template, with branches for Rollup and webpack. To clone it and get started:
Set up the project:
```bash
# for Rollup
npx degit sveltejs/sapper-template#rollup my-app
# for webpack
npx degit sveltejs/sapper-template#webpack my-app
cd my-app
npm install # or yarn!
npm run dev
git clone https://github.com/sveltejs/sapper.git
cd sapper/site
npm ci
```
Open up [localhost:3000](http://localhost:3000) and start clicking around.
Start the server with `npm run dev`, and navigate to [localhost:3000](http://localhost:3000).
Consult [sapper.svelte.technology](https://sapper.svelte.technology) for help getting started.
## Translating the API docs
Anchors are automatically generated using headings in the documentation and by default (for the english language) they are latinised to make sure the URL is always conforming to RFC3986.
## Structure
Sapper expects to find two directories in the root of your project — `src` and `static`.
### src
The [src](src) directory contains the entry points for your app — `client.js`, `server.js` and (optionally) a `service-worker.js` — along with a `template.html` file and a `routes` directory.
#### src/routes
This is the heart of your Sapper app. There are two kinds of routes — *pages*, and *server routes*.
**Pages** are Svelte components written in `.html` files. When a user first visits the application, they will be served a server-rendered version of the route in question, plus some JavaScript that 'hydrates' the page and initialises a client-side router. From that point forward, navigating to other pages is handled entirely on the client for a fast, app-like feel. (Sapper will preload and cache the code for these subsequent pages, so that navigation is instantaneous.)
**Server routes** are modules written in `.js` files, that export functions corresponding to HTTP methods. Each function receives Express `request` and `response` objects as arguments, plus a `next` function. This is useful for creating a JSON API, for example.
There are three simple rules for naming the files that define your routes:
* A file called `src/routes/about.html` corresponds to the `/about` route. A file called `src/routes/blog/[slug].html` corresponds to the `/blog/:slug` route, in which case `params.slug` is available to the route
* The file `src/routes/index.html` (or `src/routes/index.js`) corresponds to the root of your app. `src/routes/about/index.html` is treated the same as `src/routes/about.html`.
* Files and directories with a leading underscore do *not* create routes. This allows you to colocate helper modules and components with the routes that depend on them — for example you could have a file called `src/routes/_helpers/datetime.js` and it would *not* create a `/_helpers/datetime` route
### static
The [static](static) directory contains any static assets that should be available. These are served using [sirv](https://github.com/lukeed/sirv).
In your [service-worker.js](app/service-worker.js) file, you can import these as `files` from the generated manifest...
```js
import { files } from '../__sapper__/service-worker.js';
```
...so that you can cache them (though you can choose not to, for example if you don't want to cache very large files).
## Bundler config
Sapper uses Rollup or webpack to provide code-splitting and dynamic imports, as well as compiling your Svelte components. With webpack, it also provides hot module reloading. As long as you don't do anything daft, you can edit the configuration files to add whatever plugins you'd like.
## Production mode and deployment
To start a production version of your app, run `npm run build && npm start`. This will disable live reloading, and activate the appropriate bundler plugins.
You can deploy your application to any environment that supports Node 8 or above. As an example, to deploy to [Now](https://zeit.co/now), run these commands:
```bash
npm install -g now
now
```
## Using external components with webpack
When using Svelte components installed from npm, such as [@sveltejs/svelte-virtual-list](https://github.com/sveltejs/svelte-virtual-list), Svelte needs the original component source (rather than any precompiled JavaScript that ships with the component). This allows the component to be rendered server-side, and also keeps your client-side app smaller.
Because of that, it's essential that webpack doesn't treat the package as an *external dependency*. You can either modify the `externals` option in [webpack/server.config.js](webpack/server.config.js), or simply install the package to `devDependencies` rather than `dependencies`, which will cause it to get bundled (and therefore compiled) with your app:
```bash
yarn add -D @sveltejs/svelte-virtual-list
```
## Bugs and feedback
Sapper is in early development, and may have the odd rough edge here and there. Please be vocal over on the [Sapper issue tracker](https://github.com/sveltejs/sapper/issues).
If we need to translate the API documentation to a language using unicode chars, we can setup this app to export the correct anchors by setting up `SLUG_PRESERVE_UNICODE` to `true` in `config.js`.

View File

@@ -42,8 +42,8 @@ For web developers, the stakes are generally lower than for combat engineers. Bu
The easiest way to start building a Sapper app is to clone the [sapper-template](https://github.com/sveltejs/sapper-template) repo with [degit](https://github.com/Rich-Harris/degit):
```bash
npx degit sveltejs/sapper-template#rollup my-app
# or: npx degit sveltejs/sapper-template#webpack my-app
npx degit "sveltejs/sapper-template#rollup" my-app
# or: npx degit "sveltejs/sapper-template#webpack" my-app
cd my-app
npm install
npm run dev

View File

@@ -23,7 +23,7 @@ It lives in a `context="module"` script — see the [tutorial](https://svelte.de
The `preload` function receives two arguments — `page` and `session`.
`page` is a `{ path, params, query }` object where `path` is the URL's pathname, `params` is derived from `path` and the route filename, and `query` is an object of values in the query string.
`page` is a `{ host, path, params, query }` object where `host` is the URL's host, `path` is its pathname, `params` is derived from `path` and the route filename, and `query` is an object of values in the query string.
So if the example above was `src/routes/blog/[slug].svelte` and the URL was `/blog/some-post?foo=bar&baz`, the following would be true:

View File

@@ -14,7 +14,7 @@ Inside a component, get references to the stores like so:
```
* `preloading` contains a readonly boolean value, indicating whether or not a navigation is pending
* `page` contains a readonly `{ path, params, query }` object, identical to that passed to `preload` functions
* `page` contains a readonly `{ host, path, params, query }` object, identical to that passed to `preload` functions
* `session` contains whatever data was seeded on the server. It is a [writable store](https://svelte.dev/tutorial/writable-stores), meaning you can update it with new data (for example, after the user logs in) and your app will be refreshed

58
site/package-lock.json generated
View File

@@ -1705,26 +1705,18 @@
"dev": true
},
"html-minifier": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
"integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
"integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
"dev": true,
"requires": {
"camel-case": "3.0.x",
"clean-css": "4.2.x",
"commander": "2.17.x",
"he": "1.2.x",
"param-case": "2.1.x",
"relateurl": "0.2.x",
"uglify-js": "3.4.x"
},
"dependencies": {
"commander": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
"dev": true
}
"camel-case": "^3.0.0",
"clean-css": "^4.2.1",
"commander": "^2.19.0",
"he": "^1.2.0",
"param-case": "^2.1.1",
"relateurl": "^0.2.7",
"uglify-js": "^3.5.1"
}
},
"http-link-header": {
@@ -2638,14 +2630,14 @@
}
},
"sapper": {
"version": "0.26.0-alpha.12",
"resolved": "https://registry.npmjs.org/sapper/-/sapper-0.26.0-alpha.12.tgz",
"integrity": "sha512-NEXr6Eu5jawY76N5IEQhKMKhcZW6+42E2alH4J8DxFMmOI7Gi2nlwCQ2jcZv7q/S+zMP+OSuqE44c94A5u1H8Q==",
"version": "0.27.1",
"resolved": "https://registry.npmjs.org/sapper/-/sapper-0.27.1.tgz",
"integrity": "sha512-RH0K1uQ3zJ1IXvowxr2SuboGXV69q22KaPMhhoM5VNDv9fsUlVHtluZE8WTcGxckiO2L1xFfgM7v/aINkSZpcw==",
"dev": true,
"requires": {
"html-minifier": "^3.5.21",
"html-minifier": "^4.0.0",
"http-link-header": "^1.0.2",
"shimport": "0.0.14",
"shimport": "^1.0.0",
"sourcemap-codec": "^1.4.4",
"string-hash": "^1.1.3"
}
@@ -2719,9 +2711,9 @@
}
},
"shimport": {
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.14.tgz",
"integrity": "sha512-JfzpHhyZ6CYuPYUSitFNw2/IxWEABLN1chs9xDHnn4tPXXCmfIn1METCmIl8Vwvm2FZGW7b8WB4zMCKaJEhY6A==",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shimport/-/shimport-1.0.0.tgz",
"integrity": "sha512-XKd+39voZT1rFR1ct+pr8sFSYAW6IvM3LeF87FrgcGHc/uSZ4GfOZVA42LE5LXFOpTWgmDC5sS8DNDtiV4Vd4Q==",
"dev": true
},
"sirv": {
@@ -3086,21 +3078,15 @@
}
},
"uglify-js": {
"version": "3.4.10",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
"integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
"version": "3.5.15",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.15.tgz",
"integrity": "sha512-fe7aYFotptIddkwcm6YuA0HmknBZ52ZzOsUxZEdhhkSsz7RfjHDX2QDxwKTiv4JQ5t5NhfmpgAK+J7LiDhKSqg==",
"dev": true,
"requires": {
"commander": "~2.19.0",
"commander": "~2.20.0",
"source-map": "~0.6.1"
},
"dependencies": {
"commander": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
"integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",

View File

@@ -37,7 +37,7 @@
"rollup-plugin-replace": "^2.2.0",
"rollup-plugin-svelte": "^5.0.3",
"rollup-plugin-terser": "^4.0.4",
"sapper": "alpha",
"sapper": "^0.27.1",
"svelte": "^3.2.2"
}
}

View File

@@ -1,8 +1,10 @@
<script>
import { page } from '@sapper/app';
import { stores } from '@sapper/app';
import { Icons, Icon, Nav, NavItem } from '@sveltejs/site-kit';
export let segment;
const { page } = stores();
</script>
<style>
@@ -37,4 +39,4 @@
<main>
<slot></slot>
</main>
</main>

View File

@@ -50,9 +50,9 @@
<div style="grid-area: start; display: flex; flex-direction: column; min-width: 0" slot="how">
<pre class="language-bash" style="margin: 0 0 1em 0; min-width: 0; min-height: 0">
# for Rollup
npx degit sveltejs/sapper-template#rollup my-app
npx degit "sveltejs/sapper-template#rollup" my-app
# for webpack
npx degit sveltejs/sapper-template#webpack my-app
npx degit "sveltejs/sapper-template#webpack" my-app
cd my-app
npm install

View File

@@ -18,6 +18,7 @@ type Opts = {
cwd?: string,
static?: string,
basepath?: string,
host_header?: string,
timeout?: number | false,
concurrent?: number,
oninfo?: ({ message }: { message: string }) => void;
@@ -44,6 +45,7 @@ async function _export({
build_dir = '__sapper__/build',
export_dir = '__sapper__/export',
basepath = '',
host_header,
timeout = 5000,
concurrent = 8,
oninfo = noop,
@@ -140,6 +142,7 @@ async function _export({
const r = await Promise.race([
fetch(url.href, {
headers: { host: host_header || host },
redirect: 'manual'
}),
timeout_deferred.promise

View File

@@ -194,6 +194,7 @@ prog.command('export [dest]')
.describe('Export your app as static files (if possible)')
.option('--build', '(Re)build app before exporting', true)
.option('--basepath', 'Specify a base path')
.option('--host', 'Host header to use when crawling site')
.option('--concurrent', 'Concurrent requests', 8)
.option('--timeout', 'Milliseconds to wait for a page (--no-timeout to disable)', 5000)
.option('--legacy', 'Create separate legacy build')
@@ -210,6 +211,7 @@ prog.command('export [dest]')
legacy: boolean,
bundler?: 'rollup' | 'webpack',
basepath?: string,
host?: string,
concurrent: number,
timeout: number | false,
cwd: string,
@@ -236,6 +238,7 @@ prog.command('export [dest]')
build_dir: opts['build-dir'],
export_dir: dest,
basepath: opts.basepath,
host_header: opts.host,
timeout: opts.timeout,
concurrent: opts.concurrent,
@@ -285,6 +288,7 @@ async function _build(
routes,
dest,
ext,
output,
oncompile: event => {
let banner = `built ${event.type}`;
let c = (txt: string) => colors.cyan(txt);

View File

@@ -5,7 +5,7 @@ import { Page, PageComponent, ServerRoute, ManifestData } from '../interfaces';
import { posixify, reserved_words } from '../utils';
export default function create_manifest_data(cwd: string, extensions: string = '.svelte .html'): ManifestData {
const component_extensions = extensions.split(' ');
// TODO remove in a future version
@@ -335,7 +335,7 @@ function get_pattern(segments: Part[][], add_trailing_slash: boolean) {
const path = segments.map(segment => {
return segment.map(part => {
return part.dynamic
? part.qualifier || part.spread ? '(.+)' : '([^\\/]+?)'
? part.qualifier || (part.spread ? '(.+)' : '([^\\/]+?)')
: encodeURI(part.content.normalize())
.replace(/\?/g, '%3F')
.replace(/#/g, '%23')

View File

@@ -0,0 +1,8 @@
<script>
import { stores } from '@sapper/app';
const { page } = stores();
</script>
<h1>Regexp page {$page.params.id}</h1>
<a href="regexp/234">nested regexp route</a>

View File

@@ -3,4 +3,6 @@
const { page } = stores();
</script>
<h1>{$page.params.slug.toUpperCase()}</h1>
<h1>{$page.params.slug}</h1>
<a href="234">regexp route</a>

View File

@@ -0,0 +1,6 @@
<script>
import { stores } from '@sapper/app';
const { page } = stores();
</script>
<h1>{$page.host.replace(/:\d+$/, '')}</h1>

View File

@@ -0,0 +1,6 @@
<script>
import { stores } from '@sapper/app';
const { page } = stores();
</script>
<h1>Nested regexp page {$page.params.id}</h1>

View File

@@ -82,7 +82,7 @@ describe('basics', function() {
assert.equal(
await r.text('h1'),
'TEST-SLUG'
'test-slug'
);
});
@@ -239,6 +239,15 @@ describe('basics', function() {
);
});
it('can access host through page store', async () => {
await r.load('/host');
assert.equal(await r.text('h1'), 'localhost');
await r.sapper.start();
assert.equal(await r.text('h1'), 'localhost');
});
// skipped because Nightmare doesn't seem to focus the <a> correctly
it('resets the active element after navigation', async () => {
await r.load('/');
@@ -316,6 +325,22 @@ describe('basics', function() {
assert.equal(await r.text('h1'), 'B page');
});
it('find regexp routes', async () => {
await r.load('/qwe');
await r.sapper.start();
assert.equal(await r.text('h1'), 'qwe');
await r.page.click('[href="234"]');
await r.wait();
assert.equal(await r.text('h1'), 'Regexp page 234');
await r.page.click('[href="regexp/234"]');
await r.wait();
assert.equal(await r.text('h1'), 'Nested regexp page 234');
});
it('runs server route handlers before page handlers, if they match', async () => {
const json = await get(`${r.base}/middleware`, {
headers: {

View File

@@ -0,0 +1,13 @@
<script context="module">
export function preload(page) {
return {
host: page.host
};
}
</script>
<script>
export let host;
</script>
<h1>{host.replace(/:\d+$/, '')}</h1>

View File

@@ -27,6 +27,15 @@ describe('preloading', function() {
assert.equal(await r.text('h1'), 'true');
});
it('retrieves host from preload', async () => {
await r.load('/preload-values/host');
assert.equal(await r.text('h1'), 'localhost');
await r.sapper.start();
assert.equal(await r.text('h1'), 'localhost');
});
it('prevent crash if preload return nothing', async () => {
await r.load('/preload-nothing');

View File

@@ -95,16 +95,15 @@ describe('manifest_data', () => {
]);
});
// this test broken
// it('allows regex qualifiers', () => {
// const { pages } = create_manifest_data(path.join(__dirname, 'samples/qualifiers'));
//
// assert.deepEqual(pages.map(p => p.pattern), [
// /^\/([0-9-a-z]{3,})\/?$/,
// /^\/([a-z]{2})\/?$/,
// /^\/([^\/]+?)\/?$/
// ]);
// });
it('allows regex qualifiers', () => {
const { pages } = create_manifest_data(path.join(__dirname, 'samples/qualifiers'));
assert.deepEqual(pages.map(p => p.pattern), [
/^\/([0-9-a-z]{3,})\/?$/,
/^\/([a-z]{2})\/?$/,
/^\/([^\/]+?)\/?$/
]);
});
it('sorts routes correctly', () => {
const { pages } = create_manifest_data(path.join(__dirname, 'samples/sorting'));