Model and DB refactor (#61)

- [x] Move from `sqlx` to `rusqlite`
- [x] Generate TS types from Rust models
This commit is contained in:
Gregory Schier
2024-08-05 07:58:20 -07:00
committed by GitHub
parent e5511922bf
commit f967820f12
193 changed files with 7083 additions and 8337 deletions

View File

@@ -1,6 +1,6 @@
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
import type { GrpcRequest, HttpRequest } from '../lib/models';
import type { GrpcRequest, HttpRequest } from '@yaakapp/api';
import { Input } from './core/Input';
import { VStack } from './core/Stacks';
@@ -27,7 +27,7 @@ export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Prop
if (request.model === 'http_request') {
updateHttpRequest.mutate({
id: request.id,
update: (r) => ({
update: (r: HttpRequest) => ({
...r,
authentication: { password: r.authentication.password, username },
}),
@@ -35,7 +35,7 @@ export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Prop
} else {
updateGrpcRequest.mutate({
id: request.id,
update: (r) => ({
update: (r: GrpcRequest) => ({
...r,
authentication: { password: r.authentication.password, username },
}),
@@ -57,7 +57,7 @@ export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Prop
if (request.model === 'http_request') {
updateHttpRequest.mutate({
id: request.id,
update: (r) => ({
update: (r: HttpRequest) => ({
...r,
authentication: { username: r.authentication.username, password },
}),
@@ -65,7 +65,7 @@ export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Prop
} else {
updateGrpcRequest.mutate({
id: request.id,
update: (r) => ({
update: (r: GrpcRequest) => ({
...r,
authentication: { username: r.authentication.username, password },
}),

View File

@@ -1,6 +1,6 @@
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
import type { GrpcRequest, HttpRequest } from '../lib/models';
import type { GrpcRequest, HttpRequest } from '@yaakapp/api';
import { Input } from './core/Input';
import { VStack } from './core/Stacks';
@@ -27,7 +27,7 @@ export function BearerAuth<T extends HttpRequest | GrpcRequest>({ request }: Pro
if (request.model === 'http_request') {
updateHttpRequest.mutate({
id: request.id ?? null,
update: (r) => ({
update: (r: HttpRequest) => ({
...r,
authentication: { token },
}),
@@ -35,7 +35,7 @@ export function BearerAuth<T extends HttpRequest | GrpcRequest>({ request }: Pro
} else {
updateGrpcRequest.mutate({
id: request.id ?? null,
update: (r) => ({
update: (r: GrpcRequest) => ({
...r,
authentication: { token },
}),

View File

@@ -1,6 +1,6 @@
import mime from 'mime';
import { useKeyValue } from '../hooks/useKeyValue';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import { Banner } from './core/Banner';
import { Button } from './core/Button';
import { InlineCode } from './core/InlineCode';

View File

@@ -1,5 +1,6 @@
import { useCookieJars } from '../hooks/useCookieJars';
import { useUpdateCookieJar } from '../hooks/useUpdateCookieJar';
import type { Cookie } from '../lib/gen/Cookie';
import { cookieDomain } from '../lib/models';
import { Banner } from './core/Banner';
import { IconButton } from './core/IconButton';
@@ -37,7 +38,7 @@ export const CookieDialog = function ({ cookieJarId }: Props) {
</tr>
</thead>
<tbody className="divide-y divide-background-highlight-secondary">
{cookieJar?.cookies.map((c) => (
{cookieJar?.cookies.map((c: Cookie) => (
<tr key={c.domain + c.raw_cookie}>
<td className="py-2 select-text cursor-text font-mono font-semibold max-w-0">
{cookieDomain(c)}
@@ -55,7 +56,7 @@ export const CookieDialog = function ({ cookieJarId }: Props) {
onClick={async () => {
await updateCookieJar.mutateAsync({
...cookieJar,
cookies: cookieJar.cookies.filter((c2) => c2 !== c),
cookies: cookieJar.cookies.filter((c2: Cookie) => c2 !== c),
});
}}
/>

View File

@@ -9,7 +9,7 @@ import { useKeyValue } from '../hooks/useKeyValue';
import { usePrompt } from '../hooks/usePrompt';
import { useUpdateEnvironment } from '../hooks/useUpdateEnvironment';
import { useUpdateWorkspace } from '../hooks/useUpdateWorkspace';
import type { Environment, Workspace } from '../lib/models';
import type { Environment, Workspace } from '@yaakapp/api';
import { Button } from './core/Button';
import { ContextMenu } from './core/Dropdown';
import type {

View File

@@ -1,7 +1,7 @@
import { save } from '@tauri-apps/plugin-dialog';
import { useCallback, useMemo, useState } from 'react';
import slugify from 'slugify';
import type { Workspace } from '../lib/models';
import type { Workspace } from '@yaakapp/api';
import { count } from '../lib/pluralize';
import { invokeCmd } from '../lib/tauri';
import { Button } from './core/Button';

View File

@@ -1,5 +1,5 @@
import { useCallback, useMemo } from 'react';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import type { Pair, PairEditorProps } from './core/PairEditor';
import { PairEditor } from './core/PairEditor';

View File

@@ -1,5 +1,5 @@
import { useCallback, useMemo } from 'react';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import type { Pair, PairEditorProps } from './core/PairEditor';
import { PairOrBulkEditor } from './core/PairOrBulkEditor';

View File

@@ -2,7 +2,7 @@ import type { EditorView } from 'codemirror';
import { useCallback, useEffect, useMemo, useRef } from 'react';
import { useIntrospectGraphQL } from '../hooks/useIntrospectGraphQL';
import { tryFormatJson } from '../lib/formatters';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import { Button } from './core/Button';
import type { EditorProps } from './core/Editor';
import { Editor, formatGraphQL } from './core/Editor';

View File

@@ -5,7 +5,7 @@ import React, { useEffect, useMemo, useState } from 'react';
import { useGrpcEvents } from '../hooks/useGrpcEvents';
import { usePinnedGrpcConnection } from '../hooks/usePinnedGrpcConnection';
import { useStateWithDeps } from '../hooks/useStateWithDeps';
import type { GrpcEvent, GrpcRequest } from '../lib/models';
import type { GrpcEvent, GrpcRequest } from '@yaakapp/api';
import { isResponseLoading } from '../lib/models';
import { Banner } from './core/Banner';
import { Button } from './core/Button';

View File

@@ -6,7 +6,7 @@ import { createGlobalState } from 'react-use';
import type { ReflectResponseService } from '../hooks/useGrpc';
import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey';
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
import type { GrpcMetadataEntry, GrpcRequest } from '../lib/models';
import type { GrpcMetadataEntry, GrpcRequest } from '@yaakapp/api';
import { AUTH_TYPE_BASIC, AUTH_TYPE_BEARER, AUTH_TYPE_NONE } from '../lib/models';
import { BasicAuth } from './BasicAuth';
import { BearerAuth } from './BearerAuth';

View File

@@ -13,7 +13,7 @@ import { useEffect, useMemo, useRef } from 'react';
import { useAlert } from '../hooks/useAlert';
import type { ReflectResponseService } from '../hooks/useGrpc';
import { tryFormatJson } from '../lib/formatters';
import type { GrpcRequest } from '../lib/models';
import type { GrpcRequest } from '@yaakapp/api';
import { count } from '../lib/pluralize';
import { Button } from './core/Button';
import type { EditorProps } from './core/Editor';

View File

@@ -3,7 +3,7 @@ import { connections } from '../lib/data/connections';
import { encodings } from '../lib/data/encodings';
import { headerNames } from '../lib/data/headerNames';
import { mimeTypes } from '../lib/data/mimetypes';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import type { GenericCompletionConfig } from './core/Editor/genericCompletion';
import type { PairEditorProps } from './core/PairEditor';
import { PairOrBulkEditor } from './core/PairOrBulkEditor';

View File

@@ -1,6 +1,6 @@
import type { CSSProperties } from 'react';
import React from 'react';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import { SplitLayout } from './core/SplitLayout';
import { RequestPane } from './RequestPane';
import { ResponsePane } from './ResponsePane';

View File

@@ -7,7 +7,7 @@ import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
import { useWorkspaces } from '../hooks/useWorkspaces';
import { fallbackRequestName } from '../lib/fallbackRequestName';
import type { GrpcRequest, HttpRequest } from '../lib/models';
import type { GrpcRequest, HttpRequest } from '@yaakapp/api';
import { Button } from './core/Button';
import { InlineCode } from './core/InlineCode';
import { Select } from './core/Select';

View File

@@ -2,7 +2,7 @@ import { useState } from 'react';
import { useOpenWorkspace } from '../hooks/useOpenWorkspace';
import { useSettings } from '../hooks/useSettings';
import { useUpdateSettings } from '../hooks/useUpdateSettings';
import type { Workspace } from '../lib/models';
import type { Workspace } from '@yaakapp/api';
import { Button } from './core/Button';
import { Checkbox } from './core/Checkbox';
import { Icon } from './core/Icon';

View File

@@ -1,7 +1,7 @@
import { formatDistanceToNowStrict } from 'date-fns';
import { useDeleteGrpcConnection } from '../hooks/useDeleteGrpcConnection';
import { useDeleteGrpcConnections } from '../hooks/useDeleteGrpcConnections';
import type { GrpcConnection } from '../lib/models';
import type { GrpcConnection } from '@yaakapp/api';
import { count } from '../lib/pluralize';
import { Dropdown } from './core/Dropdown';
import { Icon } from './core/Icon';

View File

@@ -2,7 +2,7 @@ import classNames from 'classnames';
import { useDeleteHttpResponse } from '../hooks/useDeleteHttpResponse';
import { useDeleteHttpResponses } from '../hooks/useDeleteHttpResponses';
import { useSaveResponse } from '../hooks/useSaveResponse';
import type { HttpResponse } from '../lib/models';
import type { HttpResponse } from '@yaakapp/api';
import { pluralize } from '../lib/pluralize';
import { Dropdown } from './core/Dropdown';
import { Icon } from './core/Icon';

View File

@@ -12,7 +12,7 @@ import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey';
import { useSendAnyHttpRequest } from '../hooks/useSendAnyHttpRequest';
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
import { tryFormatJson } from '../lib/formatters';
import type { HttpHeader, HttpRequest, HttpUrlParameter } from '../lib/models';
import type { HttpRequest, HttpRequestHeader, HttpUrlParameter } from '@yaakapp/api';
import {
AUTH_TYPE_BASIC,
AUTH_TYPE_BEARER,
@@ -211,7 +211,8 @@ export const RequestPane = memo(function RequestPane({
[activeRequestId, updateRequest],
);
const handleHeadersChange = useCallback(
(headers: HttpHeader[]) => updateRequest.mutate({ id: activeRequestId, update: { headers } }),
(headers: HttpRequestHeader[]) =>
updateRequest.mutate({ id: activeRequestId, update: { headers } }),
[activeRequestId, updateRequest],
);
const handleUrlParametersChange = useCallback(

View File

@@ -1,4 +1,4 @@
import type { HttpResponse } from '../lib/models';
import type { HttpResponse } from '@yaakapp/api';
import { KeyValueRow, KeyValueRows } from './core/KeyValueRow';
interface Props {

View File

@@ -1,5 +1,5 @@
import { open } from '@tauri-apps/plugin-shell';
import type { HttpResponse } from '../lib/models';
import type { HttpResponse } from '@yaakapp/api';
import { IconButton } from './core/IconButton';
import { KeyValueRow, KeyValueRows } from './core/KeyValueRow';

View File

@@ -5,7 +5,7 @@ import { createGlobalState } from 'react-use';
import { useContentTypeFromHeaders } from '../hooks/useContentTypeFromHeaders';
import { usePinnedHttpResponse } from '../hooks/usePinnedHttpResponse';
import { useResponseViewMode } from '../hooks/useResponseViewMode';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import { isResponseLoading } from '../lib/models';
import { Banner } from './core/Banner';
import { CountBadge } from './core/CountBadge';

View File

@@ -32,7 +32,7 @@ import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
import { useWorkspaces } from '../hooks/useWorkspaces';
import { fallbackRequestName } from '../lib/fallbackRequestName';
import type { Folder, GrpcRequest, HttpRequest, Workspace } from '../lib/models';
import type { Folder, GrpcRequest, HttpRequest, Workspace } from '@yaakapp/api';
import { isResponseLoading } from '../lib/models';
import type { DropdownItem } from './core/Dropdown';
import { ContextMenu } from './core/Dropdown';

View File

@@ -3,7 +3,7 @@ import type { EditorView } from 'codemirror';
import type { FormEvent, ReactNode } from 'react';
import { memo, useRef, useState } from 'react';
import { useHotKey } from '../hooks/useHotKey';
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import type { IconProps } from './core/Icon';
import { IconButton } from './core/IconButton';
import type { InputProps } from './core/Input';

View File

@@ -1,4 +1,4 @@
import type { HttpRequest } from '../lib/models';
import type { HttpRequest } from '@yaakapp/api';
import { PairOrBulkEditor } from './core/PairOrBulkEditor';
type Props = {

View File

@@ -33,7 +33,7 @@ import {
import { tags as t } from '@lezer/highlight';
import { graphql, graphqlLanguageSupport } from 'cm6-graphql';
import { EditorView } from 'codemirror';
import type { Environment, Workspace } from '../../../lib/models';
import type { Environment, Workspace } from '@yaakapp/api';
import type { EditorProps } from './index';
import { pairs } from './pairs/extension';
import { text } from './text/extension';

View File

@@ -1,7 +1,7 @@
import type { LanguageSupport } from '@codemirror/language';
import { LRLanguage } from '@codemirror/language';
import { parseMixed } from '@lezer/common';
import type { Environment, Workspace } from '../../../../lib/models';
import type { Environment, Workspace } from '@yaakapp/api';
import type { GenericCompletionConfig } from '../genericCompletion';
import { genericCompletion } from '../genericCompletion';
import { textLanguageName } from '../text/extension';

View File

@@ -1,5 +1,5 @@
import classNames from 'classnames';
import type { GrpcRequest, HttpRequest } from '../../lib/models';
import type { GrpcRequest, HttpRequest } from '@yaakapp/api';
interface Props {
request: HttpRequest | GrpcRequest;

View File

@@ -1,5 +1,5 @@
import classNames from 'classnames';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
interface Props {
response: Pick<HttpResponse, 'status' | 'statusReason' | 'error'>;

View File

@@ -1,6 +1,6 @@
import { convertFileSrc } from '@tauri-apps/api/core';
import React from 'react';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
interface Props {
response: HttpResponse;

View File

@@ -1,5 +1,5 @@
import { useSaveResponse } from '../../hooks/useSaveResponse';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
import { getContentTypeHeader } from '../../lib/models';
import { Banner } from '../core/Banner';
import { Button } from '../core/Button';

View File

@@ -2,7 +2,7 @@ import classNames from 'classnames';
import Papa from 'papaparse';
import { useMemo } from 'react';
import { useResponseBodyText } from '../../hooks/useResponseBodyText';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
interface Props {
response: HttpResponse;

View File

@@ -1,7 +1,7 @@
import { convertFileSrc } from '@tauri-apps/api/core';
import classNames from 'classnames';
import { useState } from 'react';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
interface Props {
response: HttpResponse;

View File

@@ -1,6 +1,6 @@
import classNames from 'classnames';
import { useResponseBodyText } from '../../hooks/useResponseBodyText';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
import { JsonAttributeTree } from '../core/JsonAttributeTree';
interface Props {

View File

@@ -6,7 +6,7 @@ import type { PDFDocumentProxy } from 'pdfjs-dist';
import React, { useRef, useState } from 'react';
import { Document, Page } from 'react-pdf';
import { useDebouncedState } from '../../hooks/useDebouncedState';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
import './PdfViewer.css';
interface Props {

View File

@@ -9,7 +9,7 @@ import { useResponseBodyText } from '../../hooks/useResponseBodyText';
import { useSaveResponse } from '../../hooks/useSaveResponse';
import { useToggle } from '../../hooks/useToggle';
import { tryFormatJson, tryFormatXml } from '../../lib/formatters';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
import { CopyButton } from '../CopyButton';
import { Banner } from '../core/Banner';
import { Button } from '../core/Button';

View File

@@ -1,6 +1,6 @@
import { convertFileSrc } from '@tauri-apps/api/core';
import React from 'react';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
interface Props {
response: HttpResponse;

View File

@@ -1,6 +1,6 @@
import { useMemo } from 'react';
import { useResponseBodyText } from '../../hooks/useResponseBodyText';
import type { HttpResponse } from '../../lib/models';
import type { HttpResponse } from '@yaakapp/api';
interface Props {
response: HttpResponse;