taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 9d6d52e4adeb9375bacc2305f749c08d1fe12b25
parent 8440b640f6f721a7b3aea41dac67b49166f2d236
Author: Florian Dold <florian@dold.me>
Date:   Mon, 27 Jan 2025 16:30:14 +0100

use shared config, fix compiler warnings

Diffstat:
Mpackages/aml-backoffice-ui/tsconfig.json | 33+--------------------------------
Mpackages/anastasis-core/tsconfig.json | 19++-----------------
Mpackages/anastasis-webui/src/components/picker/DatePicker.tsx | 8+++++---
Mpackages/anastasis-webui/src/pages/home/AddingProviderScreen/state.ts | 2+-
Mpackages/anastasis-webui/src/pages/home/EditPoliciesScreen.tsx | 2+-
Mpackages/anastasis-webui/src/pages/home/authMethod/index.tsx | 2+-
Mpackages/anastasis-webui/tsconfig.json | 31+------------------------------
Mpackages/bank-ui/src/hooks/account.ts | 20++++++++++++++++++--
Mpackages/bank-ui/src/pages/OperationState/state.ts | 17++++++++++++-----
Mpackages/bank-ui/src/pages/PaytoWireTransferForm.tsx | 2+-
Mpackages/bank-ui/src/pages/account/ShowAccountDetails.tsx | 4+++-
Mpackages/bank-ui/tsconfig.json | 33+--------------------------------
12 files changed, 47 insertions(+), 126 deletions(-)

