diff --git a/.eslintrc.json b/.eslintrc.json index c3a0d7b2f..737ca5bae 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -15,7 +15,7 @@ "prettier" ], "parser": "@typescript-eslint/parser", - "ignorePatterns": ["/plugins/*", "src/assets/typevalidation/output", "wasm_module/"], + "ignorePatterns": ["/plugins/*", "packages/data/typevalidation/output", "wasm_module/"], "settings": { "import/parsers": { "@typescript-eslint/parser": [".ts", ".tsx"] diff --git a/.gitignore b/.gitignore index 01a29f9f8..cfce9196f 100644 --- a/.gitignore +++ b/.gitignore @@ -149,4 +149,4 @@ install.bat .mf/ wasm_module/target/ -/src/assets/typevalidation/output +/packages/data/typevalidation/output diff --git a/package.json b/package.json index 00cf3a49f..4fa2239e7 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,8 @@ "checkStaged": "concurrently -g -c auto pnpm:testData pnpm:validateDataTypes pnpm:lint-staged", "checkAll": "concurrently -g -c auto pnpm:testData pnpm:validateDataTypes pnpm:eslint pnpm:prettierCheck pnpm:typeCheck", "updateMappings": "node updateMappings.js", - "testData": "tsx ./src/assets/testData.js", - "validateDataTypes": "typia generate --input ./src/assets/typevalidation/ --output ./src/assets/typevalidation/output && tsx ./src/assets/typevalidation/output", + "testData": "tsx ./packages/data/testData.js", + "validateDataTypes": "typia generate --input ./packages/data/typevalidation/ --output ./packages/data/typevalidation/output && tsx ./packages/data/typevalidation/output", "extractLocale": "babel --config-file ./babel-extract.config.js 'src/**/*.{js,jsx,ts,tsx}' > /dev/null", "extractLocaleEn": "babel --config-file ./babel-extract-en.config.js 'src/**/*.{js,jsx,ts,tsx}' > /dev/null && node cleanupLocale.js", "extractLocaleCMD": "babel --config-file ./babel-extract.config.js \"src/**/*.{js,jsx,ts,tsx}\" > NUL", @@ -60,6 +60,7 @@ "@reduxjs/toolkit": "^2.5.0", "axios": "^1.7.9", "comlink": "^4.4.2", + "data": "workspace:./packages/data", "i18next": "^24.2.0", "js-yaml": "^4.1.0", "json-url": "^3.1.0", diff --git a/src/assets/modifierdata/buffs.yaml b/packages/data/modifierdata/buffs.yaml similarity index 100% rename from src/assets/modifierdata/buffs.yaml rename to packages/data/modifierdata/buffs.yaml diff --git a/src/assets/modifierdata/elementalist.yaml b/packages/data/modifierdata/elementalist.yaml similarity index 100% rename from src/assets/modifierdata/elementalist.yaml rename to packages/data/modifierdata/elementalist.yaml diff --git a/src/assets/modifierdata/engineer.yaml b/packages/data/modifierdata/engineer.yaml similarity index 100% rename from src/assets/modifierdata/engineer.yaml rename to packages/data/modifierdata/engineer.yaml diff --git a/src/assets/modifierdata/food.yaml b/packages/data/modifierdata/food.yaml similarity index 100% rename from src/assets/modifierdata/food.yaml rename to packages/data/modifierdata/food.yaml diff --git a/src/assets/modifierdata/guardian.yaml b/packages/data/modifierdata/guardian.yaml similarity index 100% rename from src/assets/modifierdata/guardian.yaml rename to packages/data/modifierdata/guardian.yaml diff --git a/src/assets/modifierdata/index.ts b/packages/data/modifierdata/index.ts similarity index 98% rename from src/assets/modifierdata/index.ts rename to packages/data/modifierdata/index.ts index d858c2418..ff6cbd760 100644 --- a/src/assets/modifierdata/index.ts +++ b/packages/data/modifierdata/index.ts @@ -15,6 +15,8 @@ import Thief from './thief.yaml'; import utility from './utility.yaml'; import Warrior from './warrior.yaml'; +export * from './metadata'; + // combines items in all sections into one object const byId = (sections: Section[]) => { const sectionsFlat = sections.flatMap(({ section, items }) => diff --git a/src/assets/modifierdata/mesmer.yaml b/packages/data/modifierdata/mesmer.yaml similarity index 100% rename from src/assets/modifierdata/mesmer.yaml rename to packages/data/modifierdata/mesmer.yaml diff --git a/src/assets/modifierdata/metadata.ts b/packages/data/modifierdata/metadata.ts similarity index 100% rename from src/assets/modifierdata/metadata.ts rename to packages/data/modifierdata/metadata.ts diff --git a/src/assets/modifierdata/necromancer.yaml b/packages/data/modifierdata/necromancer.yaml similarity index 100% rename from src/assets/modifierdata/necromancer.yaml rename to packages/data/modifierdata/necromancer.yaml diff --git a/src/assets/modifierdata/ranger.yaml b/packages/data/modifierdata/ranger.yaml similarity index 100% rename from src/assets/modifierdata/ranger.yaml rename to packages/data/modifierdata/ranger.yaml diff --git a/src/assets/modifierdata/relics.yaml b/packages/data/modifierdata/relics.yaml similarity index 100% rename from src/assets/modifierdata/relics.yaml rename to packages/data/modifierdata/relics.yaml diff --git a/src/assets/modifierdata/revenant.yaml b/packages/data/modifierdata/revenant.yaml similarity index 100% rename from src/assets/modifierdata/revenant.yaml rename to packages/data/modifierdata/revenant.yaml diff --git a/src/assets/modifierdata/runes.yaml b/packages/data/modifierdata/runes.yaml similarity index 100% rename from src/assets/modifierdata/runes.yaml rename to packages/data/modifierdata/runes.yaml diff --git a/src/assets/modifierdata/sigils.yaml b/packages/data/modifierdata/sigils.yaml similarity index 100% rename from src/assets/modifierdata/sigils.yaml rename to packages/data/modifierdata/sigils.yaml diff --git a/src/assets/modifierdata/thief.yaml b/packages/data/modifierdata/thief.yaml similarity index 100% rename from src/assets/modifierdata/thief.yaml rename to packages/data/modifierdata/thief.yaml diff --git a/src/assets/modifierdata/utility.yaml b/packages/data/modifierdata/utility.yaml similarity index 100% rename from src/assets/modifierdata/utility.yaml rename to packages/data/modifierdata/utility.yaml diff --git a/src/assets/modifierdata/warrior.yaml b/packages/data/modifierdata/warrior.yaml similarity index 100% rename from src/assets/modifierdata/warrior.yaml rename to packages/data/modifierdata/warrior.yaml diff --git a/src/assets/modifierdata/yaml.d.ts b/packages/data/modifierdata/yaml.d.ts similarity index 87% rename from src/assets/modifierdata/yaml.d.ts rename to packages/data/modifierdata/yaml.d.ts index 14f5f216c..92446f31b 100644 --- a/src/assets/modifierdata/yaml.d.ts +++ b/packages/data/modifierdata/yaml.d.ts @@ -2,3 +2,5 @@ declare module './*.yaml' { const data: import('./metadata').ModifierData; export default data; } + +// export {}; diff --git a/packages/data/package.json b/packages/data/package.json new file mode 100644 index 000000000..101e746f2 --- /dev/null +++ b/packages/data/package.json @@ -0,0 +1,15 @@ +{ + "type": "module", + "exports": { + ".": "./index.ts", + "./modifierdata": "./modifierdata/index.ts", + "./presetdata": "./presetdata/index.ts", + "./presetdata/templateTransform": "./presetdata/templateTransform.ts" + }, + "dependencies": { + "js-yaml": "^4.1.0" + }, + "devDependencies": { + "typia": "^7.5.1" + } +} diff --git a/src/assets/presetdata/credit.yaml b/packages/data/presetdata/credit.yaml similarity index 100% rename from src/assets/presetdata/credit.yaml rename to packages/data/presetdata/credit.yaml diff --git a/packages/data/presetdata/index.ts b/packages/data/presetdata/index.ts new file mode 100644 index 000000000..dfdea6ef7 --- /dev/null +++ b/packages/data/presetdata/index.ts @@ -0,0 +1,43 @@ +import creditData from './credit.yaml'; +import presetAffixes from './preset-affixes.yaml'; +import presetBuffs from './preset-buffs.yaml'; +import presetDistribution from './preset-distribution.yaml'; +import presetExtras from './preset-extras.yaml'; +import presetInfusions from './preset-infusions.yaml'; +import presetTraits from './preset-traits.yaml'; +import templates from './templates.yaml'; + +export * from './metadata'; + +// export interface PresetData { +// templates: Templates; +// presetBuffs: PresetBuffs; +// presetAffixes: PresetAffixes; +// presetDistribution: PresetDistribution; +// presetExtras: PresetExtras; +// presetInfusions: PresetInfusions; +// presetTraits: PresetTraits; +// creditData: CreditData; +// } + +export { + templates, + presetBuffs, + presetAffixes, + presetDistribution, + presetExtras, + presetInfusions, + presetTraits, + creditData, +}; + +export default { + templates, + presetBuffs, + presetAffixes, + presetDistribution, + presetExtras, + presetInfusions, + presetTraits, + creditData, +}; diff --git a/src/assets/presetdata/metadata.ts b/packages/data/presetdata/metadata.ts similarity index 81% rename from src/assets/presetdata/metadata.ts rename to packages/data/presetdata/metadata.ts index ca73b3b42..0960196ee 100644 --- a/src/assets/presetdata/metadata.ts +++ b/packages/data/presetdata/metadata.ts @@ -1,15 +1,15 @@ -import type { BuffsSlice } from '../../state/slices/buffs'; -import type { Distribution } from '../../state/slices/distribution'; -import type { ExtrasSlice } from '../../state/slices/extras'; -import type { PrioritiesSlice } from '../../state/slices/priorities'; -import type { SkillsSlice } from '../../state/slices/skills'; -import type { TraitsSlice } from '../../state/slices/traits'; +import type { BuffsSlice } from '../../../src/state/slices/buffs'; +import type { Distribution } from '../../../src/state/slices/distribution'; +import type { ExtrasSlice } from '../../../src/state/slices/extras'; +import type { PrioritiesSlice } from '../../../src/state/slices/priorities'; +import type { SkillsSlice } from '../../../src/state/slices/skills'; +import type { TraitsSlice } from '../../../src/state/slices/traits'; import type { InfusionName, ProfessionName, ProfessionOrSpecializationName, WeaponHandednessType, -} from '../../utils/gw2-data'; +} from '../../../src/utils/gw2-data'; interface TemplateEntryBase { name: string; diff --git a/src/assets/presetdata/preset-affixes.yaml b/packages/data/presetdata/preset-affixes.yaml similarity index 100% rename from src/assets/presetdata/preset-affixes.yaml rename to packages/data/presetdata/preset-affixes.yaml diff --git a/src/assets/presetdata/preset-buffs.yaml b/packages/data/presetdata/preset-buffs.yaml similarity index 100% rename from src/assets/presetdata/preset-buffs.yaml rename to packages/data/presetdata/preset-buffs.yaml diff --git a/src/assets/presetdata/preset-distribution.yaml b/packages/data/presetdata/preset-distribution.yaml similarity index 100% rename from src/assets/presetdata/preset-distribution.yaml rename to packages/data/presetdata/preset-distribution.yaml diff --git a/src/assets/presetdata/preset-extras.yaml b/packages/data/presetdata/preset-extras.yaml similarity index 100% rename from src/assets/presetdata/preset-extras.yaml rename to packages/data/presetdata/preset-extras.yaml diff --git a/src/assets/presetdata/preset-infusions.yaml b/packages/data/presetdata/preset-infusions.yaml similarity index 100% rename from src/assets/presetdata/preset-infusions.yaml rename to packages/data/presetdata/preset-infusions.yaml diff --git a/src/assets/presetdata/preset-traits.yaml b/packages/data/presetdata/preset-traits.yaml similarity index 100% rename from src/assets/presetdata/preset-traits.yaml rename to packages/data/presetdata/preset-traits.yaml diff --git a/src/assets/presetdata/runes notes.txt b/packages/data/presetdata/runes notes.txt similarity index 100% rename from src/assets/presetdata/runes notes.txt rename to packages/data/presetdata/runes notes.txt diff --git a/src/assets/presetdata/templateTransform.ts b/packages/data/presetdata/templateTransform.ts similarity index 93% rename from src/assets/presetdata/templateTransform.ts rename to packages/data/presetdata/templateTransform.ts index 77d294c25..674b87379 100644 --- a/src/assets/presetdata/templateTransform.ts +++ b/packages/data/presetdata/templateTransform.ts @@ -1,5 +1,5 @@ -import type { PresetData } from '../../utils/data'; -import type { ProfessionName } from '../../utils/gw2-data'; +import type data from 'data/presetdata'; +import type { ProfessionName } from '../../../src/utils/gw2-data'; import type { TemplateEntry } from './metadata'; const defaultBoonTemplates = { @@ -28,7 +28,7 @@ interface getBuildTemplateDataProps { selectedTemplate: string; isFractals: boolean; profession: ProfessionName | ''; - data: PresetData; + data: typeof data; } export function getBuildTemplateData({ diff --git a/src/assets/presetdata/templates.yaml b/packages/data/presetdata/templates.yaml similarity index 100% rename from src/assets/presetdata/templates.yaml rename to packages/data/presetdata/templates.yaml diff --git a/packages/data/presetdata/yaml.d.ts b/packages/data/presetdata/yaml.d.ts new file mode 100644 index 000000000..44fdaf574 --- /dev/null +++ b/packages/data/presetdata/yaml.d.ts @@ -0,0 +1,34 @@ +declare module './templates.yaml' { + const data: import('./metadata').Templates; + export default data; +} +declare module './preset-buffs.yaml' { + const data: import('./metadata').PresetBuffs; + export default data; +} +declare module './preset-affixes.yaml' { + const data: import('./metadata').PresetAffixes; + export default data; +} +declare module './preset-distribution.yaml' { + const data: import('./metadata').PresetDistribution; + export default data; +} +declare module './preset-extras.yaml' { + const data: import('./metadata').PresetExtras; + export default data; +} +declare module './preset-infusions.yaml' { + const data: import('./metadata').PresetInfusions; + export default data; +} +declare module './preset-traits.yaml' { + const data: import('./metadata').PresetTraits; + export default data; +} +declare module './credit.yaml' { + const data: import('./metadata').CreditData; + export default data; +} + +export {}; diff --git a/src/assets/testData.js b/packages/data/testData.js similarity index 99% rename from src/assets/testData.js rename to packages/data/testData.js index 2a134b527..204a725a7 100644 --- a/src/assets/testData.js +++ b/packages/data/testData.js @@ -14,7 +14,7 @@ import { relicsDict, runesDict, sigilDict, -} from '../components/url-state/schema/SchemaDicts'; +} from '../../src/components/url-state/schema/SchemaDicts'; // import specializationData from '../utils/mapping/specializations.json' assert { type: 'json' }; import { @@ -55,7 +55,7 @@ const schemaKeys = { 'buffs.yaml': buffsDict, }; -const modifierDirectory = './src/assets/modifierdata/'; +const modifierDirectory = './packages/data/modifierdata/'; const allTraitIds = new Set(); const allExtrasIds = new Set(); @@ -487,7 +487,7 @@ function parseNumber(value, key, id) { * test presets */ -const presetDirectory = './src/assets/presetdata/'; +const presetDirectory = './packages/data/presetdata/'; // const types = { // name diff --git a/src/assets/typevalidation/index.ts b/packages/data/typevalidation/index.ts similarity index 96% rename from src/assets/typevalidation/index.ts rename to packages/data/typevalidation/index.ts index 7f9dd135b..0da0a3403 100644 --- a/src/assets/typevalidation/index.ts +++ b/packages/data/typevalidation/index.ts @@ -26,8 +26,8 @@ const gentleAssert = (condition: boolean, message: string) => { } }; -const modifierDirectory = './src/assets/modifierdata/'; -const presetDirectory = './src/assets/presetdata/'; +const modifierDirectory = './packages/data/modifierdata/'; +const presetDirectory = './packages/data/presetdata/'; const testModifiers = async () => { const files = (await fs.readdir(modifierDirectory)).filter( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c2ed8298a..74a6e0c50 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: comlink: specifier: ^4.4.2 version: 4.4.2 + data: + specifier: workspace:./packages/data + version: link:packages/data i18next: specifier: ^24.2.0 version: 24.2.0(typescript@5.7.2) @@ -211,6 +214,16 @@ importers: specifier: ^3.99.0 version: 3.99.0(@cloudflare/workers-types@4.20241230.0) + packages/data: + dependencies: + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 + devDependencies: + typia: + specifier: ^7.5.1 + version: 7.5.1(@samchon/openapi@2.3.1)(typescript@5.7.2) + packages: '@ampproject/remapping@2.3.0': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..f88960cbe --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: +- 'packages/*' diff --git a/src/components/BuildPage.tsx b/src/components/BuildPage.tsx index 1e912ffeb..0d841f905 100644 --- a/src/components/BuildPage.tsx +++ b/src/components/BuildPage.tsx @@ -4,8 +4,8 @@ import { Box, Paper, Typography } from '@mui/material'; import * as React from 'react'; import { useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; -import { buffModifiers, classModifiers } from '../assets/modifierdata'; -import type { ModifierItem } from '../assets/modifierdata/metadata'; +import { buffModifiers, classModifiers } from '../../packages/data/modifierdata'; +import type { ModifierItem } from '../../packages/data/modifierdata/metadata'; import { importStateCharacter } from '../state/async/buildPageThunks'; import { useAppDispatch } from '../state/redux-hooks'; import { diff --git a/src/components/TemplateInfo.tsx b/src/components/TemplateInfo.tsx index 0eede2f0f..3ac9bf3c2 100644 --- a/src/components/TemplateInfo.tsx +++ b/src/components/TemplateInfo.tsx @@ -1,12 +1,12 @@ import { Profession } from '@discretize/gw2-ui-new'; import OpenInNewIcon from '@mui/icons-material/OpenInNew'; import { Link } from '@mui/material'; +import type { Credit, PresetDistributionEntry } from 'data/presetdata'; +import { creditData, presetDistribution } from 'data/presetdata'; import { Fragment } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; -import type { Credit, PresetDistributionEntry } from '../assets/presetdata/metadata'; import { getSelectedDistribution } from '../state/slices/distribution'; -import data from '../utils/data'; import Info from './baseComponents/Info'; const TemplateLabel = ({ preset }: { preset: PresetDistributionEntry }) => { @@ -23,7 +23,7 @@ const TemplateLabel = ({ preset }: { preset: PresetDistributionEntry }) => { }; const Author = ({ name }: { name: string }) => { - const url = data.creditData[name]?.authorUrl; + const url = creditData[name]?.authorUrl; return url ? ( {name} @@ -45,7 +45,7 @@ const EndingLinks = ({ credit }: { credit: Credit[] }) => export default function TemplateInfo() { const selectedDistribution = useSelector(getSelectedDistribution); - const distributionData = data.presetDistribution.list.find( + const distributionData = presetDistribution.list.find( (entry) => entry.name === selectedDistribution, ); const credit = distributionData?.credit; @@ -66,7 +66,7 @@ export default function TemplateInfo() { )} {credit - .filter((entry) => data.creditData[entry.author]?.authorUrl && entry.url) + .filter((entry) => creditData[entry.author]?.authorUrl && entry.url) .map((entry) => ( {' '} diff --git a/src/components/baseComponents/Presets.tsx b/src/components/baseComponents/Presets.tsx index 65688d66c..9baa5f6f1 100644 --- a/src/components/baseComponents/Presets.tsx +++ b/src/components/baseComponents/Presets.tsx @@ -3,7 +3,7 @@ import { Box, Chip, TextField, Typography } from '@mui/material'; import Autocomplete from '@mui/material/Autocomplete'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; -import type { PresetEntry } from '../../assets/presetdata/metadata'; +import type { PresetEntry } from 'data/presetdata'; import { getProfession, getSelectedTemplate } from '../../state/slices/controlsSlice'; // this many chips are allowed before they will be put into a dropdown select diff --git a/src/components/nav/NavAccordion.tsx b/src/components/nav/NavAccordion.tsx index 1c8198714..c8ac512d7 100644 --- a/src/components/nav/NavAccordion.tsx +++ b/src/components/nav/NavAccordion.tsx @@ -3,10 +3,10 @@ import { Box, Chip } from '@mui/material'; import MuiAccordion from '@mui/material/Accordion'; import MuiAccordionDetails from '@mui/material/AccordionDetails'; import MuiAccordionSummary from '@mui/material/AccordionSummary'; +import { templates } from 'data/presetdata'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { makeStyles } from 'tss-react/mui'; -import data from '../../utils/data'; import type { ProfessionName } from '../../utils/gw2-data'; const useStyles = makeStyles()((theme) => ({ @@ -57,7 +57,7 @@ export default function NavAccordion({ handleTemplateSelect }: NavAccordionProps setExpanded(newExpanded ? panel : ''); }; - return data.templates.list.map((prof) => ( + return templates.list.map((prof) => ( { const selectedSpecialization = useSelector(getSelectedSpecialization); const selectedTemplateName = useSelector(getSelectedTemplate); - const selectedTemplate = data.templates.list + const selectedTemplate = templates.list .find((elem) => elem.class === profession) ?.builds?.find((elem) => elem.name === selectedTemplateName); diff --git a/src/components/nav/ReapplyTemplateDialog.tsx b/src/components/nav/ReapplyTemplateDialog.tsx index 15bd20473..75bde0d5e 100644 --- a/src/components/nav/ReapplyTemplateDialog.tsx +++ b/src/components/nav/ReapplyTemplateDialog.tsx @@ -6,16 +6,16 @@ import { DialogContentText, DialogTitle, } from '@mui/material'; +import data from 'data/presetdata'; +import { getBuildTemplateData } from 'data/presetdata/templateTransform'; import { Trans } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import { getBuildTemplateData } from '../../assets/presetdata/templateTransform'; import { getProfession, getSelectedTemplate, setBuildTemplate, } from '../../state/slices/controlsSlice'; import { getGameMode } from '../../state/slices/userSettings'; -import data from '../../utils/data'; interface ReapplyTemplateDialogProps { open: boolean; diff --git a/src/components/sections/affixes/AffixesSection.tsx b/src/components/sections/affixes/AffixesSection.tsx index ca1d0b0fe..83d2ec9b6 100644 --- a/src/components/sections/affixes/AffixesSection.tsx +++ b/src/components/sections/affixes/AffixesSection.tsx @@ -1,8 +1,9 @@ import { Box, Chip, FormControlLabel, Switch } from '@mui/material'; +import type { PresetAffixesEntry } from 'data/presetdata'; +import { presetAffixes } from 'data/presetdata'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import type { PresetAffixesEntry } from '../../../assets/presetdata/metadata'; import { changeAffixes, changeExclusion, @@ -13,7 +14,6 @@ import { getExclusionsEnabled, getExoticsEnabled, } from '../../../state/slices/priorities'; -import data from '../../../utils/data'; import { maxSlotsLength } from '../../../utils/gw2-data'; import Presets from '../../baseComponents/Presets'; import Section from '../../baseComponents/Section'; @@ -82,7 +82,7 @@ const AffixesSection = () => { extraInfo={ <> { title={t('Buffs & Boons')} extraInfo={ diff --git a/src/components/sections/distribution/DistributionSection.tsx b/src/components/sections/distribution/DistributionSection.tsx index 4406bacc7..7ad17b5e9 100644 --- a/src/components/sections/distribution/DistributionSection.tsx +++ b/src/components/sections/distribution/DistributionSection.tsx @@ -1,12 +1,12 @@ /* eslint-disable react/no-unescaped-entities */ import { Box, Link } from '@mui/material'; +import type { PresetDistributionEntry } from 'data/presetdata'; +import { presetDistribution } from 'data/presetdata'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import type { PresetDistributionEntry } from '../../../assets/presetdata/metadata'; import { getProfession } from '../../../state/slices/controlsSlice'; import { changeAllDistributions } from '../../../state/slices/distribution'; -import data from '../../../utils/data'; import { SPECIALIZATIONS } from '../../../utils/gw2-data'; import Presets from '../../baseComponents/Presets'; import Section from '../../baseComponents/Section'; @@ -20,7 +20,7 @@ const DistributionSection = () => { let distributionPresets; if (profession) { const eliteSpecializations = SPECIALIZATIONS[profession]; - distributionPresets = data.presetDistribution.list.filter((preset) => { + distributionPresets = presetDistribution.list.filter((preset) => { if (preset.name === 'None') return false; return ( !preset.profession || diff --git a/src/components/sections/extramodifiers/ExtraModifiers.tsx b/src/components/sections/extramodifiers/ExtraModifiers.tsx index 6218c6b0d..600e8f741 100644 --- a/src/components/sections/extramodifiers/ExtraModifiers.tsx +++ b/src/components/sections/extramodifiers/ExtraModifiers.tsx @@ -7,10 +7,10 @@ import { TextField, Typography, } from '@mui/material'; +import { exampleModifiers, exampleModifiersJson } from 'data/modifierdata'; import yaml from 'js-yaml'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import { exampleModifiers, exampleModifiersJson } from '../../../assets/modifierdata/metadata'; import { changeExtraModifiers, changeExtraModifiersError, diff --git a/src/components/sections/extras/ExtraSelection.jsx b/src/components/sections/extras/ExtraSelection.jsx index 585976382..aecdc8db0 100644 --- a/src/components/sections/extras/ExtraSelection.jsx +++ b/src/components/sections/extras/ExtraSelection.jsx @@ -18,11 +18,11 @@ import { ListItemText, Typography, } from '@mui/material'; +import { allExtrasModifiersById, placeholderItem } from 'data/modifierdata'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; -import { allExtrasModifiersById, placeholderItem } from '../../../assets/modifierdata'; import { changeExtraAmount, changeExtraIds, diff --git a/src/components/sections/extras/Extras.tsx b/src/components/sections/extras/Extras.tsx index 468e7db7c..22ca9aa28 100644 --- a/src/components/sections/extras/Extras.tsx +++ b/src/components/sections/extras/Extras.tsx @@ -1,9 +1,9 @@ import { ConsumableEffect, Item } from '@discretize/gw2-ui-new'; import { Box, Typography } from '@mui/material'; +import { allExtrasModifiersById, extrasModifiers } from 'data/modifierdata'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import { allExtrasModifiersById, extrasModifiers } from '../../../assets/modifierdata'; import { changeLifestealAmount, getExtrasIds, diff --git a/src/components/sections/extras/ExtrasSection.tsx b/src/components/sections/extras/ExtrasSection.tsx index 176be9ca6..4854dbc84 100644 --- a/src/components/sections/extras/ExtrasSection.tsx +++ b/src/components/sections/extras/ExtrasSection.tsx @@ -10,10 +10,11 @@ import { TextField, Typography, } from '@mui/material'; +import type { PresetExtrasEntry } from 'data/presetdata'; +import { presetExtras } from 'data/presetdata'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import type { PresetExtrasEntry } from '../../../assets/presetdata/metadata'; import { changeJsHeuristicsEnabled, changeJsHeuristicsTarget, @@ -28,7 +29,6 @@ import { getJsHeuristicsDefault, getParsedJsHeuristicsTarget, } from '../../../state/slices/extras'; -import data from '../../../utils/data'; import { SPECIALIZATIONS } from '../../../utils/gw2-data'; import Info from '../../baseComponents/Info'; import Presets from '../../baseComponents/Presets'; @@ -48,7 +48,7 @@ const ExtrasSection = () => { let extrasPresets; if (profession) { const eliteSpecializations = SPECIALIZATIONS[profession]; - extrasPresets = data.presetExtras.list.filter((preset) => { + extrasPresets = presetExtras.list.filter((preset) => { return ( !preset.profession || preset.profession === profession || diff --git a/src/components/sections/extras/ModalContent.jsx b/src/components/sections/extras/ModalContent.jsx index e9442af72..e1444426e 100644 --- a/src/components/sections/extras/ModalContent.jsx +++ b/src/components/sections/extras/ModalContent.jsx @@ -13,11 +13,11 @@ import { TextField, Typography, } from '@mui/material'; +import { placeholderItem } from 'data/modifierdata'; import React, { Fragment } from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; -import { placeholderItem } from '../../../assets/modifierdata'; import { changeExtraIds, getExtrasIds } from '../../../state/slices/extras'; import Label from '../../baseComponents/Label'; import { formatApiText, joinWith } from './helpers'; diff --git a/src/components/sections/infusions/InfusionsSection.tsx b/src/components/sections/infusions/InfusionsSection.tsx index 665944c18..000c61f4d 100644 --- a/src/components/sections/infusions/InfusionsSection.tsx +++ b/src/components/sections/infusions/InfusionsSection.tsx @@ -1,10 +1,10 @@ +import type { PresetInfusionsEntry } from 'data/presetdata'; +import { presetInfusions } from 'data/presetdata'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import type { PresetInfusionsEntry } from '../../../assets/presetdata/metadata'; import { changeInfusionOptions } from '../../../state/slices/infusions'; import { getGameMode } from '../../../state/slices/userSettings'; -import data from '../../../utils/data'; import Presets from '../../baseComponents/Presets'; import Section from '../../baseComponents/Section'; import Infusions from './Infusions'; @@ -16,7 +16,7 @@ const InfusionsSection = () => { const isFractals = gamemode === 'fractals'; - const infusionPresets = data.presetInfusions.list; + const infusionPresets = presetInfusions.list; const onTemplateClickInfusions = React.useCallback( (value: PresetInfusionsEntry) => dispatch(changeInfusionOptions(value.value)), diff --git a/src/components/sections/results/ResultCharacter.jsx b/src/components/sections/results/ResultCharacter.jsx index a11a8c601..029295f0c 100644 --- a/src/components/sections/results/ResultCharacter.jsx +++ b/src/components/sections/results/ResultCharacter.jsx @@ -1,6 +1,6 @@ import { Character, firstUppercase } from '@discretize/react-discretize-components'; import { FormControlLabel, Switch } from '@mui/material'; -import { allExtrasModifiersById } from '../../../assets/modifierdata'; +import { allExtrasModifiersById } from 'data/modifierdata'; import { Classes, INFUSION_IDS, diff --git a/src/components/sections/results/ResultDetails.tsx b/src/components/sections/results/ResultDetails.tsx index fbaed27bf..5e1d38016 100644 --- a/src/components/sections/results/ResultDetails.tsx +++ b/src/components/sections/results/ResultDetails.tsx @@ -1,9 +1,9 @@ import { TextDivider } from '@discretize/react-discretize-components'; import { Grid2 as Grid } from '@mui/material'; +import { buffModifiers } from 'data/modifierdata'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; -import { buffModifiers } from '../../../assets/modifierdata'; import { getSelectedCharacter } from '../../../state/slices/controlsSlice'; import { getGameMode } from '../../../state/slices/userSettings'; import { createAssumedBuffs } from '../../../utils/toLazyToType-usefulFunctions'; diff --git a/src/components/sections/results/SpecialDurations.tsx b/src/components/sections/results/SpecialDurations.tsx index 61582b881..14508a804 100644 --- a/src/components/sections/results/SpecialDurations.tsx +++ b/src/components/sections/results/SpecialDurations.tsx @@ -1,8 +1,8 @@ import { Boon, Condition } from '@discretize/gw2-ui-new'; import { Table, TableBody, TableCell, TableRow, Typography } from '@mui/material'; +import { boons, damagingConditions } from 'data/modifierdata'; import { Trans } from 'react-i18next'; import { makeStyles } from 'tss-react/mui'; -import { boons, damagingConditions } from '../../../assets/modifierdata/metadata'; import type { Attributes } from '../../../state/optimizer/types/optimizerTypes'; // const boonDurations = boons.map((name) => `${name} Duration`); diff --git a/src/components/sections/results/TemplateHelperSections.jsx b/src/components/sections/results/TemplateHelperSections.jsx index 049330331..2cdb2faa2 100644 --- a/src/components/sections/results/TemplateHelperSections.jsx +++ b/src/components/sections/results/TemplateHelperSections.jsx @@ -7,10 +7,10 @@ import { Grid2 as Grid, Typography, } from '@mui/material'; +import { allExtrasModifiersById, buffModifiers } from 'data/modifierdata'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; -import { allExtrasModifiersById, buffModifiers } from '../../../assets/modifierdata'; import { getSkills, getWeapons } from '../../../state/slices/buildPage'; import { getTraitLines, getTraits } from '../../../state/slices/traits'; import { getGameMode } from '../../../state/slices/userSettings'; diff --git a/src/components/sections/results/gw2CombatBackend.js b/src/components/sections/results/gw2CombatBackend.js index 58a07459f..c2376d43b 100644 --- a/src/components/sections/results/gw2CombatBackend.js +++ b/src/components/sections/results/gw2CombatBackend.js @@ -3,8 +3,7 @@ /* eslint-disable dot-notation */ /* eslint-disable import/prefer-default-export */ -import { allExtrasModifiersById, traitSectionsById } from '../../../assets/modifierdata/index'; -import { damagingConditions } from '../../../assets/modifierdata/metadata'; +import { allExtrasModifiersById, damagingConditions, traitSectionsById } from 'data/modifierdata'; const formatCharacterData = async (character) => { const { diff --git a/src/components/sections/results/table/ResultTableRow.tsx b/src/components/sections/results/table/ResultTableRow.tsx index c0ad709bc..fef39f25a 100644 --- a/src/components/sections/results/table/ResultTableRow.tsx +++ b/src/components/sections/results/table/ResultTableRow.tsx @@ -3,11 +3,10 @@ import StarRoundedIcon from '@mui/icons-material/StarRounded'; import { Typography } from '@mui/material'; import TableCell from '@mui/material/TableCell'; import TableRow from '@mui/material/TableRow'; +import { allExtrasModifiersById, percents, placeholderItem } from 'data/modifierdata'; import React, { Fragment } from 'react'; import isEqual from 'react-fast-compare'; import { useDispatch } from 'react-redux'; -import { allExtrasModifiersById, placeholderItem } from '../../../../assets/modifierdata'; -import { percents } from '../../../../assets/modifierdata/metadata'; import type { Character } from '../../../../state/optimizer/types/optimizerTypes'; import type { DisplayAttributes } from '../../../../state/slices/controlsSlice'; import { changeSelectedCharacter, toggleSaved } from '../../../../state/slices/controlsSlice'; diff --git a/src/components/sections/skills/Skills.tsx b/src/components/sections/skills/Skills.tsx index 64d40860c..e9e199c0f 100644 --- a/src/components/sections/skills/Skills.tsx +++ b/src/components/sections/skills/Skills.tsx @@ -1,8 +1,8 @@ import { Skill } from '@discretize/gw2-ui-new'; import { Box, Typography } from '@mui/material'; +import type { ModifierItem } from 'data/modifierdata'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import type { ModifierItem } from '../../../assets/modifierdata/metadata'; import { getSkills, setSkillAmount, toggleSkill } from '../../../state/slices/skills'; import { AmountInput } from '../../baseComponents/AmountInput'; import CheckboxComponent from '../../baseComponents/CheckboxComponent'; diff --git a/src/components/sections/skills/SkillsSection.tsx b/src/components/sections/skills/SkillsSection.tsx index 735c2a29e..3f181bbfc 100644 --- a/src/components/sections/skills/SkillsSection.tsx +++ b/src/components/sections/skills/SkillsSection.tsx @@ -1,6 +1,6 @@ +import { classModifiers } from 'data/modifierdata'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; -import { classModifiers } from '../../../assets/modifierdata'; import { getProfession } from '../../../state/slices/controlsSlice'; import Section from '../../baseComponents/Section'; import Skills from './Skills'; diff --git a/src/components/sections/traits/Traits.tsx b/src/components/sections/traits/Traits.tsx index 4f1d99426..bf672ee7a 100644 --- a/src/components/sections/traits/Traits.tsx +++ b/src/components/sections/traits/Traits.tsx @@ -1,11 +1,11 @@ import { Specialization, Trait, TraitLine } from '@discretize/gw2-ui-new'; import WarningAmberIcon from '@mui/icons-material/WarningAmber'; import { Box, FormControl, Input, InputLabel, MenuItem, Select, Typography } from '@mui/material'; +import type { ModifierItem, Section } from 'data/modifierdata'; +import { classModifiers, traitSectionsById } from 'data/modifierdata'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import { classModifiers, traitSectionsById } from '../../../assets/modifierdata'; -import type { ModifierItem, Section } from '../../../assets/modifierdata/metadata'; import { getProfession } from '../../../state/slices/controlsSlice'; import { changeTrait, diff --git a/src/components/sections/traits/TraitsSection.tsx b/src/components/sections/traits/TraitsSection.tsx index 80d0320f0..8315e45f3 100644 --- a/src/components/sections/traits/TraitsSection.tsx +++ b/src/components/sections/traits/TraitsSection.tsx @@ -1,12 +1,12 @@ import { Box, FormControlLabel, Switch } from '@mui/material'; +import type { PresetTraitsEntry } from 'data/presetdata'; +import { presetTraits } from 'data/presetdata'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; -import type { PresetTraitsEntry } from '../../../assets/presetdata/metadata'; import { getProfession } from '../../../state/slices/controlsSlice'; import { changeSkills } from '../../../state/slices/skills'; import { changeTraits, getShowAllTraits, toggleShowAll } from '../../../state/slices/traits'; -import data from '../../../utils/data'; import { SPECIALIZATIONS } from '../../../utils/gw2-data'; import Presets from '../../baseComponents/Presets'; import Section from '../../baseComponents/Section'; @@ -22,7 +22,7 @@ const TraitsSection = () => { let traitsPresets; if (profession) { const eliteSpecializations = SPECIALIZATIONS[profession]; - traitsPresets = data.presetTraits.list.filter((preset) => { + traitsPresets = presetTraits.list.filter((preset) => { return ( !preset.profession || preset.profession === profession || diff --git a/src/global.d.ts b/src/global.d.ts index 8be4d72bc..255b61790 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,7 +1,2 @@ -declare module '*.yaml' { - const data: unknown; - export default data; -} - declare module '@discretize/object-compression'; declare module 'json-url'; diff --git a/src/state/optimizer-parallel/worker/worker.ts b/src/state/optimizer-parallel/worker/worker.ts index e0e216aa3..83744f7c8 100644 --- a/src/state/optimizer-parallel/worker/worker.ts +++ b/src/state/optimizer-parallel/worker/worker.ts @@ -1,10 +1,10 @@ /* eslint-disable camelcase */ +import { allExtrasModifiersById } from 'data/modifierdata'; import init, { calculate, calculate_heuristics_only, calculate_with_heuristics, } from '../../../../wasm_module/pkg'; // eslint-disable-line -import { allExtrasModifiersById } from '../../../assets/modifierdata'; import type { AffixName } from '../../../utils/gw2-data'; import { objectEntries } from '../../../utils/usefulFunctions'; import type { diff --git a/src/state/optimizer/optimizerCore.ts b/src/state/optimizer/optimizerCore.ts index 639356403..174e8c5d1 100644 --- a/src/state/optimizer/optimizerCore.ts +++ b/src/state/optimizer/optimizerCore.ts @@ -4,7 +4,7 @@ /* eslint-disable no-console */ /* eslint-disable dot-notation */ -import { allAttributePointKeys } from '../../assets/modifierdata/metadata'; +import { allAttributePointKeys } from 'data/modifierdata'; import type { ConditionName, DamagingConditionName, IndicatorName } from '../../utils/gw2-data'; import { INFUSION_BONUS, diff --git a/src/state/optimizer/optimizerSetup.ts b/src/state/optimizer/optimizerSetup.ts index 57fe70973..67a6424c5 100644 --- a/src/state/optimizer/optimizerSetup.ts +++ b/src/state/optimizer/optimizerSetup.ts @@ -15,13 +15,13 @@ import type { DamageMode, DamageValue, Percent, -} from '../../assets/modifierdata/metadata'; +} from 'data/modifierdata'; import { allAttributeCoefficientKeys, allAttributePercentKeys, allAttributePointKeys, allConversionAfterBuffsSourceKeys, -} from '../../assets/modifierdata/metadata'; +} from 'data/modifierdata'; import type { AffixName, ForcedSlotName, GearAttributeName } from '../../utils/gw2-data'; import { allSlotData, diff --git a/src/state/optimizer/types/optimizerSetupTypes.ts b/src/state/optimizer/types/optimizerSetupTypes.ts index b5e08d7e9..bdfda7050 100644 --- a/src/state/optimizer/types/optimizerSetupTypes.ts +++ b/src/state/optimizer/types/optimizerSetupTypes.ts @@ -6,7 +6,7 @@ import type { ConversionDestinationKey, ConversionSourceKey, Modifiers as YamlModifiers, -} from '../../../assets/modifierdata/metadata'; +} from 'data/modifierdata'; import type { ExtrasCombination } from '../../slices/extras'; export interface ExtrasCombinationEntry { diff --git a/src/state/slices/buffs.ts b/src/state/slices/buffs.ts index e2886b875..cff8a85d5 100644 --- a/src/state/slices/buffs.ts +++ b/src/state/slices/buffs.ts @@ -1,6 +1,6 @@ import type { PayloadAction } from '@reduxjs/toolkit'; import { createSlice } from '@reduxjs/toolkit'; -import { buffModifiersById } from '../../assets/modifierdata'; +import { buffModifiersById } from 'data/modifierdata'; import type { AppliedModifier } from '../optimizer/types/optimizerSetupTypes'; import type { RootState } from '../store'; import { changeAll, setBuildTemplate } from './controlsSlice'; diff --git a/src/state/slices/controlsSlice.ts b/src/state/slices/controlsSlice.ts index 91b711ef1..5fc8f65e3 100644 --- a/src/state/slices/controlsSlice.ts +++ b/src/state/slices/controlsSlice.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import type { PayloadAction } from '@reduxjs/toolkit'; import { createSelector, createSlice, original } from '@reduxjs/toolkit'; -import type { getBuildTemplateData } from '../../assets/presetdata/templateTransform'; +import type { getBuildTemplateData } from 'data/presetdata/templateTransform'; import type { ProfessionName, ProfessionOrSpecializationName } from '../../utils/gw2-data'; import type { ParseFunction } from '../../utils/usefulFunctions'; import { objectKeys, parseNumber } from '../../utils/usefulFunctions'; diff --git a/src/state/slices/extras.ts b/src/state/slices/extras.ts index 88c5a1216..ab2853953 100644 --- a/src/state/slices/extras.ts +++ b/src/state/slices/extras.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import type { PayloadAction } from '@reduxjs/toolkit'; import { createSelector, createSlice, original } from '@reduxjs/toolkit'; -import { allExtrasModifiersById } from '../../assets/modifierdata'; +import { allExtrasModifiersById } from 'data/modifierdata'; import { mapValues, objectEntries, parseNumber } from '../../utils/usefulFunctions'; import type { AppliedModifier } from '../optimizer/types/optimizerSetupTypes'; import type { RootState } from '../store'; diff --git a/src/state/slices/skills.ts b/src/state/slices/skills.ts index 009ae941d..0dc4311d2 100644 --- a/src/state/slices/skills.ts +++ b/src/state/slices/skills.ts @@ -1,6 +1,6 @@ import type { PayloadAction } from '@reduxjs/toolkit'; import { createSlice } from '@reduxjs/toolkit'; -import { allClassModifiersById } from '../../assets/modifierdata'; +import { allClassModifiersById } from 'data/modifierdata'; import type { AppliedModifier } from '../optimizer/types/optimizerSetupTypes'; import type { RootState } from '../store'; import { changeAll, changeProfession, setBuildTemplate } from './controlsSlice'; diff --git a/src/state/slices/traits.ts b/src/state/slices/traits.ts index 84f2c50d3..05946f779 100644 --- a/src/state/slices/traits.ts +++ b/src/state/slices/traits.ts @@ -1,10 +1,6 @@ import type { PayloadAction } from '@reduxjs/toolkit'; import { createSlice } from '@reduxjs/toolkit'; -import { - allClassModifiersById, - classModifiers, - traitSectionsById, -} from '../../assets/modifierdata'; +import { allClassModifiersById, classModifiers, traitSectionsById } from 'data/modifierdata'; import { SPECIALIZATIONS } from '../../utils/gw2-data'; import { enumArrayIncludes } from '../../utils/usefulFunctions'; import type { AppliedModifier } from '../optimizer/types/optimizerSetupTypes'; diff --git a/src/utils/data.ts b/src/utils/data.ts deleted file mode 100644 index 741d579b9..000000000 --- a/src/utils/data.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { - CreditData, - PresetAffixes, - PresetBuffs, - PresetDistribution, - PresetExtras, - PresetInfusions, - PresetTraits, - Templates, -} from '../assets/presetdata/metadata'; - -import creditData from '../assets/presetdata/credit.yaml'; -import presetAffixes from '../assets/presetdata/preset-affixes.yaml'; -import presetBuffs from '../assets/presetdata/preset-buffs.yaml'; -import presetDistribution from '../assets/presetdata/preset-distribution.yaml'; -import presetExtras from '../assets/presetdata/preset-extras.yaml'; -import presetInfusions from '../assets/presetdata/preset-infusions.yaml'; -import presetTraits from '../assets/presetdata/preset-traits.yaml'; -import templates from '../assets/presetdata/templates.yaml'; - -export interface PresetData { - templates: Templates; - presetBuffs: PresetBuffs; - presetAffixes: PresetAffixes; - presetDistribution: PresetDistribution; - presetExtras: PresetExtras; - presetInfusions: PresetInfusions; - presetTraits: PresetTraits; - creditData: CreditData; -} - -export default { - templates, - presetBuffs, - presetAffixes, - presetDistribution, - presetExtras, - presetInfusions, - presetTraits, - creditData, -} as PresetData;