- commit
- bee2e1734534b05cdfd4478bf0ded347e05a1435
- parent
- e319be1182db66bcc88d745204109968f5f3965c
- author
- Dami <dami.etoile@gmail.com>
| A | src/ | 6 | ++++++ |
| A | src/ | 17 | ++++++++++++++++ |
| A | tests/ | 31 | ++++++++++++++++++++++++++++++ |
@@ -0,0 +1,17 @@
1+// Vite's raw imports preserve the CommonJS authoring format for loadMod().2+import { BUNDLED_WORLD_FILES } from './bundled-world-order.js';3+import crosswordSource from '../mods/worlds/crossword.cjs?raw';4+import crateWorksSource from '../mods/worlds/crate-works.cjs?raw';5+import tidewaterSource from '../mods/worlds/tidewater.cjs?raw';6+7+const sources = Object.freeze({8+ 'crossword.cjs': crosswordSource,9+ 'crate-works.cjs': crateWorksSource,10+ 'tidewater.cjs': tidewaterSource,11+});12+13+export const BUNDLED_WORLD_SOURCES = Object.freeze(BUNDLED_WORLD_FILES.map(filename =>14+ Object.freeze({ filename, source: sources[filename] }),15+));16+17+export default BUNDLED_WORLD_SOURCES;@@ -0,0 +1,31 @@
1+import test from 'node:test';2+import assert from 'node:assert/strict';3+import { readFile } from 'node:fs/promises';4+import { fileURLToPath } from 'node:url';5+import { loadMod, CURRENT_RULES_VERSION } from '../src/mods.js';6+import { BUNDLED_WORLD_FILES } from '../src/bundled-world-order.js';7+8+const root = fileURLToPath(new URL('../', import.meta.url));9+const approved = ['crossword.cjs', 'crate-works.cjs', 'tidewater.cjs'];10+11+test('approved bundled world order is stable and each source loads at current rules', async () => {12+ assert.deepEqual(BUNDLED_WORLD_FILES, approved);13+ const loaded = [];14+ for (const filename of BUNDLED_WORLD_FILES) {15+ const source = await readFile(`${root}/mods/worlds/${filename}`, 'utf8');16+ const mod = loadMod(source, { filename });17+ loaded.push({ filename, id: mod.manifest.id, rules: mod.manifest.rules });18+ }19+ assert.deepEqual(loaded, [20+ { filename: 'crossword.cjs', id: 'crossword', rules: CURRENT_RULES_VERSION },21+ { filename: 'crate-works.cjs', id: 'crate-works', rules: CURRENT_RULES_VERSION },22+ { filename: 'tidewater.cjs', id: 'tidewater', rules: CURRENT_RULES_VERSION },23+ ]);24+});25+26+test('garden basics and word lab remain separate importable packs', async () => {27+ for (const [filename, id] of [['garden-basics.cjs', 'garden-basics'], ['word-lab.cjs', 'word-lab']]) {28+ const source = await readFile(`${root}/mods/${filename}`, 'utf8');29+ assert.equal(loadMod(source, { filename }).manifest.id, id);30+ }31+});