Compare commits

..

6 commits

Author SHA1 Message Date
thislight
e617f344f8
fixup! update solid-devtools
All checks were successful
/ checkpr (pull_request) Successful in 1m25s
2025-01-04 17:36:56 +08:00
thislight
5945f07ce8
update solid-devtools 2025-01-04 17:36:01 +08:00
thislight
d04731e64c
update vite & vite-plugin-pwa 2025-01-04 17:17:51 +08:00
thislight
d4f41330de
autoupdate dependencies 2025-01-04 17:13:44 +08:00
thislight
203eeb9761
fix type errors 2025-01-04 17:10:54 +08:00
thislight
99efa6b42c
add versioning policy 2025-01-04 17:05:18 +08:00
12 changed files with 68 additions and 36 deletions

BIN
bun.lockb

Binary file not shown.

32
docs/versioning.md Normal file
View file

@ -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.

View file

@ -17,33 +17,33 @@
"author": "Rubicon", "author": "Rubicon",
"license": "Apache-2.0", "license": "Apache-2.0",
"devDependencies": { "devDependencies": {
"@solid-devtools/overlay": "^0.30.1", "@solid-devtools/overlay": "^0.33.0",
"@suid/vite-plugin": "^0.3.1", "@suid/vite-plugin": "^0.3.1",
"@testing-library/webdriverio": "^3.2.1", "@testing-library/webdriverio": "^3.2.1",
"@types/hammerjs": "^2.0.46", "@types/hammerjs": "^2.0.46",
"@types/masonry-layout": "^4.2.8", "@types/masonry-layout": "^4.2.8",
"@vite-pwa/assets-generator": "^0.2.6", "@vite-pwa/assets-generator": "^0.2.6",
"@wdio/cli": "^9.4.5", "@wdio/cli": "^9.5.1",
"@wdio/lighthouse-service": "^9.4.5", "@wdio/lighthouse-service": "^9.5.1",
"@wdio/local-runner": "^9.4.5", "@wdio/local-runner": "^9.5.1",
"@wdio/mocha-framework": "^9.4.4", "@wdio/mocha-framework": "^9.5.0",
"@wdio/spec-reporter": "^9.4.4", "@wdio/spec-reporter": "^9.5.0",
"postcss": "^8.4.49", "postcss": "^8.4.49",
"prettier": "^3.3.3", "prettier": "^3.4.2",
"tsx": "^4.19.2", "tsx": "^4.19.2",
"typescript": "^5.6.3", "typescript": "^5.7.2",
"vite": "^5.4.11", "vite": "^6.0.7",
"vite-plugin-package-version": "^1.1.0", "vite-plugin-package-version": "^1.1.0",
"vite-plugin-pwa": "^0.20.5", "vite-plugin-pwa": "^0.21.1",
"vite-plugin-solid": "^2.10.2", "vite-plugin-solid": "^2.11.0",
"vite-plugin-solid-styled": "^0.11.1", "vite-plugin-solid-styled": "^0.11.1",
"wdio-vite-service": "^2.0.0", "wdio-vite-service": "^2.0.0",
"wdio-wait-for": "^3.0.11", "wdio-wait-for": "^3.0.11",
"workbox-build": "^7.3.0", "workbox-build": "^7.3.0",
"wrangler": "^3.86.1" "wrangler": "^3.99.0"
}, },
"dependencies": { "dependencies": {
"@formatjs/intl-localematcher": "^0.5.7", "@formatjs/intl-localematcher": "^0.5.10",
"@nanostores/persistent": "^0.10.2", "@nanostores/persistent": "^0.10.2",
"@nanostores/solid": "^0.5.0", "@nanostores/solid": "^0.5.0",
"@solid-primitives/event-listener": "^2.3.3", "@solid-primitives/event-listener": "^2.3.3",
@ -52,7 +52,7 @@
"@solid-primitives/map": "^0.4.13", "@solid-primitives/map": "^0.4.13",
"@solid-primitives/page-visibility": "^2.0.17", "@solid-primitives/page-visibility": "^2.0.17",
"@solid-primitives/resize-observer": "^2.0.26", "@solid-primitives/resize-observer": "^2.0.26",
"@solidjs/router": "^0.15.1", "@solidjs/router": "^0.15.2",
"@suid/icons-material": "^0.8.1", "@suid/icons-material": "^0.8.1",
"@suid/material": "^0.18.0", "@suid/material": "^0.18.0",
"blurhash": "^2.0.5", "blurhash": "^2.0.5",
@ -65,7 +65,7 @@
"masto": "^6.10.1", "masto": "^6.10.1",
"nanostores": "^0.11.3", "nanostores": "^0.11.3",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"solid-devtools": "^0.30.1", "solid-devtools": "^0.33.0",
"solid-js": "^1.9.3", "solid-js": "^1.9.3",
"solid-styled": "^0.11.1", "solid-styled": "^0.11.1",
"solid-transition-group": "^0.2.3", "solid-transition-group": "^0.2.3",

View file

@ -51,7 +51,7 @@ function animateSlideInFromBottom(element: HTMLElement, reverse?: boolean) {
} }
const BottomSheet: ParentComponent<BottomSheetProps> = (props) => { const BottomSheet: ParentComponent<BottomSheetProps> = (props) => {
let element: HTMLDialogElement; let element!: HTMLDialogElement;
let animation: Animation | undefined; let animation: Animation | undefined;
const child = children(() => props.children); const child = children(() => props.children);

View file

@ -108,7 +108,7 @@ function animateGrowFromTopLeft(
* - Use {@link MenuItem} from SUID as children. * - Use {@link MenuItem} from SUID as children.
*/ */
const Menu: Component<MenuProps> = (oprops) => { const Menu: Component<MenuProps> = (oprops) => {
let root: HTMLDialogElement; let root!: HTMLDialogElement;
const windowSize = useWindowSize(); const windowSize = useWindowSize();
const [props, rest] = splitProps(oprops, [ const [props, rest] = splitProps(oprops, [
"open", "open",

View file

@ -38,7 +38,7 @@ function clamp(input: number, min: number, max: number) {
} }
const MediaViewer: ParentComponent<MediaViewerProps> = (props) => { const MediaViewer: ParentComponent<MediaViewerProps> = (props) => {
let rootRef: HTMLDialogElement; let rootRef!: HTMLDialogElement;
type State = { type State = {
ref?: HTMLElement; ref?: HTMLElement;

View file

@ -17,7 +17,7 @@ const PullDownToRefresh: Component<{
linkedElement?: HTMLElement; linkedElement?: HTMLElement;
onRefresh?: () => void; onRefresh?: () => void;
}> = (props) => { }> = (props) => {
let rootElement: HTMLDivElement; let rootElement!: HTMLDivElement;
const [pullDown, setPullDown] = createSignal(0); const [pullDown, setPullDown] = createSignal(0);
const stopPos = () => 160; const stopPos = () => 160;

View file

@ -23,7 +23,7 @@ type ChooseTootLangProps = {
}; };
const ChooseTootLang: Component<ChooseTootLangProps> = (props) => { const ChooseTootLang: Component<ChooseTootLangProps> = (props) => {
let listRef: HTMLUListElement; let listRef!: HTMLUListElement;
const [t] = createTranslator( const [t] = createTranslator(
(code) => (code) =>
import(`./i18n/${code}.json`) as Promise<{ import(`./i18n/${code}.json`) as Promise<{

View file

@ -17,7 +17,7 @@ export function PreviewCard(props: {
src: mastodon.v1.PreviewCard; src: mastodon.v1.PreviewCard;
alwaysCompact?: boolean; alwaysCompact?: boolean;
}) { }) {
let root: HTMLAnchorElement; let root!: HTMLAnchorElement;
createEffect(() => { createEffect(() => {
if (props.alwaysCompact) { if (props.alwaysCompact) {

View file

@ -33,7 +33,7 @@ type TootPollProps = {
}; };
const TootPoll: Component<TootPollProps> = (props) => { const TootPoll: Component<TootPollProps> = (props) => {
let list: HTMLUListElement; let list!: HTMLUListElement;
const { vote } = useTootEnv(); const { vote } = useTootEnv();
const now = useTimeSource(); const now = useTimeSource();

View file

@ -2,8 +2,8 @@
"compilerOptions": { "compilerOptions": {
"strict": true, "strict": true,
"target": "ESNext", "target": "ESNext",
"module": "esnext", "module": "ESNext",
"moduleResolution": "node", "moduleResolution": "bundler",
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"esModuleInterop": true, "esModuleInterop": true,
"noEmit": true, "noEmit": true,

View file

@ -4,7 +4,7 @@ import solidStyled from "vite-plugin-solid-styled";
import suid from "@suid/vite-plugin"; import suid from "@suid/vite-plugin";
import { VitePWA } from "vite-plugin-pwa"; import { VitePWA } from "vite-plugin-pwa";
import version from "vite-plugin-package-version"; import version from "vite-plugin-package-version";
import manifest from "./manifest.config"; import manifest from "./manifest.config.js";
import { GetManualChunk } from "rollup"; import { GetManualChunk } from "rollup";
import devtools from "solid-devtools/vite"; import devtools from "solid-devtools/vite";
import { resolve } from "node:path"; import { resolve } from "node:path";
@ -70,17 +70,17 @@ export default defineConfig(({ mode }) => {
plugins: [ plugins: [
devtools({ devtools({
autoname: true, autoname: true,
locator: { locator: devConf["DEV_LOCATOR_EDITOR"]
targetIDE: ? {
(devConf["DEV_LOCATOR_EDITOR"] as targetIDE: devConf["DEV_LOCATOR_EDITOR"] as
| "vscode" | "vscode"
| "atom" | "atom"
| "webstorm" | "webstorm"
| "vscode-insiders" | "vscode-insiders",
| "") || undefined, componentLocation: true,
componentLocation: true, jsxLocation: true,
jsxLocation: true, }
}, : undefined,
}), }),
suid(), suid(),
solid(), solid(),