Skip to content

Commit

Permalink
feat(settings): Safeguard scalar loaders
Browse files Browse the repository at this point in the history
  • Loading branch information
oliversalzburg committed Nov 18, 2022
1 parent b287eed commit 1fb23df
Show file tree
Hide file tree
Showing 27 changed files with 239 additions and 84 deletions.
13 changes: 9 additions & 4 deletions packages/userscript/source/settings/BonfireSettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { Building } from "../types";
import { BuildingUpgradeSettings } from "./BuildingUpgradeSettings";
import { Requirement, Setting, SettingMax, SettingTrigger } from "./Settings";
Expand Down Expand Up @@ -118,16 +119,20 @@ export class BonfireSettings extends SettingTrigger {
this.upgradeBuildings = upgradeBuildings;
}

load(settings: BonfireSettings) {
this.enabled = settings.enabled;
this.trigger = settings.trigger;
load(settings: Maybe<Partial<BonfireSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.buildings, settings.buildings, (building, item) => {
building.enabled = item?.enabled ?? building.enabled;
building.max = item?.max ?? building.max;
});

this.turnOnSteamworks.enabled = settings.turnOnSteamworks.enabled;
this.turnOnSteamworks.enabled =
settings.turnOnSteamworks?.enabled ?? this.turnOnSteamworks.enabled;

this.upgradeBuildings.load(settings.upgradeBuildings);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { StagedBuilding } from "../types";
import { Setting } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -30,8 +31,12 @@ export class BuildingUpgradeSettings extends Setting {
this.buildings = buildings;
}

load(settings: BuildingUpgradeSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<BuildingUpgradeSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.buildings, settings.buildings, (building, item) => {
building.enabled = item?.enabled ?? building.enabled;
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/EmbassySettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { Race } from "../types";
import { SettingMax, SettingTrigger } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -34,8 +35,12 @@ export class EmbassySettings extends SettingTrigger {
this.races = races;
}

load(settings: EmbassySettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<EmbassySettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.races, settings.races, (race, item) => {
race.enabled = item?.enabled ?? race.enabled;
Expand Down
12 changes: 9 additions & 3 deletions packages/userscript/source/settings/EngineSettings.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { isNil, Maybe } from "../tools/Maybe";
import { FilterSettings } from "./FilterSettings";
import { ResourcesSettings } from "./ResourcesSettings";
import { Setting } from "./Settings";
Expand All @@ -22,9 +23,14 @@ export class EngineSettings extends Setting {
this.resources = resources;
}

load(settings: EngineSettings) {
this.enabled = settings.enabled;
this.interval = settings.interval;
load(settings: Maybe<Partial<EngineSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

this.interval = settings.interval ?? this.interval;

this.filters.load(settings.filters);
this.resources.load(settings.resources);
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/FilterSettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { Setting } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";

Expand Down Expand Up @@ -99,8 +100,12 @@ export class FilterSettings extends Setting {
this.filters = filters;
}

load(settings: FilterSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<FilterSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.filters, settings.filters, (filter, item) => {
filter.enabled = item?.enabled ?? filter.enabled;
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/MissionSettings.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { difference } from "../tools/Array";
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { cwarn } from "../tools/Log";
import { isNil, Maybe } from "../tools/Maybe";
import { GamePage, Missions } from "../types";
import { Setting } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -75,8 +76,12 @@ export class MissionSettings extends Setting {
}
}

load(settings: MissionSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<MissionSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.missions, settings.missions, (mission, item) => {
mission.enabled = item?.enabled ?? mission.enabled;
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/PolicySettings.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { difference } from "../tools/Array";
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { cwarn } from "../tools/Log";
import { isNil, Maybe } from "../tools/Maybe";
import { GamePage, Policy } from "../types";
import { Setting } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -83,8 +84,12 @@ export class PolicySettings extends Setting {
}
}

load(settings: PolicySettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<PolicySettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.policies, settings.policies, (policy, item) => {
policy.enabled = item?.enabled ?? policy.enabled;
Expand Down
23 changes: 14 additions & 9 deletions packages/userscript/source/settings/ReligionSettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { UnicornItemVariant } from "../types";
import { Requirement, Setting, SettingMax, SettingTrigger } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -314,21 +315,25 @@ export class ReligionSettings extends SettingTrigger {
this.transcend = transcend;
}

load(settings: ReligionSettings) {
this.enabled = settings.enabled;
this.trigger = settings.trigger;
load(settings: Maybe<Partial<ReligionSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.buildings, settings.buildings, (building, item) => {
building.enabled = item?.enabled ?? building.enabled;
building.max = item?.max ?? building.max;
});

this.adore.enabled = settings.adore.enabled;
this.autoPraise.enabled = settings.autoPraise.enabled;
this.bestUnicornBuilding.enabled = settings.bestUnicornBuilding.enabled;
this.transcend.enabled = settings.transcend.enabled;
this.adore.trigger = settings.adore.trigger;
this.autoPraise.trigger = settings.autoPraise.trigger;
this.adore.enabled = settings.adore?.enabled ?? this.adore.enabled;
this.autoPraise.enabled = settings.autoPraise?.enabled ?? this.autoPraise.enabled;
this.bestUnicornBuilding.enabled =
settings.bestUnicornBuilding?.enabled ?? this.bestUnicornBuilding.enabled;
this.transcend.enabled = settings.transcend?.enabled ?? this.transcend.enabled;
this.adore.trigger = settings.adore?.trigger ?? this.adore.trigger;
this.autoPraise.trigger = settings.autoPraise?.trigger ?? this.autoPraise.trigger;
}

static toLegacyOptions(settings: ReligionSettings, subject: LegacyStorage) {
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/ResetBonfireSettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { BonfireItem } from "./BonfireSettings";
import { Setting, SettingTrigger } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -71,8 +72,12 @@ export class ResetBonfireSettings extends Setting {
this.buildings = buildings;
}

load(settings: ResetBonfireSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ResetBonfireSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.buildings, settings.buildings, (building, item) => {
building.enabled = item?.enabled ?? building.enabled;
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/ResetReligionSettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { UnicornItemVariant } from "../types";
import { FaithItem, UnicornItem } from "./ReligionSettings";
import { Setting, SettingTrigger } from "./Settings";
Expand Down Expand Up @@ -212,8 +213,12 @@ export class ResetReligionSettings extends Setting {
this.buildings = buildings;
}

load(settings: ResetReligionSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ResetReligionSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.buildings, settings.buildings, (building, item) => {
building.enabled = item?.enabled ?? building.enabled;
Expand Down
10 changes: 7 additions & 3 deletions packages/userscript/source/settings/ResetResourcesSettings.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, mustExist } from "../tools/Maybe";
import { isNil, Maybe, mustExist } from "../tools/Maybe";
import { Resource } from "../types";
import { Setting } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -78,8 +78,12 @@ export class ResetResourcesSettings extends Setting {
this.resources = resources;
}

load(settings: ResetResourcesSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ResetResourcesSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.resources, settings.resources, (resource, item) => {
resource.enabled = item?.enabled ?? resource.enabled;
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/ResetSettings.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { isNil, Maybe } from "../tools/Maybe";
import { ResetBonfireSettings } from "./ResetBonfireSettings";
import { ResetReligionSettings } from "./ResetReligionSettings";
import { ResetResourcesSettings } from "./ResetResourcesSettings";
Expand Down Expand Up @@ -29,8 +30,12 @@ export class ResetSettings extends Setting {
this.time = time;
}

load(settings: ResetSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ResetSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

this.bonfire.load(settings.bonfire);
this.religion.load(settings.religion);
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/ResetSpaceSettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { SpaceBuildings } from "../types";
import { Setting, SettingTrigger } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -48,8 +49,12 @@ export class ResetSpaceSettings extends Setting {
this.buildings = buildings;
}

load(settings: ResetSpaceSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ResetSpaceSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.buildings, settings.buildings, (building, item) => {
building.enabled = item?.enabled ?? building.enabled;
Expand Down
9 changes: 7 additions & 2 deletions packages/userscript/source/settings/ResetTimeSettings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, Maybe } from "../tools/Maybe";
import { TimeItemVariant } from "../types";
import { Setting, SettingTrigger } from "./Settings";
import { LegacyStorage } from "./SettingsStorage";
Expand Down Expand Up @@ -80,8 +81,12 @@ export class ResetTimeSettings extends Setting {
this.buildings = buildings;
}

load(settings: ResetTimeSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ResetTimeSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.buildings, settings.buildings, (building, item) => {
building.enabled = item?.enabled ?? building.enabled;
Expand Down
10 changes: 7 additions & 3 deletions packages/userscript/source/settings/ResourcesSettings.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { consumeEntriesPedantic, objectEntries } from "../tools/Entries";
import { isNil, mustExist } from "../tools/Maybe";
import { isNil, Maybe, mustExist } from "../tools/Maybe";
import { Resource } from "../types";
import { WorkshopManager } from "../WorkshopManager";
import { Setting } from "./Settings";
Expand Down Expand Up @@ -85,8 +85,12 @@ export class ResourcesSettings extends Setting {
this.resources = resources;
}

load(settings: ResourcesSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ResourcesSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

consumeEntriesPedantic(this.resources, settings.resources, (resource, item) => {
resource.enabled = item?.enabled ?? resource.enabled;
Expand Down
11 changes: 8 additions & 3 deletions packages/userscript/source/settings/ScienceSettings.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { isNil, Maybe } from "../tools/Maybe";
import { GamePage } from "../types";
import { PolicySettings } from "./PolicySettings";
import { Setting } from "./Settings";
Expand Down Expand Up @@ -29,13 +30,17 @@ export class ScienceSettings extends Setting {
TechSettings.validateGame(game, settings.techs);
}

load(settings: ScienceSettings) {
this.enabled = settings.enabled;
load(settings: Maybe<Partial<ScienceSettings>>) {
if (isNil(settings)) {
return;
}

super.load(settings);

this.policies.load(settings.policies);
this.techs.load(settings.techs);

this.observe.enabled = settings.observe.enabled;
this.observe.enabled = settings.observe?.enabled ?? this.observe.enabled;
}

static toLegacyOptions(settings: ScienceSettings, subject: LegacyStorage) {
Expand Down
Loading

0 comments on commit 1fb23df

Please sign in to comment.