diff --git a/.gitignore b/.gitignore index 94f54b2..58a0067 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ secret/* tmp/ node_modules/ +.esm-cache/ static/bundle.js static/bundle.css diff --git a/package.json b/package.json index ee3e772..9b009d9 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,9 @@ "transform-object-rest-spread" ] }, + "@std/esm": { + "cjs": true + }, "browser": { "./src/api/index.js": "./src/browser/api.mjs", "./secret/index.js": false, @@ -31,6 +34,7 @@ "dependencies": { "@babel/core": "^7.0.0-beta.31", "@babel/register": "^7.0.0-beta.31", + "@std/esm": "^0.14.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-object-rest-spread": "^6.23.0", "babel-plugin-transform-react-jsx": "^6.24.1", @@ -102,12 +106,12 @@ "secret-download": "rsync -a -O -v --delete -e \"ssh -p 44444\" feross@future:\"/home/feross/www/nodefoo.com/secret/\" secret/", "secret-upload": "rsync -a -O -v --delete -e \"ssh -p 44444\" secret/ feross@future:\"/home/feross/www/nodefoo.com/secret/\"", "size": "npm run build-js && cat static/bundle.js | gzip | wc -c", - "start": "node --experimental-modules src/server/start.mjs", - "test": "npm run build && standard '**/*.js' '**/*.mjs' && node --experimental-modules test/index.mjs", + "start": "node -r @std/esm src/server/start.mjs", + "test": "npm run build && standard '**/*.js' '**/*.mjs' && node -r @std/esm test/index.mjs", "watch": "npm run watch-css & npm run watch-js & npm run watch-server", "watch-css": "DEBUG=true nodemon -x 'npm run build-css' -w src/server -e css", "watch-js": "DEBUG=true rollup -c --watch", - "watch-server": "DEBUG=nodefoo* DEBUG_DEPTH=1 nodemon -x 'node --experimental-modules' src/server/start.mjs -e js,json,ejs -i src/browser -i src/views -i static/ -i tmp/" + "watch-server": "DEBUG=nodefoo* DEBUG_DEPTH=1 nodemon -x 'node -r @std/esm' src/server/start.mjs -e js,json,ejs -i src/browser -i src/views -i static/ -i tmp/" }, "standard": { "parser": "babel-eslint", diff --git a/rollup.config.js b/rollup.config.js index f6c8584..af2b760 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -20,6 +20,8 @@ module.exports = { nodeResolve({ // Use the `package.json` "browser" field browser: true, + // Resolve .mjs and .js files + extensions: ['.mjs', '.js'], // Prefer node.js built-ins instead of npm packages preferBuiltins: true }), diff --git a/src/server/app.js b/src/server/app.mjs similarity index 88% rename from src/server/app.js rename to src/server/app.mjs index 74abfb2..50485da 100644 --- a/src/server/app.js +++ b/src/server/app.mjs @@ -1,23 +1,19 @@ -module.exports = { - init -} - -const compress = require('compression') -const crypto = require('crypto') -const express = require('express') -const fs = require('fs') -const path = require('path') -const session = require('express-session') - -const config = require('../../config') -const createRenderer = require('../lib/preact-dom-renderer') -const createStore = require('../store') -const getProvider = require('../views/provider') -const routerApi = require('./router-api') -const routerLogin = require('./router-login') -const secret = require('../../secret') - -function init (sessionStore) { +import compress from 'compression' +import crypto from 'crypto' +import express from 'express' +import fs from 'fs' +import path from 'path' +import session from 'express-session' + +import config from '../../config' +import createRenderer from '../lib/preact-dom-renderer' +import createStore from '../store' +import getProvider from '../views/provider' +import routerApi from './router-api' +import routerLogin from './router-login' +import secret from '../../secret' + +export default function init (sessionStore) { const app = express() // Set up templating diff --git a/src/server/index.mjs b/src/server/index.mjs index b06b04a..fd565f6 100644 --- a/src/server/index.mjs +++ b/src/server/index.mjs @@ -23,7 +23,7 @@ import path from 'path' import session from 'express-session' import unlimited from 'unlimited' -import app from './app' +import appInit from './app' const server = http.createServer() @@ -41,7 +41,7 @@ function init (port = config.port, cb = (err) => { if (err) throw err }) { const SQLiteStore = ConnectSQLite(session) const sessionStore = new SQLiteStore({ dir: path.join(config.rootPath, 'db') }) - server.on('request', app.init(sessionStore)) + server.on('request', appInit(sessionStore)) cb(null) }) diff --git a/src/views/provider.js b/src/views/provider.js deleted file mode 100644 index 113ba3c..0000000 --- a/src/views/provider.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = getProvider - -const { h } = require('preact') /** @jsx h */ - -const App = require('../views/app') -const Provider = require('preact-context-provider') - -const config = require('../../config') - -function getProvider (store, dispatch) { - return ( - - - - ) -} diff --git a/src/views/provider.mjs b/src/views/provider.mjs new file mode 100644 index 0000000..c3ce57c --- /dev/null +++ b/src/views/provider.mjs @@ -0,0 +1,14 @@ +import { h } from 'preact' /** @jsx h */ + +import App from '../views/app' +import Provider from 'preact-context-provider' + +import config from '../../config' + +export default function getProvider (store, dispatch) { + return ( + + + + ) +}