From 43addc4072a25ecc2cba5f5c0e81bd3b89262a2d Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Thu, 4 May 2023 16:14:38 -0400 Subject: [PATCH 1/3] wip --- Taskfile.yml | 4 + package.json | 5 +- src/lib/shipDux/index.ts | 168 -------------------------- src/lib/store/ship/structure/armor.ts | 31 ++--- tsconfig.json | 3 +- 5 files changed, 21 insertions(+), 190 deletions(-) delete mode 100644 src/lib/shipDux/index.ts diff --git a/Taskfile.yml b/Taskfile.yml index 20f8bfe..09241e4 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -34,6 +34,10 @@ tasks: cmds: - histoire build + build: + cmds: + - vite build + integrate: deps: [check] cmds: diff --git a/package.json b/package.json index 1999381..484839b 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,12 @@ "prettier-plugin-svelte": "^2.10.0", "showdown": "^2.1.0", "svelte": "^3.58.0", + "svelte-preprocess": "^5.0.3", "typescript": "^5.0.4", "vitest": "^0.30.1" }, "dependencies": { - "@reduxjs/toolkit": "^1.9.5", + "@reduxjs/toolkit": "==2.0.0-alpha.5 ", "@yanick/updeep-remeda": "^2.2.0", "beercss": "^3.1.3", "histoire": "^0.16.1", @@ -45,7 +46,7 @@ "reselect": "^4.1.8", "svelte-copy-clipboard-action": "^0.0.3", "svelte-moveable": "^0.38.1", - "updux": "link:../../updux", + "updux": "file:/home/yanick/work/javascript/updux/updux-5.1.0.tgz", "vite": "^4.3.3", "yaml": "^2.2.2" }, diff --git a/src/lib/shipDux/index.ts b/src/lib/shipDux/index.ts deleted file mode 100644 index 98ea861..0000000 --- a/src/lib/shipDux/index.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { combineReducers, configureStore, createSlice } from "@reduxjs/toolkit"; -import R from "remeda"; - -import * as propulsion from "./propulsion"; -import * as structure from "./structure"; -import * as weaponry from "./weaponry/index.js"; -import * as carrier from "./carrier"; -import * as identification from "./identification.js"; -import * as shipReqs from "./shipReqs"; -import * as engine from "./engine"; - -const shipSlice = createSlice({ - name: "ship", - initialState: {}, - reducers: {}, - extraReducers(builder) { - builder.addMatcher( - () => true, - combineReducers({ - identification: identification.reducer, - propulsion: propulsion.reducer, - structure: structure.reducer, - weaponry: weaponry.reducer, - carrier: carrier.reducer, - engine: engine.reducer, - }) - ); - }, -}); - -export function createStore() { - return configureStore({ - reducer: shipSlice.reducer, - }); -} - -export const actions = { - ...shipReqs.actions, - ...shipSlice.actions, - ...identification.actions, - ...engine.actions, - ...propulsion.actions, -}; - -/** -import * as propulsion from "./propulsion/index.js"; -import { calculateDriveReqs } from "./propulsion/drive.js"; -import { ftlReqsReaction } from "./propulsion/ftl.js"; -import * as structure from "./structure/index.js"; -import * as carrier from "./carrier.js"; -import * as weaponry from "./weaponry/index.js"; -import * as shipReqs from "./shipReqs.js"; -import { screensReqsReaction } from "./structure/screens.js"; -import { createSlice } from "@reduxjs/toolkit"; - - -const initialState = { - propulsion: propulsion.initialState, - identification: identification.initialState, - structure: structure.initialState, - carrier: carrier.initialState, - weaponry: weaponry.initialState, - shipReqs: shipReqs.initialState, -} - -const shipSlice = createSlice({ - name: "ship", - ), -}); - - - - -const dux = new Updux({ - subduxes: { - identification, - propulsion, - structure, - carrier, - weaponry, - }, - initial: { - reqs: { cost: 0, mass: 10, usedMass: 0 }, - }, - actions: { - setShipReqs: null, - setUITransform: null, - resetLayout: null, - resetShip: null, - }, -}); - -function resetUITransform(thing) { - if (typeof thing !== "object") return thing; - - return u.map( - (v, k) => (k === "uiTransform" ? "" : resetUITransform(v)), - thing - ); -} - -dux.setMutation("resetShip", () => () => dux.initial); - -dux.setMutation("resetLayout", () => resetUITransform); - -dux.setMutation("setUITransform", ({ system, systemId, translate }) => { - const transform = translate - ? `translate(${translate[0]}px,${translate[1]}px)` - : ""; - - switch (system) { - case "firecons": - return u.updateIn("weaponry.firecons.uiTransform", transform); - - case "weapon": - return u.updateIn( - "weaponry.weapons", - u.map(u.if(({ id }) => id === systemId, u({ uiTransform: transform }))) - ); - - case "screens": - return u.updateIn("structure.screens.uiTransform", transform); - - case "hull": - return u.updateIn("structure.hull.uiTransform", transform); - - case "internalSystems": - const path = "structure.uiTransform"; - return u.updateIn(path, transform); - - case "ftl": - return u.updateIn("propulsion.ftl.uiTransform", transform); - - case "drive": - return u.updateIn("propulsion.drive.uiTransform", transform); - - default: - return (state) => state; - } -}); - -dux.addReaction(calculateDriveReqs); -dux.addReaction(ftlReqsReaction); -dux.addReaction(screensReqsReaction); - -dux.addReaction((store) => (state) => { - let cost = 0; - let mass = 0; - - let subsystems = Object.values(state); - - while (subsystems.length > 0) { - const subsystem = subsystems.shift(); - if (typeof subsystem !== "object") continue; - - if (subsystem.reqs) { - cost += subsystem.reqs.cost; - mass += subsystem.reqs.mass; - } - - subsystems.push(...Object.values(subsystem)); - } - - store.dispatch.setShipReqs({ cost, usedMass: mass }); -}); - -export default dux; -*/ diff --git a/src/lib/store/ship/structure/armor.ts b/src/lib/store/ship/structure/armor.ts index 18e7cee..619e35e 100644 --- a/src/lib/store/ship/structure/armor.ts +++ b/src/lib/store/ship/structure/armor.ts @@ -2,7 +2,6 @@ import { reqs, type Reqs } from "$lib/shipDux/reqs"; import Updux, { createPayloadAction } from "updux"; import u from "@yanick/updeep-remeda"; import { createSelector } from "reselect"; -import prepare from "immer"; type Layer = number; @@ -22,24 +21,20 @@ export const armorDux = new Updux({ actions: { setNbrArmorLayers, setArmorRating }, }); -armorDux.addMutation(setArmorRating, ({ index, rating }) => - prepare((state) => { - state.layers[index] = rating; - state.reqs = calcArmorReqs(state.layers); - }) -); +armorDux.addMutation(setArmorRating, ({ index, rating }) => (state) => { + state.layers[index] = rating; + state.reqs = calcArmorReqs(state.layers); +}); -armorDux.addMutation(setNbrArmorLayers, (nbrLayers) => - prepare((state) => { - while (state.layers.length > nbrLayers) { - state.layers.pop(); - } - while (state.layers.length < nbrLayers) { - state.layers.push(0); - } - state.reqs = calcArmorReqs(state.layers); - }) -); +armorDux.addMutation(setNbrArmorLayers, (nbrLayers) => (state) => { + while (state.layers.length > nbrLayers) { + state.layers.pop(); + } + while (state.layers.length < nbrLayers) { + state.layers.push(0); + } + state.reqs = calcArmorReqs(state.layers); +}); function calcArmorReqs(layers: Layer[]): Reqs { const mass = 2 * layers.reduce((a, b) => a + b, 0); diff --git a/tsconfig.json b/tsconfig.json index a448c6a..6795e2b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2022" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ @@ -67,7 +67,6 @@ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ From c728f8c09de625a0180b49a2cffc975623d6afde Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Thu, 4 May 2023 16:45:40 -0400 Subject: [PATCH 2/3] init the store the right way --- src/lib/store/api.ts | 16 ++++++++-------- svelte.config.js | 4 ++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/lib/store/api.ts b/src/lib/store/api.ts index 997ec61..2501b46 100644 --- a/src/lib/store/api.ts +++ b/src/lib/store/api.ts @@ -5,17 +5,17 @@ import { writable } from "svelte/store"; export type Api = ReturnType; export const createApi = () => { - const state = browser - ? JSON.parse(localStorage.getItem("ship") || "null") - : undefined; + const options: Partial<{ preloadedState: object }> = {}; - const api = ship.createStore({ - preloadedState: state, - }); + const preloadedState = browser && localStorage.getItem("ship"); + if (preloadedState) options.preloadedState = JSON.parse(preloadedState); - api.dispatch.restore(state); + const api = ship.createStore(options); - const svelteStore = writable(state); + const svelteStore = writable(); + if (preloadedState) { + svelteStore.set(JSON.parse(preloadedState)); + } if (browser) { api.subscribe(() => { diff --git a/svelte.config.js b/svelte.config.js index 702adb1..08c9540 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,8 +1,12 @@ import preprocess from "svelte-preprocess"; +import adapter from "@sveltejs/adapter-static"; /** @type {import('@sveltejs/kit').Config} */ const config = { preprocess: preprocess(), + kit: { + adapter: adapter({}), + }, }; export default config; From 64894d5278d2fa1d5bf2f1b74921a9a886a6d147 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Thu, 4 May 2023 18:14:30 -0400 Subject: [PATCH 3/3] add sync --- Taskfile.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Taskfile.yml b/Taskfile.yml index 09241e4..4db4d33 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -47,6 +47,10 @@ tasks: - git checkout {{.PARENT_BRANCH}} - git weld - + sync: + cmds: + - rsync -av build/ 192.168.0.100:/home/docks + release: cmds: - standard-version -a