diff --git a/package.json b/package.json index e3dc60b..4487889 100644 --- a/package.json +++ b/package.json @@ -52,5 +52,6 @@ "post-commit": "git reset", "pre-commit": "lint-staged" } - } + }, + "packageManager": "yarn@1.22.22+sha256.c17d3797fb9a9115bf375e31bfd30058cac6bc9c3b8807a3d8cb2094794b51ca" } diff --git a/packages/@textstat/kernel/package.json b/packages/@textstat/kernel/package.json index 5b517a2..d2f2d63 100644 --- a/packages/@textstat/kernel/package.json +++ b/packages/@textstat/kernel/package.json @@ -38,7 +38,7 @@ "tabWidth": 4 }, "dependencies": { - "@textlint/kernel": "^3.1.4" + "@textlint/kernel": "^14.7.1" }, "devDependencies": { "@textlint/textlint-plugin-markdown": "^5.0.1", diff --git a/packages/@textstat/rule-context/package.json b/packages/@textstat/rule-context/package.json index f10a3ee..ab0217a 100644 --- a/packages/@textstat/rule-context/package.json +++ b/packages/@textstat/rule-context/package.json @@ -37,8 +37,8 @@ "tabWidth": 4 }, "dependencies": { - "@textlint/kernel": "^3.1.4", - "lodash.template": "^4.4.0" + "@textlint/kernel": "^14.7.1", + "lodash.template": "^4.5.0" }, "devDependencies": { "@types/lodash.template": "^4.4.4", diff --git a/packages/@textstat/rule-context/src/report-type.ts b/packages/@textstat/rule-context/src/report-type.ts index 7ea4c5e..1c5b7e8 100644 --- a/packages/@textstat/rule-context/src/report-type.ts +++ b/packages/@textstat/rule-context/src/report-type.ts @@ -1,6 +1,6 @@ import { TextlintRuleOptions } from "@textlint/kernel"; -import RuleContext from "@textlint/kernel/lib/kernel/src/core/rule-context"; -import FilterRuleContext from "@textlint/kernel/lib/kernel/src/core/filter-rule-context"; +import { TextlintRuleContext } from "@textlint/types"; +import { TextlintFilterRuleContext } from "@textlint/types"; import { TxtNode, TxtNodeType } from "@textlint/kernel/lib/ast-node-types/src"; import { LocaleTag, LocalizeMessages } from "./Localize"; @@ -28,7 +28,7 @@ export type TextstatRuleMeta = { }; export type TextstatRuleReporter = ( - context: Readonly, + context: Readonly, options: TextlintRuleOptions, deps: TextstatRuleSharedDependencies ) => { [P in TxtNodeType]?: (node: TxtNode) => void | Promise }; @@ -43,7 +43,7 @@ export interface TextstatKernelRule { } export type TextstatFilterRuleReporter = ( - context: Readonly, + context: Readonly, options: TextlintRuleOptions, deps: TextstatRuleSharedDependencies ) => { [P in TxtNodeType]?: (node: TxtNode) => void | Promise }; diff --git a/packages/@textstat/rule-context/tsconfig.json b/packages/@textstat/rule-context/tsconfig.json index f8082ab..8c068c8 100644 --- a/packages/@textstat/rule-context/tsconfig.json +++ b/packages/@textstat/rule-context/tsconfig.json @@ -1,6 +1,8 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { + "baseUrl": ".", + "paths": { "*": ["types/*"] }, "outDir": "./lib/" }, "include": [ diff --git a/packages/@textstat/textstat-rule-tateishi-level/package.json b/packages/@textstat/textstat-rule-tateishi-level/package.json index 028110c..9d5d5e8 100644 --- a/packages/@textstat/textstat-rule-tateishi-level/package.json +++ b/packages/@textstat/textstat-rule-tateishi-level/package.json @@ -40,10 +40,10 @@ "tabWidth": 4 }, "dependencies": { - "@textlint/ast-node-types": "^4.2.1", + "@textlint/ast-node-types": "^14.7.1", "@textstat/rule-context": "^0.8.0", - "sentence-splitter": "^3.0.11", - "textlint-rule-helper": "^2.0.1" + "sentence-splitter": "^5.0.0", + "textlint-rule-helper": "^2.3.1" }, "devDependencies": { "@textstat/textstat-tester": "^0.8.0", diff --git a/packages/@textstat/textstat-rule-tateishi-level/src/sentence-util.ts b/packages/@textstat/textstat-rule-tateishi-level/src/sentence-util.ts index 351f0c9..5ad38e1 100644 --- a/packages/@textstat/textstat-rule-tateishi-level/src/sentence-util.ts +++ b/packages/@textstat/textstat-rule-tateishi-level/src/sentence-util.ts @@ -1,8 +1,8 @@ import { splitAST, Syntax } from "sentence-splitter"; import { TxtParentNode } from "@textlint/ast-node-types"; -export const getSentences = (node: TxtParentNode) => { +export const getSentences = (node: TxtParentNode): import("sentence-splitter").SentenceNode[] => { return splitAST(node).children.filter(node => { return node.type === Syntax.Sentence; - }); + }) as import("sentence-splitter").SentenceNode[]; }; diff --git a/packages/@textstat/textstat-tester/package.json b/packages/@textstat/textstat-tester/package.json index ef47037..14e6e2b 100644 --- a/packages/@textstat/textstat-tester/package.json +++ b/packages/@textstat/textstat-tester/package.json @@ -36,7 +36,7 @@ "tabWidth": 4 }, "dependencies": { - "@textlint/textlint-plugin-markdown": "^5.1.4", + "@textlint/textlint-plugin-markdown": "^14.7.1", "@textstat/kernel": "^0.8.0", "@textstat/rule-context": "^0.8.0" }, diff --git a/packages/@textstat/textstat-view/.gitignore b/packages/@textstat/textstat-view/.gitignore index ea63ec7..5560b5b 100644 --- a/packages/@textstat/textstat-view/.gitignore +++ b/packages/@textstat/textstat-view/.gitignore @@ -10,6 +10,7 @@ # production /build +.next/ # misc .DS_Store @@ -104,5 +105,6 @@ com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties +next-env.d.ts /lib diff --git a/packages/@textstat/textstat-view/next.config.ts b/packages/@textstat/textstat-view/next.config.ts new file mode 100644 index 0000000..a4822e0 --- /dev/null +++ b/packages/@textstat/textstat-view/next.config.ts @@ -0,0 +1,8 @@ +import { NextConfig } from "next"; + +const nextConfig: NextConfig = { + output: "export", // Outputs a Single-Page Application (SPA) + distDir: "build" // Changes the build output directory to `build` +}; + +export default nextConfig; diff --git a/packages/@textstat/textstat-view/package.json b/packages/@textstat/textstat-view/package.json index 405e011..a9da1b3 100644 --- a/packages/@textstat/textstat-view/package.json +++ b/packages/@textstat/textstat-view/package.json @@ -3,11 +3,12 @@ "version": "0.8.0", "private": true, "scripts": { - "build": "react-scripts build", - "build:navi": "cross-env REACT_APP_NAVI=true navi-scripts build", - "eject": "react-scripts eject", - "start": "react-scripts start", - "test": "react-scripts test", + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "export": "next export", + "serve": "npx serve@latest ./build", "prettier": "prettier --write \"**/*.{js,jsx,ts,tsx,css}\"" }, "prettier": { @@ -21,28 +22,24 @@ "dependencies": { "@textstat/to-non-cyclic": "^0.8.0", "@types/classnames": "^2.2.6", - "@types/jest": "23.3.10", "@types/node": "10.12.12", - "@types/react": "16.7.13", - "@types/react-dom": "16.0.11", + "@types/react": "19.1.4", + "@types/react-dom": "19.1.5", "classnames": "^2.2.6", "common-path-prefix": "^1.0.0", - "navi": "^0.8.0", "plotly.js": "^1.45.0", - "react": "^16.6.3", - "react-dom": "^16.6.3", - "react-navi": "^0.8.4", - "react-plotly.js": "^2.3.0", - "react-scripts": "2.1.1", - "typescript": "3.3.3333" + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-plotly.js": "^2.6.0", + "typescript": "^5.8.3", + "next": "^15.3.2" }, "devDependencies": { "@types/react-plotly.js": "^2.2.2", - "cross-env": "^5.2.0", - "husky": "^1.3.1", "lint-staged": "^8.1.4", - "navi-scripts": "^0.8.0", - "prettier": "^1.16.4" + "prettier": "^1.16.4", + "eslint": "^8", + "eslint-config-next": "^15.3.2" }, "browserslist": [ ">0.2%", diff --git a/packages/@textstat/textstat-view/public/_redirects b/packages/@textstat/textstat-view/public/_redirects deleted file mode 100644 index 7797f7c..0000000 --- a/packages/@textstat/textstat-view/public/_redirects +++ /dev/null @@ -1 +0,0 @@ -/* /index.html 200 diff --git a/packages/@textstat/textstat-view/public/favicon.ico b/packages/@textstat/textstat-view/public/favicon.ico deleted file mode 100644 index a11777c..0000000 Binary files a/packages/@textstat/textstat-view/public/favicon.ico and /dev/null differ diff --git a/packages/@textstat/textstat-view/public/index.html b/packages/@textstat/textstat-view/public/index.html deleted file mode 100644 index 21fdde8..0000000 --- a/packages/@textstat/textstat-view/public/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - textstat-viewer - - - -
- - - diff --git a/packages/@textstat/textstat-view/src/App.tsx b/packages/@textstat/textstat-view/src/App.tsx index 49432bd..1476910 100644 --- a/packages/@textstat/textstat-view/src/App.tsx +++ b/packages/@textstat/textstat-view/src/App.tsx @@ -1,28 +1,33 @@ -// App.js +"use client"; import * as React from "react"; import * as url from "url"; -import { ChangeEvent } from "react"; -import { NavLoading, NavProvider, NavRoute } from "react-navi"; -import { BrowserNavigation } from "navi"; -import { StatContext } from "./context/StatContext"; +import { ChangeEvent, useEffect, useState } from "react"; // useEffectとuseStateをインポート +// import { NavLoading, NavProvider, NavRoute } from "react-navi"; // react-navi関連を削除 +// import { BrowserNavigation } from "navi"; // react-navi関連を削除 +import { Result, StatProvider } from "./context/StatContext"; // Result型をインポート import { getStore, saveStore } from "./context/LocalStore"; import { AppMenu } from "./AppMenu"; import "./App.css"; import { fetchGistContent } from "./context/GistStore"; -export interface AppProps { - navigation: BrowserNavigation; -} +// AppPropsからnavigationを削除 +// export interface AppProps { +// navigation: BrowserNavigation; +// } -class App extends React.Component { - state = getStore({ - input: "[]", - results: [] - }); +// クラスコンポーネントを関数コンポーネントに変換 +const App = () => { + // AppPropsを削除 + const [state, setState] = useState( + getStore({ + input: "[]", + results: [] as Result[] // resultsの型を明示 + }) + ); - private onChangeTextarea = (event: ChangeEvent) => { + const onChangeTextarea = (event: ChangeEvent) => { const input = event.currentTarget.value; - let results = this.state.results; + let results = state.results; try { results = JSON.parse(input); } catch (error) { @@ -32,20 +37,20 @@ class App extends React.Component { input: input, results: results }; - this.setState(newState); + setState(newState); saveStore(newState); }; - componentDidMount(): void { + useEffect(() => { const urlObject = url.parse(location.href, true); if (urlObject.query && typeof urlObject.query.gist === "string") { fetchGistContent(urlObject.query.gist) .then(content => { try { - const state = JSON.parse(content); - this.setState({ + const parsedResults = JSON.parse(content); // 変数名を変更 + setState({ input: content, - results: state + results: parsedResults }); } catch (error) { console.error("parse error ?gist", error); @@ -55,37 +60,34 @@ class App extends React.Component { console.error("Gist Fetch Error", error); }); } - } + }, []); // componentDidMountの代わりにuseEffectを使用 - render() { - return ( - -
-
-