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 (
+
+
+
+ )
+}