build: update all deps and migrate to biome

This commit is contained in:
Haoyu Xu
2025-10-04 02:11:24 +08:00
parent 43850d47ea
commit 5c9e9eba84
133 changed files with 834 additions and 1962 deletions

View File

@@ -1,50 +0,0 @@
import js from '@eslint/js'
import react from 'eslint-plugin-react'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import baseConfig from '@aklive2d/eslint-config'
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default [
...baseConfig,
{ ignores: ['dist'] },
{
settings: { react: { version: '18.3' } },
plugins: {
react,
'react-hooks': reactHooks,
'react-refresh': reactRefresh,
},
rules: {
...js.configs.recommended.rules,
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
...reactHooks.configs.recommended.rules,
'react/jsx-no-target-blank': 'off',
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
},
...tsConfig,
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.browser,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
},
]

View File

@@ -7,17 +7,16 @@
"dev:directory": "bunx --bun vite --clearScreen false", "dev:directory": "bunx --bun vite --clearScreen false",
"build:directory": "mode=build:directory bun runner.ts", "build:directory": "mode=build:directory bun runner.ts",
"preview:directory": "bunx --bun vite preview", "preview:directory": "bunx --bun vite preview",
"lint": "eslint && stylelint \"src/**/*.css\" \"src/**/*.scss\" && prettier --check ." "lint": "biome lint --write .",
"lint:fix": "biome check --write ."
}, },
"dependencies": { "dependencies": {
"react": "^19.0.0", "react": "^19.2.0",
"react-dom": "^19.0.0", "react-dom": "^19.2.0",
"jotai": "^2.11.3", "jotai": "^2.15.0",
"react-router-dom": "^7.5.2", "react-router-dom": "^7.9.3",
"react-simple-typewriter": "^5.0.1", "react-simple-typewriter": "^5.0.1",
"reset-css": "^5.0.2", "reset-css": "^5.0.2",
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/stylelint-config": "workspace:*",
"@aklive2d/postcss-config": "workspace:*", "@aklive2d/postcss-config": "workspace:*",
"@aklive2d/config": "workspace:*", "@aklive2d/config": "workspace:*",
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*",
@@ -25,24 +24,18 @@
"@aklive2d/operator": "workspace:*", "@aklive2d/operator": "workspace:*",
"@aklive2d/vite-helpers": "workspace:*", "@aklive2d/vite-helpers": "workspace:*",
"@aklive2d/showcase": "workspace:*", "@aklive2d/showcase": "workspace:*",
"@aklive2d/module": "workspace:*", "@aklive2d/module": "workspace:*"
"@aklive2d/prettier-config": "workspace:*"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^19.0.8", "@types/react": "^19.2.0",
"@types/react-dom": "^19.0.3", "@types/react-dom": "^19.2.0",
"@vitejs/plugin-react-swc": "^3.5.0", "@vitejs/plugin-react-swc": "^4.1.0",
"vite": "^6.1.5", "autoprefixer": "^10.4.20",
"eslint-plugin-react": "^7.37.4",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.18",
"prop-types": "^15.8.1", "prop-types": "^15.8.1",
"sass": "^1.84.0", "sass": "^1.93.2",
"autoprefixer": "^10.4.20" "vite": "^7.1.9"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,7 +1,7 @@
import path from 'node:path' import path from 'node:path'
import { file } from '@aklive2d/libs'
import { DIST_DIR } from '@aklive2d/showcase' import { DIST_DIR } from '@aklive2d/showcase'
import { build as viteBuild } from 'vite' import { build as viteBuild } from 'vite'
import { file } from '@aklive2d/libs'
async function main() { async function main() {
await viteBuild() await viteBuild()

View File

@@ -1,9 +1,9 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom/client' import ReactDOM from 'react-dom/client'
import { createBrowserRouter, RouterProvider } from 'react-router-dom' import { createBrowserRouter, RouterProvider } from 'react-router-dom'
import Root from '@/routes/Root'
import Error from '@/routes/Error'
import routes from '@/routes' import routes from '@/routes'
import ErrorPage from '@/routes/Error'
import Root from '@/routes/Root'
import '@/App.scss' import '@/App.scss'
import 'reset-css' import 'reset-css'
@@ -11,7 +11,7 @@ const router = createBrowserRouter([
{ {
path: '/', path: '/',
element: <Root />, element: <Root />,
errorElement: <Error />, errorElement: <ErrorPage />,
children: routes.filter((item) => item.routeable), children: routes.filter((item) => item.routeable),
}, },
]) ])

View File

@@ -1,5 +1,5 @@
import { useState } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { useState } from 'react'
import classes from './scss/dropdown.module.scss' import classes from './scss/dropdown.module.scss'
export default function Dropdown(props) { export default function Dropdown(props) {

View File

@@ -1,8 +1,8 @@
import { useState } from 'react'
import classes from './scss/popup.module.scss'
import ReturnButton from '@/component/return_button'
import Border from '@/component/border'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { useState } from 'react'
import Border from '@/component/border'
import ReturnButton from '@/component/return_button'
import classes from './scss/popup.module.scss'
export default function Popup(props) { export default function Popup(props) {
const [hidden, setHidden] = useState(true) const [hidden, setHidden] = useState(true)

View File

@@ -1,7 +1,7 @@
import { useState } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import classes from './scss/search_box.module.scss' import { useState } from 'react'
import { useI18n } from '@/state/language' import { useI18n } from '@/state/language'
import classes from './scss/search_box.module.scss'
export default function SearchBox(props) { export default function SearchBox(props) {
const { i18n } = useI18n() const { i18n } = useI18n()

View File

@@ -1,7 +1,7 @@
import { useState, useEffect } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import classes from './scss/switch.module.scss' import { useEffect, useState } from 'react'
import { useI18n } from '@/state/language' import { useI18n } from '@/state/language'
import classes from './scss/switch.module.scss'
export default function Switch(props) { export default function Switch(props) {
const [on, setOn] = useState(props.on) const [on, setOn] = useState(props.on)

View File

@@ -1,5 +1,5 @@
import { useEffect, useState, useCallback } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { useCallback, useEffect, useState } from 'react'
import classes from './scss/totop_button.module.scss' import classes from './scss/totop_button.module.scss'
export default function ToTopButton(props) { export default function ToTopButton(props) {

View File

@@ -1,5 +1,5 @@
import { useEffect, useRef } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { useEffect, useRef } from 'react'
export default function VoiceElement({ src, replay, handleAduioStateChange }) { export default function VoiceElement({ src, replay, handleAduioStateChange }) {
const audioRef = useRef(null) const audioRef = useRef(null)

View File

@@ -1,17 +1,17 @@
import { useState, useEffect, useMemo, useRef, useCallback } from 'react' import buildConfig from '!/config.json'
import { useNavigate, useRouteError } from 'react-router-dom' import { Player as SpinePlayer } from '@aklive2d/module'
import header from '@/scss/root/header.module.scss'
import classes from '@/scss/error/Error.module.scss'
import { useAtom } from 'jotai' import { useAtom } from 'jotai'
import { atomWithStorage } from 'jotai/utils' import { atomWithStorage } from 'jotai/utils'
import Switch from '@/component/switch' import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import ReturnButton from '@/component/return_button' import { useNavigate, useRouteError } from 'react-router-dom'
import { Typewriter } from 'react-simple-typewriter' import { Typewriter } from 'react-simple-typewriter'
import { useHeader } from '@/state/header' import ReturnButton from '@/component/return_button'
import Switch from '@/component/switch'
import VoiceElement from '@/component/voice' import VoiceElement from '@/component/voice'
import { Player as SpinePlayer } from '@aklive2d/module' import classes from '@/scss/error/Error.module.scss'
import header from '@/scss/root/header.module.scss'
import { useHeader } from '@/state/header'
import useInsight from '@/state/insight' import useInsight from '@/state/insight'
import buildConfig from '!/config.json'
const voiceOnAtom = atomWithStorage('voiceOn', false) const voiceOnAtom = atomWithStorage('voiceOn', false)
const config = buildConfig.error_files const config = buildConfig.error_files
@@ -20,8 +20,7 @@ const filename = obj.key.replace(/#/g, '%23')
const padding = obj.paddings const padding = obj.paddings
let lastVoiceState = 'ended' let lastVoiceState = 'ended'
export default function Error() { export default function ErrorPage() {
// eslint-disable-next-line no-unused-vars
const _trackEvt = useInsight() const _trackEvt = useInsight()
const error = useRouteError() const error = useRouteError()
const navigate = useNavigate() const navigate = useNavigate()

View File

@@ -1,26 +1,26 @@
import { useState, useEffect, useMemo, useCallback } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { import {
Outlet,
Link, Link,
NavLink, NavLink,
useNavigate, Outlet,
ScrollRestoration, ScrollRestoration,
useNavigate,
} from 'react-router-dom' } from 'react-router-dom'
import classes from '@/scss/root/Root.module.scss'
import header from '@/scss/root/header.module.scss'
import footer from '@/scss/root/footer.module.scss'
import drawer from '@/scss/root/drawer.module.scss'
import routes from '@/routes'
import { useConfig } from '@/state/config'
import { useHeader } from '@/state/header'
import { useAppbar } from '@/state/appbar'
import { useI18n, useLanguage } from '@/state/language'
import Dropdown from '@/component/dropdown'
import Popup from '@/component/popup'
import Border from '@/component/border' import Border from '@/component/border'
import CharIcon from '@/component/char_icon' import CharIcon from '@/component/char_icon'
import Dropdown from '@/component/dropdown'
import Popup from '@/component/popup'
import ToTopButton from '@/component/totop_button' import ToTopButton from '@/component/totop_button'
import routes from '@/routes'
import drawer from '@/scss/root/drawer.module.scss'
import footer from '@/scss/root/footer.module.scss'
import header from '@/scss/root/header.module.scss'
import classes from '@/scss/root/Root.module.scss'
import { useAppbar } from '@/state/appbar'
import { useConfig } from '@/state/config'
import { useHeader } from '@/state/header'
import { useI18n, useLanguage } from '@/state/language'
const currentYear = new Date().getFullYear() const currentYear = new Date().getFullYear()

View File

@@ -1,27 +1,25 @@
import { useState, useEffect, useCallback, useMemo } from 'react' import buildConfig from '!/config.json'
import PropTypes from 'prop-types'
import { NavLink, Link } from 'react-router-dom'
import classes from '@/scss/home/Home.module.scss'
import { useConfig } from '@/state/config'
import { useI18n } from '@/state/language'
import { useLanguage } from '@/state/language'
import { useHeader } from '@/state/header'
import { useAppbar } from '@/state/appbar'
import VoiceElement from '@/component/voice'
import { useAtom } from 'jotai' import { useAtom } from 'jotai'
import { atomWithStorage } from 'jotai/utils' import { atomWithStorage } from 'jotai/utils'
import CharIcon from '@/component/char_icon' import PropTypes from 'prop-types'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { Link, NavLink } from 'react-router-dom'
import Border from '@/component/border' import Border from '@/component/border'
import useInsight from '@/state/insight' import CharIcon from '@/component/char_icon'
import Switch from '@/component/switch'
import SearchBox from '@/component/search_box' import SearchBox from '@/component/search_box'
import buildConfig from '!/config.json' import Switch from '@/component/switch'
import VoiceElement from '@/component/voice'
import classes from '@/scss/home/Home.module.scss'
import { useAppbar } from '@/state/appbar'
import { useConfig } from '@/state/config'
import { useHeader } from '@/state/header'
import useInsight from '@/state/insight'
import { useI18n, useLanguage } from '@/state/language'
const voiceOnAtom = atomWithStorage('voiceOn', false) const voiceOnAtom = atomWithStorage('voiceOn', false)
let lastVoiceState = 'ended' let lastVoiceState = 'ended'
export default function Home() { export default function Home() {
// eslint-disable-next-line
const _trackEvt = useInsight() const _trackEvt = useInsight()
const { setTitle, setTabs, currentTab, setHeaderIcon, setFastNavigation } = const { setTitle, setTabs, currentTab, setHeaderIcon, setFastNavigation } =
useHeader() useHeader()
@@ -122,7 +120,7 @@ export default function Home() {
const list = navigationList.filter((item) => { const list = navigationList.filter((item) => {
return ( return (
item.name.toLowerCase().indexOf(searchField.toLowerCase()) !== item.name.toLowerCase().indexOf(searchField.toLowerCase()) !==
-1 || item.type === 'date' -1 || item.type === 'date'
) )
}) })
const newList = [] const newList = []
@@ -239,7 +237,7 @@ export default function Home() {
} }
viewBox={ viewBox={
entry.type === entry.type ===
'operator' 'operator'
? '0 0 88.969 71.469' ? '0 0 88.969 71.469'
: '0 0 94.563 67.437' : '0 0 94.563 67.437'
} }
@@ -251,25 +249,24 @@ export default function Home() {
} }
> >
{language === {language ===
'zh-CN' 'zh-CN'
? entry.type === ? entry.type ===
'skin' 'skin'
? `${ ? `${entry
entry .skinName[
.skinName[ 'zh-CN'
'zh-CN' ]
] } · ${entry.operatorName}`
} · ${entry.operatorName}`
: entry.operatorName : entry.operatorName
: entry : entry
.skinName[ .skinName[
'en-US' 'en-US'
]} ]}
</section> </section>
<section <section
className={ className={
classes[ classes[
'arrow-icon' 'arrow-icon'
] ]
} }
> >
@@ -386,9 +383,9 @@ function OperatorElement({ item, hidden, handleVoicePlay }) {
<span className={classes.text}> <span className={classes.text}>
{ {
item.codename[ item.codename[
language.startsWith('en') language.startsWith('en')
? alternateLang ? alternateLang
: textDefaultLang : textDefaultLang
] ]
} }
</span> </span>

View File

@@ -1,18 +1,17 @@
import { useState, useEffect, useRef, useCallback, useMemo } from 'react'
import { useParams, useNavigate, Link } from 'react-router-dom'
import classes from '@/scss/operator/Operator.module.scss'
import { useConfig } from '@/state/config'
import { useLanguage } from '@/state/language'
import { useHeader } from '@/state/header'
import { useAppbar } from '@/state/appbar'
import VoiceElement from '@/component/voice'
import useInsight from '@/state/insight'
import { Player as SpinePlayer } from '@aklive2d/module'
import Border from '@/component/border'
import { useI18n } from '@/state/language'
import Switch from '@/component/switch'
import { atom, useAtom } from 'jotai'
import buildConfig from '!/config.json' import buildConfig from '!/config.json'
import { Player as SpinePlayer } from '@aklive2d/module'
import { atom, useAtom } from 'jotai'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { Link, useNavigate, useParams } from 'react-router-dom'
import Border from '@/component/border'
import Switch from '@/component/switch'
import VoiceElement from '@/component/voice'
import classes from '@/scss/operator/Operator.module.scss'
import { useAppbar } from '@/state/appbar'
import { useConfig } from '@/state/config'
import { useHeader } from '@/state/header'
import useInsight from '@/state/insight'
import { useI18n, useLanguage } from '@/state/language'
const musicMapping = buildConfig.music_mapping const musicMapping = buildConfig.music_mapping
const getVoiceFoler = (lang) => { const getVoiceFoler = (lang) => {
@@ -56,7 +55,6 @@ export default function Operator() {
const { setTitle, setTabs, setHeaderIcon, setFastNavigation } = useHeader() const { setTitle, setTabs, setHeaderIcon, setFastNavigation } = useHeader()
const { setExtraArea } = useAppbar() const { setExtraArea } = useAppbar()
const [config, setConfig] = useState(null) const [config, setConfig] = useState(null)
// eslint-disable-next-line no-unused-vars
const _trackEvt = useInsight(`/${key}`) const _trackEvt = useInsight(`/${key}`)
const spineRef = useRef(null) const spineRef = useRef(null)
const [spineAnimationName, setSpineAnimationName] = useState( const [spineAnimationName, setSpineAnimationName] = useState(
@@ -567,8 +565,8 @@ export default function Operator() {
style={ style={
config.invert_filter config.invert_filter
? { ? {
filter: 'invert(1)', filter: 'invert(1)',
} }
: {} : {}
} }
/> />

View File

@@ -1,6 +1,6 @@
import CONFIG from '!/config.json' import CONFIG from '!/config.json'
import { useCallback } from 'react'
import { atom, useAtom } from 'jotai' import { atom, useAtom } from 'jotai'
import { useCallback } from 'react'
const officialUpdateAtom = atom({}) const officialUpdateAtom = atom({})
let operators = [] let operators = []

View File

@@ -1,5 +1,5 @@
import { useEffect } from 'react'
import { atom, useAtom } from 'jotai' import { atom, useAtom } from 'jotai'
import { useEffect } from 'react'
import { useI18n } from '@/state/language' import { useI18n } from '@/state/language'
const keyAtom = atom('') const keyAtom = atom('')

View File

@@ -1,5 +1,5 @@
import React from 'react'
import buildConfig from '!/config.json' import buildConfig from '!/config.json'
import React from 'react'
export default (path = null, skipPageView = false) => { export default (path = null, skipPageView = false) => {
React.useEffect(() => { React.useEffect(() => {

View File

@@ -1,5 +0,0 @@
import baseConfig from '@aklive2d/stylelint-config'
/** @type {import('stylelint').Config} */
export default {
...baseConfig,
}

View File

@@ -1,9 +1,9 @@
import path from 'node:path' import path from 'node:path'
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import config from '@aklive2d/config' import config from '@aklive2d/config'
import * as showcaseDirs from '@aklive2d/showcase' import * as showcaseDirs from '@aklive2d/showcase'
import { copyDirectoryData } from '@aklive2d/vite-helpers' import { copyDirectoryData } from '@aklive2d/vite-helpers'
import react from '@vitejs/plugin-react-swc'
import { defineConfig } from 'vite'
// https://vite.dev/config/ // https://vite.dev/config/
export default defineConfig(async () => { export default defineConfig(async () => {

2
apps/module/.ignore Normal file
View File

@@ -0,0 +1,2 @@
spine-ts
build

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'spine-ts'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.browser,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -4,17 +4,13 @@
"version": "0.0.0", "version": "0.0.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"lint": "eslint && prettier --check ." "lint": "biome lint --write .",
"lint:fix": "biome check --write ."
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"devDependencies": { "devDependencies": {
"@aklive2d/postcss-config": "workspace:*", "@aklive2d/postcss-config": "workspace:*"
"@aklive2d/prettier-config": "workspace:*",
"@aklive2d/stylelint-config": "workspace:*",
"@aklive2d/eslint-config": "workspace:*"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -208,7 +208,9 @@ export class Player {
: config.premultipliedAlpha, : config.premultipliedAlpha,
fps: config.fps ? config.fps : 60, fps: config.fps ? config.fps : 60,
scale: config.scale ? config.scale : 1, scale: config.scale ? config.scale : 1,
// biome-ignore lint/suspicious/noEmptyBlockStatements: placeholder
success: config.success ? config.success : (_widget) => {}, success: config.success ? config.success : (_widget) => {},
// biome-ignore lint/suspicious/noEmptyBlockStatements: placeholder
error: config.error ? config.error : (_widget, _msg) => {}, error: config.error ? config.error : (_widget, _msg) => {},
defaultMix: defaultMix:
typeof config.defaultMix === 'undefined' typeof config.defaultMix === 'undefined'
@@ -303,7 +305,7 @@ export class Player {
this.canvas.height = Math.floor(h * this.devicePixelRatio) this.canvas.height = Math.floor(h * this.devicePixelRatio)
} }
this.context.gl.viewport(0, 0, this.canvas.width, this.canvas.height) this.context.gl.viewport(0, 0, this.canvas.width, this.canvas.height)
// eslint-disable-next-line // biome-ignore lint/suspicious/noEmptyBlockStatements: placeholder
if (resizeMode === spine.webgl.ResizeMode.Stretch) { if (resizeMode === spine.webgl.ResizeMode.Stretch) {
} else if (resizeMode === spine.webgl.ResizeMode.Expand) { } else if (resizeMode === spine.webgl.ResizeMode.Expand) {
this.sceneRenderer.camera.setViewport(w, h) this.sceneRenderer.camera.setViewport(w, h)

View File

@@ -1,5 +0,0 @@
import baseConfig from '@aklive2d/stylelint-config'
/** @type {import('stylelint').Config} */
export default {
...baseConfig,
}

View File

@@ -1 +0,0 @@
spine-player.css

View File

@@ -1,29 +0,0 @@
import baseConfig from '@aklive2d/eslint-config'
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...baseConfig,
...tsConfig,
{
ignores: ['dist', 'spine-ts'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.browser,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -9,24 +9,20 @@
"build": "mode=build bun runner.ts", "build": "mode=build bun runner.ts",
"build:directory": "mode=build:directory bun runner.ts", "build:directory": "mode=build:directory bun runner.ts",
"preview:showcase": "bunx --bun vite preview", "preview:showcase": "bunx --bun vite preview",
"lint": "eslint && prettier --check ." "lint": "biome lint --write .",
"lint:fix": "biome check --write ."
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"devDependencies": { "devDependencies": {
"vite": "^6.1.5", "vite": "^7.1.9",
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/postcss-config": "workspace:*", "@aklive2d/postcss-config": "workspace:*",
"@aklive2d/stylelint-config": "workspace:*",
"@aklive2d/config": "workspace:*", "@aklive2d/config": "workspace:*",
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*",
"@aklive2d/assets": "workspace:*", "@aklive2d/assets": "workspace:*",
"@aklive2d/operator": "workspace:*", "@aklive2d/operator": "workspace:*",
"@aklive2d/vite-helpers": "workspace:*", "@aklive2d/vite-helpers": "workspace:*",
"@aklive2d/module": "workspace:*", "@aklive2d/module": "workspace:*"
"@aklive2d/prettier-config": "workspace:*"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,8 +1,8 @@
import path from 'node:path' import path from 'node:path'
import { build as viteBuild } from 'vite'
import operators from '@aklive2d/operator'
import { envParser, file } from '@aklive2d/libs' import { envParser, file } from '@aklive2d/libs'
import { copyShowcaseData, copyProjectJSON } from '@aklive2d/vite-helpers' import operators from '@aklive2d/operator'
import { copyProjectJSON, copyShowcaseData } from '@aklive2d/vite-helpers'
import { build as viteBuild } from 'vite'
import * as dirs from './index.js' import * as dirs from './index.js'
const build = async (namesToBuild: string[], mode: string) => { const build = async (namesToBuild: string[], mode: string) => {

View File

@@ -1,17 +1,17 @@
import Voice from '@/components/voice'
import Fallback from '@/components/fallback'
import Music from '@/components/music'
import Player from '@/components/player'
import Background from '@/components/background' import Background from '@/components/background'
import Logo from '@/components/logo'
import Insight from '@/components/insight'
import Events from '@/components/events' import Events from '@/components/events'
import Fallback from '@/components/fallback'
import { import {
isWebGLSupported,
insertHTMLChild,
addEventListeners, addEventListeners,
insertHTMLChild,
isWebGLSupported,
updateElementPosition, updateElementPosition,
} from '@/components/helper' } from '@/components/helper'
import Insight from '@/components/insight'
import Logo from '@/components/logo'
import Music from '@/components/music'
import Player from '@/components/player'
import Voice from '@/components/voice'
import '@/components/aklive2d.css' import '@/components/aklive2d.css'
export default class AKLive2D { export default class AKLive2D {

View File

@@ -1,9 +1,9 @@
import { import {
insertHTMLChild,
readFile, readFile,
updateHTMLOptions,
showRelatedHTML, showRelatedHTML,
syncHTMLValue, syncHTMLValue,
insertHTMLChild, updateHTMLOptions,
} from '@/components/helper' } from '@/components/helper'
import '@/components/background.css' import '@/components/background.css'
import buildConfig from '!/config.json' import buildConfig from '!/config.json'

View File

@@ -83,9 +83,9 @@ export const syncHTMLValue = (source, targetID) => {
document.getElementById(targetID).value = source.value document.getElementById(targetID).value = source.value
} }
export const readFile = (file, callback = () => {}) => { export const readFile = (file, callback = null) => {
if (!file) return if (!file) return
callback(URL.createObjectURL(file.slice()), file.type) callback && callback(URL.createObjectURL(file.slice()), file.type)
} }
export const createCustomEvent = (name, withArg = false) => { export const createCustomEvent = (name, withArg = false) => {

View File

@@ -1,5 +1,5 @@
import { createCustomEvent } from '@/components/helper'
import buildConfig from '!/config.json' import buildConfig from '!/config.json'
import { createCustomEvent } from '@/components/helper'
export default class Insight { export default class Insight {
#isInsightInited = false #isInsightInited = false

View File

@@ -1,9 +1,9 @@
import { import {
insertHTMLChild, insertHTMLChild,
updateElementPosition,
readFile, readFile,
showRelatedHTML, showRelatedHTML,
syncHTMLValue, syncHTMLValue,
updateElementPosition,
} from '@/components/helper' } from '@/components/helper'
import '@/components/logo.css' import '@/components/logo.css'
import buildConfig from '!/config.json' import buildConfig from '!/config.json'

View File

@@ -1,12 +1,12 @@
import buildConfig from '!/config.json'
import { import {
getCurrentHTMLOptions,
insertHTMLChild, insertHTMLChild,
updateHTMLOptions, readFile,
showRelatedHTML, showRelatedHTML,
syncHTMLValue, syncHTMLValue,
readFile, updateHTMLOptions,
getCurrentHTMLOptions,
} from '@/components/helper' } from '@/components/helper'
import buildConfig from '!/config.json'
export default class Music { export default class Music {
#el = document.createElement('div') #el = document.createElement('div')

View File

@@ -1,11 +1,11 @@
import { Player as SpinePlayer } from '@aklive2d/module'
import { import {
createCustomEvent,
insertHTMLChild, insertHTMLChild,
updateHTMLOptions,
showRelatedHTML, showRelatedHTML,
syncHTMLValue, syncHTMLValue,
createCustomEvent, updateHTMLOptions,
} from '@/components/helper' } from '@/components/helper'
import { Player as SpinePlayer } from '@aklive2d/module'
import '@/components/player.css' import '@/components/player.css'
import buildConfig from '!/config.json' import buildConfig from '!/config.json'

View File

@@ -1,4 +1,4 @@
@import 'https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500;700&family=Noto+Sans+KR:wght@400;500;700&family=Noto+Sans+SC:wght@400;500;700&family=Noto+Sans:wght@400;500;700&display=swap'; @import "https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500;700&family=Noto+Sans+KR:wght@400;500;700&family=Noto+Sans+SC:wght@400;500;700&family=Noto+Sans:wght@400;500;700&display=swap";
#voice-box { #voice-box {
position: fixed; position: fixed;
@@ -9,7 +9,7 @@
opacity: 0; opacity: 0;
margin: 16px; margin: 16px;
font-family: font-family:
'Noto Sans SC', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans', sans-serif; "Noto Sans SC", "Noto Sans JP", "Noto Sans KR", "Noto Sans", sans-serif;
transition: opacity 0.5s cubic-bezier(0.65, 0.05, 0.36, 1); transition: opacity 0.5s cubic-bezier(0.65, 0.05, 0.36, 1);
} }
@@ -59,7 +59,7 @@
height: 32px; height: 32px;
width: 32px; width: 32px;
background-color: rgb(0 0 0); background-color: rgb(0 0 0);
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAXCAYAAAAGAx/kAAACGElEQVQ4jY2UO4sUQRSFv+6e3hkf6yqi62LiD1DRwGRFZDUTRTAVMTHzHxhosBgr+IhMzIXFRzKJYiQoCLqroYGCgiDK6K6z8+hj0Kd2yrZn8EJRza06X91761Ynkphgh4ETwBB4BrwZu1NS3WhJui1pTSNblXTLa/9oxoEWNd4W/xc0K6kzAfRd0lxV16jJdg6YBtaAB8AvoPA4D+wEZoEvsSgGJYAiXwf4EEFyYOC1qYqmFhQ2bQEO+MYKILMv1tWCikqKm4CPwKoF00DTa6pqkqiP9gIHgR3AWaDvdJIoip4jewh8BVaAz1XQOeAKcNcp9O0fAqlTLgzsApeBa8BSNbUUaAFvgVdMtnlHmsXiEHrHpw+iaOps4BRlDUASQDnw3uA9QHsCqA3sMmjFmhRJmaSmO/SmpCeSjktarunqd5IWJLUl3bCmKSlLJGWuVQbMAHcoi3oPWAAOOerXwFPgErAVuEjZGkNgkEhKDco9bwOuG/Ac+OS67ANOGngV+OYDewEUqt+gvLWmxxHgFHDapz52fV4C64Z3PW+AUsPyCJYCP4FHPuQMsNlRrHv0DRo2XP3Ccw/4Tdl8U2GTb6trYYimYNQ6Gw0pYDuwn1E7hJR3W3TMvp5hKbAM/IC/n8hR4L6hqSPJGT3QjPIfFX4nDeAC8CIGhTrBqNsz16plWN/R9KJShGzUiCBBnFS+FYmCP41gBaA/cImMsTl24NIAAAAASUVORK5CYII='); background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAXCAYAAAAGAx/kAAACGElEQVQ4jY2UO4sUQRSFv+6e3hkf6yqi62LiD1DRwGRFZDUTRTAVMTHzHxhosBgr+IhMzIXFRzKJYiQoCLqroYGCgiDK6K6z8+hj0Kd2yrZn8EJRza06X91761Ynkphgh4ETwBB4BrwZu1NS3WhJui1pTSNblXTLa/9oxoEWNd4W/xc0K6kzAfRd0lxV16jJdg6YBtaAB8AvoPA4D+wEZoEvsSgGJYAiXwf4EEFyYOC1qYqmFhQ2bQEO+MYKILMv1tWCikqKm4CPwKoF00DTa6pqkqiP9gIHgR3AWaDvdJIoip4jewh8BVaAz1XQOeAKcNcp9O0fAqlTLgzsApeBa8BSNbUUaAFvgVdMtnlHmsXiEHrHpw+iaOps4BRlDUASQDnw3uA9QHsCqA3sMmjFmhRJmaSmO/SmpCeSjktarunqd5IWJLUl3bCmKSlLJGWuVQbMAHcoi3oPWAAOOerXwFPgErAVuEjZGkNgkEhKDco9bwOuG/Ac+OS67ANOGngV+OYDewEUqt+gvLWmxxHgFHDapz52fV4C64Z3PW+AUsPyCJYCP4FHPuQMsNlRrHv0DRo2XP3Ccw/4Tdl8U2GTb6trYYimYNQ6Gw0pYDuwn1E7hJR3W3TMvp5hKbAM/IC/n8hR4L6hqSPJGT3QjPIfFX4nDeAC8CIGhTrBqNsz16plWN/R9KJShGzUiCBBnFS+FYmCP41gBaA/cImMsTl24NIAAAAASUVORK5CYII=");
background-position: center; background-position: center;
background-repeat: no-repeat; background-repeat: no-repeat;
} }

View File

@@ -1,9 +1,9 @@
import { import {
insertHTMLChild, insertHTMLChild,
updateElementPosition,
updateHTMLOptions,
showRelatedHTML, showRelatedHTML,
syncHTMLValue, syncHTMLValue,
updateElementPosition,
updateHTMLOptions,
} from '@/components/helper' } from '@/components/helper'
import '@/components/voice.css' import '@/components/voice.css'
import buildConfig from '!/config.json' import buildConfig from '!/config.json'

View File

@@ -1,5 +0,0 @@
import baseConfig from '@aklive2d/stylelint-config'
/** @type {import('stylelint').Config} */
export default {
...baseConfig,
}

View File

@@ -1,8 +1,8 @@
import { defineConfig } from 'vite'
import path from 'node:path' import path from 'node:path'
import { has } from '@aklive2d/operator'
import { envParser, file } from '@aklive2d/libs' import { envParser, file } from '@aklive2d/libs'
import { has } from '@aklive2d/operator'
import { copyShowcaseData } from '@aklive2d/vite-helpers' import { copyShowcaseData } from '@aklive2d/vite-helpers'
import { defineConfig } from 'vite'
import * as dirs from './index.js' import * as dirs from './index.js'
// https://vite.dev/config/ // https://vite.dev/config/

269
biome.json Normal file
View File

@@ -0,0 +1,269 @@
{
"$schema": "https://biomejs.dev/schemas/2.2.5/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"includes": [
"apps/**/*",
"packages/**/*"
],
"ignoreUnknown": false
},
"formatter": {
"enabled": true,
"formatWithErrors": false,
"indentStyle": "space",
"indentWidth": 4,
"lineEnding": "lf",
"lineWidth": 80,
"attributePosition": "auto",
"bracketSameLine": false,
"bracketSpacing": true,
"expand": "auto",
"useEditorconfig": true
},
"linter": {
"enabled": true,
"rules": {
"recommended": false,
"style": {
"useBlockStatements": "off"
}
},
"includes": [
"**",
"!dist"
]
},
"javascript": {
"formatter": {
"jsxQuoteStyle": "double",
"quoteProperties": "asNeeded",
"trailingCommas": "es5",
"semicolons": "asNeeded",
"arrowParentheses": "always",
"bracketSameLine": false,
"quoteStyle": "single",
"attributePosition": "auto",
"bracketSpacing": true
}
},
"html": {
"formatter": {
"selfCloseVoidElements": "always"
}
},
"overrides": [
{
"includes": [
"**/*.{js,jsx}",
"**/*.{ts,tsx}"
],
"javascript": {
"globals": [
"onanimationend",
"exports",
"ongamepadconnected",
"onlostpointercapture",
"onanimationiteration",
"onkeyup",
"onmousedown",
"onanimationstart",
"onslotchange",
"onprogress",
"ontransitionstart",
"onpause",
"onended",
"onpointerover",
"onscrollend",
"onformdata",
"ontransitionrun",
"onanimationcancel",
"ondrag",
"onchange",
"onbeforeinstallprompt",
"onbeforexrselect",
"onmessage",
"ontransitioncancel",
"onpointerdown",
"onabort",
"onpointerout",
"oncuechange",
"ongotpointercapture",
"onscrollsnapchanging",
"onsearch",
"onsubmit",
"onstalled",
"onsuspend",
"onreset",
"onerror",
"onresize",
"onmouseenter",
"ongamepaddisconnected",
"ondragover",
"onbeforetoggle",
"onmouseover",
"onpagehide",
"onmousemove",
"onratechange",
"onmessageerror",
"onwheel",
"ondevicemotion",
"onauxclick",
"ontransitionend",
"onpaste",
"onpageswap",
"ononline",
"ondeviceorientationabsolute",
"onkeydown",
"onclose",
"onselect",
"onpageshow",
"onpointercancel",
"onbeforematch",
"onpointerrawupdate",
"ondragleave",
"onscrollsnapchange",
"onseeked",
"onwaiting",
"onbeforeunload",
"onplaying",
"onvolumechange",
"ondragend",
"onstorage",
"onloadeddata",
"onfocus",
"onoffline",
"onplay",
"onafterprint",
"onclick",
"oncut",
"onmouseout",
"ondblclick",
"oncanplay",
"onloadstart",
"onappinstalled",
"onpointermove",
"ontoggle",
"oncontextmenu",
"onblur",
"oncancel",
"onbeforeprint",
"oncontextrestored",
"onloadedmetadata",
"onpointerup",
"onlanguagechange",
"oncopy",
"onselectstart",
"onscroll",
"onload",
"ondragstart",
"onbeforeinput",
"oncanplaythrough",
"oninput",
"oninvalid",
"ontimeupdate",
"ondurationchange",
"onselectionchange",
"onmouseup",
"location",
"onkeypress",
"onpointerleave",
"oncontextlost",
"ondrop",
"onsecuritypolicyviolation",
"oncontentvisibilityautostatechange",
"ondeviceorientation",
"onseeking",
"onrejectionhandled",
"onunload",
"onmouseleave",
"onhashchange",
"onpointerenter",
"onmousewheel",
"onunhandledrejection",
"ondragenter",
"onpopstate",
"onpagereveal",
"onemptied"
]
},
"linter": {
"rules": {
"complexity": {
"noAdjacentSpacesInRegex": "error",
"noExtraBooleanCast": "error",
"noUselessCatch": "error",
"noUselessEscapeInRegex": "error"
},
"correctness": {
"noConstAssign": "error",
"noConstantCondition": "error",
"noEmptyCharacterClassInRegex": "error",
"noEmptyPattern": "error",
"noGlobalObjectCalls": "error",
"noInvalidBuiltinInstantiation": "error",
"noInvalidConstructorSuper": "error",
"noNonoctalDecimalEscape": "error",
"noPrecisionLoss": "error",
"noSelfAssign": "error",
"noSetterReturn": "error",
"noSwitchDeclarations": "error",
"noUndeclaredVariables": "error",
"noUnreachable": "error",
"noUnreachableSuper": "error",
"noUnsafeFinally": "error",
"noUnsafeOptionalChaining": "error",
"noUnusedLabels": "error",
"noUnusedPrivateClassMembers": "error",
"noUnusedVariables": "error",
"useIsNan": "error",
"useValidForDirection": "error",
"useValidTypeof": "error",
"useYield": "error"
},
"suspicious": {
"noAsyncPromiseExecutor": "error",
"noCatchAssign": "error",
"noClassAssign": "error",
"noCompareNegZero": "error",
"noConstantBinaryExpressions": "error",
"noControlCharactersInRegex": "error",
"noDebugger": "error",
"noDuplicateCase": "error",
"noDuplicateClassMembers": "error",
"noDuplicateElseIf": "error",
"noDuplicateObjectKeys": "error",
"noDuplicateParameters": "error",
"noEmptyBlockStatements": "error",
"noFallthroughSwitchClause": "error",
"noFunctionAssign": "error",
"noGlobalAssign": "error",
"noImportAssign": "error",
"noIrregularWhitespace": "error",
"noMisleadingCharacterClass": "error",
"noPrototypeBuiltins": "error",
"noRedeclare": "error",
"noShadowRestrictedNames": "error",
"noSparseArray": "error",
"noUnsafeNegation": "error",
"noUselessRegexBackrefs": "error",
"noWith": "error",
"useGetterReturn": "error"
}
}
}
}
],
"assist": {
"enabled": true,
"actions": {
"source": {
"organizeImports": "on"
}
}
}
}

1034
bun.lock

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +0,0 @@
import baseConfig from "@aklive2d/eslint-config";
/** @type {import('eslint').Config} */
export default [
...baseConfig,
];

View File

@@ -1,43 +1,42 @@
{ {
"private": true, "private": true,
"scripts": { "scripts": {
"build": "turbo run build", "build": "turbo run build",
"dev:showcase": "turbo run dev:showcase --ui tui", "dev:showcase": "turbo run dev:showcase --ui tui",
"preview:showcase": "turbo run preview:showcase --ui tui", "preview:showcase": "turbo run preview:showcase --ui tui",
"dev:directory": "turbo run dev:directory --ui tui", "dev:directory": "turbo run dev:directory --ui tui",
"preview:directory": "turbo run preview:directory --ui tui", "preview:directory": "turbo run preview:directory --ui tui",
"preview": "http-server ./dist", "preview": "http-server ./dist",
"lint": "turbo run lint", "lint": "turbo run lint",
"update": "turbo run update", "update": "turbo run update",
"init": "turbo run init", "init": "turbo run init",
"download:game": "turbo run download:game", "download:game": "turbo run download:game",
"build:directory": "turbo run build:directory", "build:directory": "turbo run build:directory",
"build:cleanup": "turbo run build:cleanup" "build:cleanup": "turbo run build:cleanup"
}, },
"devDependencies": { "devDependencies": {
"@types/jsdom": "^21.1.7", "@biomejs/biome": "2.2.5",
"cz-conventional-changelog": "^3.3.0", "cz-conventional-changelog": "^3.3.0",
"eslint": "^9.32.0", "http-server": "^14.1.1",
"http-server": "^14.1.1", "turbo": "^2.5.8",
"prettier": "^3.6.2", "typescript": "5.9.3"
"stylelint": "^16.23.0", },
"turbo": "^2.5.5", "name": "aklive2d",
"typescript": "5.8.2" "type": "module",
}, "config": {
"name": "aklive2d", "commitizen": {
"type": "module", "path": "cz-conventional-changelog"
"config": { }
"commitizen": { },
"path": "cz-conventional-changelog" "packageManager": "bun@1.2.11",
} "workspaces": [
}, "packages/*",
"packageManager": "bun@1.2.11", "apps/*"
"workspaces": [ ],
"packages/*", "trustedDependencies": [
"apps/*" "@parcel/watcher",
], "@swc/core",
"trustedDependencies": [ "esbuild",
"@parcel/watcher", "sharp"
"@swc/core" ]
]
} }

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -1,6 +1,6 @@
import path from 'node:path' import path from 'node:path'
import { file } from '@aklive2d/libs'
import config from '@aklive2d/config' import config from '@aklive2d/config'
import { file } from '@aklive2d/libs'
import { DIST_DIR } from '../index.ts' import { DIST_DIR } from '../index.ts'
export default async (packageDir: string) => { export default async (packageDir: string) => {

View File

@@ -1,10 +1,10 @@
import path from 'node:path' import path from 'node:path'
import { type UnzipDownloadItem, unzipDownload } from '@aklive2d/downloader'
import { file } from '@aklive2d/libs' import { file } from '@aklive2d/libs'
import { unzipDownload, type UnzipDownloadItem } from '@aklive2d/downloader'
import { getOperatorId, getOperatorAlternativeId } from '@aklive2d/operator'
import { mapping } from '@aklive2d/music' import { mapping } from '@aklive2d/music'
import { getOperatorAlternativeId, getOperatorId } from '@aklive2d/operator'
import config from '../index.ts' import config from '../index.ts'
import type { UpdateList, ItemToDownload, AbInfosItem } from '../types.ts' import type { AbInfosItem, ItemToDownload, UpdateList } from '../types.ts'
export default async (dataDir: string) => { export default async (dataDir: string) => {
await Promise.all( await Promise.all(

View File

@@ -6,22 +6,19 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@aklive2d/config": "workspace:*", "@aklive2d/config": "workspace:*",
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*",
"@aklive2d/prettier-config": "workspace:*",
"@aklive2d/downloader": "workspace:*", "@aklive2d/downloader": "workspace:*",
"@aklive2d/operator": "workspace:*", "@aklive2d/operator": "workspace:*",
"@aklive2d/music": "workspace:*" "@aklive2d/music": "workspace:*"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"scripts": { "scripts": {
"build": "mode=build bun runner.ts", "build": "mode=build bun runner.ts",
"download:game": "mode=download bun runner.ts", "download:game": "mode=download bun runner.ts",
"lint": "eslint && prettier --check .", "lint": "biome lint --write .",
"lint:fix": "biome check --write .",
"build:cleanup": "rm -rf ./dist" "build:cleanup": "rm -rf ./dist"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,6 +1,6 @@
import path from 'node:path' import path from 'node:path'
import { envParser } from '@aklive2d/libs'
import config from '@aklive2d/config' import config from '@aklive2d/config'
import { envParser } from '@aklive2d/libs'
import build from './libs/build.ts' import build from './libs/build.ts'
import download from './libs/download.ts' import download from './libs/download.ts'

View File

@@ -1,3 +0,0 @@
dist
data
auto_update

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -1,8 +1,8 @@
import path from 'node:path' import path from 'node:path'
import sharp from 'sharp'
import { file } from '@aklive2d/libs'
import config from '@aklive2d/config' import config from '@aklive2d/config'
import { file } from '@aklive2d/libs'
import { mapping as musicMapping } from '@aklive2d/music' import { mapping as musicMapping } from '@aklive2d/music'
import sharp from 'sharp'
export const BACKGROUND_DIR = path.join( export const BACKGROUND_DIR = path.join(
import.meta.dirname, import.meta.dirname,

View File

@@ -5,21 +5,18 @@
"main": "index.ts", "main": "index.ts",
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"sharp": "^0.33.5", "sharp": "^0.34.4",
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*",
"@aklive2d/config": "workspace:*", "@aklive2d/config": "workspace:*",
"@aklive2d/music": "workspace:*", "@aklive2d/music": "workspace:*"
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/prettier-config": "workspace:*"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"scripts": { "scripts": {
"build": "mode=build bun runner.js", "build": "mode=build bun runner.js",
"lint": "eslint && prettier --check .", "lint": "biome lint --write .",
"lint:fix": "biome check --write .",
"build:cleanup": "rm -rf ./dist ./data" "build:cleanup": "rm -rf ./dist ./data"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,5 +1,5 @@
import { build } from './index.ts'
import { envParser, error } from '@aklive2d/libs' import { envParser, error } from '@aklive2d/libs'
import { build } from './index.ts'
async function main() { async function main() {
let err let err

View File

@@ -1,3 +1 @@
dist
data
auto_update auto_update

View File

@@ -1,3 +0,0 @@
dist
data
auto_update

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -1,19 +1,19 @@
import path from 'node:path' import path from 'node:path'
import { file } from '@aklive2d/libs'
import { githubDownload } from '@aklive2d/downloader'
import config from '@aklive2d/config' import config from '@aklive2d/config'
import { githubDownload } from '@aklive2d/downloader'
import { file } from '@aklive2d/libs'
import operators, { import operators, {
getOperatorId,
getOperatorAlternativeId, getOperatorAlternativeId,
getOperatorId,
OPERATOR_SOURCE_FOLDER, OPERATOR_SOURCE_FOLDER,
} from '@aklive2d/operator' } from '@aklive2d/operator'
import type { import type {
Region,
CharwordTableJson,
OperatorCharwordTable,
CharwordTable, CharwordTable,
VoiceRegionObject, CharwordTableJson,
InfoRegionObject, InfoRegionObject,
OperatorCharwordTable,
Region,
VoiceRegionObject,
} from './types.ts' } from './types.ts'
// zh_TW uses an older version of charword_table.json // zh_TW uses an older version of charword_table.json

View File

@@ -8,19 +8,16 @@
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*",
"@aklive2d/config": "workspace:*", "@aklive2d/config": "workspace:*",
"@aklive2d/downloader": "workspace:*", "@aklive2d/downloader": "workspace:*",
"@aklive2d/operator": "workspace:*", "@aklive2d/operator": "workspace:*"
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/prettier-config": "workspace:*"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"scripts": { "scripts": {
"update": "mode=update bun runner.ts", "update": "mode=update bun runner.ts",
"build": "mode=build bun runner.ts", "build": "mode=build bun runner.ts",
"lint": "eslint && prettier --check .", "lint": "biome lint --write .",
"lint:fix": "biome check --write .",
"build:cleanup": "rm -rf ./dist" "build:cleanup": "rm -rf ./dist"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,5 +1,5 @@
import { build, update } from './index.ts'
import { envParser, error } from '@aklive2d/libs' import { envParser, error } from '@aklive2d/libs'
import { build, update } from './index.ts'
async function main() { async function main() {
let err: string[] = [] let err: string[] = []

View File

@@ -108,7 +108,6 @@ export type OperatorCharwordTable = {
} }
export type VoiceRegionObject = { export type VoiceRegionObject = {
// eslint-disable-next-line
[region in Region]: { [region in Region]: {
[wordkey: string]: { [wordkey: string]: {
[voiceId: string]: { [voiceId: string]: {
@@ -120,7 +119,6 @@ export type VoiceRegionObject = {
} }
export type InfoRegionObject = { export type InfoRegionObject = {
// eslint-disable-next-line
[region in Region]: { [region in Region]: {
[wordkey: string]: { [wordkey: string]: {
[voiceLangType: string]: string[] [voiceLangType: string]: string[]

View File

@@ -1,3 +0,0 @@
dist
data
auto_update

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -5,16 +5,13 @@
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*"
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/prettier-config": "workspace:*"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"scripts": { "scripts": {
"lint": "eslint && prettier --check ." "lint": "biome lint --write .",
"lint:fix": "biome check --write ."
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,3 +0,0 @@
dist
data
auto_update

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -1,9 +1,9 @@
import path from 'node:path'
import fs from 'node:fs'
import { Buffer } from 'node:buffer' import { Buffer } from 'node:buffer'
import fs from 'node:fs'
import path from 'node:path'
import { pipeline } from 'node:stream/promises' import { pipeline } from 'node:stream/promises'
import pThrottle from 'p-throttle'
import { file as fileLib } from '@aklive2d/libs' import { file as fileLib } from '@aklive2d/libs'
import pThrottle from 'p-throttle'
export type UnzipDownloadItem = { export type UnzipDownloadItem = {
name: string name: string

View File

@@ -5,12 +5,11 @@
"main": "index.ts", "main": "index.ts",
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*",
"@aklive2d/prettier-config": "workspace:*", "p-throttle": "^8.0.0"
"p-throttle": "^7.0.0"
}, },
"scripts": { "scripts": {
"lint": "eslint && prettier --check ." "lint": "biome lint --write .",
"lint:fix": "biome check --write ."
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,29 +0,0 @@
import js from '@eslint/js'
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
import globals from 'globals'
import tsConfig from './ts.js'
export default [
{ ignores: ['dist'] },
{
files: ['**/*.{js,jsx}', '**/*.{ts,tsx}'],
languageOptions: {
ecmaVersion: 2020,
globals: {
...globals.browser,
...globals.node,
},
parserOptions: {
ecmaVersion: 'latest',
ecmaFeatures: { jsx: true },
sourceType: 'module',
},
},
rules: {
...js.configs.recommended.rules,
},
},
eslintPluginPrettierRecommended,
]
export { tsConfig }

View File

@@ -1,4 +0,0 @@
import eslint from '@eslint/js'
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
export default [eslint.configs.recommended, eslintPluginPrettierRecommended]

View File

@@ -1,16 +0,0 @@
{
"name": "@aklive2d/eslint-config",
"version": "0.0.0",
"main": "index.js",
"type": "module",
"license": "MIT",
"dependencies": {
"@eslint/js": "^9.19.0",
"eslint": "^9.19.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-prettier": "^5.2.6",
"globals": "^16.0.0",
"typescript": "^5.8.3",
"typescript-eslint": "^8.31.1"
}
}

View File

@@ -1,10 +0,0 @@
import eslint from '@eslint/js'
import tseslint from 'typescript-eslint'
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
/** @type {import('eslint').Config} */
export default tseslint.config(
eslint.configs.recommended,
tseslint.configs.recommended,
eslintPluginPrettierRecommended
)

View File

@@ -1,3 +0,0 @@
dist
data
auto_update

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -1,9 +1,9 @@
import * as alphaComposite from './libs/alpha_composite.ts'
import * as env from './libs/env.ts'
import * as envParser from './libs/env_parser.ts'
import * as error from './libs/error.ts'
import * as file from './libs/file.ts' import * as file from './libs/file.ts'
import * as yaml from './libs/yaml.ts' import * as yaml from './libs/yaml.ts'
import * as env from './libs/env.ts'
import * as error from './libs/error.ts'
import * as alphaComposite from './libs/alpha_composite.ts'
import * as envParser from './libs/env_parser.ts'
export { file } export { file }
export { yaml } export { yaml }

View File

@@ -1,5 +1,5 @@
import sharp from 'sharp'
import path from 'node:path' import path from 'node:path'
import sharp from 'sharp'
export type Rect = { export type Rect = {
x: number x: number

View File

@@ -1,7 +1,7 @@
import fs from 'node:fs' import fs from 'node:fs'
import path from 'node:path' import path from 'node:path'
import type { CollectionTag, ScalarTag, SchemaOptions } from 'yaml'
import { parse } from 'yaml' import { parse } from 'yaml'
import type { Tags, ScalarTag, SchemaOptions, CollectionTag } from 'yaml'
export function read( export function read(
file_dir: string, file_dir: string,

View File

@@ -5,23 +5,20 @@
"main": "index.ts", "main": "index.ts",
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@aklive2d/eslint-config": "workspace:*", "sharp": "^0.34.4",
"@aklive2d/prettier-config": "workspace:*", "yaml": "^2.8.1",
"sharp": "^0.33.5",
"yaml": "^2.7.0",
"yauzl-promise": "^4.0.0", "yauzl-promise": "^4.0.0",
"yazl": "^3.3.1" "yazl": "^3.3.1"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"scripts": { "scripts": {
"lint": "eslint && prettier --check ." "lint": "biome lint --write .",
"lint:fix": "biome check --write ."
}, },
"devDependencies": { "devDependencies": {
"@types/yauzl-promise": "^4.0.1", "@types/yauzl-promise": "^4.0.1",
"@types/yazl": "^2.4.6" "@types/yazl": "^3.3.0"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,3 +1 @@
dist
data
auto_update auto_update

View File

@@ -1,3 +0,0 @@
dist
data
auto_update

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -1,16 +1,16 @@
import path from 'node:path' import path from 'node:path'
import { file } from '@aklive2d/libs'
import { githubDownload } from '@aklive2d/downloader'
import config from '@aklive2d/config' import config from '@aklive2d/config'
import { githubDownload } from '@aklive2d/downloader'
import { file } from '@aklive2d/libs'
import type { import type {
DisplayMetaTable,
AudioDataTable, AudioDataTable,
MusicTable, DisplayMetaTable,
MusicDataItem,
MusicFileMapping, MusicFileMapping,
MusicFiles, MusicFiles,
MusicItem, MusicItem,
MusicDataItem,
MusicMapping, MusicMapping,
MusicTable,
} from './types.ts' } from './types.ts'
const AUTO_UPDATE_FOLDER = path.resolve( const AUTO_UPDATE_FOLDER = path.resolve(

View File

@@ -7,18 +7,15 @@
"dependencies": { "dependencies": {
"@aklive2d/libs": "workspace:*", "@aklive2d/libs": "workspace:*",
"@aklive2d/config": "workspace:*", "@aklive2d/config": "workspace:*",
"@aklive2d/downloader": "workspace:*", "@aklive2d/downloader": "workspace:*"
"@aklive2d/eslint-config": "workspace:*",
"@aklive2d/prettier-config": "workspace:*"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"scripts": { "scripts": {
"update": "mode=update bun runner.ts", "update": "mode=update bun runner.ts",
"lint": "eslint && prettier --check .", "lint": "biome lint --write .",
"lint:fix": "biome check --write .",
"build:cleanup": "rm -rf ./data" "build:cleanup": "rm -rf ./data"
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,3 +1 @@
dist
data
auto_update auto_update

View File

@@ -1,3 +0,0 @@
dist
data
auto_update

View File

@@ -1,27 +0,0 @@
import { tsConfig } from '@aklive2d/eslint-config'
import tseslint from 'typescript-eslint'
import globals from 'globals'
/** @type {import('eslint').Config} */
export default tseslint.config(
...tsConfig,
{
ignores: ['dist', 'data'],
},
{
files: ['**/*.js', '**/*.ts'],
languageOptions: {
ecmaVersion: 2022,
globals: {
...globals.node,
},
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
},
}
)

View File

@@ -1,12 +1,12 @@
import path from 'node:path' import path from 'node:path'
import { file } from '@aklive2d/libs'
import config from '@aklive2d/config' import config from '@aklive2d/config'
import { file } from '@aklive2d/libs'
import type { import type {
OfficialDataResp,
OfficialInfoV2,
OfficialDataOperatorObj, OfficialDataOperatorObj,
OfficialDataResp,
OfficialInfoMapping, OfficialInfoMapping,
OfficialInfoOperatorConfigV2, OfficialInfoOperatorConfigV2,
OfficialInfoV2,
} from './types' } from './types'
const AUTO_UPDATE_FOLDER = path.resolve( const AUTO_UPDATE_FOLDER = path.resolve(

View File

@@ -6,17 +6,14 @@
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@aklive2d/config": "workspace:*", "@aklive2d/config": "workspace:*",
"@aklive2d/eslint-config": "workspace:*", "@aklive2d/libs": "workspace:*"
"@aklive2d/libs": "workspace:*",
"@aklive2d/prettier-config": "workspace:*"
}, },
"peerDependencies": { "peerDependencies": {
"globals": ">=16.0.0", "typescript": ">=5.9.3"
"typescript-eslint": ">=8.31.1",
"typescript": ">=5.8.2"
}, },
"scripts": { "scripts": {
"update": "mode=update bun runner.ts", "update": "mode=update bun runner.ts",
"lint": "eslint && prettier --check ." "lint": "biome lint --write .",
"lint:fix": "biome check --write ."
} }
} }

View File

@@ -1,11 +0,0 @@
import baseConfig from '@aklive2d/prettier-config'
/**
* @type {import("prettier").Config}
*/
const config = {
...baseConfig,
semi: false,
}
export default config

View File

@@ -1,3 +1 @@
dist
data
auto_update auto_update

View File

@@ -1,5 +0,0 @@
dist
data
auto_update
config
config.yaml

Some files were not shown because too many files have changed in this diff Show More