Serve Two Rivers modules with production MIME type
All checks were successful
Build Org Website / build (push) Successful in 45s
All checks were successful
Build Org Website / build (push) Successful in 45s
This commit is contained in:
@@ -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",
|
||||
@@ -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";
|
||||
@@ -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;
|
||||
|
||||
@@ -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]");
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {requirementMet} from "../core/state.mjs";
|
||||
import {requirementMet} from "../core/state.js";
|
||||
|
||||
const WIDTH = 1280;
|
||||
const HEIGHT = 720;
|
||||
@@ -1,3 +1,4 @@
|
||||
// Native ES module served with the production JavaScript MIME type.
|
||||
export class AudioDirector {
|
||||
constructor(records, getSettings) {
|
||||
this.getSettings = getSettings;
|
||||
@@ -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",
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user