diff --git a/bun.lockb b/bun.lockb index d4f1262..247b232 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/docs/versioning.md b/docs/versioning.md new file mode 100644 index 0000000..4d50356 --- /dev/null +++ b/docs/versioning.md @@ -0,0 +1,32 @@ +# Versioning & Development Cycle + +The versioning policy follows the [Semantic Versioning](https://semver.org/). +Since Tutu is an app for the end user, we redefine the some words in the policy: + +- API changes: the app is no longer available on certain platforms. + +## Development Cycle + +Dependency Freeze -> Development -> Release + +### Dependency Freeze + +This step is for: + +- Update dependencies +- Prepare the new version (like, bump the version number). + +New dependencies should not be added in this step. + +### Development + +In this step, dependencies can only be updated if it's required to fix bugs. + +New dependencies should be added as their use, in this step. + +### Release + +The version is released to production in this step. + +Before the next development step, new versions can still be released to +fix bugs. diff --git a/package.json b/package.json index a574f81..25814fe 100644 --- a/package.json +++ b/package.json @@ -17,33 +17,33 @@ "author": "Rubicon", "license": "Apache-2.0", "devDependencies": { - "@solid-devtools/overlay": "^0.30.1", + "@solid-devtools/overlay": "^0.33.0", "@suid/vite-plugin": "^0.3.1", "@testing-library/webdriverio": "^3.2.1", "@types/hammerjs": "^2.0.46", "@types/masonry-layout": "^4.2.8", "@vite-pwa/assets-generator": "^0.2.6", - "@wdio/cli": "^9.4.5", - "@wdio/lighthouse-service": "^9.4.5", - "@wdio/local-runner": "^9.4.5", - "@wdio/mocha-framework": "^9.4.4", - "@wdio/spec-reporter": "^9.4.4", + "@wdio/cli": "^9.5.1", + "@wdio/lighthouse-service": "^9.5.1", + "@wdio/local-runner": "^9.5.1", + "@wdio/mocha-framework": "^9.5.0", + "@wdio/spec-reporter": "^9.5.0", "postcss": "^8.4.49", - "prettier": "^3.3.3", + "prettier": "^3.4.2", "tsx": "^4.19.2", - "typescript": "^5.6.3", - "vite": "^5.4.11", + "typescript": "^5.7.2", + "vite": "^6.0.7", "vite-plugin-package-version": "^1.1.0", - "vite-plugin-pwa": "^0.20.5", - "vite-plugin-solid": "^2.10.2", + "vite-plugin-pwa": "^0.21.1", + "vite-plugin-solid": "^2.11.0", "vite-plugin-solid-styled": "^0.11.1", "wdio-vite-service": "^2.0.0", "wdio-wait-for": "^3.0.11", "workbox-build": "^7.3.0", - "wrangler": "^3.86.1" + "wrangler": "^3.99.0" }, "dependencies": { - "@formatjs/intl-localematcher": "^0.5.7", + "@formatjs/intl-localematcher": "^0.5.10", "@nanostores/persistent": "^0.10.2", "@nanostores/solid": "^0.5.0", "@solid-primitives/event-listener": "^2.3.3", @@ -52,7 +52,7 @@ "@solid-primitives/map": "^0.4.13", "@solid-primitives/page-visibility": "^2.0.17", "@solid-primitives/resize-observer": "^2.0.26", - "@solidjs/router": "^0.15.1", + "@solidjs/router": "^0.15.2", "@suid/icons-material": "^0.8.1", "@suid/material": "^0.18.0", "blurhash": "^2.0.5", @@ -65,7 +65,7 @@ "masto": "^6.10.1", "nanostores": "^0.11.3", "normalize.css": "^8.0.1", - "solid-devtools": "^0.30.1", + "solid-devtools": "^0.33.0", "solid-js": "^1.9.3", "solid-styled": "^0.11.1", "solid-transition-group": "^0.2.3", diff --git a/src/material/BottomSheet.tsx b/src/material/BottomSheet.tsx index 99bfbd0..5b463a0 100644 --- a/src/material/BottomSheet.tsx +++ b/src/material/BottomSheet.tsx @@ -51,7 +51,7 @@ function animateSlideInFromBottom(element: HTMLElement, reverse?: boolean) { } const BottomSheet: ParentComponent = (props) => { - let element: HTMLDialogElement; + let element!: HTMLDialogElement; let animation: Animation | undefined; const child = children(() => props.children); diff --git a/src/material/Menu.tsx b/src/material/Menu.tsx index 931b756..3bc2ab0 100644 --- a/src/material/Menu.tsx +++ b/src/material/Menu.tsx @@ -108,7 +108,7 @@ function animateGrowFromTopLeft( * - Use {@link MenuItem} from SUID as children. */ const Menu: Component = (oprops) => { - let root: HTMLDialogElement; + let root!: HTMLDialogElement; const windowSize = useWindowSize(); const [props, rest] = splitProps(oprops, [ "open", diff --git a/src/timelines/MediaViewer.tsx b/src/timelines/MediaViewer.tsx index ba92772..af3ef7b 100644 --- a/src/timelines/MediaViewer.tsx +++ b/src/timelines/MediaViewer.tsx @@ -38,7 +38,7 @@ function clamp(input: number, min: number, max: number) { } const MediaViewer: ParentComponent = (props) => { - let rootRef: HTMLDialogElement; + let rootRef!: HTMLDialogElement; type State = { ref?: HTMLElement; diff --git a/src/timelines/PullDownToRefresh.tsx b/src/timelines/PullDownToRefresh.tsx index 4f829ee..6393050 100644 --- a/src/timelines/PullDownToRefresh.tsx +++ b/src/timelines/PullDownToRefresh.tsx @@ -17,7 +17,7 @@ const PullDownToRefresh: Component<{ linkedElement?: HTMLElement; onRefresh?: () => void; }> = (props) => { - let rootElement: HTMLDivElement; + let rootElement!: HTMLDivElement; const [pullDown, setPullDown] = createSignal(0); const stopPos = () => 160; diff --git a/src/timelines/TootLangPicker.tsx b/src/timelines/TootLangPicker.tsx index e86f69e..7ed1055 100644 --- a/src/timelines/TootLangPicker.tsx +++ b/src/timelines/TootLangPicker.tsx @@ -23,7 +23,7 @@ type ChooseTootLangProps = { }; const ChooseTootLang: Component = (props) => { - let listRef: HTMLUListElement; + let listRef!: HTMLUListElement; const [t] = createTranslator( (code) => import(`./i18n/${code}.json`) as Promise<{ diff --git a/src/timelines/toots/PreviewCard.tsx b/src/timelines/toots/PreviewCard.tsx index 5e6780e..c4b4036 100644 --- a/src/timelines/toots/PreviewCard.tsx +++ b/src/timelines/toots/PreviewCard.tsx @@ -17,7 +17,7 @@ export function PreviewCard(props: { src: mastodon.v1.PreviewCard; alwaysCompact?: boolean; }) { - let root: HTMLAnchorElement; + let root!: HTMLAnchorElement; createEffect(() => { if (props.alwaysCompact) { diff --git a/src/timelines/toots/TootPoll.tsx b/src/timelines/toots/TootPoll.tsx index a2b9dc6..5c08c21 100644 --- a/src/timelines/toots/TootPoll.tsx +++ b/src/timelines/toots/TootPoll.tsx @@ -33,7 +33,7 @@ type TootPollProps = { }; const TootPoll: Component = (props) => { - let list: HTMLUListElement; + let list!: HTMLUListElement; const { vote } = useTootEnv(); const now = useTimeSource(); diff --git a/tsconfig.super.json b/tsconfig.super.json index 9cf8e60..d04be40 100644 --- a/tsconfig.super.json +++ b/tsconfig.super.json @@ -2,8 +2,8 @@ "compilerOptions": { "strict": true, "target": "ESNext", - "module": "esnext", - "moduleResolution": "node", + "module": "ESNext", + "moduleResolution": "bundler", "allowSyntheticDefaultImports": true, "esModuleInterop": true, "noEmit": true, diff --git a/vite.config.ts b/vite.config.ts index 0e72623..d23c5cb 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,7 +4,7 @@ import solidStyled from "vite-plugin-solid-styled"; import suid from "@suid/vite-plugin"; import { VitePWA } from "vite-plugin-pwa"; import version from "vite-plugin-package-version"; -import manifest from "./manifest.config"; +import manifest from "./manifest.config.js"; import { GetManualChunk } from "rollup"; import devtools from "solid-devtools/vite"; import { resolve } from "node:path"; @@ -70,17 +70,17 @@ export default defineConfig(({ mode }) => { plugins: [ devtools({ autoname: true, - locator: { - targetIDE: - (devConf["DEV_LOCATOR_EDITOR"] as - | "vscode" - | "atom" - | "webstorm" - | "vscode-insiders" - | "") || undefined, - componentLocation: true, - jsxLocation: true, - }, + locator: devConf["DEV_LOCATOR_EDITOR"] + ? { + targetIDE: devConf["DEV_LOCATOR_EDITOR"] as + | "vscode" + | "atom" + | "webstorm" + | "vscode-insiders", + componentLocation: true, + jsxLocation: true, + } + : undefined, }), suid(), solid(),