diff --git a/mocha.opts b/mocha.opts index c769c5c..8985f66 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 6ee03a2..e5494a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", @@ -3528,6 +3534,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": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -3748,7 +3760,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, @@ -3793,7 +3805,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -3821,7 +3833,7 @@ "dependencies": { "commander": { "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, @@ -3897,6 +3909,17 @@ "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.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", @@ -4014,6 +4037,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", @@ -4405,6 +4434,15 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pirates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", + "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -5156,7 +5194,7 @@ }, "rollup-pluginutils": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", "dev": true, "requires": { @@ -5166,6 +5204,16 @@ } } }, + "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": { + "rollup-pluginutils": "^2.3.0", + "sucrase": "3.x" + } + }, "rollup-plugin-svelte": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.0.1.tgz", @@ -5745,6 +5793,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", @@ -5841,6 +5909,24 @@ "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": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", diff --git a/package.json b/package.json index c25be2d..6e9e6c8 100644 --- a/package.json +++ b/package.json @@ -54,11 +54,13 @@ "rollup-plugin-node-resolve": "^4.0.0", "rollup-plugin-replace": "^2.1.0", "rollup-plugin-string": "^2.0.2", + "rollup-plugin-sucrase": "^2.1.0", "rollup-plugin-svelte": "^5.0.1", "rollup-plugin-typescript": "^1.0.0", "sade": "^1.4.2", "sander": "^0.6.0", "sirv": "^0.2.2", + "sucrase": "^3.9.5", "svelte": "^3.0.0-alpha26", "svelte-loader": "^2.12.0", "ts-node": "^8.0.2", diff --git a/rollup.config.js b/rollup.config.js index dcd8df9..da922b8 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,7 +12,7 @@ const external = [].concat( 'sapper/core.js' ); -function template(kind, external, target) { +function template(kind, external) { return { input: `templates/src/${kind}/index.ts`, output: { @@ -22,22 +22,23 @@ function template(kind, external, target) { }, external, plugins: [ - resolve(), + resolve({ + extensions: ['.js', '.ts'] + }), commonjs(), string({ include: '**/*.md' }), - typescript({ - typescript: require('typescript'), - target + sucrase({ + transforms: ['typescript'] }) ] }; } export default [ - template('app', ['__ROOT__', '__ERROR__', 'svelte', '@sapper/App.html'], 'ES2017'), - template('server', builtinModules, 'ES2015'), + template('app', ['__ROOT__', '__ERROR__', 'svelte', '@sapper/App.html']), + template('server', builtinModules), { input: [ @@ -55,10 +56,12 @@ export default [ external, plugins: [ json(), - resolve(), + resolve({ + extensions: ['.js', '.ts'] + }), commonjs(), - typescript({ - typescript: require('typescript') + sucrase({ + transforms: ['typescript'] }) ] } diff --git a/src/core/create_manifest_data.ts b/src/core/create_manifest_data.ts index 1d38442..41336c4 100644 --- a/src/core/create_manifest_data.ts +++ b/src/core/create_manifest_data.ts @@ -15,7 +15,10 @@ export default function create_manifest_data(cwd: string): ManifestData { if (/preload/.test(source)) { try { - const { stats } = svelte.compile(source, { generate: false }); + const { stats } = svelte.compile(source, { + generate: false, + onwarn: () => {} + }); return !!stats.vars.find((variable: any) => variable.module && variable.export_name === 'preload'); } catch (err) {} } @@ -180,7 +183,7 @@ export default function create_manifest_data(cwd: string): ManifestData { ? { name: 'main', file: '_layout.html', - has_preload: has_preload(root_file) + has_preload: has_preload('_layout.html') } : default_layout; diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 0000000..89c4418 --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1 @@ +declare module 'svelte/compiler'; \ No newline at end of file diff --git a/test/apps/AppRunner.ts b/test/apps/AppRunner.ts index 4bfdcce..0a3d51b 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'; diff --git a/test/apps/with-sourcemaps/src/client.js b/test/apps/with-sourcemaps/src/client.js index 0865a4a..6cce7e6 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 0e7741c..7f090b8 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 9d2ac9d..67da6f0 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 1b61c28..2d05958 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