diff --git a/.gitignore b/.gitignore
index 58cad3257..910b5f3d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,4 +12,5 @@ sapper
runtime.js
dist
!rollup.config.js
-templates/*.js
\ No newline at end of file
+/runtime/app.mjs
+/runtime/server.mjs
\ No newline at end of file
diff --git a/mocha.opts b/mocha.opts
index c769c5c5e..8985f6600 100644
--- a/mocha.opts
+++ b/mocha.opts
@@ -1,5 +1,4 @@
--require source-map-support/register
---require ts-node/register
+--require sucrase/register
--recursive
-test/unit/*/*.ts
test/apps/*/test.ts
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 571cef037..5f5fd5b5c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "sapper",
- "version": "0.24.3",
+ "version": "0.26.0-alpha.4",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -81,15 +81,15 @@
"dev": true
},
"@types/node": {
- "version": "10.12.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.0.tgz",
- "integrity": "sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ==",
+ "version": "10.12.21",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.21.tgz",
+ "integrity": "sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==",
"dev": true
},
"@types/puppeteer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-1.9.0.tgz",
- "integrity": "sha512-ZP3wL4Lqpgu4xZbz/0vQhbIZnllNEawVW3oTpEXyJg+uhf/YQgL8oeTrfoUwj9JXE9UUe53eqmgLl29/d2gjqQ==",
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-1.11.3.tgz",
+ "integrity": "sha512-i/kNectDkLqU4y8FfeMAdMv4KGVVCPUVqp+bfa5+teq0JdoAwplu7k6t38+rpAAbEmPSywf6aqWbg9JbUDJqiQ==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -106,174 +106,174 @@
}
},
"@webassemblyjs/ast": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.8.tgz",
- "integrity": "sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
+ "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
"dev": true,
"requires": {
- "@webassemblyjs/helper-module-context": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/wast-parser": "1.7.8"
+ "@webassemblyjs/helper-module-context": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/wast-parser": "1.7.11"
}
},
"@webassemblyjs/floating-point-hex-parser": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz",
- "integrity": "sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
+ "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
"dev": true
},
"@webassemblyjs/helper-api-error": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz",
- "integrity": "sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
+ "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
"dev": true
},
"@webassemblyjs/helper-buffer": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz",
- "integrity": "sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
+ "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
"dev": true
},
"@webassemblyjs/helper-code-frame": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz",
- "integrity": "sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
+ "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
"dev": true,
"requires": {
- "@webassemblyjs/wast-printer": "1.7.8"
+ "@webassemblyjs/wast-printer": "1.7.11"
}
},
"@webassemblyjs/helper-fsm": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz",
- "integrity": "sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
+ "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
"dev": true
},
"@webassemblyjs/helper-module-context": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz",
- "integrity": "sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
+ "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
"dev": true
},
"@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz",
- "integrity": "sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
+ "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
"dev": true
},
"@webassemblyjs/helper-wasm-section": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz",
- "integrity": "sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
+ "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-buffer": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/wasm-gen": "1.7.8"
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11"
}
},
"@webassemblyjs/ieee754": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz",
- "integrity": "sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
+ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
"dev": true,
"requires": {
"@xtuc/ieee754": "^1.2.0"
}
},
"@webassemblyjs/leb128": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.8.tgz",
- "integrity": "sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
+ "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
"dev": true,
"requires": {
"@xtuc/long": "4.2.1"
}
},
"@webassemblyjs/utf8": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.8.tgz",
- "integrity": "sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
+ "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
"dev": true
},
"@webassemblyjs/wasm-edit": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz",
- "integrity": "sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
+ "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-buffer": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/helper-wasm-section": "1.7.8",
- "@webassemblyjs/wasm-gen": "1.7.8",
- "@webassemblyjs/wasm-opt": "1.7.8",
- "@webassemblyjs/wasm-parser": "1.7.8",
- "@webassemblyjs/wast-printer": "1.7.8"
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/helper-wasm-section": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11",
+ "@webassemblyjs/wasm-opt": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11",
+ "@webassemblyjs/wast-printer": "1.7.11"
}
},
"@webassemblyjs/wasm-gen": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz",
- "integrity": "sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
+ "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/ieee754": "1.7.8",
- "@webassemblyjs/leb128": "1.7.8",
- "@webassemblyjs/utf8": "1.7.8"
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/ieee754": "1.7.11",
+ "@webassemblyjs/leb128": "1.7.11",
+ "@webassemblyjs/utf8": "1.7.11"
}
},
"@webassemblyjs/wasm-opt": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz",
- "integrity": "sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
+ "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-buffer": "1.7.8",
- "@webassemblyjs/wasm-gen": "1.7.8",
- "@webassemblyjs/wasm-parser": "1.7.8"
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-buffer": "1.7.11",
+ "@webassemblyjs/wasm-gen": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11"
}
},
"@webassemblyjs/wasm-parser": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz",
- "integrity": "sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
+ "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-api-error": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/ieee754": "1.7.8",
- "@webassemblyjs/leb128": "1.7.8",
- "@webassemblyjs/utf8": "1.7.8"
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-api-error": "1.7.11",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+ "@webassemblyjs/ieee754": "1.7.11",
+ "@webassemblyjs/leb128": "1.7.11",
+ "@webassemblyjs/utf8": "1.7.11"
}
},
"@webassemblyjs/wast-parser": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz",
- "integrity": "sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
+ "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/floating-point-hex-parser": "1.7.8",
- "@webassemblyjs/helper-api-error": "1.7.8",
- "@webassemblyjs/helper-code-frame": "1.7.8",
- "@webassemblyjs/helper-fsm": "1.7.8",
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/floating-point-hex-parser": "1.7.11",
+ "@webassemblyjs/helper-api-error": "1.7.11",
+ "@webassemblyjs/helper-code-frame": "1.7.11",
+ "@webassemblyjs/helper-fsm": "1.7.11",
"@xtuc/long": "4.2.1"
}
},
"@webassemblyjs/wast-printer": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz",
- "integrity": "sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==",
+ "version": "1.7.11",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
+ "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/wast-parser": "1.7.8",
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/wast-parser": "1.7.11",
"@xtuc/long": "4.2.1"
}
},
@@ -290,28 +290,22 @@
"dev": true
},
"acorn": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
- "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz",
+ "integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA==",
"dev": true
},
"acorn-dynamic-import": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
- "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
- "dev": true,
- "requires": {
- "acorn": "^5.0.0"
- }
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
+ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+ "dev": true
},
"acorn-jsx": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
- "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==",
- "dev": true,
- "requires": {
- "acorn": "^5.0.3"
- }
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+ "dev": true
},
"agadoo": {
"version": "1.0.1",
@@ -345,9 +339,9 @@
}
},
"ajv": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
- "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
+ "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
@@ -356,16 +350,22 @@
"uri-js": "^4.2.2"
}
},
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "dev": true
+ },
"ajv-keywords": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
- "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz",
+ "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==",
"dev": true
},
"ansi-escapes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
- "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
"ansi-regex": {
@@ -383,6 +383,12 @@
"color-convert": "^1.9.0"
}
},
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
"anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
@@ -738,33 +744,12 @@
"integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
"dev": true
},
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
"array-unique": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
"integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
"dev": true
},
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
"asn1.js": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
@@ -808,6 +793,12 @@
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"dev": true
},
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
"async-each": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
@@ -918,9 +909,9 @@
"dev": true
},
"bluebird": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz",
- "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
"dev": true
},
"bn.js": {
@@ -1068,24 +1059,33 @@
"dev": true
},
"cacache": {
- "version": "10.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
- "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.1",
- "mississippi": "^2.0.0",
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.3",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.1.15",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
"move-concurrently": "^1.0.1",
"promise-inflight": "^1.0.1",
"rimraf": "^2.6.2",
- "ssri": "^5.2.4",
- "unique-filename": "^1.1.0",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
"y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ }
}
},
"cache-base": {
@@ -1113,19 +1113,10 @@
}
}
},
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
- "requires": {
- "callsites": "^0.2.0"
- }
- },
"callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz",
+ "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==",
"dev": true
},
"camel-case": {
@@ -1155,9 +1146,9 @@
"dev": true
},
"cheap-watch": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.0.tgz",
- "integrity": "sha512-ZeqXFSLfd/NzLXyFDKfa48/14nytP43gBD2Go1L1WUYLXAkEqIo4TTmp89AEbnXVOk47//sB2/16UbVs3vfijA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.2.tgz",
+ "integrity": "sha512-jp82t+kZAW+ZVnuYuHZEGZqDaUg28uAyOhC915BcKBSYL55fpTyuJ56cYYXZG0JkCPQT80MjRD6q2KqebaPwCw==",
"dev": true
},
"chokidar": {
@@ -1557,9 +1548,9 @@
"dev": true
},
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -1639,21 +1630,6 @@
}
}
},
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true,
- "requires": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
- }
- },
"des.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
@@ -1665,9 +1641,9 @@
}
},
"devalue": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/devalue/-/devalue-1.0.4.tgz",
- "integrity": "sha512-R3Jef4Cw075TqqvliJ6sAiN9Ygd2onyklpgOv2qdytRKcEN8X2lsW9y6JlD2cDgbEIBWP3wVWXKfAQ1a9vD9UA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-1.1.0.tgz",
+ "integrity": "sha512-mKj+DaZuxevfmjI78VdlkBr+NDmwaDAKQz0t5RDSmhwBn6m5z82KDnVRKVFeUvlMOmI1fzkAUx4USdqGGhas6g==",
"dev": true
},
"diff": {
@@ -1819,9 +1795,9 @@
"dev": true
},
"eslint": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.7.0.tgz",
- "integrity": "sha512-zYCeFQahsxffGl87U2aJ7DPyH8CbWgxBC213Y8+TCanhUTf2gEvfq3EKpHmEcozTLyPmGe9LZdMAwC/CpJBM5A==",
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz",
+ "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@@ -1833,7 +1809,7 @@
"eslint-scope": "^4.0.0",
"eslint-utils": "^1.3.1",
"eslint-visitor-keys": "^1.0.0",
- "espree": "^4.0.0",
+ "espree": "^5.0.0",
"esquery": "^1.0.1",
"esutils": "^2.0.2",
"file-entry-cache": "^2.0.0",
@@ -1841,9 +1817,9 @@
"glob": "^7.1.2",
"globals": "^11.7.0",
"ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"inquirer": "^6.1.0",
- "is-resolvable": "^1.1.0",
"js-yaml": "^3.12.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.3.0",
@@ -1856,7 +1832,6 @@
"pluralize": "^7.0.0",
"progress": "^2.0.0",
"regexpp": "^2.0.1",
- "require-uncached": "^1.0.3",
"semver": "^5.5.1",
"strip-ansi": "^4.0.0",
"strip-json-comments": "^2.0.1",
@@ -1892,13 +1867,13 @@
}
},
"eslint-module-utils": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
- "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz",
+ "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==",
"dev": true,
"requires": {
"debug": "^2.6.8",
- "pkg-dir": "^1.0.0"
+ "pkg-dir": "^2.0.0"
},
"dependencies": {
"debug": {
@@ -1919,21 +1894,21 @@
}
},
"eslint-plugin-import": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
- "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz",
+ "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==",
"dev": true,
"requires": {
"contains-path": "^0.1.0",
- "debug": "^2.6.8",
+ "debug": "^2.6.9",
"doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.1",
- "eslint-module-utils": "^2.2.0",
- "has": "^1.0.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.3",
+ "eslint-import-resolver-node": "^0.3.2",
+ "eslint-module-utils": "^2.3.0",
+ "has": "^1.0.3",
+ "lodash": "^4.17.11",
+ "minimatch": "^3.0.4",
"read-pkg-up": "^2.0.0",
- "resolve": "^1.6.0"
+ "resolve": "^1.9.0"
},
"dependencies": {
"debug": {
@@ -1960,6 +1935,15 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
+ },
+ "resolve": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
}
}
},
@@ -1986,13 +1970,14 @@
"dev": true
},
"espree": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz",
- "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz",
+ "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==",
"dev": true,
"requires": {
- "acorn": "^5.6.0",
- "acorn-jsx": "^4.1.1"
+ "acorn": "^6.0.2",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
}
},
"esprima": {
@@ -2038,9 +2023,9 @@
"dev": true
},
"events": {
- "version": "1.1.1",
- "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
- "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
"dev": true
},
"evp_bytestokey": {
@@ -2168,6 +2153,12 @@
"pend": "~1.2.0"
}
},
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+ "dev": true
+ },
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -2207,55 +2198,88 @@
}
},
"find-cache-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
- "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
+ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
"dev": true,
"requires": {
"commondir": "^1.0.1",
"make-dir": "^1.0.0",
- "pkg-dir": "^2.0.0"
+ "pkg-dir": "^3.0.0"
},
"dependencies": {
"find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "p-try": "^2.0.0"
}
},
- "pkg-dir": {
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
- "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"dev": true,
"requires": {
- "find-up": "^2.1.0"
+ "find-up": "^3.0.0"
}
}
}
},
"find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "locate-path": "^2.0.0"
}
},
"flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
"dev": true,
"requires": {
"circular-json": "^0.3.1",
- "del": "^2.0.2",
"graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
"write": "^0.2.1"
}
},
@@ -2322,9 +2346,9 @@
"dev": true
},
"fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+ "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
"dev": true,
"optional": true,
"requires": {
@@ -2334,28 +2358,24 @@
"dependencies": {
"abbrev": {
"version": "1.1.1",
- "resolved": false,
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "bundled": true,
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
- "resolved": false,
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "bundled": true,
"dev": true
},
"aproba": {
"version": "1.2.0",
- "resolved": false,
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "bundled": true,
"dev": true,
"optional": true
},
"are-we-there-yet": {
- "version": "1.1.4",
- "resolved": false,
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "version": "1.1.5",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2365,14 +2385,12 @@
},
"balanced-match": {
"version": "1.0.0",
- "resolved": false,
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "bundled": true,
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
- "resolved": false,
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "bundled": true,
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
@@ -2380,41 +2398,35 @@
}
},
"chownr": {
- "version": "1.0.1",
- "resolved": false,
- "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "version": "1.1.1",
+ "bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "resolved": false,
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "bundled": true,
"dev": true
},
"concat-map": {
"version": "0.0.1",
- "resolved": false,
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "bundled": true,
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
- "resolved": false,
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "bundled": true,
"dev": true
},
"core-util-is": {
"version": "1.0.2",
- "resolved": false,
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "bundled": true,
"dev": true,
"optional": true
},
"debug": {
"version": "2.6.9",
- "resolved": false,
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2422,30 +2434,26 @@
}
},
"deep-extend": {
- "version": "0.5.1",
- "resolved": false,
- "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "version": "0.6.0",
+ "bundled": true,
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
- "resolved": false,
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
- "resolved": false,
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "bundled": true,
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
- "resolved": false,
- "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2454,15 +2462,13 @@
},
"fs.realpath": {
"version": "1.0.0",
- "resolved": false,
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "bundled": true,
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
- "resolved": false,
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2477,9 +2483,8 @@
}
},
"glob": {
- "version": "7.1.2",
- "resolved": false,
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "version": "7.1.3",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2493,25 +2498,22 @@
},
"has-unicode": {
"version": "2.0.1",
- "resolved": false,
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "bundled": true,
"dev": true,
"optional": true
},
"iconv-lite": {
- "version": "0.4.21",
- "resolved": false,
- "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
+ "version": "0.4.24",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "safer-buffer": "^2.1.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
"version": "3.0.1",
- "resolved": false,
- "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2520,8 +2522,7 @@
},
"inflight": {
"version": "1.0.6",
- "resolved": false,
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2531,21 +2532,18 @@
},
"inherits": {
"version": "2.0.3",
- "resolved": false,
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "bundled": true,
"dev": true
},
"ini": {
"version": "1.3.5",
- "resolved": false,
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "bundled": true,
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
- "resolved": false,
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "bundled": true,
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
@@ -2553,15 +2551,13 @@
},
"isarray": {
"version": "1.0.0",
- "resolved": false,
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "bundled": true,
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
- "resolved": false,
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "bundled": true,
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -2569,24 +2565,21 @@
},
"minimist": {
"version": "0.0.8",
- "resolved": false,
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "bundled": true,
"dev": true
},
"minipass": {
- "version": "2.2.4",
- "resolved": false,
- "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==",
+ "version": "2.3.5",
+ "bundled": true,
"dev": true,
"requires": {
- "safe-buffer": "^5.1.1",
+ "safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
- "version": "1.1.0",
- "resolved": false,
- "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "version": "1.2.1",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2595,8 +2588,7 @@
},
"mkdirp": {
"version": "0.5.1",
- "resolved": false,
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "bundled": true,
"dev": true,
"requires": {
"minimist": "0.0.8"
@@ -2604,15 +2596,13 @@
},
"ms": {
"version": "2.0.0",
- "resolved": false,
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "bundled": true,
"dev": true,
"optional": true
},
"needle": {
- "version": "2.2.0",
- "resolved": false,
- "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==",
+ "version": "2.2.4",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2622,19 +2612,18 @@
}
},
"node-pre-gyp": {
- "version": "0.10.0",
- "resolved": false,
- "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==",
+ "version": "0.10.3",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
- "needle": "^2.2.0",
+ "needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
- "rc": "^1.1.7",
+ "rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
@@ -2642,8 +2631,7 @@
},
"nopt": {
"version": "4.0.1",
- "resolved": false,
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2652,16 +2640,14 @@
}
},
"npm-bundled": {
- "version": "1.0.3",
- "resolved": false,
- "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==",
+ "version": "1.0.5",
+ "bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
- "version": "1.1.10",
- "resolved": false,
- "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
+ "version": "1.2.0",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2671,8 +2657,7 @@
},
"npmlog": {
"version": "4.1.2",
- "resolved": false,
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2684,21 +2669,18 @@
},
"number-is-nan": {
"version": "1.0.1",
- "resolved": false,
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "bundled": true,
"dev": true
},
"object-assign": {
"version": "4.1.1",
- "resolved": false,
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
- "resolved": false,
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "bundled": true,
"dev": true,
"requires": {
"wrappy": "1"
@@ -2706,22 +2688,19 @@
},
"os-homedir": {
"version": "1.0.2",
- "resolved": false,
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "resolved": false,
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "bundled": true,
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
- "resolved": false,
- "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2731,26 +2710,23 @@
},
"path-is-absolute": {
"version": "1.0.1",
- "resolved": false,
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
- "resolved": false,
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "bundled": true,
"dev": true,
"optional": true
},
"rc": {
- "version": "1.2.7",
- "resolved": false,
- "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "version": "1.2.8",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "^0.5.1",
+ "deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
@@ -2758,8 +2734,7 @@
"dependencies": {
"minimist": {
"version": "1.2.0",
- "resolved": false,
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "bundled": true,
"dev": true,
"optional": true
}
@@ -2767,8 +2742,7 @@
},
"readable-stream": {
"version": "2.3.6",
- "resolved": false,
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2782,60 +2756,52 @@
}
},
"rimraf": {
- "version": "2.6.2",
- "resolved": false,
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"safe-buffer": {
- "version": "5.1.1",
- "resolved": false,
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "version": "5.1.2",
+ "bundled": true,
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
- "resolved": false,
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "bundled": true,
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
- "resolved": false,
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "bundled": true,
"dev": true,
"optional": true
},
"semver": {
- "version": "5.5.0",
- "resolved": false,
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "version": "5.6.0",
+ "bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "resolved": false,
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "resolved": false,
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "bundled": true,
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
- "resolved": false,
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "bundled": true,
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
@@ -2845,8 +2811,7 @@
},
"string_decoder": {
"version": "1.1.1",
- "resolved": false,
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
@@ -2855,8 +2820,7 @@
},
"strip-ansi": {
"version": "3.0.1",
- "resolved": false,
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "bundled": true,
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
@@ -2864,54 +2828,48 @@
},
"strip-json-comments": {
"version": "2.0.1",
- "resolved": false,
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "bundled": true,
"dev": true,
"optional": true
},
"tar": {
- "version": "4.4.1",
- "resolved": false,
- "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==",
+ "version": "4.4.8",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "chownr": "^1.0.1",
+ "chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
"mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
+ "safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
"util-deprecate": {
"version": "1.0.2",
- "resolved": false,
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "bundled": true,
"dev": true,
"optional": true
},
"wide-align": {
- "version": "1.1.2",
- "resolved": false,
- "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "version": "1.1.3",
+ "bundled": true,
"dev": true,
"optional": true,
"requires": {
- "string-width": "^1.0.2"
+ "string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
- "resolved": false,
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "bundled": true,
"dev": true
},
"yallist": {
- "version": "3.0.2",
- "resolved": false,
- "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
+ "version": "3.0.3",
+ "bundled": true,
"dev": true
}
}
@@ -2968,9 +2926,9 @@
}
},
"globals": {
- "version": "11.8.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz",
- "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==",
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz",
+ "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==",
"dev": true
},
"globalyzer": {
@@ -2979,20 +2937,6 @@
"integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
"dev": true
},
- "globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
"globrex": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.1.tgz",
@@ -3103,9 +3047,9 @@
}
},
"hash.js": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
- "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
@@ -3115,7 +3059,8 @@
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
},
"hmac-drbg": {
"version": "1.0.1",
@@ -3135,17 +3080,24 @@
"dev": true
},
"html-minifier": {
- "version": "3.5.20",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.20.tgz",
- "integrity": "sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==",
+ "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==",
"requires": {
"camel-case": "3.0.x",
"clean-css": "4.2.x",
"commander": "2.17.x",
- "he": "1.1.x",
+ "he": "1.2.x",
"param-case": "2.1.x",
"relateurl": "0.2.x",
"uglify-js": "3.4.x"
+ },
+ "dependencies": {
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ }
}
},
"https-browserify": {
@@ -3202,6 +3154,16 @@
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
+ "import-fresh": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz",
+ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -3231,24 +3193,52 @@
"dev": true
},
"inquirer": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
- "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz",
+ "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==",
"dev": true,
"requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
"cli-cursor": "^2.1.0",
"cli-width": "^2.0.0",
- "external-editor": "^3.0.0",
+ "external-editor": "^3.0.3",
"figures": "^2.0.0",
- "lodash": "^4.17.10",
+ "lodash": "^4.17.11",
"mute-stream": "0.0.7",
"run-async": "^2.2.0",
- "rxjs": "^6.1.0",
+ "rxjs": "^6.4.0",
"string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
+ "strip-ansi": "^5.0.0",
"through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.0.0"
+ }
+ }
}
},
"is-accessor-descriptor": {
@@ -3387,30 +3377,6 @@
"kind-of": "^3.0.2"
}
},
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
- "dev": true
- },
- "is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
- "dev": true,
- "requires": {
- "is-path-inside": "^1.0.0"
- }
- },
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "dev": true,
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -3455,12 +3421,6 @@
"has": "^1.0.1"
}
},
- "is-resolvable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
- "dev": true
- },
"is-symbol": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
@@ -3504,9 +3464,9 @@
"dev": true
},
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@@ -3553,9 +3513,9 @@
}
},
"kleur": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz",
- "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.1.tgz",
+ "integrity": "sha512-P3kRv+B+Ra070ng2VKQqW4qW7gd/v3iD8sy/zOdcYRsfiD+QBokQNOps/AfP6Hr48cBhIIBFWckB9aO+IZhrWg==",
"dev": true
},
"levn": {
@@ -3568,6 +3528,12 @@
"type-check": "~0.3.2"
}
},
+ "lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+ "dev": true
+ },
"load-json-file": {
"version": "2.0.0",
"resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
@@ -3581,9 +3547,9 @@
}
},
"loader-runner": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
- "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
"dev": true
},
"loader-utils": {
@@ -3605,14 +3571,6 @@
"requires": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
- },
- "dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
}
},
"lodash": {
@@ -3633,13 +3591,12 @@
"integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
},
"lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "yallist": "^3.0.2"
}
},
"magic-string": {
@@ -3668,12 +3625,6 @@
}
}
},
- "make-error": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
- "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
- "dev": true
- },
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@@ -3802,9 +3753,9 @@
"dev": true
},
"mississippi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
- "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
"dev": true,
"requires": {
"concat-stream": "^1.5.0",
@@ -3813,7 +3764,7 @@
"flush-write-stream": "^1.0.0",
"from2": "^2.1.0",
"parallel-transform": "^1.1.0",
- "pump": "^2.0.1",
+ "pump": "^3.0.0",
"pumpify": "^1.3.3",
"stream-each": "^1.1.0",
"through2": "^2.0.0"
@@ -3929,9 +3880,9 @@
}
},
"mri": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.1.tgz",
- "integrity": "sha1-haom09ru7t+A3FmEr5XMXKXK2fE=",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz",
+ "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==",
"dev": true
},
"ms": {
@@ -3946,10 +3897,21 @@
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
"nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
"dev": true,
"optional": true
},
@@ -4019,15 +3981,15 @@
}
},
"node-fetch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz",
- "integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz",
+ "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==",
"dev": true
},
"node-libs-browser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
- "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
+ "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==",
"dev": true,
"requires": {
"assert": "^1.1.1",
@@ -4037,7 +3999,7 @@
"constants-browserify": "^1.0.0",
"crypto-browserify": "^3.11.0",
"domain-browser": "^1.1.1",
- "events": "^1.0.0",
+ "events": "^3.0.0",
"https-browserify": "^1.0.0",
"os-browserify": "^0.3.0",
"path-browserify": "0.0.0",
@@ -4051,7 +4013,7 @@
"timers-browserify": "^2.0.4",
"tty-browserify": "0.0.0",
"url": "^0.11.0",
- "util": "^0.10.3",
+ "util": "^0.11.0",
"vm-browserify": "0.0.4"
},
"dependencies": {
@@ -4063,6 +4025,12 @@
}
}
},
+ "node-modules-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "dev": true
+ },
"normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@@ -4297,19 +4265,10 @@
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
},
- "pad-right": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz",
- "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=",
- "dev": true,
- "requires": {
- "repeat-string": "^1.5.2"
- }
- },
"pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
+ "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==",
"dev": true
},
"parallel-transform": {
@@ -4331,17 +4290,27 @@
"no-case": "^2.2.0"
}
},
+ "parent-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz",
+ "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
"parse-asn1": {
- "version": "5.1.1",
- "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
- "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz",
+ "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==",
"dev": true,
"requires": {
"asn1.js": "^4.0.0",
"browserify-aes": "^1.0.0",
"create-hash": "^1.1.0",
"evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3"
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
}
},
"parse-glob": {
@@ -4384,13 +4353,10 @@
"dev": true
},
"path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
},
"path-is-absolute": {
"version": "1.0.1",
@@ -4456,28 +4422,22 @@
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
},
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "pirates": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz",
+ "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==",
"dev": true,
"requires": {
- "pinkie": "^2.0.0"
+ "node-modules-regexp": "^1.0.0"
}
},
"pkg-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
- "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
"dev": true,
"requires": {
- "find-up": "^1.0.0"
+ "find-up": "^2.1.0"
}
},
"pluralize": {
@@ -4539,9 +4499,9 @@
"dev": true
},
"progress": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
- "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
"promise-inflight": {
@@ -4562,12 +4522,6 @@
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true
},
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
"public-encrypt": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
@@ -4583,9 +4537,9 @@
}
},
"pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
@@ -4601,6 +4555,18 @@
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
"pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
}
},
"punycode": {
@@ -4610,30 +4576,19 @@
"dev": true
},
"puppeteer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.9.0.tgz",
- "integrity": "sha512-GH4PmhJf9wBRAPvtJkEJLAvdNNOofZortmBZSj8cGWYni98GUFqsf66blOEfJbo5B8l0KG5HR2d/W2MejnUrzg==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.12.0.tgz",
+ "integrity": "sha512-+riSxJFPQpwGZvNHFeB7vEefwfdHNSstQmjdzUKZxPp/Qt1Dw9iKRAewl8X0ntdXZz4UR4jODLiM03Iw9HDnyw==",
"dev": true,
"requires": {
- "debug": "^3.1.0",
+ "debug": "^4.1.0",
"extract-zip": "^1.6.6",
"https-proxy-agent": "^2.2.1",
"mime": "^2.0.3",
- "progress": "^2.0.0",
+ "progress": "^2.0.1",
"proxy-from-env": "^1.0.0",
"rimraf": "^2.6.1",
- "ws": "^5.1.1"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
+ "ws": "^6.1.0"
}
},
"querystring": {
@@ -4711,17 +4666,6 @@
"requires": {
"find-up": "^2.0.0",
"read-pkg": "^2.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- }
}
},
"readable-stream": {
@@ -5095,16 +5039,6 @@
"integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
"dev": true
},
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "requires": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
- }
- },
"resolve": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
@@ -5115,9 +5049,9 @@
}
},
"resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"resolve-url": {
@@ -5143,12 +5077,12 @@
"dev": true
},
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"ripemd160": {
@@ -5162,13 +5096,22 @@
}
},
"rollup": {
- "version": "0.66.6",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.66.6.tgz",
- "integrity": "sha512-J7/SWanrcb83vfIHqa8+aVVGzy457GcjA6GVZEnD0x2u4OnOd0Q1pCrEoNe8yLwM6z6LZP02zBT2uW0yh5TqOw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.1.2.tgz",
+ "integrity": "sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg==",
"dev": true,
"requires": {
"@types/estree": "0.0.39",
- "@types/node": "*"
+ "@types/node": "*",
+ "acorn": "^6.0.5"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz",
+ "integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA==",
+ "dev": true
+ }
}
},
"rollup-plugin-commonjs": {
@@ -5193,20 +5136,20 @@
}
},
"rollup-plugin-node-resolve": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz",
- "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz",
+ "integrity": "sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw==",
"dev": true,
"requires": {
- "builtin-modules": "^2.0.0",
+ "builtin-modules": "^3.0.0",
"is-module": "^1.0.0",
- "resolve": "^1.1.6"
+ "resolve": "^1.8.1"
},
"dependencies": {
"builtin-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz",
- "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz",
+ "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==",
"dev": true
}
}
@@ -5249,25 +5192,33 @@
}
}
},
- "rollup-plugin-svelte": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-4.3.2.tgz",
- "integrity": "sha512-aGFuB+hc9c5pmPCgnXiJCbRwrDw7sdPia+WBRKTMEwVv3ygiSOi5gIlGHIPRMvMisioOk0ns5Bu5Gz57JxEZTg==",
+ "rollup-plugin-sucrase": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-sucrase/-/rollup-plugin-sucrase-2.1.0.tgz",
+ "integrity": "sha512-chdA3OruR1FH/IIKrzZCpGKLXAx3DOHoK24RIPtlVccK0wbTpHE0HpGEQYCxte1XaB17NgRe/frFyKR7g45qxQ==",
"dev": true,
"requires": {
- "require-relative": "^0.8.7",
"rollup-pluginutils": "^2.3.0",
- "sourcemap-codec": "^1.4.1"
+ "sucrase": "3.x"
}
},
- "rollup-plugin-typescript": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-typescript/-/rollup-plugin-typescript-1.0.0.tgz",
- "integrity": "sha512-d2KDNMJXgaaB//dDGd/YmyMiopt1Pz965Iu3zmEoL08YqNcKRBz26uHqqc47rFGfrJV5kFqifC9IYlh6dpSCLg==",
+ "rollup-plugin-svelte": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.0.1.tgz",
+ "integrity": "sha512-iwm4ANbdoEQqoCL8m70R3F2Oe/auSr0zIOBVVJWx7IMSkzFZjhd0PeqzKe3BWCllLAnBXIbqTSOHmU2mnvy0SA==",
"dev": true,
"requires": {
- "resolve": "^1.8.1",
- "rollup-pluginutils": "^2.3.1"
+ "require-relative": "^0.8.7",
+ "rollup-pluginutils": "^2.3.3",
+ "sourcemap-codec": "^1.4.4"
+ },
+ "dependencies": {
+ "sourcemap-codec": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
+ "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==",
+ "dev": true
+ }
}
},
"rollup-plugin-virtual": {
@@ -5305,22 +5256,21 @@
}
},
"rxjs": {
- "version": "6.3.3",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
- "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
+ "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
},
"sade": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/sade/-/sade-1.4.1.tgz",
- "integrity": "sha512-r2S6GwNeYFYx02w2SYUfhYI9PzxdfNWxsX1QpI3Z4rK9bu9K3FtNVg2awp54Y9iivcYqR2iWqI3nT5jEihNyBg==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.4.2.tgz",
+ "integrity": "sha512-MTrQm+Nhl4m1mbssYDgAculC/HbShjj08QtHnA2GTpzivfU5aUp8EoHlECmrIHEaa8hZRZSp2Gygv8VMlpXEBw==",
"dev": true,
"requires": {
- "mri": "^1.1.0",
- "pad-right": "^0.2.2"
+ "mri": "^1.1.0"
}
},
"safe-buffer": {
@@ -5372,9 +5322,9 @@
"dev": true
},
"serialize-javascript": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
- "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
+ "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==",
"dev": true
},
"set-value": {
@@ -5444,9 +5394,9 @@
}
},
"shimport": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.11.tgz",
- "integrity": "sha512-wRlG/wMuV/czrzJEWBUPjydU/Ve0kTrTH8wHLRjuY6S2BDB+qDDXkTY/WrNc/7t5jnd0LPVO1sRIE7Ga6uXTpw=="
+ "version": "0.0.14",
+ "resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.14.tgz",
+ "integrity": "sha512-JfzpHhyZ6CYuPYUSitFNw2/IxWEABLN1chs9xDHnn4tPXXCmfIn1METCmIl8Vwvm2FZGW7b8WB4zMCKaJEhY6A=="
},
"signal-exit": {
"version": "3.0.2",
@@ -5466,11 +5416,13 @@
}
},
"slice-ansi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
- "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
"requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
"is-fullwidth-code-point": "^2.0.0"
}
},
@@ -5628,9 +5580,9 @@
}
},
"source-map-support": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
- "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+ "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -5643,9 +5595,9 @@
"dev": true
},
"sourcemap-codec": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.3.tgz",
- "integrity": "sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA=="
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
+ "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg=="
},
"spdx-correct": {
"version": "3.0.2",
@@ -5695,12 +5647,12 @@
"dev": true
},
"ssri": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
- "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
"dev": true,
"requires": {
- "safe-buffer": "^5.1.1"
+ "figgy-pudding": "^3.5.1"
}
},
"static-extend": {
@@ -5725,9 +5677,9 @@
}
},
"stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
"dev": true,
"requires": {
"inherits": "~2.0.1",
@@ -5819,6 +5771,26 @@
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
+ "sucrase": {
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.9.5.tgz",
+ "integrity": "sha512-gvNjd3PJ0WAXxWUAQzCw/nlG4J5a2j7q8jN+sX8Fwe3ryIsl9UrEcWPxWoEzBPrj3Fias4U05iN84m4/IFQLdw==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.19.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ }
+ }
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -5829,9 +5801,9 @@
}
},
"svelte": {
- "version": "2.13.5",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-2.13.5.tgz",
- "integrity": "sha512-Mg4+vRwAT1IMR4FAH3cOmMaVVrJ35xUI1qsTW+WoJvRpeBDx7aLZUbgBXnctxdfEJQ4BuP2MCuhYKy8917Au1A==",
+ "version": "3.0.0-alpha27",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.0.0-alpha27.tgz",
+ "integrity": "sha512-ykVDgZWpFcCZo3QkciGkQuwLhPM0XmgcJzzz5/srOEf8hfgk+XSaZS9UB9JrQiT7horAU/kA06aYSLaScCxxKw==",
"dev": true
},
"svelte-dev-helper": {
@@ -5841,9 +5813,9 @@
"dev": true
},
"svelte-loader": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.11.0.tgz",
- "integrity": "sha512-+Q24lBhQ8KGB9flHNXjKqq9TJEIcT3VJlzsxhijqrJ9feK9bUG3TLDlosceoAXvOsjxuaHKN1ZveUbbX7J7zUQ==",
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.12.0.tgz",
+ "integrity": "sha512-mxkjxHecbWl3KzhlwWm4C/Mid4Anhk611sEG31aa0BwdELIgLSaAxSJkxJrrFxxNgEKGKyTSeUI3blKNM+3s8Q==",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
@@ -5852,29 +5824,87 @@
}
},
"table": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz",
- "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.2.2.tgz",
+ "integrity": "sha512-f8mJmuu9beQEDkKHLzOv4VxVYlU68NpdzjbGPl69i4Hx0sTopJuNxuzJd17iV2h24dAfa93u794OnDA5jqXvfQ==",
"dev": true,
"requires": {
- "ajv": "^6.5.3",
- "lodash": "^4.17.10",
- "slice-ansi": "1.0.0",
+ "ajv": "^6.6.1",
+ "lodash": "^4.17.11",
+ "slice-ansi": "^2.0.0",
"string-width": "^2.1.1"
}
},
"tapable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz",
- "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
"dev": true
},
+ "terser": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz",
+ "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.6"
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz",
+ "integrity": "sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==",
+ "dev": true,
+ "requires": {
+ "cacache": "^11.0.2",
+ "find-cache-dir": "^2.0.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^1.4.0",
+ "source-map": "^0.6.1",
+ "terser": "^3.8.1",
+ "webpack-sources": "^1.1.0",
+ "worker-farm": "^1.5.2"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "thenify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
+ "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+ "dev": true,
+ "requires": {
+ "thenify": ">= 3.1.0 < 4"
+ }
+ },
"through": {
"version": "2.3.8",
"resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -5882,12 +5912,12 @@
"dev": true
},
"through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
"requires": {
- "readable-stream": "^2.1.5",
+ "readable-stream": "~2.3.6",
"xtend": "~4.0.1"
}
},
@@ -5976,30 +6006,6 @@
"matchit": "^1.0.0"
}
},
- "ts-node": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
- "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.0",
- "buffer-from": "^1.1.0",
- "diff": "^3.1.0",
- "make-error": "^1.1.1",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.5.6",
- "yn": "^2.0.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
- }
- },
"tslib": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
@@ -6026,12 +6032,6 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
- "typescript": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.3.tgz",
- "integrity": "sha512-+81MUSyX+BaSo+u2RbozuQk/UWx6hfG0a5gHu4ANEM4sU96XbuIyAB+rWBW1u70c6a5QuZfuYICn3s2UjuHUpA==",
- "dev": true
- },
"uglify-js": {
"version": "3.4.9",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
@@ -6041,40 +6041,6 @@
"source-map": "~0.6.1"
}
},
- "uglifyjs-webpack-plugin": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz",
- "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==",
- "dev": true,
- "requires": {
- "cacache": "^10.0.4",
- "find-cache-dir": "^1.0.0",
- "schema-utils": "^0.4.5",
- "serialize-javascript": "^1.4.0",
- "source-map": "^0.6.1",
- "uglify-es": "^3.3.4",
- "webpack-sources": "^1.1.0",
- "worker-farm": "^1.5.2"
- },
- "dependencies": {
- "commander": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
- "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
- "dev": true
- },
- "uglify-es": {
- "version": "3.3.9",
- "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
- "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
- "dev": true,
- "requires": {
- "commander": "~2.13.0",
- "source-map": "~0.6.1"
- }
- }
- }
- },
"union-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
@@ -6225,9 +6191,9 @@
"dev": true
},
"util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
"dev": true,
"requires": {
"inherits": "2.0.3"
@@ -6270,17 +6236,17 @@
}
},
"webpack": {
- "version": "4.20.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.20.2.tgz",
- "integrity": "sha512-75WFUMblcWYcocjSLlXCb71QuGyH7egdBZu50FtBGl2Nso8CK3Ej+J7bTZz2FPFq5l6fzCisD9modB7t30ikuA==",
+ "version": "4.29.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.0.tgz",
+ "integrity": "sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-module-context": "1.7.8",
- "@webassemblyjs/wasm-edit": "1.7.8",
- "@webassemblyjs/wasm-parser": "1.7.8",
- "acorn": "^5.6.2",
- "acorn-dynamic-import": "^3.0.0",
+ "@webassemblyjs/ast": "1.7.11",
+ "@webassemblyjs/helper-module-context": "1.7.11",
+ "@webassemblyjs/wasm-edit": "1.7.11",
+ "@webassemblyjs/wasm-parser": "1.7.11",
+ "acorn": "^6.0.5",
+ "acorn-dynamic-import": "^4.0.0",
"ajv": "^6.1.0",
"ajv-keywords": "^3.1.0",
"chrome-trace-event": "^1.0.0",
@@ -6296,7 +6262,7 @@
"node-libs-browser": "^2.0.0",
"schema-utils": "^0.4.4",
"tapable": "^1.1.0",
- "uglifyjs-webpack-plugin": "^1.2.4",
+ "terser-webpack-plugin": "^1.1.0",
"watchpack": "^1.5.0",
"webpack-sources": "^1.3.0"
},
@@ -6593,12 +6559,12 @@
}
},
"webpack-format-messages": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/webpack-format-messages/-/webpack-format-messages-2.0.3.tgz",
- "integrity": "sha512-NjIB6eC3PBz6q7FTxMZ15339LWjyvLHeuJ17HTSV/syLZq71O7p6NS4qDaazUr0Qf8ZnzyVapg49Nxssi/dxcg==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/webpack-format-messages/-/webpack-format-messages-2.0.5.tgz",
+ "integrity": "sha512-URo5MWlxsYNFjyKmK5RUjrmr45JBMs/juWPIxOkDU2bcTwCblyn0zTUw+ZWASBJCnJBgWZ4SOeGWFfCBYLarpA==",
"dev": true,
"requires": {
- "kleur": "^2.0.1"
+ "kleur": "^3.0.0"
}
},
"webpack-sources": {
@@ -6651,9 +6617,9 @@
}
},
"ws": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
- "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz",
+ "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==",
"dev": true,
"requires": {
"async-limiter": "~1.0.0"
@@ -6672,9 +6638,9 @@
"dev": true
},
"yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
"dev": true
},
"yauzl": {
@@ -6686,12 +6652,6 @@
"fd-slicer": "~1.0.1"
}
},
- "yn": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
- "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
- "dev": true
- },
"yootils": {
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.14.tgz",
diff --git a/package.json b/package.json
index 16a5509e1..9e4ab9d27 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "sapper",
- "version": "0.25.0",
+ "version": "0.26.0-alpha.4",
"description": "Military-grade apps, engineered by Svelte",
"bin": {
"sapper": "./sapper"
@@ -11,61 +11,64 @@
"config",
"sapper",
"dist/*.js",
- "templates/*.js"
+ "runtime/*.mjs",
+ "runtime/internal"
],
"directories": {
"test": "test"
},
"dependencies": {
- "html-minifier": "^3.5.20",
- "shimport": "0.0.11",
- "source-map-support": "^0.5.9",
- "sourcemap-codec": "^1.4.3",
+ "html-minifier": "^3.5.21",
+ "shimport": "0.0.14",
+ "source-map-support": "^0.5.10",
+ "sourcemap-codec": "^1.4.4",
"string-hash": "^1.1.3",
"tslib": "^1.9.3"
},
"devDependencies": {
"@types/mkdirp": "^0.5.2",
"@types/mocha": "^5.2.5",
- "@types/node": "^10.12.0",
- "@types/puppeteer": "^1.9.0",
+ "@types/node": "^10.12.21",
+ "@types/puppeteer": "^1.11.3",
"@types/rimraf": "^2.0.2",
"agadoo": "^1.0.1",
- "cheap-watch": "^1.0.0",
+ "cheap-watch": "^1.0.2",
"cookie": "^0.3.1",
- "devalue": "^1.0.4",
- "eslint": "^5.7.0",
- "eslint-plugin-import": "^2.14.0",
- "kleur": "^2.0.2",
+ "devalue": "^1.1.0",
+ "eslint": "^5.12.1",
+ "eslint-plugin-import": "^2.16.0",
+ "kleur": "^3.0.1",
"mkdirp": "^0.5.1",
"mocha": "^5.2.0",
- "node-fetch": "^2.2.0",
+ "node-fetch": "^2.3.0",
"npm-run-all": "^4.1.5",
"polka": "^0.5.1",
"port-authority": "^1.0.5",
"pretty-bytes": "^5.1.0",
- "puppeteer": "^1.9.0",
+ "puppeteer": "^1.12.0",
"require-relative": "^0.8.7",
- "rimraf": "^2.6.2",
- "rollup": "^0.66.6",
+ "rimraf": "^2.6.3",
+ "rollup": "^1.1.2",
"rollup-plugin-commonjs": "^9.2.0",
"rollup-plugin-json": "^3.1.0",
- "rollup-plugin-node-resolve": "^3.4.0",
+ "rollup-plugin-node-resolve": "^4.0.0",
"rollup-plugin-replace": "^2.1.0",
"rollup-plugin-string": "^2.0.2",
- "rollup-plugin-svelte": "^4.3.2",
- "rollup-plugin-typescript": "^1.0.0",
- "sade": "^1.4.1",
+ "rollup-plugin-sucrase": "^2.1.0",
+ "rollup-plugin-svelte": "^5.0.1",
+ "sade": "^1.4.2",
"sander": "^0.6.0",
"sirv": "^0.2.2",
- "svelte": "^2.13.5",
- "svelte-loader": "^2.11.0",
- "ts-node": "^7.0.1",
- "typescript": "^3.1.3",
- "webpack": "^4.20.2",
- "webpack-format-messages": "^2.0.3",
+ "sucrase": "^3.9.5",
+ "svelte": "^3.0.0-alpha27",
+ "svelte-loader": "^2.12.0",
+ "webpack": "^4.29.0",
+ "webpack-format-messages": "^2.0.5",
"yootils": "0.0.14"
},
+ "peerDependencies": {
+ "svelte": "^3.0.0"
+ },
"scripts": {
"test": "mocha --opts mocha.opts",
"pretest": "npm run build",
@@ -73,7 +76,7 @@
"prepare": "npm run build",
"dev": "rollup -cw",
"prepublishOnly": "npm test",
- "update_mime_types": "curl http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types | grep -e \"^[^#]\" > templates/src/server/middleware/mime-types.md"
+ "update_mime_types": "curl http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types | grep -e \"^[^#]\" > runtime/src/server/middleware/mime-types.md"
},
"repository": "https://github.com/sveltejs/sapper",
"keywords": [
diff --git a/rollup.config.js b/rollup.config.js
index 7e13cd6f0..333082f2e 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,4 +1,4 @@
-import typescript from 'rollup-plugin-typescript';
+import sucrase from 'rollup-plugin-sucrase';
import string from 'rollup-plugin-string';
import json from 'rollup-plugin-json';
import resolve from 'rollup-plugin-node-resolve';
@@ -12,31 +12,33 @@ const external = [].concat(
'sapper/core.js'
);
-function template(kind, external, target) {
+function template(kind, external) {
return {
- input: `templates/src/${kind}/index.ts`,
+ input: `runtime/src/${kind}/index.ts`,
output: {
- file: `templates/${kind}.js`,
- format: 'es'
+ file: `runtime/${kind}.mjs`,
+ format: 'es',
+ paths: id => id.replace('@sapper', '.')
},
external,
plugins: [
- resolve(),
+ resolve({
+ extensions: ['.mjs', '.js', '.ts']
+ }),
commonjs(),
string({
include: '**/*.md'
}),
- typescript({
- typescript: require('typescript'),
- target
+ sucrase({
+ transforms: ['typescript']
})
]
};
}
export default [
- template('client', ['__ROOT__', '__ERROR__'], 'ES2017'),
- template('server', builtinModules, 'ES2015'),
+ template('app', id => /^(svelte\/?|@sapper\/)/.test(id)),
+ template('server', id => builtinModules.includes(id)),
{
input: [
@@ -54,12 +56,13 @@ export default [
external,
plugins: [
json(),
- resolve(),
+ resolve({
+ extensions: ['.mjs', '.js', '.ts']
+ }),
commonjs(),
- typescript({
- typescript: require('typescript')
+ sucrase({
+ transforms: ['typescript']
})
- ],
- experimentalCodeSplitting: true
+ ]
}
];
\ No newline at end of file
diff --git a/runtime/internal/Sapper.html b/runtime/internal/Sapper.html
new file mode 100644
index 000000000..2203d7656
--- /dev/null
+++ b/runtime/internal/Sapper.html
@@ -0,0 +1,12 @@
+
+
+
\ No newline at end of file
diff --git a/runtime/internal/layout.html b/runtime/internal/layout.html
new file mode 100644
index 000000000..8c0dcbb0a
--- /dev/null
+++ b/runtime/internal/layout.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/runtime/internal/shared.mjs b/runtime/internal/shared.mjs
new file mode 100644
index 000000000..534a6bf02
--- /dev/null
+++ b/runtime/internal/shared.mjs
@@ -0,0 +1,10 @@
+import { writable } from 'svelte/store';
+
+export const stores = {
+ preloading: writable(false),
+ page: writable(null)
+};
+
+export const CONTEXT_KEY = {};
+
+export const preload = () => ({});
\ No newline at end of file
diff --git a/runtime/src/app/app.ts b/runtime/src/app/app.ts
new file mode 100644
index 000000000..21c0451c0
--- /dev/null
+++ b/runtime/src/app/app.ts
@@ -0,0 +1,341 @@
+import { writable } from 'svelte/store.mjs';
+import Sapper from '@sapper/internal/Sapper.html';
+import { stores } from '@sapper/internal/shared';
+import { Root, root_preload, ErrorComponent, ignore, components, routes } from '@sapper/internal/manifest-client';
+import {
+ Target,
+ ScrollPosition,
+ Component,
+ Redirect,
+ ComponentLoader,
+ ComponentConstructor,
+ Route,
+ Page
+} from './types';
+import goto from './goto';
+
+declare const __SAPPER__;
+export const initial_data = typeof __SAPPER__ !== 'undefined' && __SAPPER__;
+
+let ready = false;
+let root_component: Component;
+let current_token: {};
+let root_preloaded: Promise;
+let current_branch = [];
+
+const session = writable(initial_data && initial_data.session);
+
+let $session;
+let session_dirty: boolean;
+
+session.subscribe(async value => {
+ $session = value;
+
+ if (!ready) return;
+ session_dirty = true;
+
+ const target = select_target(new URL(location.href));
+
+ const token = current_token = {};
+ const { redirect, props, branch } = await hydrate_target(target);
+ if (token !== current_token) return; // a secondary navigation happened while we were loading
+
+ await render(redirect, branch, props, target.page);
+});
+
+export let prefetching: {
+ href: string;
+ promise: Promise<{ redirect?: Redirect, data?: any }>;
+} = null;
+export function set_prefetching(href, promise) {
+ prefetching = { href, promise };
+}
+
+export let store;
+export function set_store(fn) {
+ store = fn(initial_data.store);
+}
+
+export let target: Node;
+export function set_target(element) {
+ target = element;
+}
+
+export let uid = 1;
+export function set_uid(n) {
+ uid = n;
+}
+
+export let cid: number;
+export function set_cid(n) {
+ cid = n;
+}
+
+const _history = typeof history !== 'undefined' ? history : {
+ pushState: (state: any, title: string, href: string) => {},
+ replaceState: (state: any, title: string, href: string) => {},
+ scrollRestoration: ''
+};
+export { _history as history };
+
+export const scroll_history: Record = {};
+
+export function select_target(url: URL): Target {
+ if (url.origin !== location.origin) return null;
+ if (!url.pathname.startsWith(initial_data.baseUrl)) return null;
+
+ const path = url.pathname.slice(initial_data.baseUrl.length);
+
+ // avoid accidental clashes between server routes and page routes
+ if (ignore.some(pattern => pattern.test(path))) return;
+
+ for (let i = 0; i < routes.length; i += 1) {
+ const route = routes[i];
+
+ const match = route.pattern.exec(path);
+ if (match) {
+ const query: Record = Object.create(null);
+ if (url.search.length > 0) {
+ url.search.slice(1).split('&').forEach(searchParam => {
+ let [, key, value] = /([^=]*)(?:=(.*))?/.exec(decodeURIComponent(searchParam));
+ value = (value || '').replace(/\+/g, ' ');
+ if (typeof query[key] === 'string') query[key] = [query[key]];
+ if (typeof query[key] === 'object') (query[key] as string[]).push(value);
+ else query[key] = value;
+ });
+ }
+
+ const part = route.parts[route.parts.length - 1];
+ const params = part.params ? part.params(match) : {};
+
+ const page = { path, query, params };
+
+ return { href: url.href, route, match, page };
+ }
+ }
+}
+
+export function scroll_state() {
+ return {
+ x: pageXOffset,
+ y: pageYOffset
+ };
+}
+
+export async function navigate(target: Target, id: number, noscroll?: boolean, hash?: string): Promise {
+ if (id) {
+ // popstate or initial navigation
+ cid = id;
+ } else {
+ const current_scroll = scroll_state();
+
+ // clicked on a link. preserve scroll state
+ scroll_history[cid] = current_scroll;
+
+ id = cid = ++uid;
+ scroll_history[cid] = noscroll ? current_scroll : { x: 0, y: 0 };
+ }
+
+ cid = id;
+
+ if (root_component) stores.preloading.set(true);
+
+ const loaded = prefetching && prefetching.href === target.href ?
+ prefetching.promise :
+ hydrate_target(target);
+
+ prefetching = null;
+
+ const token = current_token = {};
+ const { redirect, props, branch } = await loaded;
+ if (token !== current_token) return; // a secondary navigation happened while we were loading
+
+ await render(redirect, branch, props, target.page);
+ if (document.activeElement) document.activeElement.blur();
+
+ if (!noscroll) {
+ let scroll = scroll_history[id];
+
+ if (hash) {
+ // scroll is an element id (from a hash), we need to compute y.
+ const deep_linked = document.querySelector(hash);
+
+ if (deep_linked) {
+ scroll = {
+ x: 0,
+ y: deep_linked.getBoundingClientRect().top
+ };
+ }
+ }
+
+ scroll_history[cid] = scroll;
+ if (scroll) scrollTo(scroll.x, scroll.y);
+ }
+}
+
+async function render(redirect: Redirect, branch: any[], props: any, page: Page) {
+ if (redirect) return goto(redirect.location, { replaceState: true });
+
+ stores.page.set(page);
+ stores.preloading.set(false);
+
+ if (root_component) {
+ root_component.props = props;
+ } else {
+ // first load — remove SSR'd contents
+ const start = document.querySelector('#sapper-head-start');
+ const end = document.querySelector('#sapper-head-end');
+
+ if (start && end) {
+ while (start.nextSibling !== end) detach(start.nextSibling);
+ detach(start);
+ detach(end);
+ }
+
+ root_component = new Sapper({
+ target,
+ props: {
+ Root,
+ props,
+ session
+ },
+ hydrate: true
+ });
+ }
+
+ current_branch = branch;
+ ready = true;
+ session_dirty = false;
+}
+
+export async function hydrate_target(target: Target): Promise<{
+ redirect?: Redirect;
+ props?: any;
+ branch?: Array<{ Component: ComponentConstructor, preload: (page) => Promise, segment: string }>
+}> {
+ const { route, page } = target;
+ const segments = page.path.split('/').filter(Boolean);
+
+ let redirect: Redirect = null;
+ let error: { statusCode: number, message: Error | string } = null;
+
+ const preload_context = {
+ fetch: (url: string, opts?: any) => fetch(url, opts),
+ redirect: (statusCode: number, location: string) => {
+ if (redirect && (redirect.statusCode !== statusCode || redirect.location !== location)) {
+ throw new Error(`Conflicting redirects`);
+ }
+ redirect = { statusCode, location };
+ },
+ error: (statusCode: number, message: Error | string) => {
+ error = { statusCode, message };
+ }
+ };
+
+ if (!root_preloaded) {
+ root_preloaded = initial_data.preloaded[0] || root_preload.call(preload_context, {
+ path: page.path,
+ query: page.query,
+ params: {}
+ }, $session);
+ }
+
+ let branch;
+
+ try {
+ branch = await Promise.all(route.parts.map(async (part, i) => {
+ if (!part) return null;
+
+ const segment = segments[i];
+ if (!session_dirty && current_branch[i] && current_branch[i].segment === segment) return current_branch[i];
+
+ const { default: Component, preload } = await load_component(components[part.i]);
+
+ let preloaded;
+ if (ready || !initial_data.preloaded[i + 1]) {
+ preloaded = preload
+ ? await preload.call(preload_context, {
+ path: page.path,
+ query: page.query,
+ params: part.params ? part.params(target.match) : {}
+ }, $session)
+ : {};
+ } else {
+ preloaded = initial_data.preloaded[i + 1];
+ }
+
+ return { Component, preloaded, segment };
+ }));
+ } catch (e) {
+ error = { statusCode: 500, message: e };
+ branch = [];
+ }
+
+ if (redirect) return { redirect };
+
+ if (error) {
+ // TODO be nice if this was less of a special case
+ return {
+ props: {
+ child: {
+ component: ErrorComponent,
+ props: {
+ error: typeof error.message === 'string' ? new Error(error.message) : error.message,
+ status: error.statusCode
+ }
+ }
+ },
+ branch
+ };
+ }
+
+ const props = Object.assign({}, await root_preloaded, {
+ child: { segment: segments[0] }
+ });
+
+ let level = props.child;
+
+ branch.forEach((node, i) => {
+ if (!node) return;
+
+ level.component = node.Component;
+ level.props = Object.assign({}, node.preloaded, {
+ child: { segment: segments[i + 1] }
+ });
+
+ level = level.props.child;
+ });
+
+ return { props, branch };
+}
+
+function load_css(chunk: string) {
+ const href = `client/${chunk}`;
+ if (document.querySelector(`link[href="${href}"]`)) return;
+
+ return new Promise((fulfil, reject) => {
+ const link = document.createElement('link');
+ link.rel = 'stylesheet';
+ link.href = href;
+
+ link.onload = () => fulfil();
+ link.onerror = reject;
+
+ document.head.appendChild(link);
+ });
+}
+
+export function load_component(component: ComponentLoader): Promise<{
+ default: ComponentConstructor,
+ preload?: (input: any) => any
+}> {
+ // TODO this is temporary — once placeholders are
+ // always rewritten, scratch the ternary
+ const promises: Array> = (typeof component.css === 'string' ? [] : component.css.map(load_css));
+ promises.unshift(component.js());
+ return Promise.all(promises).then(values => values[0]);
+}
+
+function detach(node: Node) {
+ node.parentNode.removeChild(node);
+}
\ No newline at end of file
diff --git a/templates/src/client/goto/index.ts b/runtime/src/app/goto/index.ts
similarity index 70%
rename from templates/src/client/goto/index.ts
rename to runtime/src/app/goto/index.ts
index 29757edad..0241b2c65 100644
--- a/templates/src/client/goto/index.ts
+++ b/runtime/src/app/goto/index.ts
@@ -1,7 +1,7 @@
-import { history, select_route, navigate, cid } from '../app';
+import { history, select_target, navigate, cid } from '../app';
export default function goto(href: string, opts = { replaceState: false }) {
- const target = select_route(new URL(href, document.baseURI));
+ const target = select_target(new URL(href, document.baseURI));
if (target) {
history[opts.replaceState ? 'replaceState' : 'pushState']({ id: cid }, '', href);
diff --git a/runtime/src/app/index.ts b/runtime/src/app/index.ts
new file mode 100644
index 000000000..5d0900e66
--- /dev/null
+++ b/runtime/src/app/index.ts
@@ -0,0 +1,12 @@
+import { getContext } from 'svelte';
+import { CONTEXT_KEY, stores } from '@sapper/internal/shared';
+
+export const preloading = { subscribe: stores.preloading.subscribe };
+export const page = { subscribe: stores.page.subscribe };
+
+export const getSession = () => getContext(CONTEXT_KEY);
+
+export { default as start } from './start/index';
+export { default as goto } from './goto/index';
+export { default as prefetch } from './prefetch/index';
+export { default as prefetchRoutes } from './prefetchRoutes/index';
\ No newline at end of file
diff --git a/runtime/src/app/prefetch/index.ts b/runtime/src/app/prefetch/index.ts
new file mode 100644
index 000000000..d959ef3ed
--- /dev/null
+++ b/runtime/src/app/prefetch/index.ts
@@ -0,0 +1,14 @@
+import { select_target, prefetching, set_prefetching, hydrate_target } from '../app';
+import { Target } from '../types';
+
+export default function prefetch(href: string) {
+ const target: Target = select_target(new URL(href, document.baseURI));
+
+ if (target) {
+ if (!prefetching || href !== prefetching.href) {
+ set_prefetching(href, hydrate_target(target));
+ }
+
+ return prefetching.promise;
+ }
+}
\ No newline at end of file
diff --git a/templates/src/client/prefetchRoutes/index.ts b/runtime/src/app/prefetchRoutes/index.ts
similarity index 50%
rename from templates/src/client/prefetchRoutes/index.ts
rename to runtime/src/app/prefetchRoutes/index.ts
index b3c2f3cb2..f1e4596b0 100644
--- a/templates/src/client/prefetchRoutes/index.ts
+++ b/runtime/src/app/prefetchRoutes/index.ts
@@ -1,11 +1,12 @@
-import { components, pages, load_component } from "../app";
+import { components, routes } from '@sapper/internal/manifest-client';
+import { load_component } from '../app';
export default function prefetchRoutes(pathnames: string[]) {
- return pages
- .filter(route => {
- if (!pathnames) return true;
- return pathnames.some(pathname => route.pattern.test(pathname));
- })
+ return routes
+ .filter(pathnames
+ ? route => pathnames.some(pathname => route.pattern.test(pathname))
+ : () => true
+ )
.reduce((promise: Promise, route) => promise.then(() => {
return Promise.all(route.parts.map(part => part && load_component(components[part.i])));
}), Promise.resolve());
diff --git a/templates/src/client/start/index.ts b/runtime/src/app/start/index.ts
similarity index 91%
rename from templates/src/client/start/index.ts
rename to runtime/src/app/start/index.ts
index 99c01e9fc..e371d83b2 100644
--- a/templates/src/client/start/index.ts
+++ b/runtime/src/app/start/index.ts
@@ -5,26 +5,22 @@ import {
navigate,
scroll_history,
scroll_state,
- select_route,
- set_store,
+ select_target,
set_target,
uid,
set_uid,
set_cid
} from '../app';
import prefetch from '../prefetch/index';
-import { Store, ScrollPosition } from '../types';
export default function start(opts: {
- target: Node,
- store?: (data: any) => Store
+ target: Node
}) {
if ('scrollRestoration' in history) {
history.scrollRestoration = 'manual';
}
set_target(opts.target);
- if (opts.store) set_store(opts.store);
addEventListener('click', handle_click);
addEventListener('popstate', handle_popstate);
@@ -39,7 +35,7 @@ export default function start(opts: {
history.replaceState({ id: uid }, '', href);
if (!initial_data.error) {
- const target = select_route(new URL(location.href));
+ const target = select_target(new URL(location.href));
if (target) return navigate(target, uid, false, hash);
}
});
@@ -96,7 +92,7 @@ function handle_click(event: MouseEvent) {
// Don't handle hash changes
if (url.pathname === location.pathname && url.search === location.search) return;
- const target = select_route(url);
+ const target = select_target(url);
if (target) {
const noscroll = a.hasAttribute('sapper-noscroll');
navigate(target, null, noscroll, url.hash);
@@ -119,7 +115,7 @@ function handle_popstate(event: PopStateEvent) {
if (event.state) {
const url = new URL(location.href);
- const target = select_route(url);
+ const target = select_target(url);
if (target) {
navigate(target, event.state.id);
} else {
diff --git a/templates/src/client/types.ts b/runtime/src/app/types.ts
similarity index 78%
rename from templates/src/client/types.ts
rename to runtime/src/app/types.ts
index 2a2858240..9a78e1869 100644
--- a/templates/src/client/types.ts
+++ b/runtime/src/app/types.ts
@@ -8,21 +8,14 @@ type Child = {
component?: Component;
};
-export type RootProps = {
- path: string;
- params: Record;
- query: Record;
- child: Child;
-};
-
export interface ComponentConstructor {
- new (options: { target: Node, data: any, store: Store, hydrate: boolean }): Component;
+ new (options: { target: Node, props: any, hydrate: boolean }): Component;
preload: (props: { params: Params, query: Query }) => Promise;
};
export interface Component {
- set: (data: any) => void;
- destroy: () => void;
+ $set: (data: any) => void;
+ $destroy: () => void;
}
export type ComponentLoader = {
@@ -30,7 +23,7 @@ export type ComponentLoader = {
css: string[]
};
-export type Page = {
+export type Route = {
pattern: RegExp;
parts: Array<{
i: number;
@@ -42,7 +35,7 @@ export type Manifest = {
ignore: RegExp[];
root: ComponentConstructor;
error: () => Promise<{ default: ComponentConstructor }>;
- pages: Page[]
+ pages: Route[]
};
export type ScrollPosition = {
@@ -51,11 +44,10 @@ export type ScrollPosition = {
};
export type Target = {
- url: URL;
- path: string;
- page: Page;
+ href: string;
+ route: Route;
match: RegExpExecArray;
- query: Record;
+ page: Page;
};
export type Redirect = {
@@ -63,6 +55,8 @@ export type Redirect = {
location: string;
};
-export type Store = {
- get: () => any;
-}
\ No newline at end of file
+export type Page = {
+ path: string;
+ params: Record;
+ query: Record;
+};
\ No newline at end of file
diff --git a/runtime/src/server/constants.js b/runtime/src/server/constants.js
new file mode 100644
index 000000000..468742b44
--- /dev/null
+++ b/runtime/src/server/constants.js
@@ -0,0 +1 @@
+export const IGNORE = '__SAPPER__IGNORE__';
\ No newline at end of file
diff --git a/templates/src/server/index.ts b/runtime/src/server/index.ts
similarity index 100%
rename from templates/src/server/index.ts
rename to runtime/src/server/index.ts
diff --git a/templates/src/server/middleware/get_page_handler.ts b/runtime/src/server/middleware/get_page_handler.ts
similarity index 83%
rename from templates/src/server/middleware/get_page_handler.ts
rename to runtime/src/server/middleware/get_page_handler.ts
index 0cb3eae59..4b57ded91 100644
--- a/templates/src/server/middleware/get_page_handler.ts
+++ b/runtime/src/server/middleware/get_page_handler.ts
@@ -1,15 +1,19 @@
-import * as fs from 'fs';
-import * as path from 'path';
+import { writable } from 'svelte/store.mjs';
+import fs from 'fs';
+import path from 'path';
import cookie from 'cookie';
import devalue from 'devalue';
import fetch from 'node-fetch';
-import { URL, resolve } from 'url';
-import { build_dir, dev, src_dir, IGNORE } from '../placeholders';
-import { Manifest, Page, Props, Req, Res, Store } from './types';
+import URL from 'url';
+import { IGNORE } from '../constants';
+import { Manifest, Page, Props, Req, Res } from './types';
+import { build_dir, dev, src_dir } from '@sapper/internal/manifest-server';
+import { stores } from '@sapper/internal/shared';
+import Sapper from '@sapper/internal/Sapper.html';
export function get_page_handler(
manifest: Manifest,
- store_getter: (req: Req, res: Res) => Store
+ session_getter: (req: Req, res: Res) => any
) {
const get_build_info = dev
? () => JSON.parse(fs.readFileSync(path.join(build_dir, 'build.json'), 'utf-8'))
@@ -77,7 +81,7 @@ export function get_page_handler(
res.setHeader('Link', link);
}
- const store = store_getter ? store_getter(req, res) : null;
+ const session = session_getter(req, res);
let redirect: { statusCode: number, location: string };
let preload_error: { statusCode: number, message: Error | string };
@@ -94,7 +98,7 @@ export function get_page_handler(
preload_error = { statusCode, message };
},
fetch: (url: string, opts?: any) => {
- const parsed = new URL(url, `http://127.0.0.1:${process.env.PORT}${req.baseUrl ? req.baseUrl + '/' :''}`);
+ const parsed = new URL.URL(url, `http://127.0.0.1:${process.env.PORT}${req.baseUrl ? req.baseUrl + '/' :''}`);
if (opts) {
opts = Object.assign({}, opts);
@@ -128,16 +132,16 @@ export function get_page_handler(
}
return fetch(parsed.href, opts);
- },
- store
+ }
};
let preloaded;
let match;
+ let params;
try {
- const root_preloaded = manifest.root.preload
- ? manifest.root.preload.call(preload_context, {
+ const root_preloaded = manifest.root_preload
+ ? manifest.root_preload.call(preload_context, {
path: req.path,
query: req.query,
params: {}
@@ -146,17 +150,21 @@ export function get_page_handler(
match = error ? null : page.pattern.exec(req.path);
+
let toPreload = [root_preloaded];
if (!isSWIndexHtml) {
toPreload = toPreload.concat(page.parts.map(part => {
if (!part) return null;
- return part.component.preload
- ? part.component.preload.call(preload_context, {
+ // the deepest level is used below, to initialise the store
+ params = part.params ? part.params(match) : {};
+
+ return part.preload
+ ? part.preload.call(preload_context, {
path: req.path,
query: req.query,
- params: part.params ? part.params(match) : {}
- })
+ params
+ }, session)
: {};
}))
}
@@ -169,7 +177,7 @@ export function get_page_handler(
try {
if (redirect) {
- const location = resolve(req.baseUrl || '/', redirect.location);
+ const location = URL.resolve(req.baseUrl || '/', redirect.location);
res.statusCode = redirect.statusCode;
res.setHeader('Location', location);
@@ -183,67 +191,63 @@ export function get_page_handler(
return;
}
- const serialized = {
- preloaded: `[${preloaded.map(data => try_serialize(data)).join(',')}]`,
- store: store && try_serialize(store.get())
- };
-
const segments = req.path.split('/').filter(Boolean);
- const props: Props = {
- path: req.path,
- query: req.query,
- params: {},
- child: null
- };
-
- if (error) {
- props.error = error instanceof Error ? error : { message: error };
- props.status = status;
- }
-
- const data = Object.assign({}, props, preloaded[0], {
- params: {},
+ const props = Object.assign({}, preloaded[0], {
child: {
- segment: segments[0]
+ segment: segments[0],
+ props: {}
}
});
- let level = data.child;
- if (isSWIndexHtml) {
- level.props = Object.assign({}, props, {
- params: {}
- })
- } else {
+ let level = props.child;
+ if (!isSWIndexHtml) {
for (let i = 0; i < page.parts.length; i += 1) {
const part = page.parts[i];
if (!part) continue;
- const get_params = part.params || (() => ({}));
-
Object.assign(level, {
component: part.component,
- props: Object.assign({}, props, {
- params: get_params(match)
- }, preloaded[i + 1])
+ props: Object.assign({}, preloaded[i + 1])
});
level.props.child = {
- segment: segments[i + 1]
+ segment: segments[i + 1],
+ props: {}
};
level = level.props.child;
}
}
- const { html, head, css } = manifest.root.render(data, {
- store
+ if (error) {
+ props.child.props.error = error instanceof Error ? error : { message: error };
+ props.child.props.status = status;
+ }
+
+ stores.page.set({
+ path: req.path,
+ query: req.query,
+ params: params
+ });
+
+ const { html, head, css } = Sapper.render({
+ Root: manifest.root,
+ props: props,
+ session: writable(session)
});
+ const serialized = {
+ preloaded: `[${preloaded.map(data => try_serialize(data)).join(',')}]`,
+ session: session && try_serialize(session, err => {
+ throw new Error(`Failed to serialize session data: ${err.message}`);
+ })
+ };
+
let script = `__SAPPER__={${[
error && `error:1`,
`baseUrl:"${req.baseUrl}"`,
serialized.preloaded && `preloaded:${serialized.preloaded}`,
- serialized.store && `store:${serialized.store}`
+ serialized.session && `session:${serialized.session}`
].filter(Boolean).join(',')}};`;
if (has_service_worker) {
@@ -302,6 +306,7 @@ export function get_page_handler(
res.statusCode = status;
res.end(body);
} catch(err) {
+ console.log(err);
if (error) {
// we encountered an error while rendering the error page — oops
res.statusCode = 500;
@@ -338,10 +343,11 @@ function read_template(dir = build_dir) {
return fs.readFileSync(`${dir}/template.html`, 'utf-8');
}
-function try_serialize(data: any) {
+function try_serialize(data: any, fail?: (err) => void) {
try {
return devalue(data);
} catch (err) {
+ if (fail) fail(err);
return null;
}
}
diff --git a/templates/src/server/middleware/get_server_route_handler.ts b/runtime/src/server/middleware/get_server_route_handler.ts
similarity index 97%
rename from templates/src/server/middleware/get_server_route_handler.ts
rename to runtime/src/server/middleware/get_server_route_handler.ts
index 1e2f3db67..80bf94347 100644
--- a/templates/src/server/middleware/get_server_route_handler.ts
+++ b/runtime/src/server/middleware/get_server_route_handler.ts
@@ -1,4 +1,4 @@
-import { IGNORE } from '../placeholders';
+import { IGNORE } from '../constants';
import { Req, Res, ServerRoute } from './types';
export function get_server_route_handler(routes: ServerRoute[]) {
diff --git a/templates/src/server/middleware/index.ts b/runtime/src/server/middleware/index.ts
similarity index 90%
rename from templates/src/server/middleware/index.ts
rename to runtime/src/server/middleware/index.ts
index f06942c3f..ba07c6c20 100644
--- a/templates/src/server/middleware/index.ts
+++ b/runtime/src/server/middleware/index.ts
@@ -1,16 +1,17 @@
-import * as fs from 'fs';
-import * as path from 'path';
-import { build_dir, dev, manifest, IGNORE } from '../placeholders';
-import { Handler, Req, Res, Store } from './types';
+import fs from 'fs';
+import path from 'path';
+import { build_dir, dev, manifest } from '@sapper/internal/manifest-server';
+import { Handler, Req, Res } from './types';
import { get_server_route_handler } from './get_server_route_handler';
import { get_page_handler } from './get_page_handler';
import { lookup } from './mime';
+import { IGNORE } from '../constants';
export default function middleware(opts: {
- store?: (req: Req, res: Res) => Store,
+ session?: (req: Req, res: Res) => any,
ignore?: any
} = {}) {
- const { store, ignore } = opts;
+ const { session, ignore } = opts;
let emitted_basepath = false;
@@ -73,7 +74,7 @@ export default function middleware(opts: {
get_server_route_handler(manifest.server_routes),
- get_page_handler(manifest, store)
+ get_page_handler(manifest, session || noop)
].filter(Boolean));
}
@@ -140,4 +141,6 @@ export function serve({ prefix, pathname, cache_control }: {
next();
}
};
-}
\ No newline at end of file
+}
+
+function noop(){}
\ No newline at end of file
diff --git a/templates/src/server/middleware/mime-types.md b/runtime/src/server/middleware/mime-types.md
similarity index 100%
rename from templates/src/server/middleware/mime-types.md
rename to runtime/src/server/middleware/mime-types.md
diff --git a/templates/src/server/middleware/mime.ts b/runtime/src/server/middleware/mime.ts
similarity index 100%
rename from templates/src/server/middleware/mime.ts
rename to runtime/src/server/middleware/mime.ts
diff --git a/templates/src/server/middleware/types.ts b/runtime/src/server/middleware/types.ts
similarity index 83%
rename from templates/src/server/middleware/types.ts
rename to runtime/src/server/middleware/types.ts
index 6d7597f2a..bcc088918 100644
--- a/templates/src/server/middleware/types.ts
+++ b/runtime/src/server/middleware/types.ts
@@ -12,6 +12,7 @@ export type Page = {
name: string;
component: Component;
params?: (match: RegExpMatchArray) => Record;
+ preload?: (data: any) => any | Promise;
}>
};
@@ -19,19 +20,13 @@ export type Manifest = {
server_routes: ServerRoute[];
pages: Page[];
root: Component;
+ root_preload?: (data: any) => any | Promise;
error: Component;
}
export type Handler = (req: Req, res: Res, next: () => void) => void;
-export type Store = {
- get: () => any
-};
-
export type Props = {
- path: string;
- query: Record;
- params: Record;
error?: { message: string };
status?: number;
child: {
@@ -60,10 +55,9 @@ export interface Res extends ServerResponse {
export { ServerResponse };
interface Component {
- render: (data: any, opts: { store: Store }) => {
+ render: (data: any) => {
head: string;
css: { code: string, map: any };
html: string
- },
- preload: (data: any) => any | Promise
+ }
}
\ No newline at end of file
diff --git a/src/api/build.ts b/src/api/build.ts
index c8287d6f1..b8567ee68 100644
--- a/src/api/build.ts
+++ b/src/api/build.ts
@@ -9,6 +9,7 @@ import read_template from '../core/read_template';
import { CompileResult } from '../core/create_compilers/interfaces';
import { noop } from './utils/noop';
import validate_bundler from './utils/validate_bundler';
+import { copy_runtime } from './utils/copy_runtime';
type Opts = {
cwd?: string;
@@ -26,7 +27,7 @@ export async function build({
cwd,
src = 'src',
routes = 'src/routes',
- output = '__sapper__',
+ output = 'src/node_modules/@sapper',
static: static_files = 'static',
dest = '__sapper__/build',
@@ -47,6 +48,10 @@ export async function build({
throw new Error(`Legacy builds are not supported for projects using webpack`);
}
+ rimraf.sync(path.join(output, '**/*'));
+ mkdirp.sync(output);
+ copy_runtime(output);
+
rimraf.sync(path.join(dest, '**/*'));
mkdirp.sync(`${dest}/client`);
copy_shimport(dest);
@@ -66,7 +71,7 @@ export async function build({
const manifest_data = create_manifest_data(routes);
- // create src/manifest/client.js and src/manifest/server.js
+ // create src/node_modules/@sapper/app.mjs and server.mjs
create_main_manifests({
bundler,
manifest_data,
diff --git a/src/api/dev.ts b/src/api/dev.ts
index 54fddc92e..810d99cf9 100644
--- a/src/api/dev.ts
+++ b/src/api/dev.ts
@@ -15,6 +15,7 @@ import { copy_shimport } from './utils/copy_shimport';
import { ManifestData, FatalEvent, ErrorEvent, ReadyEvent, InvalidEvent } from '../interfaces';
import read_template from '../core/read_template';
import { noop } from './utils/noop';
+import { copy_runtime } from './utils/copy_runtime';
type Opts = {
cwd?: string,
@@ -72,7 +73,7 @@ class Watcher extends EventEmitter {
cwd = '.',
src = 'src',
routes = 'src/routes',
- output = '__sapper__',
+ output = 'src/node_modules/@sapper',
static: static_files = 'static',
dest = '__sapper__/dev',
'dev-port': dev_port,
@@ -144,6 +145,11 @@ class Watcher extends EventEmitter {
}
const { cwd, src, dest, routes, output, static: static_files } = this.dirs;
+
+ rimraf.sync(path.join(output, '**/*'));
+ mkdirp.sync(output);
+ copy_runtime(output);
+
rimraf.sync(dest);
mkdirp.sync(`${dest}/client`);
if (this.bundler === 'rollup') copy_shimport(dest);
@@ -484,7 +490,7 @@ function watch_dir(
let watch: any;
let closed = false;
- import('cheap-watch').then(CheapWatch => {
+ import('cheap-watch').then(({ default: CheapWatch }) => {
if (closed) return;
watch = new CheapWatch({ dir, filter, debounce: 50 });
diff --git a/src/api/utils/copy_runtime.ts b/src/api/utils/copy_runtime.ts
new file mode 100644
index 000000000..ac5da2c13
--- /dev/null
+++ b/src/api/utils/copy_runtime.ts
@@ -0,0 +1,21 @@
+import * as fs from 'fs';
+import * as path from 'path';
+import mkdirp from 'mkdirp';
+
+const runtime = [
+ 'app.mjs',
+ 'server.mjs',
+ 'internal/shared.mjs',
+ 'internal/Sapper.html',
+ 'internal/layout.html'
+].map(file => ({
+ file,
+ source: fs.readFileSync(path.join(__dirname, `../runtime/${file}`), 'utf-8')
+}));
+
+export function copy_runtime(output: string) {
+ runtime.forEach(({ file, source }) => {
+ mkdirp.sync(path.dirname(`${output}/${file}`));
+ fs.writeFileSync(`${output}/${file}`, source);
+ });
+}
\ No newline at end of file
diff --git a/src/cli.ts b/src/cli.ts
index d3e86671e..aa5b9e6e4 100755
--- a/src/cli.ts
+++ b/src/cli.ts
@@ -10,7 +10,7 @@ const prog = sade('sapper').version(pkg.version);
if (process.argv[2] === 'start') {
// remove this in a future version
- console.error(colors.bold.red(`'sapper start' has been removed`));
+ console.error(colors.bold().red(`'sapper start' has been removed`));
console.error(`Use 'node [build_dir]' instead`);
process.exit(1);
}
@@ -29,7 +29,7 @@ prog.command('dev')
.option('--src', 'Source directory', 'src')
.option('--routes', 'Routes directory', 'src/routes')
.option('--static', 'Static files directory', 'static')
- .option('--output', 'Sapper output directory', '__sapper__')
+ .option('--output', 'Sapper output directory', 'src/node_modules/@sapper')
.option('--build-dir', 'Development build directory', '__sapper__/dev')
.action(async (opts: {
port: number,
@@ -74,7 +74,7 @@ prog.command('dev')
watcher.on('ready', async (event: ReadyEvent) => {
if (first) {
- console.log(colors.bold.cyan(`> Listening on http://localhost:${event.port}`));
+ console.log(colors.bold().cyan(`> Listening on http://localhost:${event.port}`));
if (opts.open) {
const { exec } = await import('child_process');
exec(`open http://localhost:${event.port}`);
@@ -85,7 +85,7 @@ prog.command('dev')
watcher.on('invalid', (event: InvalidEvent) => {
const changed = event.changed.map(filename => path.relative(process.cwd(), filename)).join(', ');
- console.log(`\n${colors.bold.cyan(changed)} changed. rebuilding...`);
+ console.log(`\n${colors.bold().cyan(changed)} changed. rebuilding...`);
});
watcher.on('error', (event: ErrorEvent) => {
@@ -94,13 +94,13 @@ prog.command('dev')
});
watcher.on('fatal', (event: FatalEvent) => {
- console.log(colors.bold.red(`> ${event.message}`));
+ console.log(colors.bold().red(`> ${event.message}`));
if (event.log) console.log(event.log);
});
watcher.on('build', (event: BuildEvent) => {
if (event.errors.length) {
- console.log(colors.bold.red(`✗ ${event.type}`));
+ console.log(colors.bold().red(`✗ ${event.type}`));
event.errors.filter(e => !e.duplicate).forEach(error => {
if (error.file) console.log(colors.bold(error.file));
@@ -112,7 +112,7 @@ prog.command('dev')
console.log(`${hidden} duplicate ${hidden === 1 ? 'error' : 'errors'} hidden\n`);
}
} else if (event.warnings.length) {
- console.log(colors.bold.yellow(`• ${event.type}`));
+ console.log(colors.bold().yellow(`• ${event.type}`));
event.warnings.filter(e => !e.duplicate).forEach(warning => {
if (warning.file) console.log(colors.bold(warning.file));
@@ -124,11 +124,12 @@ prog.command('dev')
console.log(`${hidden} duplicate ${hidden === 1 ? 'warning' : 'warnings'} hidden\n`);
}
} else {
- console.log(`${colors.bold.green(`✔ ${event.type}`)} ${colors.gray(`(${format_milliseconds(event.duration)})`)}`);
+ console.log(`${colors.bold().green(`✔ ${event.type}`)} ${colors.gray(`(${format_milliseconds(event.duration)})`)}`);
}
});
} catch (err) {
- console.log(colors.bold.red(`> ${err.message}`));
+ console.log(colors.bold().red(`> ${err.message}`));
+ console.log(colors.gray(err.stack));
process.exit(1);
}
});
@@ -141,7 +142,7 @@ prog.command('build [dest]')
.option('--cwd', 'Current working directory', '.')
.option('--src', 'Source directory', 'src')
.option('--routes', 'Routes directory', 'src/routes')
- .option('--output', 'Sapper output directory', '__sapper__')
+ .option('--output', 'Sapper output directory', 'src/node_modules/@sapper')
.example(`build custom-dir -p 4567`)
.action(async (dest = '__sapper__/build', opts: {
port: string,
@@ -168,9 +169,10 @@ prog.command('build [dest]')
require('./server/server.js');
`.replace(/^\t+/gm, '').trim());
- console.error(`\n> Finished in ${elapsed(start)}. Type ${colors.bold.cyan(`node ${dest}`)} to run the app.`);
+ console.error(`\n> Finished in ${elapsed(start)}. Type ${colors.bold().cyan(`node ${dest}`)} to run the app.`);
} catch (err) {
- console.log(`${colors.bold.red(`> ${err.message}`)}`);
+ console.log(`${colors.bold().red(`> ${err.message}`)}`);
+ console.log(colors.gray(err.stack));
process.exit(1);
}
});
@@ -186,7 +188,7 @@ prog.command('export [dest]')
.option('--src', 'Source directory', 'src')
.option('--routes', 'Routes directory', 'src/routes')
.option('--static', 'Static files directory', 'static')
- .option('--output', 'Sapper output directory', '__sapper__')
+ .option('--output', 'Sapper output directory', 'src/node_modules/@sapper')
.option('--build-dir', 'Intermediate build directory', '__sapper__/build')
.action(async (dest = '__sapper__/export', opts: {
build: boolean,
@@ -220,24 +222,24 @@ prog.command('export [dest]')
timeout: opts.timeout,
oninfo: event => {
- console.log(colors.bold.cyan(`> ${event.message}`));
+ console.log(colors.bold().cyan(`> ${event.message}`));
},
onfile: event => {
- const size_color = event.size > 150000 ? colors.bold.red : event.size > 50000 ? colors.bold.yellow : colors.bold.gray;
+ const size_color = event.size > 150000 ? colors.bold().red : event.size > 50000 ? colors.bold().yellow : colors.bold().gray;
const size_label = size_color(left_pad(pb(event.size), 10));
const file_label = event.status === 200
? event.file
- : colors.bold[event.status >= 400 ? 'red' : 'yellow'](`(${event.status}) ${event.file}`);
+ : colors.bold()[event.status >= 400 ? 'red' : 'yellow'](`(${event.status}) ${event.file}`);
console.log(`${size_label} ${file_label}`);
}
});
- console.error(`\n> Finished in ${elapsed(start)}. Type ${colors.bold.cyan(`npx serve ${dest}`)} to run the app.`);
+ console.error(`\n> Finished in ${elapsed(start)}. Type ${colors.bold().cyan(`npx serve ${dest}`)} to run the app.`);
} catch (err) {
- console.error(colors.bold.red(`> ${err.message}`));
+ console.error(colors.bold().red(`> ${err.message}`));
process.exit(1);
}
});
diff --git a/src/core/create_compilers/RollupResult.ts b/src/core/create_compilers/RollupResult.ts
index 1c44c2ce1..e75864e77 100644
--- a/src/core/create_compilers/RollupResult.ts
+++ b/src/core/create_compilers/RollupResult.ts
@@ -47,12 +47,13 @@ export default class RollupResult implements CompileResult {
} else {
for (const name in compiler.input) {
const file = compiler.input[name];
- this.assets[name] = compiler.chunks.find(chunk => file in chunk.modules).fileName;
+ const chunk = compiler.chunks.find(chunk => file in chunk.modules);
+ if (chunk) this.assets[name] = chunk.fileName;
}
}
this.summary = compiler.chunks.map(chunk => {
- const size_color = chunk.code.length > 150000 ? colors.bold.red : chunk.code.length > 50000 ? colors.bold.yellow : colors.bold.white;
+ const size_color = chunk.code.length > 150000 ? colors.bold().red : chunk.code.length > 50000 ? colors.bold().yellow : colors.bold().white;
const size_label = left_pad(pb(chunk.code.length), 10);
const lines = [size_color(`${size_label} ${chunk.fileName}`)];
diff --git a/src/core/create_compilers/extract_css.ts b/src/core/create_compilers/extract_css.ts
index a60d848dd..c35dcf223 100644
--- a/src/core/create_compilers/extract_css.ts
+++ b/src/core/create_compilers/extract_css.ts
@@ -153,7 +153,7 @@ export default function extract_css(client_result: CompileResult, components: Pa
chunks_with_css.add(chunk);
});
- const entry = path.resolve(dirs.src, 'client.js');
+ const entry = path.resolve(dirs.src, 'app.mjs');
const entry_chunk = client_result.chunks.find(chunk => chunk.modules.indexOf(entry) !== -1);
const entry_chunk_dependencies: Set = new Set([entry_chunk]);
@@ -161,6 +161,8 @@ export default function extract_css(client_result: CompileResult, components: Pa
// recursively find the chunks this component depends on
entry_chunk_dependencies.forEach(chunk => {
+ if (!chunk) return; // TODO why does this happen?
+
chunk.imports.forEach(file => {
entry_chunk_dependencies.add(lookup.get(file));
});
@@ -182,7 +184,8 @@ export default function extract_css(client_result: CompileResult, components: Pa
if (!chunk) {
// this should never happen!
- throw new Error(`Could not find chunk that owns ${component.file}`);
+ return;
+ // throw new Error(`Could not find chunk that owns ${component.file}`);
}
const chunk_dependencies: Set = new Set([chunk]);
@@ -190,6 +193,8 @@ export default function extract_css(client_result: CompileResult, components: Pa
// recursively find the chunks this component depends on
chunk_dependencies.forEach(chunk => {
+ if (!chunk) return; // TODO why does this happen?
+
chunk.imports.forEach(file => {
chunk_dependencies.add(lookup.get(file));
});
diff --git a/src/core/create_manifest_data.ts b/src/core/create_manifest_data.ts
index 9f470935c..41336c421 100644
--- a/src/core/create_manifest_data.ts
+++ b/src/core/create_manifest_data.ts
@@ -1,5 +1,6 @@
import * as fs from 'fs';
import * as path from 'path';
+import svelte from 'svelte/compiler';
import { Page, PageComponent, ServerRoute, ManifestData } from '../interfaces';
import { posixify, reserved_words } from '../utils';
@@ -9,6 +10,22 @@ export default function create_manifest_data(cwd: string): ManifestData {
throw new Error(`As of Sapper 0.21, the routes/ directory should become src/routes/`);
}
+ function has_preload(file: string) {
+ const source = fs.readFileSync(path.join(cwd, file), 'utf-8');
+
+ if (/preload/.test(source)) {
+ try {
+ const { stats } = svelte.compile(source, {
+ generate: false,
+ onwarn: () => {}
+ });
+ return !!stats.vars.find((variable: any) => variable.module && variable.export_name === 'preload');
+ } catch (err) {}
+ }
+
+ return false;
+ }
+
const components: PageComponent[] = [];
const pages: Page[] = [];
const server_routes: ServerRoute[] = [];
@@ -16,7 +33,8 @@ export default function create_manifest_data(cwd: string): ManifestData {
const default_layout: PageComponent = {
default: true,
name: '_default_layout',
- file: null
+ file: null,
+ has_preload: false
};
function walk(
@@ -107,7 +125,8 @@ export default function create_manifest_data(cwd: string): ManifestData {
const component = fs.existsSync(index) && {
name: `${get_slug(item.file)}__layout`,
- file: `${item.file}/_layout.html`
+ file: `${item.file}/_layout.html`,
+ has_preload: has_preload(`${item.file}/_layout.html`)
};
if (component) components.push(component);
@@ -125,7 +144,8 @@ export default function create_manifest_data(cwd: string): ManifestData {
else if (item.is_page) {
const component = {
name: get_slug(item.file),
- file: item.file
+ file: item.file,
+ has_preload: has_preload(item.file)
};
const parts = stack.concat({
@@ -162,7 +182,8 @@ export default function create_manifest_data(cwd: string): ManifestData {
const root = fs.existsSync(root_file)
? {
name: 'main',
- file: '_layout.html'
+ file: '_layout.html',
+ has_preload: has_preload('_layout.html')
}
: default_layout;
diff --git a/src/core/create_manifests.ts b/src/core/create_manifests.ts
index ebe4cf4f1..a409b742e 100644
--- a/src/core/create_manifests.ts
+++ b/src/core/create_manifests.ts
@@ -26,17 +26,13 @@ export function create_main_manifests({
}) {
if (!fs.existsSync(output)) fs.mkdirSync(output);
- const path_to_routes = path.relative(output, routes);
+ const path_to_routes = path.relative(`${output}/internal`, routes);
- const client_manifest = generate_client(manifest_data, path_to_routes, bundler, dev, dev_port);
- const server_manifest = generate_server(manifest_data, path_to_routes, cwd, src, dest, dev);
+ const client_manifest = generate_client_manifest(manifest_data, path_to_routes, bundler, dev, dev_port);
+ const server_manifest = generate_server_manifest(manifest_data, path_to_routes, cwd, src, dest, dev);
- write_if_changed(
- `${output}/_layout.html`,
- ` `
- );
- write_if_changed(`${output}/client.js`, client_manifest);
- write_if_changed(`${output}/server.js`, server_manifest);
+ write_if_changed(`${output}/internal/manifest-client.mjs`, client_manifest);
+ write_if_changed(`${output}/internal/manifest-server.mjs`, server_manifest);
}
export function create_serviceworker_manifest({ manifest_data, output, client_files, static_files }: {
@@ -71,16 +67,13 @@ export function create_serviceworker_manifest({ manifest_data, output, client_fi
write_if_changed(`${output}/service-worker.js`, code);
}
-function generate_client(
+function generate_client_manifest(
manifest_data: ManifestData,
path_to_routes: string,
bundler: string,
dev: boolean,
dev_port?: number
) {
- const template_file = path.resolve(__dirname, '../templates/client.js');
- const template = fs.readFileSync(template_file, 'utf-8');
-
const page_ids = new Set(manifest_data.pages.map(page =>
page.pattern.toString()));
@@ -100,64 +93,59 @@ function generate_client(
component_indexes[component.name] = i;
return `{
- js: () => import(${annotation}${stringify(source)}),
- css: "__SAPPER_CSS_PLACEHOLDER:${stringify(component.file, false)}__"
- }`;
- }).join(',\n\t\t')}
- ]`.replace(/^\t/gm, '').trim();
+ js: () => import(${annotation}${stringify(source)}),
+ css: "__SAPPER_CSS_PLACEHOLDER:${stringify(component.file, false)}__"
+ }`;
+ }).join(',\n\t\t\t\t')}
+ ]`.replace(/^\t/gm, '');
let needs_decode = false;
- let pages = `[
- ${manifest_data.pages.map(page => `{
- // ${page.parts[page.parts.length - 1].component.file}
- pattern: ${page.pattern},
- parts: [
- ${page.parts.map(part => {
- if (part === null) return 'null';
-
- if (part.params.length > 0) {
- needs_decode = true;
- const props = part.params.map((param, i) => `${param}: d(match[${i + 1}])`);
- return `{ i: ${component_indexes[part.component.name]}, params: match => ({ ${props.join(', ')} }) }`;
- }
-
- return `{ i: ${component_indexes[part.component.name]} }`;
- }).join(',\n\t\t\t\t')}
- ]
- }`).join(',\n\n\t\t')}
- ]`.replace(/^\t/gm, '').trim();
+ let routes = `[
+ ${manifest_data.pages.map(page => `{
+ // ${page.parts[page.parts.length - 1].component.file}
+ pattern: ${page.pattern},
+ parts: [
+ ${page.parts.map(part => {
+ if (part === null) return 'null';
+
+ if (part.params.length > 0) {
+ needs_decode = true;
+ const props = part.params.map((param, i) => `${param}: d(match[${i + 1}])`);
+ return `{ i: ${component_indexes[part.component.name]}, params: match => ({ ${props.join(', ')} }) }`;
+ }
+
+ return `{ i: ${component_indexes[part.component.name]} }`;
+ }).join(',\n\t\t\t\t\t\t')}
+ ]
+ }`).join(',\n\n\t\t\t\t')}
+ ]`.replace(/^\t/gm, '');
if (needs_decode) {
- pages = `(d => ${pages})(decodeURIComponent)`
+ routes = `(d => ${routes})(decodeURIComponent)`
}
- let footer = '';
+ return `
+ // This file is generated by Sapper — do not edit it!
+ export { default as Root } from '${stringify(get_file(path_to_routes, manifest_data.root), false)}';
+ export { preload as root_preload } from '${manifest_data.root.has_preload ? stringify(get_file(path_to_routes, manifest_data.root), false) : './shared'}';
+ export { default as ErrorComponent } from '${stringify(posixify(`${path_to_routes}/_error.html`), false)}';
- if (dev) {
- const sapper_dev_client = posixify(
- path.resolve(__dirname, '../sapper-dev-client.js')
- );
+ export const ignore = [${server_routes_to_ignore.map(route => route.pattern).join(', ')}];
- footer = `
+ export const components = ${components};
- if (typeof window !== 'undefined') {
- import(${stringify(sapper_dev_client)}).then(client => {
- client.connect(${dev_port});
- });
- }`.replace(/^\t{3}/gm, '');
- }
+ export const routes = ${routes};
- return `// This file is generated by Sapper — do not edit it!\n` + template
- .replace('__ROOT__', stringify(get_file(path_to_routes, manifest_data.root), false))
- .replace('__ERROR__', stringify(posixify(`${path_to_routes}/_error.html`), false))
- .replace('__IGNORE__', `[${server_routes_to_ignore.map(route => route.pattern).join(', ')}]`)
- .replace('__COMPONENTS__', components)
- .replace('__PAGES__', pages) +
- footer;
+ ${dev ? `if (typeof window !== 'undefined') {
+ import(${stringify(posixify(path.resolve(__dirname, '../sapper-dev-client.js')))}).then(client => {
+ client.connect(${dev_port});
+ });
+ }` : ''}
+ `.replace(/^\t{2}/gm, '').trim();
}
-function generate_server(
+function generate_server_manifest(
manifest_data: ManifestData,
path_to_routes: string,
cwd: string,
@@ -165,29 +153,38 @@ function generate_server(
dest: string,
dev: boolean
) {
- const template_file = path.resolve(__dirname, '../templates/server.js');
- const template = fs.readFileSync(template_file, 'utf-8');
-
const imports = [].concat(
- manifest_data.server_routes.map(route =>
- `import * as __${route.name} from ${stringify(posixify(`${path_to_routes}/${route.file}`))};`),
- manifest_data.components.map(component =>
- `import __${component.name} from ${stringify(get_file(path_to_routes, component))};`),
- `import root from ${stringify(get_file(path_to_routes, manifest_data.root))};`,
+ manifest_data.server_routes.map((route, i) =>
+ `import * as route_${i} from ${stringify(posixify(`${path_to_routes}/${route.file}`))};`),
+ manifest_data.components.map((component, i) =>
+ `import component_${i}${component.has_preload ? `, { preload as preload_${i} }` : ''} from ${stringify(get_file(path_to_routes, component))};`),
+ `import root${manifest_data.root.has_preload ? `, { preload as root_preload }` : ''} from ${stringify(get_file(path_to_routes, manifest_data.root))};`,
`import error from ${stringify(posixify(`${path_to_routes}/_error.html`))};`
);
+ const component_lookup: Record = {};
+ manifest_data.components.forEach((component, i) => {
+ component_lookup[component.name] = i;
+ });
+
let code = `
+ `.replace(/^\t\t/gm, '').trim();
+
+ const build_dir = posixify(path.relative(cwd, dest));
+ const src_dir = posixify(path.relative(cwd, src));
+
+ return `
+ // This file is generated by Sapper — do not edit it!
${imports.join('\n')}
const d = decodeURIComponent;
export const manifest = {
server_routes: [
- ${manifest_data.server_routes.map(route => `{
+ ${manifest_data.server_routes.map((route, i) => `{
// ${route.file}
pattern: ${route.pattern},
- handlers: __${route.name},
+ handlers: route_${i},
params: ${route.params.length > 0
? `match => ({ ${route.params.map((param, i) => `${param}: d(match[${i + 1}])`).join(', ')} })`
: `() => ({})`}
@@ -205,8 +202,9 @@ function generate_server(
const props = [
`name: "${part.component.name}"`,
`file: ${stringify(part.component.file)}`,
- `component: __${part.component.name}`
- ];
+ `component: component_${component_lookup[part.component.name]}`,
+ part.component.has_preload && `preload: preload_${component_lookup[part.component.name]}`
+ ].filter(Boolean);
if (part.params.length > 0) {
const params = part.params.map((param, i) => `${param}: d(match[${i + 1}])`);
@@ -220,12 +218,16 @@ function generate_server(
],
root,
-
+ root_preload${manifest_data.root.has_preload ? '' : `: () => {}`},
error
- };`.replace(/^\t\t/gm, '').trim();
+ };
- const build_dir = posixify(path.relative(cwd, dest));
- const src_dir = posixify(path.relative(cwd, src));
+ export const build_dir = ${JSON.stringify(build_dir)};
+
+ export const src_dir = ${JSON.stringify(src_dir)};
+
+ export const dev = ${dev ? 'true' : 'false'};
+ `.replace(/^\t{2}/gm, '').trim();
return `// This file is generated by Sapper — do not edit it!\n` + template
.replace('__BUILD__DIR__', JSON.stringify(build_dir))
@@ -235,9 +237,6 @@ function generate_server(
}
function get_file(path_to_routes: string, component: PageComponent) {
- if (component.default) {
- return `./_layout.html`;
- }
-
+ if (component.default) return `./layout.html`;
return posixify(`${path_to_routes}/${component.file}`);
}
diff --git a/src/interfaces.ts b/src/interfaces.ts
index 77bc68193..50dc6ab2c 100644
--- a/src/interfaces.ts
+++ b/src/interfaces.ts
@@ -19,14 +19,17 @@ export type Template = {
stream: (req, res, data: Record>) => void;
};
-export type Store = {
- get: () => any;
+export type WritableStore = {
+ set: (value: T) => void;
+ update: (fn: (value: T) => T) => void;
+ subscribe: (fn: (T: any) => void) => () => void;
};
export type PageComponent = {
default?: boolean;
name: string;
file: string;
+ has_preload: boolean;
};
export type Page = {
diff --git a/src/types.d.ts b/src/types.d.ts
new file mode 100644
index 000000000..89c441840
--- /dev/null
+++ b/src/types.d.ts
@@ -0,0 +1 @@
+declare module 'svelte/compiler';
\ No newline at end of file
diff --git a/templates/src/client/app.ts b/templates/src/client/app.ts
deleted file mode 100644
index 30ba25e1d..000000000
--- a/templates/src/client/app.ts
+++ /dev/null
@@ -1,395 +0,0 @@
-import RootComponent from '__ROOT__';
-import ErrorComponent from '__ERROR__';
-import {
- Target,
- ScrollPosition,
- Component,
- Redirect,
- ComponentLoader,
- ComponentConstructor,
- RootProps,
- Page
-} from './types';
-import goto from './goto';
-
-const ignore = __IGNORE__;
-export const components: ComponentLoader[] = __COMPONENTS__;
-export const pages: Page[] = __PAGES__;
-
-let ready = false;
-let root_component: Component;
-let segments: string[] = [];
-let current_token: {};
-let root_preload: Promise;
-let root_data: any;
-
-const root_props: RootProps = {
- path: null,
- params: null,
- query: null,
- child: {
- segment: null,
- component: null,
- props: {}
- }
-};
-
-export let prefetching: {
- href: string;
- promise: Promise<{ redirect?: Redirect, data?: any, nullable_depth?: number, new_segments?: any }>;
-} = null;
-export function set_prefetching(href, promise) {
- prefetching = { href, promise };
-}
-
-export let store;
-export function set_store(fn) {
- store = fn(initial_data.store);
-}
-
-export let target: Node;
-export function set_target(element) {
- target = element;
-}
-
-export let uid = 1;
-export function set_uid(n) {
- uid = n;
-}
-
-export let cid: number;
-export function set_cid(n) {
- cid = n;
-}
-
-export const initial_data = typeof __SAPPER__ !== 'undefined' && __SAPPER__;
-
-const _history = typeof history !== 'undefined' ? history : {
- pushState: (state: any, title: string, href: string) => {},
- replaceState: (state: any, title: string, href: string) => {},
- scrollRestoration: ''
-};
-export { _history as history };
-
-export const scroll_history: Record = {};
-
-export function select_route(url: URL): Target {
- if (url.origin !== location.origin) return null;
- if (!url.pathname.startsWith(initial_data.baseUrl)) return null;
-
- const path = url.pathname.slice(initial_data.baseUrl.length);
-
- // avoid accidental clashes between server routes and pages
- if (ignore.some(pattern => pattern.test(path))) return;
-
- for (let i = 0; i < pages.length; i += 1) {
- const page = pages[i];
-
- const match = page.pattern.exec(path);
- if (match) {
- const query: Record = Object.create(null);
- if (url.search.length > 0) {
- url.search.slice(1).split('&').forEach(searchParam => {
- let [, key, value] = /([^=]*)(?:=(.*))?/.exec(decodeURIComponent(searchParam));
- value = (value || '').replace(/\+/g, ' ');
- if (typeof query[key] === 'string') query[key] = [query[key]];
- if (typeof query[key] === 'object') query[key].push(value);
- else query[key] = value;
- });
- }
- return { url, path, page, match, query };
- }
- }
-}
-
-export function scroll_state() {
- return {
- x: pageXOffset,
- y: pageYOffset
- };
-}
-
-export function navigate(target: Target, id: number, noscroll?: boolean, hash?: string): Promise {
- let scroll: ScrollPosition;
- if (id) {
- // popstate or initial navigation
- cid = id;
- } else {
- const current_scroll = scroll_state();
-
- // clicked on a link. preserve scroll state
- scroll_history[cid] = current_scroll;
-
- id = cid = ++uid;
- scroll_history[cid] = noscroll ? current_scroll : { x: 0, y: 0 };
- }
-
- cid = id;
-
- if (root_component) {
- root_component.set({ preloading: true });
- }
- const loaded = prefetching && prefetching.href === target.url.href ?
- prefetching.promise :
- prepare_page(target);
-
- prefetching = null;
-
- const token = current_token = {};
-
- return loaded.then(({ redirect, data, nullable_depth, new_segments }) => {
- if (redirect) {
- return goto(redirect.location, { replaceState: true });
- }
- if (new_segments) {
- segments = new_segments;
- }
- render(data, nullable_depth, scroll_history[id], noscroll, hash, token);
- if (document.activeElement) document.activeElement.blur();
- });
-}
-
-function render(data: any, nullable_depth: number, scroll: ScrollPosition, noscroll: boolean, hash: string, token: {}) {
- if (current_token !== token) return;
-
- if (root_component) {
- // first, clear out highest-level root component
- let level = data.child;
- for (let i = 0; i < nullable_depth; i += 1) {
- if (i === nullable_depth) break;
- level = level.props.child;
- }
-
- const { component } = level;
- level.component = null;
- root_component.set({ child: data.child });
-
- // then render new stuff
- level.component = component;
- root_component.set(data);
- } else {
- // first load — remove SSR'd contents
- const start = document.querySelector('#sapper-head-start');
- const end = document.querySelector('#sapper-head-end');
-
- if (start && end) {
- while (start.nextSibling !== end) detach(start.nextSibling);
- detach(start);
- detach(end);
- }
-
- Object.assign(data, root_data);
-
- root_component = new RootComponent({
- target,
- data,
- store,
- hydrate: true
- });
- }
-
- if (!noscroll) {
- if (hash) {
- // scroll is an element id (from a hash), we need to compute y.
- const deep_linked = document.querySelector(hash);
- if (deep_linked) {
- scroll = {
- x: 0,
- y: deep_linked.getBoundingClientRect().top
- };
- }
- }
-
- scroll_history[cid] = scroll;
- if (scroll) scrollTo(scroll.x, scroll.y);
- }
-
- Object.assign(root_props, data);
- ready = true;
-}
-
-export function prepare_page(target: Target): Promise<{
- redirect?: Redirect;
- data?: any;
- nullable_depth?: number;
-}> {
- const { page, path, query } = target;
- const new_segments = path.split('/').filter(Boolean);
- let changed_from = 0;
-
- while (
- segments[changed_from] &&
- new_segments[changed_from] &&
- segments[changed_from] === new_segments[changed_from]
- ) changed_from += 1;
-
- if (changed_from === new_segments.length) {
- changed_from -= 1;
- }
-
- let redirect: Redirect = null;
- let error: { statusCode: number, message: Error | string } = null;
-
- const preload_context = {
- store,
- fetch: (url: string, opts?: any) => fetch(url, opts),
- redirect: (statusCode: number, location: string) => {
- if (redirect && (redirect.statusCode !== statusCode || redirect.location !== location)) {
- throw new Error(`Conflicting redirects`);
- }
- redirect = { statusCode, location };
- },
- error: (statusCode: number, message: Error | string) => {
- error = { statusCode, message };
- }
- };
-
- if (!root_preload) {
- root_preload = RootComponent.preload
- ? initial_data.preloaded[0] || RootComponent.preload.call(preload_context, {
- path,
- query,
- params: {}
- })
- : {};
- }
-
- return Promise.all(page.parts.map((part, i) => {
- if (i < changed_from) return null;
- if (!part) return null;
-
- return load_component(components[part.i]).then(Component => {
- const req = {
- path,
- query,
- params: part.params ? part.params(target.match) : {}
- };
-
- let preloaded;
- if (ready || !initial_data.preloaded[i + 1]) {
- preloaded = Component.preload
- ? Component.preload.call(preload_context, req)
- : {};
- } else {
- preloaded = initial_data.preloaded[i + 1];
- }
-
- return Promise.resolve(preloaded).then(preloaded => {
- return { Component, preloaded };
- });
- });
- })).catch(err => {
- error = { statusCode: 500, message: err };
- return [];
- }).then(results => {
- if (root_data) {
- return results;
- } else {
- return Promise.resolve(root_preload).then(value => {
- root_data = value;
- return results;
- });
- }
- }).then(results => {
- if (redirect) {
- return { redirect, new_segments };
- }
-
- const get_params = page.parts[page.parts.length - 1].params || (() => ({}));
- const params = get_params(target.match);
-
- if (error) {
- const props = {
- path,
- query,
- params,
- error: typeof error.message === 'string' ? new Error(error.message) : error.message,
- status: error.statusCode
- };
-
- return {
- new_segments,
- data: Object.assign({}, props, {
- preloading: false,
- child: {
- component: ErrorComponent,
- props
- }
- })
- };
- }
-
- const props = { path, query, error: null, status: null };
- const data = {
- path,
- preloading: false,
- child: Object.assign({}, root_props.child, {
- segment: new_segments[0]
- })
- };
- if (changed(query, root_props.query)) data.query = query;
- if (changed(params, root_props.params)) data.params = params;
-
- let level = data.child;
- let nullable_depth = 0;
-
- for (let i = 0; i < page.parts.length; i += 1) {
- const part = page.parts[i];
- if (!part) continue;
-
- const get_params = part.params || (() => ({}));
-
- if (i < changed_from) {
- level.props.path = path;
- level.props.query = query;
- level.props.child = Object.assign({}, level.props.child);
-
- nullable_depth += 1;
- } else {
- level.component = results[i].Component;
- level.props = Object.assign({}, level.props, props, {
- params: get_params(target.match),
- }, results[i].preloaded);
-
- level.props.child = {};
- }
-
- level = level.props.child;
- level.segment = new_segments[i + 1];
- }
-
- return { data, nullable_depth, new_segments };
- });
-}
-
-function load_css(chunk: string) {
- const href = `client/${chunk}`;
- if (document.querySelector(`link[href="${href}"]`)) return;
-
- return new Promise((fulfil, reject) => {
- const link = document.createElement('link');
- link.rel = 'stylesheet';
- link.href = href;
-
- link.onload = () => fulfil();
- link.onerror = reject;
-
- document.head.appendChild(link);
- });
-}
-
-export function load_component(component: ComponentLoader): Promise {
- // TODO this is temporary — once placeholders are
- // always rewritten, scratch the ternary
- const promises: Array> = (typeof component.css === 'string' ? [] : component.css.map(load_css));
- promises.unshift(component.js());
- return Promise.all(promises).then(values => values[0].default);
-}
-
-function detach(node: Node) {
- node.parentNode.removeChild(node);
-}
-
-function changed(a: Record, b: Record) {
- return JSON.stringify(a) !== JSON.stringify(b);
-}
diff --git a/templates/src/client/index.ts b/templates/src/client/index.ts
deleted file mode 100644
index f171109b1..000000000
--- a/templates/src/client/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export { default as start } from './start/index';
-export { default as goto } from './goto/index';
-export { default as prefetch } from './prefetch/index';
-export { default as prefetchRoutes } from './prefetchRoutes/index';
\ No newline at end of file
diff --git a/templates/src/client/prefetch/index.ts b/templates/src/client/prefetch/index.ts
deleted file mode 100644
index cd22c63fd..000000000
--- a/templates/src/client/prefetch/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { select_route, prefetching, set_prefetching, prepare_page } from '../app';
-import { Target } from '../types';
-
-export default function prefetch(href: string) {
- const target: Target = select_route(new URL(href, document.baseURI));
-
- if (target) {
- if (!prefetching || href !== prefetching.href) {
- set_prefetching(href, prepare_page(target));
- }
-
- return prefetching.promise;
- }
-}
\ No newline at end of file
diff --git a/templates/src/server/placeholders.ts b/templates/src/server/placeholders.ts
deleted file mode 100644
index b95b5ead7..000000000
--- a/templates/src/server/placeholders.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Manifest } from './types';
-
-export const manifest: Manifest = __MANIFEST__;
-
-export const build_dir = __BUILD__DIR__;
-
-export const src_dir = __SRC__DIR__;
-
-export const dev = __DEV__;
-
-export const IGNORE = '__SAPPER__IGNORE__';
\ No newline at end of file
diff --git a/test/apps/AppRunner.ts b/test/apps/AppRunner.ts
index 84dd6b627..0a3d51b30 100644
--- a/test/apps/AppRunner.ts
+++ b/test/apps/AppRunner.ts
@@ -1,5 +1,5 @@
import * as path from 'path';
-import * as puppeteer from 'puppeteer';
+import puppeteer from 'puppeteer';
import * as ports from 'port-authority';
import { fork, ChildProcess } from 'child_process';
@@ -64,11 +64,11 @@ export class AppRunner {
base: `http://localhost:${this.port}`,
// helpers
- start: () => this.page.evaluate(() => start()),
- prefetchRoutes: () => this.page.evaluate(() => prefetchRoutes()),
- prefetch: (href: string) => this.page.evaluate((href: string) => prefetch(href), href),
- goto: (href: string) => this.page.evaluate((href: string) => goto(href), href),
- title: () => this.page.$eval('h1', node => node.textContent)
+ start: () => this.page.evaluate(() => start()).then(() => void 0),
+ prefetchRoutes: () => this.page.evaluate(() => prefetchRoutes()).then(() => void 0),
+ prefetch: (href: string) => this.page.evaluate((href: string) => prefetch(href), href).then(() => void 0),
+ goto: (href: string) => this.page.evaluate((href: string) => goto(href), href).then(() => void 0),
+ title: () => this.page.$eval('h1', node => node.textContent).then(serializable => String(serializable))
};
}
diff --git a/test/apps/basics/rollup.config.js b/test/apps/basics/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/basics/rollup.config.js
+++ b/test/apps/basics/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/basics/src/client.js b/test/apps/basics/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/basics/src/client.js
+++ b/test/apps/basics/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/basics/src/routes/[slug].html b/test/apps/basics/src/routes/[slug].html
index ade66ded2..e31f6d9fd 100644
--- a/test/apps/basics/src/routes/[slug].html
+++ b/test/apps/basics/src/routes/[slug].html
@@ -1 +1,5 @@
-{params.slug.toUpperCase()}
\ No newline at end of file
+
+
+{$page.params.slug.toUpperCase()}
\ No newline at end of file
diff --git a/test/apps/basics/src/routes/b/index.html b/test/apps/basics/src/routes/b/index.html
index d93079da8..8b1cfa683 100644
--- a/test/apps/basics/src/routes/b/index.html
+++ b/test/apps/basics/src/routes/b/index.html
@@ -1,11 +1,13 @@
-{letter}
+
\ No newline at end of file
+ export let letter;
+
+
+{letter}
\ No newline at end of file
diff --git a/test/apps/basics/src/routes/delete-test/index.html b/test/apps/basics/src/routes/delete-test/index.html
index a5280cb7c..e8a2b6e97 100644
--- a/test/apps/basics/src/routes/delete-test/index.html
+++ b/test/apps/basics/src/routes/delete-test/index.html
@@ -1,19 +1,17 @@
-delete
-
- methods: {
- del() {
- fetch(`delete-test/42.json`, { method: 'DELETE' })
- .then(r => r.json())
- .then(data => {
- window.deleted = data;
- });
- }
- }
- };
-
\ No newline at end of file
+delete
\ No newline at end of file
diff --git a/test/apps/basics/src/routes/echo-query/index.html b/test/apps/basics/src/routes/echo-query/index.html
index aa09b3549..614bb4d31 100644
--- a/test/apps/basics/src/routes/echo-query/index.html
+++ b/test/apps/basics/src/routes/echo-query/index.html
@@ -1 +1,5 @@
-{JSON.stringify(query)}
\ No newline at end of file
+
+
+{JSON.stringify($page.query)}
\ No newline at end of file
diff --git a/test/apps/basics/src/routes/unsafe-replacement.html b/test/apps/basics/src/routes/unsafe-replacement.html
index 98c654fec..49fb001c0 100644
--- a/test/apps/basics/src/routes/unsafe-replacement.html
+++ b/test/apps/basics/src/routes/unsafe-replacement.html
@@ -1,9 +1,7 @@
-$&
+
-
\ No newline at end of file
+$&
\ No newline at end of file
diff --git a/test/apps/basics/src/server.js b/test/apps/basics/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/basics/src/server.js
+++ b/test/apps/basics/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/basics/src/service-worker.js b/test/apps/basics/src/service-worker.js
index 9d2ac9db8..c80a8f4a4 100644
--- a/test/apps/basics/src/service-worker.js
+++ b/test/apps/basics/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
-// `shell` is an array of all the files generated by webpack,
-// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+// `app.shell` is an array of all the files generated by webpack,
+// `app.files` is an array of everything in the `static` directory
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -52,7 +52,6 @@ self.addEventListener('fetch', event => {
// which Sapper has generated for you. It's not right for every
// app, but if it's right for yours then uncomment this section
/*
- if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) {
event.respondWith(caches.match('/index.html'));
return;
}
@@ -65,7 +64,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/basics/test.ts b/test/apps/basics/test.ts
index f7e1ac97c..c2d28d3bd 100644
--- a/test/apps/basics/test.ts
+++ b/test/apps/basics/test.ts
@@ -20,19 +20,18 @@ describe('basics', function() {
let prefetchRoutes: () => Promise;
let prefetch: (href: string) => Promise;
let goto: (href: string) => Promise;
+ let title: () => Promise;
// hooks
before(async () => {
await build({ cwd: __dirname });
runner = new AppRunner(__dirname, '__sapper__/build/server/server.js');
- ({ base, page, start, prefetchRoutes, prefetch, goto } = await runner.start());
+ ({ base, page, start, prefetchRoutes, prefetch, goto, title } = await runner.start());
});
after(() => runner.end());
- const title = () => page.$eval('h1', node => node.textContent);
-
it('serves /', async () => {
await page.goto(base);
@@ -262,7 +261,7 @@ describe('basics', function() {
await page.goto(`${base}/unsafe-replacement`);
await start();
- const html = await page.evaluate(() => document.body.innerHTML);
+ const html = String(await page.evaluate(() => document.body.innerHTML));
assert.equal(html.indexOf('%sapper'), -1);
});
});
\ No newline at end of file
diff --git a/test/apps/credentials/rollup.config.js b/test/apps/credentials/rollup.config.js
index 045746e5e..2047c21af 100644
--- a/test/apps/credentials/rollup.config.js
+++ b/test/apps/credentials/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka', 'cookie'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka', 'cookie']
},
serviceworker: {
diff --git a/test/apps/credentials/src/client.js b/test/apps/credentials/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/credentials/src/client.js
+++ b/test/apps/credentials/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/credentials/src/routes/credentials/index.html b/test/apps/credentials/src/routes/credentials/index.html
index 688ece68e..04a19eea6 100644
--- a/test/apps/credentials/src/routes/credentials/index.html
+++ b/test/apps/credentials/src/routes/credentials/index.html
@@ -1,11 +1,13 @@
-{message}
+
\ No newline at end of file
+ export let message;
+
+
+{message}
\ No newline at end of file
diff --git a/test/apps/credentials/src/server.js b/test/apps/credentials/src/server.js
index 2761f50b4..951243ea8 100644
--- a/test/apps/credentials/src/server.js
+++ b/test/apps/credentials/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/credentials/src/service-worker.js b/test/apps/credentials/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/credentials/src/service-worker.js
+++ b/test/apps/credentials/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/css/rollup.config.js b/test/apps/css/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/css/rollup.config.js
+++ b/test/apps/css/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/css/src/client.js b/test/apps/css/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/css/src/client.js
+++ b/test/apps/css/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/css/src/routes/bar.html b/test/apps/css/src/routes/bar.html
index 876ee63df..d63d06937 100644
--- a/test/apps/css/src/routes/bar.html
+++ b/test/apps/css/src/routes/bar.html
@@ -1,11 +1,13 @@
-
-
\ No newline at end of file
+ import { onMount } from 'svelte';
+
+ export let Title;
+
+ onMount(() => {
+ import('./_components/Title.html').then(mod => {
+ Title = mod.default;
+ });
+ });
+
+
+
\ No newline at end of file
diff --git a/test/apps/css/src/server.js b/test/apps/css/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/css/src/server.js
+++ b/test/apps/css/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/css/src/service-worker.js b/test/apps/css/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/css/src/service-worker.js
+++ b/test/apps/css/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/encoding/rollup.config.js b/test/apps/encoding/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/encoding/rollup.config.js
+++ b/test/apps/encoding/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/encoding/src/client.js b/test/apps/encoding/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/encoding/src/client.js
+++ b/test/apps/encoding/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/encoding/src/routes/echo/page/[slug].html b/test/apps/encoding/src/routes/echo/page/[slug].html
index 2cdc03d9f..e2c9491b2 100644
--- a/test/apps/encoding/src/routes/echo/page/[slug].html
+++ b/test/apps/encoding/src/routes/echo/page/[slug].html
@@ -1,11 +1,14 @@
-{slug} {JSON.stringify(query)}
+
\ No newline at end of file
+ import { page } from '@sapper/app';
+ export let slug;
+
+
+{slug} {JSON.stringify($page.query)}
\ No newline at end of file
diff --git "a/test/apps/encoding/src/routes/f\303\274nke.html" "b/test/apps/encoding/src/routes/f\303\274nke.html"
index e1fba6c51..dbff62e16 100644
--- "a/test/apps/encoding/src/routes/f\303\274nke.html"
+++ "b/test/apps/encoding/src/routes/f\303\274nke.html"
@@ -1,11 +1,13 @@
-{phrase}
+
\ No newline at end of file
+ export let phrase;
+
+
+{phrase}
\ No newline at end of file
diff --git a/test/apps/encoding/src/server.js b/test/apps/encoding/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/encoding/src/server.js
+++ b/test/apps/encoding/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/encoding/src/service-worker.js b/test/apps/encoding/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/encoding/src/service-worker.js
+++ b/test/apps/encoding/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/errors/rollup.config.js b/test/apps/errors/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/errors/rollup.config.js
+++ b/test/apps/errors/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/errors/src/client.js b/test/apps/errors/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/errors/src/client.js
+++ b/test/apps/errors/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/errors/src/routes/blog/[slug].html b/test/apps/errors/src/routes/blog/[slug].html
index 8a304d0d8..1fe2daab2 100644
--- a/test/apps/errors/src/routes/blog/[slug].html
+++ b/test/apps/errors/src/routes/blog/[slug].html
@@ -1,19 +1,21 @@
-{post.title}
+
\ No newline at end of file
+ });
+ }
+
+
+
+
+{post.title}
\ No newline at end of file
diff --git a/test/apps/errors/src/routes/enhance-your-calm.html b/test/apps/errors/src/routes/enhance-your-calm.html
index 398584ed8..799755bfb 100644
--- a/test/apps/errors/src/routes/enhance-your-calm.html
+++ b/test/apps/errors/src/routes/enhance-your-calm.html
@@ -1,7 +1,5 @@
-
\ No newline at end of file
diff --git a/test/apps/errors/src/routes/throw.html b/test/apps/errors/src/routes/throw.html
index 16b413190..4e4cc9a00 100644
--- a/test/apps/errors/src/routes/throw.html
+++ b/test/apps/errors/src/routes/throw.html
@@ -1,7 +1,5 @@
-
\ No newline at end of file
diff --git a/test/apps/errors/src/server.js b/test/apps/errors/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/errors/src/server.js
+++ b/test/apps/errors/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/errors/src/service-worker.js b/test/apps/errors/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/errors/src/service-worker.js
+++ b/test/apps/errors/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/export/rollup.config.js b/test/apps/export/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/export/rollup.config.js
+++ b/test/apps/export/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/export/src/client.js b/test/apps/export/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/export/src/client.js
+++ b/test/apps/export/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/export/src/routes/blog/[slug].html b/test/apps/export/src/routes/blog/[slug].html
index f44adaaaf..2febdf20d 100644
--- a/test/apps/export/src/routes/blog/[slug].html
+++ b/test/apps/export/src/routes/blog/[slug].html
@@ -1,11 +1,13 @@
-{post.title}
+
\ No newline at end of file
+ export let post;
+
+
+{post.title}
\ No newline at end of file
diff --git a/test/apps/export/src/routes/blog/index.html b/test/apps/export/src/routes/blog/index.html
index 2eea68136..d12e4321d 100644
--- a/test/apps/export/src/routes/blog/index.html
+++ b/test/apps/export/src/routes/blog/index.html
@@ -1,15 +1,17 @@
+
+
+
+
blog
{#each posts as post}
{post.title}
-{/each}
-
-
\ No newline at end of file
+{/each}
\ No newline at end of file
diff --git a/test/apps/export/src/server.js b/test/apps/export/src/server.js
index d5a668b68..2c6932da6 100644
--- a/test/apps/export/src/server.js
+++ b/test/apps/export/src/server.js
@@ -1,6 +1,6 @@
import sirv from 'sirv';
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === 'development';
diff --git a/test/apps/export/src/service-worker.js b/test/apps/export/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/export/src/service-worker.js
+++ b/test/apps/export/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/ignore/rollup.config.js b/test/apps/ignore/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/ignore/rollup.config.js
+++ b/test/apps/ignore/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/ignore/src/client.js b/test/apps/ignore/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/ignore/src/client.js
+++ b/test/apps/ignore/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/ignore/src/routes/b/index.html b/test/apps/ignore/src/routes/b/index.html
index d93079da8..8b1cfa683 100644
--- a/test/apps/ignore/src/routes/b/index.html
+++ b/test/apps/ignore/src/routes/b/index.html
@@ -1,11 +1,13 @@
-{letter}
+
\ No newline at end of file
+ export let letter;
+
+
+{letter}
\ No newline at end of file
diff --git a/test/apps/ignore/src/server.js b/test/apps/ignore/src/server.js
index f987e4a2e..4a66815f6 100644
--- a/test/apps/ignore/src/server.js
+++ b/test/apps/ignore/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/ignore/src/service-worker.js b/test/apps/ignore/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/ignore/src/service-worker.js
+++ b/test/apps/ignore/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/layout/rollup.config.js b/test/apps/layout/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/layout/rollup.config.js
+++ b/test/apps/layout/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/layout/src/client.js b/test/apps/layout/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/layout/src/client.js
+++ b/test/apps/layout/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/layout/src/routes/[x]/[y]/[z].html b/test/apps/layout/src/routes/[x]/[y]/[z].html
index 018f0011c..38c557539 100644
--- a/test/apps/layout/src/routes/[x]/[y]/[z].html
+++ b/test/apps/layout/src/routes/[x]/[y]/[z].html
@@ -1,20 +1,18 @@
-z: {segment} {count}
-click me
+
- oncreate() {
- this.set({
- segment: this.get().params.z
- });
- }
- };
-
\ No newline at end of file
+z: {$page.params.z} {count}
+click me
\ No newline at end of file
diff --git a/test/apps/layout/src/routes/[x]/[y]/_layout.html b/test/apps/layout/src/routes/[x]/[y]/_layout.html
index 7e632a3d6..401f654a7 100644
--- a/test/apps/layout/src/routes/[x]/[y]/_layout.html
+++ b/test/apps/layout/src/routes/[x]/[y]/_layout.html
@@ -1,22 +1,21 @@
-y: {segment} {count}
-
+
+
+y: {$page.params.y} {count}
+
- oncreate() {
- this.set({
- segment: this.get().params.y
- });
- }
- };
-
\ No newline at end of file
+child segment: {child.segment}
\ No newline at end of file
diff --git a/test/apps/layout/src/server.js b/test/apps/layout/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/layout/src/server.js
+++ b/test/apps/layout/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/layout/src/service-worker.js b/test/apps/layout/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/layout/src/service-worker.js
+++ b/test/apps/layout/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/layout/test.ts b/test/apps/layout/test.ts
index 1cadbe17a..c08843285 100644
--- a/test/apps/layout/test.ts
+++ b/test/apps/layout/test.ts
@@ -26,10 +26,18 @@ describe('layout', function() {
it('only recreates components when necessary', async () => {
await page.goto(`${base}/foo/bar/baz`);
- await start();
- const text1 = await page.evaluate(() => document.querySelector('#sapper').textContent);
- assert.deepEqual(text1.split('\n').filter(Boolean), [
+ const text1 = String(await page.evaluate(() => document.querySelector('#sapper').textContent));
+ assert.deepEqual(text1.split('\n').filter(Boolean).map(str => str.trim()), [
+ 'y: bar 1',
+ 'z: baz 1',
+ 'click me',
+ 'child segment: baz'
+ ]);
+
+ await start();
+ const text2 = String(await page.evaluate(() => document.querySelector('#sapper').textContent));
+ assert.deepEqual(text2.split('\n').filter(Boolean).map(str => str.trim()), [
'y: bar 1',
'z: baz 1',
'click me',
@@ -39,8 +47,8 @@ describe('layout', function() {
await page.click('[href="foo/bar/qux"]');
await wait(50);
- const text2 = await page.evaluate(() => document.querySelector('#sapper').textContent);
- assert.deepEqual(text2.split('\n').filter(Boolean), [
+ const text3 = String(await page.evaluate(() => document.querySelector('#sapper').textContent));
+ assert.deepEqual(text3.split('\n').filter(Boolean).map(str => str.trim()), [
'y: bar 1',
'z: qux 2',
'click me',
diff --git a/test/apps/preloading/rollup.config.js b/test/apps/preloading/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/preloading/rollup.config.js
+++ b/test/apps/preloading/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/preloading/src/client.js b/test/apps/preloading/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/preloading/src/client.js
+++ b/test/apps/preloading/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/preloading/src/routes/_layout.html b/test/apps/preloading/src/routes/_layout.html
index 4e390979a..09606e205 100644
--- a/test/apps/preloading/src/routes/_layout.html
+++ b/test/apps/preloading/src/routes/_layout.html
@@ -1,15 +1,20 @@
-{#if preloading}
+
+
+
+
+{#if $preloading}
{/if}
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/test/apps/preloading/src/routes/prefetch/[slug]/index.html b/test/apps/preloading/src/routes/prefetch/[slug]/index.html
index d13188c74..6eebc4c80 100644
--- a/test/apps/preloading/src/routes/prefetch/[slug]/index.html
+++ b/test/apps/preloading/src/routes/prefetch/[slug]/index.html
@@ -1 +1,5 @@
-{params.slug}
+
+
+{$page.params.slug}
diff --git a/test/apps/preloading/src/routes/preload-values/custom-class.html b/test/apps/preloading/src/routes/preload-values/custom-class.html
index 44e94cb22..a4f04992f 100644
--- a/test/apps/preloading/src/routes/preload-values/custom-class.html
+++ b/test/apps/preloading/src/routes/preload-values/custom-class.html
@@ -1,17 +1,19 @@
-{foo.bar()}
+
- return {
- foo: new Foo()
- };
- }
- };
-
\ No newline at end of file
+{foo.bar()}
\ No newline at end of file
diff --git a/test/apps/preloading/src/routes/preload-values/set.html b/test/apps/preloading/src/routes/preload-values/set.html
index 43066c958..03a5b01a6 100644
--- a/test/apps/preloading/src/routes/preload-values/set.html
+++ b/test/apps/preloading/src/routes/preload-values/set.html
@@ -1,11 +1,13 @@
-{set.has('x')}
+
\ No newline at end of file
+ export let set;
+
+
+{set.has('x')}
\ No newline at end of file
diff --git a/test/apps/preloading/src/routes/slow-preload.html b/test/apps/preloading/src/routes/slow-preload.html
index 0dc35ca03..8312e4e0c 100644
--- a/test/apps/preloading/src/routes/slow-preload.html
+++ b/test/apps/preloading/src/routes/slow-preload.html
@@ -1,15 +1,13 @@
-This page should never render
+
-
\ No newline at end of file
+This page should never render
\ No newline at end of file
diff --git a/test/apps/preloading/src/server.js b/test/apps/preloading/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/preloading/src/server.js
+++ b/test/apps/preloading/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/preloading/src/service-worker.js b/test/apps/preloading/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/preloading/src/service-worker.js
+++ b/test/apps/preloading/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/preloading/test.ts b/test/apps/preloading/test.ts
index a38592d0f..d30a8d196 100644
--- a/test/apps/preloading/test.ts
+++ b/test/apps/preloading/test.ts
@@ -1,4 +1,3 @@
-import * as path from 'path';
import * as assert from 'assert';
import * as puppeteer from 'puppeteer';
import { build } from '../../../api';
@@ -17,19 +16,18 @@ describe('preloading', function() {
// helpers
let start: () => Promise;
let prefetchRoutes: () => Promise;
+ let title: () => Promise;
// hooks
before(async () => {
await build({ cwd: __dirname });
runner = new AppRunner(__dirname, '__sapper__/build/server/server.js');
- ({ base, page, start, prefetchRoutes } = await runner.start());
+ ({ base, page, start, prefetchRoutes, title } = await runner.start());
});
after(() => runner.end());
- const title = () => page.$eval('h1', node => node.textContent);
-
it('serializes Set objects returned from preload', async () => {
await page.goto(`${base}/preload-values/set`);
diff --git a/test/apps/redirects/rollup.config.js b/test/apps/redirects/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/redirects/rollup.config.js
+++ b/test/apps/redirects/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/redirects/src/client.js b/test/apps/redirects/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/redirects/src/client.js
+++ b/test/apps/redirects/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/redirects/src/routes/redirect-from.html b/test/apps/redirects/src/routes/redirect-from.html
index 8c419c526..2c0782855 100644
--- a/test/apps/redirects/src/routes/redirect-from.html
+++ b/test/apps/redirects/src/routes/redirect-from.html
@@ -1,9 +1,7 @@
-unredirected
+
-
\ No newline at end of file
+unredirected
\ No newline at end of file
diff --git a/test/apps/redirects/src/routes/redirect-to-external.html b/test/apps/redirects/src/routes/redirect-to-external.html
index fec2fee1c..bc713c127 100644
--- a/test/apps/redirects/src/routes/redirect-to-external.html
+++ b/test/apps/redirects/src/routes/redirect-to-external.html
@@ -1,9 +1,7 @@
-unredirected
+
-
\ No newline at end of file
+unredirected
\ No newline at end of file
diff --git a/test/apps/redirects/src/routes/redirect-to-root.html b/test/apps/redirects/src/routes/redirect-to-root.html
index 0fa438b2a..63460f157 100644
--- a/test/apps/redirects/src/routes/redirect-to-root.html
+++ b/test/apps/redirects/src/routes/redirect-to-root.html
@@ -1,9 +1,7 @@
-unredirected
+
-
\ No newline at end of file
+unredirected
\ No newline at end of file
diff --git a/test/apps/redirects/src/server.js b/test/apps/redirects/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/redirects/src/server.js
+++ b/test/apps/redirects/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/redirects/src/service-worker.js b/test/apps/redirects/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/redirects/src/service-worker.js
+++ b/test/apps/redirects/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/scroll/rollup.config.js b/test/apps/scroll/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/scroll/rollup.config.js
+++ b/test/apps/scroll/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/scroll/src/client.js b/test/apps/scroll/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/scroll/src/client.js
+++ b/test/apps/scroll/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/scroll/src/routes/another-tall-page.html b/test/apps/scroll/src/routes/another-tall-page.html
index d66879b36..a67395a3c 100644
--- a/test/apps/scroll/src/routes/another-tall-page.html
+++ b/test/apps/scroll/src/routes/another-tall-page.html
@@ -1,2 +1,4 @@
+Another tall page
+
element
\ No newline at end of file
diff --git a/test/apps/scroll/src/routes/tall-page.html b/test/apps/scroll/src/routes/tall-page.html
index 67db96769..2fdbd9dc8 100644
--- a/test/apps/scroll/src/routes/tall-page.html
+++ b/test/apps/scroll/src/routes/tall-page.html
@@ -1,3 +1,15 @@
+
+
+A tall page
+
scroll to foo
@@ -7,18 +19,4 @@
{#if barLink}
link
{/if}
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/test/apps/scroll/src/server.js b/test/apps/scroll/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/scroll/src/server.js
+++ b/test/apps/scroll/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/scroll/src/service-worker.js b/test/apps/scroll/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/scroll/src/service-worker.js
+++ b/test/apps/scroll/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/scroll/test.ts b/test/apps/scroll/test.ts
index cd9209ed5..11130ffd5 100644
--- a/test/apps/scroll/test.ts
+++ b/test/apps/scroll/test.ts
@@ -14,13 +14,14 @@ describe('scroll', function() {
// helpers
let start: () => Promise;
let prefetchRoutes: () => Promise;
+ let title: () => Promise;
// hooks
before(async () => {
await build({ cwd: __dirname });
runner = new AppRunner(__dirname, '__sapper__/build/server/server.js');
- ({ base, page, start, prefetchRoutes } = await runner.start());
+ ({ base, page, start, prefetchRoutes, title } = await runner.start());
});
after(() => runner.end());
@@ -30,7 +31,7 @@ describe('scroll', function() {
await start();
const scrollY = await page.evaluate(() => window.scrollY);
- assert.ok(scrollY > 0, scrollY);
+ assert.ok(scrollY > 0, String(scrollY));
});
it('scrolls to any deeplink if it was already active', async () => {
@@ -38,17 +39,17 @@ describe('scroll', function() {
await start();
let scrollY = await page.evaluate(() => window.scrollY);
- assert.ok(scrollY > 0, scrollY);
+ assert.ok(scrollY > 0, String(scrollY));
scrollY = await page.evaluate(() => {
window.scrollTo(0, 0)
return window.scrollY
});
- assert.ok(scrollY === 0, scrollY);
+ assert.ok(scrollY === 0, String(scrollY));
await page.click('[href="tall-page#foo"]');
scrollY = await page.evaluate(() => window.scrollY);
- assert.ok(scrollY > 0, scrollY);
+ assert.ok(scrollY > 0, String(scrollY));
});
it('resets scroll when a link is clicked', async () => {
@@ -85,6 +86,7 @@ describe('scroll', function() {
await page.click('[href="another-tall-page#bar"]');
await wait(50);
+ assert.equal(await title(), 'Another tall page');
const scrollY = await page.evaluate(() => window.scrollY);
assert.ok(scrollY > 0);
});
diff --git a/test/apps/store/rollup.config.js b/test/apps/session/rollup.config.js
similarity index 85%
rename from test/apps/store/rollup.config.js
rename to test/apps/session/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/store/rollup.config.js
+++ b/test/apps/session/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/session/src/client.js b/test/apps/session/src/client.js
new file mode 100644
index 000000000..6cce7e658
--- /dev/null
+++ b/test/apps/session/src/client.js
@@ -0,0 +1,9 @@
+import * as sapper from '@sapper/app';
+
+window.start = () => sapper.start({
+ target: document.querySelector('#sapper')
+});
+
+window.prefetchRoutes = () => sapper.prefetchRoutes();
+window.prefetch = href => sapper.prefetch(href);
+window.goto = href => sapper.goto(href);
\ No newline at end of file
diff --git a/test/apps/store/src/routes/_error.html b/test/apps/session/src/routes/_error.html
similarity index 100%
rename from test/apps/store/src/routes/_error.html
rename to test/apps/session/src/routes/_error.html
diff --git a/test/apps/session/src/routes/index.html b/test/apps/session/src/routes/index.html
new file mode 100644
index 000000000..0cc4b7267
--- /dev/null
+++ b/test/apps/session/src/routes/index.html
@@ -0,0 +1 @@
+Great success!
\ No newline at end of file
diff --git a/test/apps/session/src/routes/preloaded.html b/test/apps/session/src/routes/preloaded.html
new file mode 100644
index 000000000..6964d9819
--- /dev/null
+++ b/test/apps/session/src/routes/preloaded.html
@@ -0,0 +1,18 @@
+
+
+
+
+{title}
+
+
+ click me
+
\ No newline at end of file
diff --git a/test/apps/session/src/routes/session.html b/test/apps/session/src/routes/session.html
new file mode 100644
index 000000000..6501114de
--- /dev/null
+++ b/test/apps/session/src/routes/session.html
@@ -0,0 +1,10 @@
+
+
+{$session.title}
+
+
+ click me
+
\ No newline at end of file
diff --git a/test/apps/store/src/server.js b/test/apps/session/src/server.js
similarity index 52%
rename from test/apps/store/src/server.js
rename to test/apps/session/src/server.js
index c40e6900f..16d904e6d 100644
--- a/test/apps/store/src/server.js
+++ b/test/apps/session/src/server.js
@@ -1,6 +1,5 @@
import polka from 'polka';
-import { Store } from 'svelte/store.js';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
@@ -12,11 +11,9 @@ polka()
})
.use(
sapper.middleware({
- store: (req, res) => {
- return new Store({
- title: `${req.hello} ${res.locals.name}`
- });
- }
+ session: (req, res) => ({
+ title: `${req.hello} ${res.locals.name}`
+ })
})
)
.listen(PORT);
diff --git a/test/apps/store/src/service-worker.js b/test/apps/session/src/service-worker.js
similarity index 91%
rename from test/apps/store/src/service-worker.js
rename to test/apps/session/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/store/src/service-worker.js
+++ b/test/apps/session/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/store/src/template.html b/test/apps/session/src/template.html
similarity index 100%
rename from test/apps/store/src/template.html
rename to test/apps/session/src/template.html
diff --git a/test/apps/store/test.ts b/test/apps/session/test.ts
similarity index 51%
rename from test/apps/store/test.ts
rename to test/apps/session/test.ts
index a8eab1c10..3fd910f12 100644
--- a/test/apps/store/test.ts
+++ b/test/apps/session/test.ts
@@ -3,7 +3,7 @@ import * as puppeteer from 'puppeteer';
import { build } from '../../../api';
import { AppRunner } from '../AppRunner';
-describe('store', function() {
+describe('session', function() {
this.timeout(10000);
let runner: AppRunner;
@@ -12,25 +12,39 @@ describe('store', function() {
// helpers
let start: () => Promise;
+ let title: () => Promise;
// hooks
before(async () => {
await build({ cwd: __dirname });
runner = new AppRunner(__dirname, '__sapper__/build/server/server.js');
- ({ base, page, start } = await runner.start());
+ ({ base, page, start, title } = await runner.start());
});
after(() => runner.end());
- const title = () => page.$eval('h1', node => node.textContent);
+ it('renders session props', async () => {
+ await page.goto(`${base}/session`);
- it('renders store props', async () => {
- await page.goto(`${base}/store`);
+ assert.equal(await title(), 'hello world');
+
+ await start();
+ assert.equal(await title(), 'hello world');
+
+ await page.click('button');
+ assert.equal(await title(), 'changed');
+ });
+
+ it('preloads session props', async () => {
+ await page.goto(`${base}/preloaded`);
assert.equal(await title(), 'hello world');
await start();
assert.equal(await title(), 'hello world');
+
+ await page.click('button');
+ assert.equal(await title(), 'changed');
});
});
\ No newline at end of file
diff --git a/test/apps/store/src/client.js b/test/apps/store/src/client.js
deleted file mode 100644
index df664710d..000000000
--- a/test/apps/store/src/client.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Store } from 'svelte/store.js';
-import * as sapper from '../__sapper__/client.js';
-
-window.start = () => sapper.start({
- target: document.querySelector('#sapper'),
- store: data => new Store(data)
-});
-
-window.prefetchRoutes = () => sapper.prefetchRoutes();
-window.prefetch = href => sapper.prefetch(href);
-window.goto = href => sapper.goto(href);
\ No newline at end of file
diff --git a/test/apps/store/src/routes/index.html b/test/apps/store/src/routes/index.html
deleted file mode 100644
index 221c0f52a..000000000
--- a/test/apps/store/src/routes/index.html
+++ /dev/null
@@ -1,7 +0,0 @@
-Great success!
-
-a
-ok
-ok
-
-
\ No newline at end of file
diff --git a/test/apps/store/src/routes/store.html b/test/apps/store/src/routes/store.html
deleted file mode 100644
index 148147a1e..000000000
--- a/test/apps/store/src/routes/store.html
+++ /dev/null
@@ -1 +0,0 @@
-{$title}
\ No newline at end of file
diff --git a/test/apps/with-basepath/rollup.config.js b/test/apps/with-basepath/rollup.config.js
index 943b6765d..66d3e5913 100644
--- a/test/apps/with-basepath/rollup.config.js
+++ b/test/apps/with-basepath/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/with-basepath/src/client.js b/test/apps/with-basepath/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/with-basepath/src/client.js
+++ b/test/apps/with-basepath/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/with-basepath/src/server.js b/test/apps/with-basepath/src/server.js
index b187dad91..22da3e975 100644
--- a/test/apps/with-basepath/src/server.js
+++ b/test/apps/with-basepath/src/server.js
@@ -1,6 +1,6 @@
import sirv from 'sirv';
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === 'development';
diff --git a/test/apps/with-basepath/src/service-worker.js b/test/apps/with-basepath/src/service-worker.js
index 9d2ac9db8..8adb97a43 100644
--- a/test/apps/with-basepath/src/service-worker.js
+++ b/test/apps/with-basepath/src/service-worker.js
@@ -1,10 +1,10 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import * as sapper from '@sapper/service-worker';
-const ASSETS = `cache${timestamp}`;
+const ASSETS = `cache${sapper.timestamp}`;
// `shell` is an array of all the files generated by webpack,
// `files` is an array of everything in the `static` directory
-const to_cache = shell.concat(ASSETS);
+const to_cache = sapper.shell.concat(sapper.files);
const cached = new Set(to_cache);
self.addEventListener('install', event => {
@@ -65,7 +65,7 @@ self.addEventListener('fetch', event => {
// might prefer a cache-first approach to a network-first one.)
event.respondWith(
caches
- .open(`offline${timestamp}`)
+ .open(`offline${sapper.timestamp}`)
.then(async cache => {
try {
const response = await fetch(event.request);
diff --git a/test/apps/with-sourcemaps-webpack/src/client.js b/test/apps/with-sourcemaps-webpack/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/with-sourcemaps-webpack/src/client.js
+++ b/test/apps/with-sourcemaps-webpack/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/with-sourcemaps-webpack/src/server.js b/test/apps/with-sourcemaps-webpack/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/with-sourcemaps-webpack/src/server.js
+++ b/test/apps/with-sourcemaps-webpack/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/with-sourcemaps-webpack/src/service-worker.js b/test/apps/with-sourcemaps-webpack/src/service-worker.js
index 9d2ac9db8..67da6f025 100644
--- a/test/apps/with-sourcemaps-webpack/src/service-worker.js
+++ b/test/apps/with-sourcemaps-webpack/src/service-worker.js
@@ -1,4 +1,4 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import { timestamp, files, shell, routes } from '@sapper/service-worker';
const ASSETS = `cache${timestamp}`;
diff --git a/test/apps/with-sourcemaps-webpack/test.ts b/test/apps/with-sourcemaps-webpack/test.ts
index cb0a3ca38..802fa0509 100644
--- a/test/apps/with-sourcemaps-webpack/test.ts
+++ b/test/apps/with-sourcemaps-webpack/test.ts
@@ -1,34 +1,20 @@
-import * as puppeteer from 'puppeteer';
import { build } from '../../../api';
import * as assert from "assert";
-import { AppRunner } from '../AppRunner';
-import * as fs from "fs";
+import * as fs from 'fs';
import * as path from "path";
-describe('with-sourcemaps-webpack', function() {
+describe('with-sourcemaps', function() {
this.timeout(10000);
- let runner: AppRunner;
- let page: puppeteer.Page;
- let base: string;
-
- // helpers
- let start: () => Promise;
- let prefetchRoutes: () => Promise;
- let prefetch: (href: string) => Promise;
- let goto: (href: string) => Promise;
-
// hooks
before(async () => {
await build({ cwd: __dirname, bundler: 'webpack' });
-
- runner = new AppRunner(__dirname, '__sapper__/build/server/server.js');
- ({ base, page, start, prefetchRoutes, prefetch, goto } = await runner.start());
});
it('does not put sourcemap files in service worker shell', async () => {
- const serviceWorker = await import(`${__dirname}/__sapper__/service-worker.js`);
- const shell: string[] = serviceWorker.shell;
+ const service_worker_source = fs.readFileSync(`${__dirname}/src/node_modules/@sapper/service-worker.js`, 'utf-8');
+ const shell_source = /shell = (\[[\s\S]+?\])/.exec(service_worker_source)[1];
+ const shell = JSON.parse(shell_source);
assert.equal(shell.filter(_ => _.endsWith('.map')).length, 0,
'sourcemap files are not cached in SW');
@@ -37,7 +23,4 @@ describe('with-sourcemaps-webpack', function() {
const sourcemapFiles = fs.readdirSync(clientShellDir).filter(_ => _.endsWith('.map'));
assert.ok(sourcemapFiles.length > 0, 'sourcemap files exist');
});
-
- after(() => runner.end());
-
});
\ No newline at end of file
diff --git a/test/apps/with-sourcemaps-webpack/webpack.config.js b/test/apps/with-sourcemaps-webpack/webpack.config.js
index 40b612de7..eca656bab 100644
--- a/test/apps/with-sourcemaps-webpack/webpack.config.js
+++ b/test/apps/with-sourcemaps-webpack/webpack.config.js
@@ -9,7 +9,7 @@ module.exports = {
entry: config.client.entry(),
output: config.client.output(),
resolve: {
- extensions: ['.js', '.json', '.html'],
+ extensions: ['.mjs', '.js', '.json', '.html'],
mainFields: ['svelte', 'module', 'browser', 'main']
},
module: {
@@ -43,7 +43,7 @@ module.exports = {
output: config.server.output(),
target: 'node',
resolve: {
- extensions: ['.js', '.json', '.html'],
+ extensions: ['.mjs', '.js', '.json', '.html'],
mainFields: ['svelte', 'module', 'browser', 'main']
},
module: {
diff --git a/test/apps/with-sourcemaps/rollup.config.js b/test/apps/with-sourcemaps/rollup.config.js
index c057e2ead..c11f9a6c3 100644
--- a/test/apps/with-sourcemaps/rollup.config.js
+++ b/test/apps/with-sourcemaps/rollup.config.js
@@ -22,10 +22,7 @@ export default {
emitCss: true
}),
resolve()
- ],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ ]
},
server: {
@@ -44,10 +41,7 @@ export default {
preferBuiltins: true
})
],
- external: ['sirv', 'polka'],
-
- // temporary, pending Rollup 1.0
- experimentalCodeSplitting: true
+ external: ['sirv', 'polka']
},
serviceworker: {
diff --git a/test/apps/with-sourcemaps/src/client.js b/test/apps/with-sourcemaps/src/client.js
index 0865a4a18..6cce7e658 100644
--- a/test/apps/with-sourcemaps/src/client.js
+++ b/test/apps/with-sourcemaps/src/client.js
@@ -1,4 +1,4 @@
-import * as sapper from '../__sapper__/client.js';
+import * as sapper from '@sapper/app';
window.start = () => sapper.start({
target: document.querySelector('#sapper')
diff --git a/test/apps/with-sourcemaps/src/server.js b/test/apps/with-sourcemaps/src/server.js
index 0e7741ca1..7f090b869 100644
--- a/test/apps/with-sourcemaps/src/server.js
+++ b/test/apps/with-sourcemaps/src/server.js
@@ -1,5 +1,5 @@
import polka from 'polka';
-import * as sapper from '../__sapper__/server.js';
+import * as sapper from '@sapper/server';
const { PORT } = process.env;
diff --git a/test/apps/with-sourcemaps/src/service-worker.js b/test/apps/with-sourcemaps/src/service-worker.js
index 9d2ac9db8..67da6f025 100644
--- a/test/apps/with-sourcemaps/src/service-worker.js
+++ b/test/apps/with-sourcemaps/src/service-worker.js
@@ -1,4 +1,4 @@
-import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
+import { timestamp, files, shell, routes } from '@sapper/service-worker';
const ASSETS = `cache${timestamp}`;
diff --git a/test/apps/with-sourcemaps/test.ts b/test/apps/with-sourcemaps/test.ts
index 1b61c2827..2d0595811 100644
--- a/test/apps/with-sourcemaps/test.ts
+++ b/test/apps/with-sourcemaps/test.ts
@@ -1,34 +1,20 @@
-import * as puppeteer from 'puppeteer';
import { build } from '../../../api';
import * as assert from "assert";
-import { AppRunner } from '../AppRunner';
import * as fs from 'fs';
import * as path from "path";
describe('with-sourcemaps', function() {
this.timeout(10000);
- let runner: AppRunner;
- let page: puppeteer.Page;
- let base: string;
-
- // helpers
- let start: () => Promise;
- let prefetchRoutes: () => Promise;
- let prefetch: (href: string) => Promise;
- let goto: (href: string) => Promise;
-
// hooks
before(async () => {
await build({ cwd: __dirname });
-
- runner = new AppRunner(__dirname, '__sapper__/build/server/server.js');
- ({ base, page, start, prefetchRoutes, prefetch, goto } = await runner.start());
});
it('does not put sourcemap files in service worker shell', async () => {
- const serviceWorker = await import(`${__dirname}/__sapper__/service-worker.js`);
- const shell: string[] = serviceWorker.shell;
+ const service_worker_source = fs.readFileSync(`${__dirname}/src/node_modules/@sapper/service-worker.js`, 'utf-8');
+ const shell_source = /shell = (\[[\s\S]+?\])/.exec(service_worker_source)[1];
+ const shell = JSON.parse(shell_source);
assert.equal(shell.filter(_ => _.endsWith('.map')).length, 0,
'sourcemap files are not cached in SW');
@@ -37,7 +23,4 @@ describe('with-sourcemaps', function() {
const sourcemapFiles = fs.readdirSync(clientShellDir).filter(_ => _.endsWith('.map'));
assert.ok(sourcemapFiles.length > 0, 'sourcemap files exist');
});
-
- after(() => runner.end());
-
});
\ No newline at end of file