Serve Two Rivers modules with production MIME type
All checks were successful
Build Org Website / build (push) Successful in 45s

This commit is contained in:
gitea-actions
2026-08-11 13:40:14 +01:00
parent 262d943443
commit 08516fda14
9 changed files with 21 additions and 16 deletions

View File

@@ -1,3 +1,4 @@
// Served as .js so strict production MIME checks accept this native ES module.
const ROOT = "/assets/games/two-rivers/data";
const FILES = {
assets: "assets.json",

View File

@@ -1,4 +1,4 @@
import {normalizeState} from "./state.mjs";
import {normalizeState} from "./state.js";
export const SAVE_KEY = "zxh_two_rivers_saves_v1";
export const SETTINGS_KEY = "zxh_two_rivers_settings_v1";

View File

@@ -1,3 +1,4 @@
// Native ES module; the .js suffix matches the production server's JavaScript MIME mapping.
export const RELATIONSHIPS = ["trust", "respect", "comfort", "humour", "adventure", "romance", "familyApproval"];
export const SAVE_VERSION = 1;

View File

@@ -1,9 +1,9 @@
import {loadContent} from "./core/content.mjs";
import {createStore, freshState} from "./core/state.mjs";
import {createSaveService} from "./core/save.mjs";
import {AudioDirector} from "./systems/audio.mjs";
import {Interface} from "./ui/interface.mjs";
import {createScenes} from "./scenes/game-scenes.mjs";
import {loadContent} from "./core/content.js";
import {createStore, freshState} from "./core/state.js";
import {createSaveService} from "./core/save.js";
import {AudioDirector} from "./systems/audio.js";
import {Interface} from "./ui/interface.js";
import {createScenes} from "./scenes/game-scenes.js";
const root = document.querySelector("[data-two-rivers]");

View File

@@ -1,4 +1,4 @@
import {requirementMet} from "../core/state.mjs";
import {requirementMet} from "../core/state.js";
const WIDTH = 1280;
const HEIGHT = 720;

View File

@@ -1,3 +1,4 @@
// Native ES module served with the production JavaScript MIME type.
export class AudioDirector {
constructor(records, getSettings) {
this.getSettings = getSettings;

View File

@@ -1,4 +1,4 @@
import {applyEffects, relationshipStage, RELATIONSHIPS, requirementMet, resolveEnding} from "../core/state.mjs";
import {applyEffects, relationshipStage, RELATIONSHIPS, requirementMet, resolveEnding} from "../core/state.js";
const LABELS = {
trust: "Trust", respect: "Respect", comfort: "Comfort", humour: "Humour",

View File

@@ -98,6 +98,6 @@
<script src="/assets/scripts/vendor/two-rivers/phaser-3.90.0.min.js?v=1.0.0"></script>
<script src="/assets/scripts/vendor/two-rivers/gsap-3.13.0.min.js?v=1.0.0"></script>
<script src="/assets/scripts/vendor/two-rivers/howler-2.2.4.min.js?v=1.0.0"></script>
<script type="module" src="/assets/scripts/games/two-rivers/main.js?v=1.0.1"></script>
<script type="module" src="/assets/scripts/games/two-rivers/main.js?v=1.0.2"></script>
<!-- TWO-RIVERS-STANDALONE-END -->
#+END_EXPORT

View File

@@ -6,9 +6,9 @@ import {fileURLToPath} from "node:url";
import {
applyEffects, createStore, freshState, normalizeState, relationshipStage,
resolveEnding, requirementMet, RELATIONSHIPS
} from "../../assets/scripts/games/two-rivers/core/state.mjs";
import {validateContent} from "../../assets/scripts/games/two-rivers/core/content.mjs";
import {createSaveService, SAVE_KEY} from "../../assets/scripts/games/two-rivers/core/save.mjs";
} from "../../assets/scripts/games/two-rivers/core/state.js";
import {validateContent} from "../../assets/scripts/games/two-rivers/core/content.js";
import {createSaveService, SAVE_KEY} from "../../assets/scripts/games/two-rivers/core/save.js";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
const read = (file) => fs.readFileSync(path.join(root, file), "utf8");
@@ -134,17 +134,19 @@ test("page uses local pinned libraries and production source is clean", () => {
assert.match(page, /gsap-3\.13\.0\.min\.js/);
assert.match(page, /howler-2\.2\.4\.min\.js/);
assert.match(page, /games\/two-rivers\/gate\.js\?v=1\.0\.1/);
assert.match(page, /games\/two-rivers\/main\.js\?v=1\.0\.2/);
assert.doesNotMatch(page, /https?:\/\//);
const source = [
page,
read("assets/scripts/games/two-rivers/main.js"),
read("assets/scripts/games/two-rivers/gate.js"),
read("assets/scripts/games/two-rivers/core/state.mjs"),
read("assets/scripts/games/two-rivers/ui/interface.mjs"),
read("assets/scripts/games/two-rivers/scenes/game-scenes.mjs")
read("assets/scripts/games/two-rivers/core/state.js"),
read("assets/scripts/games/two-rivers/ui/interface.js"),
read("assets/scripts/games/two-rivers/scenes/game-scenes.js")
].join("\n");
assert.doesNotMatch(source, /\bTODO\b|placeholder implementation|lorem ipsum/i);
assert.doesNotMatch(source, /\bReact\b|\bVue\b|\bAngular\b|\bjQuery\b/);
assert.doesNotMatch(source, /\.mjs(?:["'?#]|$)/, "production runtime must use the server's JavaScript MIME mapping");
assert.ok(read("assets/styles/pages/two-rivers.css").length > 15000);
});