diff --git a/packages/aml-backoffice-ui/tsconfig.json b/packages/aml-backoffice-ui/tsconfig.json @@ -1,8 +1,6 @@ { + "extends": "../../tsconfig.defaults.json", "compilerOptions": { - /* Basic Options */ - "target": "ES2020", - "module": "Node16", "lib": ["DOM", "ES2020"], "allowJs": true /* Allow javascript files to be compiled. */, // "checkJs": true, /* Report errors in .js files. */ @@ -11,36 +9,7 @@ "jsxFragmentFactory": "Fragment", "resolveJsonModule": true, "noEmit": true /* Do not emit outputs. */, - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - /* Module Resolution Options */ - "moduleResolution": "Node16" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - "esModuleInterop": true /* */, - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - /* Source Map Options */ - // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - /* Advanced Options */ "skipLibCheck": true /* Skip type checking of declaration files. */ }, "include": ["src/**/*"] diff --git a/packages/anastasis-core/tsconfig.json b/packages/anastasis-core/tsconfig.json @@ -1,25 +1,10 @@ { - "compileOnSave": true, + "extends": "../../tsconfig.defaults.json", "compilerOptions": { - "composite": true, - "target": "ES2020", - "module": "Node16", - "moduleResolution": "Node16", - "sourceMap": true, "lib": ["ES2020", "DOM"], - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "strict": true, - "strictPropertyInitialization": false, "outDir": "lib", - "noImplicitAny": true, - "noImplicitThis": true, - "incremental": true, - "esModuleInterop": true, - "importHelpers": true, "rootDir": "src", - "baseUrl": "./src", - "typeRoots": ["./node_modules/@types"] + "baseUrl": "./src" }, "include": ["src/**/*"], "references": [ diff --git a/packages/anastasis-webui/src/components/picker/DatePicker.tsx b/packages/anastasis-webui/src/components/picker/DatePicker.tsx @@ -19,7 +19,7 @@ * @author Sebastian Javier Marchano (sebasjm) */ -import { h, Component } from "preact"; +import { Component, h } from "preact"; interface Props { closeFunction?: () => void; @@ -80,7 +80,7 @@ export class DatePicker extends Component<Props, State> { * Gets fired when a day gets clicked. * @param {object} e The event thrown by the <span /> element clicked */ - dayClicked(e: any) { + dayClicked(e: any): false | undefined { const element = e.target; // the actual element clicked if (element.innerHTML === "") return false; // don't continue if <span /> empty @@ -91,6 +91,7 @@ export class DatePicker extends Component<Props, State> { // update the state this.setState({ currentDate: date }); this.passDateToParent(date); + return undefined; } /** @@ -162,7 +163,7 @@ export class DatePicker extends Component<Props, State> { /** * Display the selected month (gets fired when clicking on the date string) */ - displaySelectedMonth() { + displaySelectedMonth(): false | undefined { if (this.state.selectYearMode) { this.toggleYearSelector(); } else { @@ -172,6 +173,7 @@ export class DatePicker extends Component<Props, State> { displayedYear: this.state.currentDate.getFullYear(), }); } + return undefined; } toggleYearSelector() { diff --git a/packages/anastasis-webui/src/pages/home/AddingProviderScreen/state.ts b/packages/anastasis-webui/src/pages/home/AddingProviderScreen/state.ts @@ -19,7 +19,7 @@ import { useAnastasisContext } from "../../../context/anastasis.js"; import { authMethods, KnownAuthMethods } from "../authMethod/index.jsx"; import { AuthProvByStatusMap, State, testProvider } from "./index.js"; -interface Props { +export interface Props { providerType?: KnownAuthMethods; onCancel: () => Promise<void>; notifications?: Notification[]; diff --git a/packages/anastasis-webui/src/pages/home/EditPoliciesScreen.tsx b/packages/anastasis-webui/src/pages/home/EditPoliciesScreen.tsx @@ -29,7 +29,7 @@ export type ProviderInfoByType = { [type in KnownAuthMethods]?: ProviderInfo[]; }; -interface Props { +export interface Props { index: number; cancel: () => void; confirm: (changes: MethodProvider[]) => void; diff --git a/packages/anastasis-webui/src/pages/home/authMethod/index.tsx b/packages/anastasis-webui/src/pages/home/authMethod/index.tsx @@ -44,7 +44,7 @@ export interface AuthMethodSolveProps { id: string; } -interface AuthMethodConfiguration { +export interface AuthMethodConfiguration { icon: VNode; label: string; setup: (props: AuthMethodSetupProps) => VNode; diff --git a/packages/anastasis-webui/tsconfig.json b/packages/anastasis-webui/tsconfig.json @@ -1,8 +1,7 @@ { + "extends": "../../tsconfig.defaults.json", "compilerOptions": { /* Basic Options */ - "target": "ES2020", - "module": "Node16", "lib": [ "DOM", "ES2020" @@ -13,36 +12,8 @@ "jsxFactory": "h", "jsxFragmentFactory": "Fragment", "noEmit": true /* Do not emit outputs. */, - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ - "moduleResolution": "Node16" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - "esModuleInterop": true /* */, - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - /* Source Map Options */ - // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - /* Advanced Options */ "skipLibCheck": true /* Skip type checking of declaration files. */ }, "include": [ diff --git a/packages/bank-ui/src/hooks/account.ts b/packages/bank-ui/src/hooks/account.ts @@ -16,8 +16,12 @@ import { AccessToken, + HttpStatusCode, + OperationFail, OperationOk, + TalerCorebankApi, TalerCoreBankResultByMethod, + TalerError, TalerHttpError, WithdrawalOperationStatusFlag, } from "@gnu-taler/taler-util"; @@ -26,7 +30,7 @@ import { useSessionState } from "./session.js"; // FIX default import https://github.com/microsoft/TypeScript/issues/49189 import { useBankCoreApiContext } from "@gnu-taler/web-util/browser"; -import _useSWR, { SWRHook, mutate } from "swr"; +import _useSWR, { mutate, SWRHook } from "swr"; import { PAGINATED_LIST_REQUEST } from "../utils.js"; const useSWR = _useSWR as unknown as SWRHook; @@ -300,7 +304,19 @@ export function revalidateTransactions() { { revalidate: true }, ); } -export function useTransactions(account: string, initial?: number) { + +export function useTransactions( + account: string, + initial?: number, +): + | TalerError<{ + requestUrl: string; + requestMethod: string; + }> + | OperationFail<HttpStatusCode.NotFound> + | OperationFail<HttpStatusCode.Unauthorized> + | PaginatedResult<TalerCorebankApi.BankAccountTransactionInfo[]> + | undefined { const { state: credentials } = useSessionState(); const token = credentials.status !== "loggedIn" ? undefined : credentials.token; diff --git a/packages/bank-ui/src/pages/OperationState/state.ts b/packages/bank-ui/src/pages/OperationState/state.ts @@ -17,6 +17,7 @@ import { Amounts, HttpStatusCode, + OperationFail, TalerCoreBankErrorsByMethod, TalerCorebankApi, TalerError, @@ -25,16 +26,15 @@ import { parseWithdrawUri, stringifyWithdrawUri, } from "@gnu-taler/taler-util"; -import { utils } from "@gnu-taler/web-util/browser"; +import { useBankCoreApiContext, utils } from "@gnu-taler/web-util/browser"; import { useEffect, useState } from "preact/hooks"; import { mutate } from "swr"; -import { useBankCoreApiContext } from "@gnu-taler/web-util/browser"; +import { useSettingsContext } from "../../context/settings.js"; import { useWithdrawalDetails } from "../../hooks/account.js"; -import { useSessionState } from "../../hooks/session.js"; import { useBankState } from "../../hooks/bank-state.js"; import { usePreferences } from "../../hooks/preferences.js"; +import { useSessionState } from "../../hooks/session.js"; import { Props, State } from "./index.js"; -import { useSettingsContext } from "../../context/settings.js"; export function useComponentState({ currency, @@ -102,7 +102,12 @@ export function useComponentState({ const wid = withdrawalOperationId; - async function doAbort() { + async function doAbort(): Promise< + | OperationFail<HttpStatusCode.NotFound> + | OperationFail<HttpStatusCode.Conflict> + | OperationFail<HttpStatusCode.BadRequest> + | undefined + > { if (!creds) return; const resp = await bank.abortWithdrawalById(creds, wid); if (resp.type === "ok") { @@ -111,6 +116,7 @@ export function useComponentState({ } else { return resp; } + return undefined; } async function doConfirm(): Promise< @@ -123,6 +129,7 @@ export function useComponentState({ } else { return resp; } + return undefined; } const uri = stringifyWithdrawUri({ diff --git a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx @@ -51,7 +51,7 @@ import { undefinedIfEmpty, validateIBAN, validateTalerBank } from "../utils.js"; const TALER_SCREEN_ID = 106; -interface Props { +export interface Props { focus?: boolean; withAccount?: string; withSubject?: string; diff --git a/packages/bank-ui/src/pages/account/ShowAccountDetails.tsx b/packages/bank-ui/src/pages/account/ShowAccountDetails.tsx @@ -40,11 +40,11 @@ import { useState } from "preact/hooks"; import { ErrorLoadingWithDebug } from "../../components/ErrorLoadingWithDebug.js"; import { useAccountDetails } from "../../hooks/account.js"; import { useBankState } from "../../hooks/bank-state.js"; +import { usePreferences } from "../../hooks/preferences.js"; import { useSessionState } from "../../hooks/session.js"; import { LoginForm } from "../LoginForm.js"; import { ProfileNavigation } from "../ProfileNavigation.js"; import { AccountForm } from "../admin/AccountForm.js"; -import { usePreferences } from "../../hooks/preferences.js"; const TALER_SCREEN_ID = 118; @@ -499,6 +499,8 @@ export function ShowAccountDetails({ </div> ); } + default: + return `unsupported account type ${payto.targetType}`; } })(payto)} diff --git a/packages/bank-ui/tsconfig.json b/packages/bank-ui/tsconfig.json @@ -1,45 +1,14 @@ { + "extends": "../../tsconfig.defaults.json", "compilerOptions": { - /* Basic Options */ - "target": "ES2020", - "module": "Node16", "lib": ["DOM", "ES2020"], - "allowJs": true /* Allow javascript files to be compiled. */, - // "checkJs": true, /* Report errors in .js files. */ "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */, "jsxFactory": "h", "jsxFragmentFactory": "Fragment", "noEmit": true /* Do not emit outputs. */, - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ - "moduleResolution": "Node16" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, "esModuleInterop": true /* */, - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - /* Source Map Options */ - // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - /* Advanced Options */ "skipLibCheck": true /* Skip type checking of declaration files. */ }, "include": ["src/**/*"]