From 5133379b9cdd0349deab38d80404cfc464bd14c6 Mon Sep 17 00:00:00 2001 From: Dominic Ferrando Date: Thu, 18 Sep 2025 18:43:19 -0400 Subject: [PATCH] view update --- .gitignore | 4 +- Dockerfile | 7 +- bun.lock | 10 +-- fly.toml | 4 +- package.json | 14 ++- src/api.ts | 88 ------------------- src/{view/src => }/app.css | 0 src/{view/src => }/app.d.ts | 0 src/{view/src => }/app.html | 0 src/data/seed.sql | 5 -- src/lib/api.ts | 72 +++++++++++++++ src/{view/src => }/lib/assets/favicon.svg | 0 src/{ => lib}/data/standards.json | 0 src/{ => lib}/services/calculator/main.ts | 6 +- src/{ => lib}/services/calculator/util.ts | 2 +- src/{ => lib}/services/commerce/printful.ts | 0 src/{ => lib}/services/commerce/webflow.ts | 2 +- src/{ => lib}/test/test-calculator.ts | 6 +- src/{view/src => }/routes/+layout.svelte | 0 src/{view/src => }/routes/+page.svelte | 13 +-- .../src => }/routes/[...slugs]/+server.ts | 2 +- src/view/src/lib/index.ts | 6 -- src/view/src/routes/+layout.server.ts | 11 --- {src/view/static => static}/robots.txt | 0 src/view/svelte.config.js => svelte.config.js | 0 src/view/tsconfig.json => tsconfig.json | 0 src/view/vite.config.ts => vite.config.ts | 7 +- 27 files changed, 112 insertions(+), 147 deletions(-) delete mode 100644 src/api.ts rename src/{view/src => }/app.css (100%) rename src/{view/src => }/app.d.ts (100%) rename src/{view/src => }/app.html (100%) delete mode 100644 src/data/seed.sql create mode 100644 src/lib/api.ts rename src/{view/src => }/lib/assets/favicon.svg (100%) rename src/{ => lib}/data/standards.json (100%) rename src/{ => lib}/services/calculator/main.ts (98%) rename src/{ => lib}/services/calculator/util.ts (96%) rename src/{ => lib}/services/commerce/printful.ts (100%) rename src/{ => lib}/services/commerce/webflow.ts (99%) rename src/{ => lib}/test/test-calculator.ts (84%) rename src/{view/src => }/routes/+layout.svelte (100%) rename src/{view/src => }/routes/+page.svelte (96%) rename src/{view/src => }/routes/[...slugs]/+server.ts (80%) delete mode 100644 src/view/src/lib/index.ts delete mode 100644 src/view/src/routes/+layout.server.ts rename {src/view/static => static}/robots.txt (100%) rename src/view/svelte.config.js => svelte.config.js (100%) rename src/view/tsconfig.json => tsconfig.json (100%) rename src/view/vite.config.ts => vite.config.ts (50%) diff --git a/.gitignore b/.gitignore index c1511a6..835cf44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ node_modules/ .env -src/data/data.db -src/view/.svelte-kit +.svelte-kit/ +build/ diff --git a/Dockerfile b/Dockerfile index 81eb82e..d531512 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,8 @@ RUN apt-get update -qq && \ # Install node modules COPY --link package.json . -RUN bun install --production +# RUN bun install --production +RUN bun install # Copy application code COPY --link . . @@ -34,5 +35,5 @@ COPY --from=build /app /app RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/* # Start the server by default, this can be overwritten at runtime -CMD [ "bun", "run", "db:seed:prod" ] -CMD [ "bun", "run", "start" ] +CMD [ "bun", "--bun", "build" ] +CMD [ "bun", "./build/index.js" ] diff --git a/bun.lock b/bun.lock index b2d81c4..47ab996 100644 --- a/bun.lock +++ b/bun.lock @@ -154,7 +154,7 @@ "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - "@types/node": ["@types/node@24.5.1", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-/SQdmUP2xa+1rdx7VwB9yPq8PaKej8TD5cQ+XfKDPWWC+VDJU4rvVVagXqKUzhKjtFoNA8rXDJAkCxQPAe00+Q=="], + "@types/node": ["@types/node@24.5.2", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ=="], "@types/react": ["@types/react@19.1.13", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ=="], @@ -180,7 +180,7 @@ "devalue": ["devalue@5.3.2", "", {}, "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw=="], - "elysia": ["elysia@1.4.5", "", { "dependencies": { "cookie": "^1.0.2", "elysia": "1.4.3-beta.0", "exact-mirror": "0.2.2", "fast-decode-uri-component": "^1.0.1" }, "optionalDependencies": { "@sinclair/typebox": ">= 0.34.0 < 1", "openapi-types": ">= 12.0.0" }, "peerDependencies": { "file-type": ">= 20.0.0", "typescript": ">= 5.0.0" } }, "sha512-slSMNyAuh6lFEjEwSkSkpzbUOLCtx6hOw4AYhpGOHqczu27eqxHbNtRtIPQuXDq6sqJ1ezXgw3gUjoasZozWRg=="], + "elysia": ["elysia@1.4.6", "", { "dependencies": { "cookie": "^1.0.2", "exact-mirror": "0.2.2", "fast-decode-uri-component": "^1.0.1" }, "optionalDependencies": { "@sinclair/typebox": ">= 0.34.0 < 1", "openapi-types": ">= 12.0.0" }, "peerDependencies": { "file-type": ">= 20.0.0", "typescript": ">= 5.0.0" } }, "sha512-u2CorXLPs5ZXyWP+tQR+bgka/lJA4vNpB8lDE2w/sTmdaIwoPQmHEL4J3ai6OAlluWR1kfG7T9gO3EYT9D8viQ=="], "esbuild": ["esbuild@0.25.10", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.10", "@esbuild/android-arm": "0.25.10", "@esbuild/android-arm64": "0.25.10", "@esbuild/android-x64": "0.25.10", "@esbuild/darwin-arm64": "0.25.10", "@esbuild/darwin-x64": "0.25.10", "@esbuild/freebsd-arm64": "0.25.10", "@esbuild/freebsd-x64": "0.25.10", "@esbuild/linux-arm": "0.25.10", "@esbuild/linux-arm64": "0.25.10", "@esbuild/linux-ia32": "0.25.10", "@esbuild/linux-loong64": "0.25.10", "@esbuild/linux-mips64el": "0.25.10", "@esbuild/linux-ppc64": "0.25.10", "@esbuild/linux-riscv64": "0.25.10", "@esbuild/linux-s390x": "0.25.10", "@esbuild/linux-x64": "0.25.10", "@esbuild/netbsd-arm64": "0.25.10", "@esbuild/netbsd-x64": "0.25.10", "@esbuild/openbsd-arm64": "0.25.10", "@esbuild/openbsd-x64": "0.25.10", "@esbuild/openharmony-arm64": "0.25.10", "@esbuild/sunos-x64": "0.25.10", "@esbuild/win32-arm64": "0.25.10", "@esbuild/win32-ia32": "0.25.10", "@esbuild/win32-x64": "0.25.10" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ=="], @@ -244,7 +244,7 @@ "strtok3": ["strtok3@10.3.4", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="], - "svelte": ["svelte@5.38.10", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-UY+OhrWK7WI22bCZ00P/M3HtyWgwJPi9IxSRkoAE2MeAy6kl7ZlZWJZ8RaB+X4KD/G+wjis+cGVnVYaoqbzBqg=="], + "svelte": ["svelte@5.39.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-x4Me4TgiNprpLugcXyKbcGQhHdjWpITZzSeegv3jjIyA4jObVKBhNchGGDv257Eeolg3vUUSa4n2HGFMYNaPvg=="], "svelte-adapter-bun": ["svelte-adapter-bun@0.5.2", "", { "dependencies": { "tiny-glob": "^0.2.9" } }, "sha512-xEtFgaal6UgrCwwkSIcapO9kopoFNUYCYqyKCikdqxX9bz2TDYnrWQZ7qBnkunMxi1HOIERUCvTcebYGiarZLA=="], @@ -264,14 +264,12 @@ "undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="], - "vite": ["vite@7.1.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ=="], + "vite": ["vite@7.1.6", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-SRYIB8t/isTwNn8vMB3MR6E+EQZM/WG1aKmmIUCfDXfVvKfc20ZpamngWHKzAmmu9ppsgxsg4b2I7c90JZudIQ=="], "vitefu": ["vitefu@1.1.1", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ=="], "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], "elysia/cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], - - "elysia/elysia": ["elysia@1.4.3-beta.0", "", { "dependencies": { "cookie": "^1.0.2", "exact-mirror": "0.2.2", "fast-decode-uri-component": "^1.0.1" }, "optionalDependencies": { "@sinclair/typebox": ">= 0.34.0 < 1", "openapi-types": ">= 12.0.0" }, "peerDependencies": { "file-type": ">= 20.0.0", "typescript": ">= 5.0.0" } }, "sha512-UzanGZSqoKKcKgg+I4YB+ZOGeJNA7mlA8JPj7klYi0LDVcj/vtXKGRmsp4jEzZO+LjSpFuYTZcwHi4rCnvJj1w=="], } } diff --git a/fly.toml b/fly.toml index 83b46eb..1421632 100644 --- a/fly.toml +++ b/fly.toml @@ -9,10 +9,10 @@ primary_region = 'ord' [build] [env] - PORT = '8080' + PORT = '3000' [http_service] - internal_port = 8080 + internal_port = 3000 force_https = true auto_stop_machines = 'stop' auto_start_machines = true diff --git a/package.json b/package.json index 6b4363c..075f6ec 100644 --- a/package.json +++ b/package.json @@ -11,14 +11,12 @@ "vite": "^7.0.4" }, "scripts": { - "db:seed:dev": "sqlite3 ./data/data.db < ./data/seed.sql", - "db:seed:prod": "sqlite3 /data/data.db < ./data/seed.sql", - "dev": "cd ./src/view && vite dev", - "build": "cd ./src/view && vite build", - "preview": "cd ./src/view && vite preview", - "prepare": "cd ./src/view && svelte-kit sync || echo ''", - "check": "cd ./src/view && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "cd ./src/view && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" }, "dependencies": { "@elysiajs/cors": "^1.4.0", diff --git a/src/api.ts b/src/api.ts deleted file mode 100644 index 6d1227d..0000000 --- a/src/api.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Elysia } from "elysia"; -import { cors } from "@elysiajs/cors"; -import { ActivityStandards, LevelCalculator, Standards } from "./services/calculator/main"; -import { ActivityPerformance, Player } from "./services/calculator/util"; -import { Printful } from "./services/commerce/printful"; -import { Webflow } from "./services/commerce/webflow"; -import rawStandards from "./data/standards.json" assert { type: "json" } -import { fileURLToPath } from 'url'; -import { dirname, join } from 'path'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -export const app = new Elysia({ prefix: "/api" }) - .use(cors()) - - .get("/", () => "Hello world") - - // CALCULATOR - - .post("/calculate", async ({ body }) => { - const MAIN_STANDARDS = new Standards(rawStandards as ActivityStandards); - interface CalcRequest { - player: Player; - activityPerformances: ActivityPerformance[]; - } - const { player, activityPerformances } = body as CalcRequest; - const levelCalculator = new LevelCalculator(MAIN_STANDARDS); - return { levels: levelCalculator.calculate(player, activityPerformances) }; - }) - - // COMMERCE - - .post("/products/sync", async () => { - const printfulProducts = await Printful.Products.getAll(); - for (const p of printfulProducts) { - const exists = await Webflow.Products.exists(p.sync_product.external_id); - if (exists) await Webflow.Products.updateUsingPrintful(p); - else await Webflow.Products.createUsingPrintful(p); - } - return {}; - }) - - - // DATA - - .get("/data/standards", async () => { - try { - return Bun.file(join(__dirname, "data/standards.json")).json(); - } catch (error) { - console.error(error); - return new Response("Failed to load standards", { status: 500 }); - } - }) - - // WEBHOOKS - - .post("/webhook/printful", async ({ body, set }) => { - const payload = body as Printful.Webhook.EventPayload; - try { - switch (payload.type) { - case Printful.Webhook.Event.ProductUpdated: { - const prod = await Printful.Products.get(payload.data.sync_product.id); - const exists = await Webflow.Products.exists(prod.sync_product.external_id); - if (exists) await Webflow.Products.updateUsingPrintful(prod); - else await Webflow.Products.createUsingPrintful(prod); - break; - } - case Printful.Webhook.Event.ProductDeleted: { - await Webflow.Products.remove(payload.data.sync_product.external_id); - break; - } - } - } catch (error) { - console.error(error); - set.status = 500; - return { error: "internal_error" }; - } - return ""; - }); - -if (import.meta.main) { - app.listen(3000); - console.log( - `Listening at ${app.server?.hostname}:${app.server?.port}`, - ); -} - -export type App = typeof app; diff --git a/src/view/src/app.css b/src/app.css similarity index 100% rename from src/view/src/app.css rename to src/app.css diff --git a/src/view/src/app.d.ts b/src/app.d.ts similarity index 100% rename from src/view/src/app.d.ts rename to src/app.d.ts diff --git a/src/view/src/app.html b/src/app.html similarity index 100% rename from src/view/src/app.html rename to src/app.html diff --git a/src/data/seed.sql b/src/data/seed.sql deleted file mode 100644 index f01665a..0000000 --- a/src/data/seed.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE IF NOT EXISTS product_records ( - webflowProductId INTEGER NOT NULL, - printfulProductId INTEGER NOT NULL, - UNIQUE(webflowProductId, printfulProductId) -) diff --git a/src/lib/api.ts b/src/lib/api.ts new file mode 100644 index 0000000..0de2536 --- /dev/null +++ b/src/lib/api.ts @@ -0,0 +1,72 @@ +import { treaty } from "@elysiajs/eden"; +import { Elysia } from "elysia"; +import { cors } from "@elysiajs/cors"; +import { LevelCalculator, Standards, type ActivityStandards } from "$lib/services/calculator/main"; +import type { ActivityPerformance, Player } from "$lib/services/calculator/util"; +import { Webflow } from "$lib/services/commerce/webflow"; +import { Printful } from "$lib/services/commerce/printful"; +import rawStandards from "$lib/data/standards.json" assert { type: "json" } + +export const app = new Elysia({ prefix: "/api" }) + .use(cors({ + origin: '*' + })) + + .get("/", () => "Hello world") + + // CALCULATOR + + .post("/calculate", async ({ body }) => { + const MAIN_STANDARDS = new Standards(rawStandards as ActivityStandards); + interface CalcRequest { + player: Player; + activityPerformances: ActivityPerformance[]; + } + const { player, activityPerformances } = body as CalcRequest; + const levelCalculator = new LevelCalculator(MAIN_STANDARDS); + return { levels: levelCalculator.calculate(player, activityPerformances) }; + }) + + // COMMERCE + + .post("/products/sync", async () => { + const printfulProducts = await Printful.Products.getAll(); + for (const p of printfulProducts) { + const exists = await Webflow.Products.exists(p.sync_product.external_id); + if (exists) await Webflow.Products.updateUsingPrintful(p); + else await Webflow.Products.createUsingPrintful(p); + } + return {}; + }) + + // WEBHOOKS + + .post("/webhook/printful", async ({ body, set }) => { + const payload = body as Printful.Webhook.EventPayload; + try { + switch (payload.type) { + case Printful.Webhook.Event.ProductUpdated: { + const prod = await Printful.Products.get(payload.data.sync_product.id); + const exists = await Webflow.Products.exists(prod.sync_product.external_id); + if (exists) await Webflow.Products.updateUsingPrintful(prod); + else await Webflow.Products.createUsingPrintful(prod); + break; + } + case Printful.Webhook.Event.ProductDeleted: { + await Webflow.Products.remove(payload.data.sync_product.external_id); + break; + } + } + } catch (error) { + console.error(error); + set.status = 500; + return { error: "internal_error" }; + } + return ""; + }); + +export type App = typeof app; + +const apiWrapper = treaty(app); +export const api = apiWrapper.api; + diff --git a/src/view/src/lib/assets/favicon.svg b/src/lib/assets/favicon.svg similarity index 100% rename from src/view/src/lib/assets/favicon.svg rename to src/lib/assets/favicon.svg diff --git a/src/data/standards.json b/src/lib/data/standards.json similarity index 100% rename from src/data/standards.json rename to src/lib/data/standards.json diff --git a/src/services/calculator/main.ts b/src/lib/services/calculator/main.ts similarity index 98% rename from src/services/calculator/main.ts rename to src/lib/services/calculator/main.ts index 18a6116..d2d5bd2 100644 --- a/src/services/calculator/main.ts +++ b/src/lib/services/calculator/main.ts @@ -1,4 +1,4 @@ -import { Activity, Attribute, Player, Gender, ActivityPerformance, lbToKg, StandardUnit } from "./util"; +import { Activity, Attribute, Gender, lbToKg, type ActivityPerformance, type Player, type StandardUnit } from "./util"; // SOURCES // Squat, Bench, Dead Lift: @@ -434,7 +434,7 @@ export class Standards { return levels; } - const newLevels = {}; + const newLevels: Levels = {}; let j = 1; for (let k = 0; k < Object.keys(levels).length; ++k) { const currLevel = Object.keys(levels)[k]; @@ -489,7 +489,7 @@ export class Standards { const lerp = (lvl: string) => (lower[lvl] as number) + ((upper[lvl] as number) - (lower[lvl] as number)) * ratio; - const interpolatedLevels = {}; + const interpolatedLevels: Levels = {}; for (const lvl in lower) { interpolatedLevels[lvl] = lerp(lvl); } diff --git a/src/services/calculator/util.ts b/src/lib/services/calculator/util.ts similarity index 96% rename from src/services/calculator/util.ts rename to src/lib/services/calculator/util.ts index 821cb57..83b18d4 100644 --- a/src/services/calculator/util.ts +++ b/src/lib/services/calculator/util.ts @@ -1,4 +1,4 @@ -import { Metrics } from "../calculator/main"; +import { type Metrics } from "$lib/services/calculator/main"; // ------------------------------------------------------------------------------------------------- // DATA MODELS diff --git a/src/services/commerce/printful.ts b/src/lib/services/commerce/printful.ts similarity index 100% rename from src/services/commerce/printful.ts rename to src/lib/services/commerce/printful.ts diff --git a/src/services/commerce/webflow.ts b/src/lib/services/commerce/webflow.ts similarity index 99% rename from src/services/commerce/webflow.ts rename to src/lib/services/commerce/webflow.ts index b57b052..84aac34 100644 --- a/src/services/commerce/webflow.ts +++ b/src/lib/services/commerce/webflow.ts @@ -1,4 +1,4 @@ -import { Printful } from "./printful" +import { Printful } from "$lib/services/commerce/printful" export namespace Webflow { export const API_SITES_URL = `https://api.webflow.com/v2/sites/${Bun.env.WEBFLOW_SITE_ID}`; diff --git a/src/test/test-calculator.ts b/src/lib/test/test-calculator.ts similarity index 84% rename from src/test/test-calculator.ts rename to src/lib/test/test-calculator.ts index 552f921..c506c7e 100644 --- a/src/test/test-calculator.ts +++ b/src/lib/test/test-calculator.ts @@ -1,6 +1,4 @@ -import { Activity, ActivityPerformance, feetToCm, Gender, inchesToCm, lbToKg, minToMs, Player, secToMs } from "../services/calculator/util"; -import { ActivityStandards, LevelCalculator, Standards } from "../services/calculator/main" -import rawStandards from "../data/standards.json" assert { type: "json" } +import { Activity, feetToCm, Gender, inchesToCm, lbToKg, minToMs, secToMs, type ActivityPerformance, type Player } from "$lib/services/calculator/util"; const player: Player = { metrics: { @@ -41,6 +39,8 @@ const computedPerformances: ActivityPerformance[] = [ }, ]; +const standards = new Stand(); + // const newStandards: Standards = { // "Back Squat": [], // "Deadlift": [], diff --git a/src/view/src/routes/+layout.svelte b/src/routes/+layout.svelte similarity index 100% rename from src/view/src/routes/+layout.svelte rename to src/routes/+layout.svelte diff --git a/src/view/src/routes/+page.svelte b/src/routes/+page.svelte similarity index 96% rename from src/view/src/routes/+page.svelte rename to src/routes/+page.svelte index 337a6cd..d47b7cf 100644 --- a/src/view/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,8 +1,10 @@