Custom format with a creation function that takes any of the above 3 as inputs -> current preference
Full disclosure here: Cell transpiles down all .mjs scripts to .js right now because Duktape doesn't yet support ES6 modules. But in the future, yeah, I'd definitely prefer map scripts to be mjs.
import { Thread, Console } from 'sphere-runtime';
var req1 = require('sphere-runtime'), Console = req1.Console, Thread = req1.Thread;
require() is a Node.js thing and actually predates modules being a standard part of JS. When executing a require()'d script, the engine wraps the script's source code in a function which it then calls, which allows you to put variables and functions at the top level without polluting the global scope. In ES6 modules there's no need for that function hack, since the JS engine handles the scoping directly.
Anyway, regarding the sprite engine: Do you plan to allow sprite objects to be used independently from the map engine? I think that could be useful for some types of games that can't use traditional tilemaps but still use sprites, e.g. a top-down shooter.
Hmm... collision detection seems like it might be an interesting challenge to implement outside the context of a map engine. In all the map engines I've written, this was always the difficulty I had when trying to make entities be a self-contained class, and is even seen in the miniSphere codebase: There's a circular dependence between maps and persons because the map engine needs to track active entities and the entities themselves have to know about the map they're on in order for collision to work properly. It's not really possible to fully isolate them in my experience.