refactor: project tsconfig & abstract infra type (#2721)

(cherry picked from commit 1ad2e629ac)
This commit is contained in:
Himself65
2023-06-08 12:41:47 +08:00
committed by himself65
parent 3d0da0a21f
commit 5f634eed21
14 changed files with 149 additions and 207 deletions
+29 -18
View File
@@ -4,10 +4,10 @@ import type {
DialogHandlerManager,
ExportHandlerManager,
UIHandlerManager,
UnwrapManagerHandlerToServerSide,
UpdaterHandlerManager,
WorkspaceHandlerManager,
} from '@toeverything/infra';
import type { HandlerManager, PrimitiveHandlers } from '@toeverything/infra';
import { ipcMain } from 'electron';
import { dbHandlers } from './db';
@@ -27,24 +27,35 @@ export const debugHandlers = {
},
};
type UnwrapManagerHandler<
Manager extends HandlerManager<string, Record<string, PrimitiveHandlers>>
> = {
[K in keyof Manager['handlers']]: Manager['handlers'][K] extends (
...args: infer Args
) => Promise<infer R>
? (event: Electron.IpcMainInvokeEvent, ...args: Args) => Promise<R>
: never;
};
type AllHandlers = {
db: UnwrapManagerHandler<DBHandlerManager>;
debug: UnwrapManagerHandler<DebugHandlerManager>;
dialog: UnwrapManagerHandler<DialogHandlerManager>;
export: UnwrapManagerHandler<ExportHandlerManager>;
ui: UnwrapManagerHandler<UIHandlerManager>;
updater: UnwrapManagerHandler<UpdaterHandlerManager>;
workspace: UnwrapManagerHandler<WorkspaceHandlerManager>;
db: UnwrapManagerHandlerToServerSide<
Electron.IpcMainInvokeEvent,
DBHandlerManager
>;
debug: UnwrapManagerHandlerToServerSide<
Electron.IpcMainInvokeEvent,
DebugHandlerManager
>;
dialog: UnwrapManagerHandlerToServerSide<
Electron.IpcMainInvokeEvent,
DialogHandlerManager
>;
export: UnwrapManagerHandlerToServerSide<
Electron.IpcMainInvokeEvent,
ExportHandlerManager
>;
ui: UnwrapManagerHandlerToServerSide<
Electron.IpcMainInvokeEvent,
UIHandlerManager
>;
updater: UnwrapManagerHandlerToServerSide<
Electron.IpcMainInvokeEvent,
UpdaterHandlerManager
>;
workspace: UnwrapManagerHandlerToServerSide<
Electron.IpcMainInvokeEvent,
WorkspaceHandlerManager
>;
};
// Note: all of these handlers will be the single-source-of-truth for the apis exposed to the renderer process
+1 -1
View File
@@ -39,7 +39,7 @@
"@types/fs-extra": "^11.0.1",
"@types/uuid": "^9.0.1",
"cross-env": "7.0.3",
"electron": "25.0.1",
"electron": "=25.0.1",
"electron-log": "^5.0.0-beta.24",
"electron-squirrel-startup": "1.0.0",
"electron-window-state": "^5.0.3",
+3 -2
View File
@@ -1,10 +1,11 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "./lib",
"baseUrl": ".",
"noEmit": true,
"target": "ESNext"
},
"references": [{ "path": "../../../tests/kit" }],
"include": ["**.spec.ts", "**.test.ts"]
"include": ["**.spec.ts", "**.test.ts", "fixture.ts"],
"exclude": ["lib"]
}
+4 -5
View File
@@ -11,20 +11,19 @@
"outDir": "dist",
"moduleResolution": "node",
"resolveJsonModule": true,
"noImplicitOverride": true,
"noEmit": false
"noImplicitOverride": true
},
"include": ["**/*.ts", "**/*.tsx"],
"include": ["./layers"],
"exclude": ["node_modules", "out", "dist"],
"references": [
{
"path": "./tsconfig.node.json"
},
{
"path": "../../packages/native"
"path": "./tests/tsconfig.json"
},
{
"path": "../../packages/env"
"path": "../../packages/native"
},
{
"path": "../../packages/infra"
+18 -8
View File
@@ -17,16 +17,15 @@
"incremental": true,
"experimentalDecorators": true
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
"src/types/types.d.ts",
"../../packages/graphql",
"../electron/layers"
],
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "src/types/types.d.ts"],
"exclude": ["node_modules"],
"references": [
{
"path": "../../packages/plugin-infra"
},
{
"path": "../../packages/infra"
},
{
"path": "../../packages/env"
},
@@ -44,6 +43,17 @@
},
{
"path": "../../packages/hooks"
},
{
"path": "../../packages/graphql"
},
// Plugins
{
"path": "../../plugins/bookmark-block"
},
{
"path": "../../plugins/copilot"
}
]
}
+4 -4
View File
@@ -75,7 +75,6 @@
"eslint-plugin-unicorn": "^47.0.0",
"eslint-plugin-unused-imports": "^2.0.0",
"fake-indexeddb": "4.0.1",
"got": "^13.0.0",
"happy-dom": "^9.20.3",
"husky": "^8.0.3",
"lint-staged": "^13.2.2",
@@ -98,8 +97,9 @@
"resolutions": {
"lit": "^2.7.2",
"idb": "^7.1.1",
"@emotion/cache": "^11.10.7"
"@emotion/cache": "^11.10.7",
"@types/cacheable-request": "^6.0.2",
"@types/responselike": "^1.0.0"
},
"packageManager": "yarn@3.5.0",
"stableVersion": "0.5.4"
"packageManager": "yarn@3.5.0"
}
+8 -19
View File
@@ -5,9 +5,8 @@ import type {
DebugHandlerManager,
DialogHandlerManager,
ExportHandlerManager,
HandlerManager,
PrimitiveHandlers,
UIHandlerManager,
UnwrapManagerHandlerToClientSide,
UpdaterHandlerManager,
WorkspaceHandlerManager,
} from '@toeverything/infra';
@@ -16,29 +15,19 @@ import { z } from 'zod';
import { UaHelper } from './ua-helper';
type UnwrapManagerHandler<
Manager extends HandlerManager<string, Record<string, PrimitiveHandlers>>
> = {
[K in keyof Manager['handlers']]: Manager['handlers'][K] extends (
...args: infer Args
) => Promise<infer R>
? (...args: Args) => Promise<R>
: never;
};
declare global {
interface Window {
appInfo: {
electron: boolean;
};
apis: {
db: UnwrapManagerHandler<DBHandlerManager>;
debug: UnwrapManagerHandler<DebugHandlerManager>;
dialog: UnwrapManagerHandler<DialogHandlerManager>;
export: UnwrapManagerHandler<ExportHandlerManager>;
ui: UnwrapManagerHandler<UIHandlerManager>;
updater: UnwrapManagerHandler<UpdaterHandlerManager>;
workspace: UnwrapManagerHandler<WorkspaceHandlerManager>;
db: UnwrapManagerHandlerToClientSide<DBHandlerManager>;
debug: UnwrapManagerHandlerToClientSide<DebugHandlerManager>;
dialog: UnwrapManagerHandlerToClientSide<DialogHandlerManager>;
export: UnwrapManagerHandlerToClientSide<ExportHandlerManager>;
ui: UnwrapManagerHandlerToClientSide<UIHandlerManager>;
updater: UnwrapManagerHandlerToClientSide<UpdaterHandlerManager>;
workspace: UnwrapManagerHandlerToClientSide<WorkspaceHandlerManager>;
};
events: any;
}
+24
View File
@@ -103,3 +103,27 @@ export abstract class WorkspaceHandlerManager extends HandlerManager<
'workspace',
WorkspaceHandlers
> {}
export type UnwrapManagerHandlerToServerSide<
ElectronEvent extends {
frameId: number;
processId: number;
},
Manager extends HandlerManager<string, Record<string, PrimitiveHandlers>>
> = {
[K in keyof Manager['handlers']]: Manager['handlers'][K] extends (
...args: infer Args
) => Promise<infer R>
? (event: ElectronEvent, ...args: Args) => Promise<R>
: never;
};
export type UnwrapManagerHandlerToClientSide<
Manager extends HandlerManager<string, Record<string, PrimitiveHandlers>>
> = {
[K in keyof Manager['handlers']]: Manager['handlers'][K] extends (
...args: infer Args
) => Promise<infer R>
? (...args: Args) => Promise<R>
: never;
};
-1
View File
@@ -2,7 +2,6 @@
"extends": "../../tsconfig.json",
"include": ["./src"],
"compilerOptions": {
"composite": true,
"noEmit": false,
"outDir": "lib"
},
+2
View File
@@ -12,10 +12,12 @@
"cheerio": "^1.0.0-rc.12"
},
"devDependencies": {
"electron": "=25.0.1",
"react": "18.3.0-canary-16d053d59-20230506",
"react-dom": "18.3.0-canary-16d053d59-20230506"
},
"peerDependencies": {
"electron": "*",
"react": "*",
"react-dom": "*"
},
+14 -3
View File
@@ -1,8 +1,19 @@
{
"extends": "../../tsconfig.json",
"include": ["./src"],
"compilerOptions": {
"rootDir": "./src",
"types": ["electron"]
"noEmit": false,
"outDir": "lib"
},
"include": ["**.ts", "**.tsx"]
"references": [
{
"path": "../../packages/component"
},
{
"path": "../../packages/plugin-infra"
},
{
"path": "../../packages/env"
}
]
}
+14 -12
View File
@@ -1,18 +1,20 @@
import got from 'got';
const STAGE_HOST = 'https://nightly.affine.pro/';
if (['master', 'develop'].includes(process.env.CF_PAGES_BRANCH)) {
const message = `Daily builds: New deployment of version ${process.env.CF_PAGES_COMMIT_SHA} was deploy: [nightly](${STAGE_HOST}) / [internal](${process.env.CF_PAGES_URL})`;
const url = `https://api.telegram.org/bot${process.env.BOT_TOKEN}/sendMessage`;
got
.post(url, {
json: {
chat_id: process.env.CHAT_ID,
text: message,
parse_mode: 'Markdown',
disable_notification: true,
},
})
.then(r => console.log(r.body));
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
chat_id: process.env.CHAT_ID,
text: message,
parse_mode: 'Markdown',
disable_notification: true,
}),
})
.then(r => r.json())
.then(console.log);
}
+18 -14
View File
@@ -7,14 +7,17 @@
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
// Project
"incremental": true,
"composite": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"baseUrl": ".",
@@ -52,11 +55,9 @@
},
"include": [],
"references": [
// Apps
{
"path": "./tests"
},
{
"path": "./apps/electron/tests"
"path": "./apps/electron"
},
{
"path": "./apps/web"
@@ -64,9 +65,21 @@
{
"path": "./apps/server"
},
// Top level packages
{
"path": "./packages/infra"
},
{
"path": "./packages/graphql"
},
{
"path": "./packages/debug"
},
// Tests
{
"path": "./tests"
},
{
"path": "./packages/component"
},
@@ -79,12 +92,6 @@
{
"path": "./packages/env"
},
{
"path": "./packages/graphql"
},
{
"path": "./packages/debug"
},
{
"path": "./packages/workspace"
},
@@ -105,9 +112,6 @@
},
{
"path": "./tsconfig.node.json"
},
{
"path": "./apps/electron"
}
],
"files": [],
+10 -120
View File
@@ -36,9 +36,11 @@ __metadata:
dependencies:
"@toeverything/plugin-infra": "workspace:*"
cheerio: ^1.0.0-rc.12
electron: =25.0.1
react: 18.3.0-canary-16d053d59-20230506
react-dom: 18.3.0-canary-16d053d59-20230506
peerDependencies:
electron: "*"
react: "*"
react-dom: "*"
languageName: unknown
@@ -163,7 +165,7 @@ __metadata:
"@types/uuid": ^9.0.1
cheerio: ^1.0.0-rc.12
cross-env: 7.0.3
electron: 25.0.1
electron: =25.0.1
electron-log: ^5.0.0-beta.24
electron-squirrel-startup: 1.0.0
electron-updater: ^5.3.0
@@ -7968,13 +7970,6 @@ __metadata:
languageName: node
linkType: hard
"@sindresorhus/is@npm:^5.2.0":
version: 5.3.0
resolution: "@sindresorhus/is@npm:5.3.0"
checksum: b31cebabcdece3d5322de2a4dbc8c0f004e04147a00f2606787bcaf5655ad4b1954f6727fc6914c524009b2b9a2cc01c42835b55f651ce69fd2a0083b60bb852
languageName: node
linkType: hard
"@sinonjs/commons@npm:^1.7.0":
version: 1.8.6
resolution: "@sinonjs/commons@npm:1.8.6"
@@ -9087,15 +9082,6 @@ __metadata:
languageName: node
linkType: hard
"@szmarczak/http-timer@npm:^5.0.1":
version: 5.0.1
resolution: "@szmarczak/http-timer@npm:5.0.1"
dependencies:
defer-to-connect: ^2.0.1
checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92
languageName: node
linkType: hard
"@tabler/icons-react@npm:^2.17.0":
version: 2.20.0
resolution: "@tabler/icons-react@npm:2.20.0"
@@ -9389,7 +9375,7 @@ __metadata:
languageName: node
linkType: hard
"@types/cacheable-request@npm:^6.0.1":
"@types/cacheable-request@npm:^6.0.2":
version: 6.0.3
resolution: "@types/cacheable-request@npm:6.0.3"
dependencies:
@@ -9606,7 +9592,7 @@ __metadata:
languageName: node
linkType: hard
"@types/http-cache-semantics@npm:*, @types/http-cache-semantics@npm:^4.0.1":
"@types/http-cache-semantics@npm:*":
version: 4.0.1
resolution: "@types/http-cache-semantics@npm:4.0.1"
checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9
@@ -10788,7 +10774,6 @@ __metadata:
eslint-plugin-unicorn: ^47.0.0
eslint-plugin-unused-imports: ^2.0.0
fake-indexeddb: 4.0.1
got: ^13.0.0
happy-dom: ^9.20.3
husky: ^8.0.3
lint-staged: ^13.2.2
@@ -12216,28 +12201,6 @@ __metadata:
languageName: node
linkType: hard
"cacheable-lookup@npm:^7.0.0":
version: 7.0.0
resolution: "cacheable-lookup@npm:7.0.0"
checksum: 9e2856763fc0a7347ab34d704c010440b819d4bb5e3593b664381b7433e942dd22e67ee5581f12256f908e79b82d30b86ebbacf40a081bfe10ee93fbfbc2d6a9
languageName: node
linkType: hard
"cacheable-request@npm:^10.2.8":
version: 10.2.10
resolution: "cacheable-request@npm:10.2.10"
dependencies:
"@types/http-cache-semantics": ^4.0.1
get-stream: ^6.0.1
http-cache-semantics: ^4.1.1
keyv: ^4.5.2
mimic-response: ^4.0.0
normalize-url: ^8.0.0
responselike: ^3.0.0
checksum: 6f56cf6dc88c000936c89e386fdfd65c9a7833f6a4f73314f546287352efca50ef8c7ccc80c64d5c51fe104f5a60356366e190846f56abf3f2e90c1bacec7eee
languageName: node
linkType: hard
"cacheable-request@npm:^7.0.2":
version: 7.0.2
resolution: "cacheable-request@npm:7.0.2"
@@ -13707,7 +13670,7 @@ __metadata:
languageName: node
linkType: hard
"defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1":
"defer-to-connect@npm:^2.0.0":
version: 2.0.1
resolution: "defer-to-connect@npm:2.0.1"
checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b
@@ -14522,7 +14485,7 @@ __metadata:
languageName: node
linkType: hard
"electron@npm:25.0.1":
"electron@npm:=25.0.1":
version: 25.0.1
resolution: "electron@npm:25.0.1"
dependencies:
@@ -16192,13 +16155,6 @@ __metadata:
languageName: node
linkType: hard
"form-data-encoder@npm:^2.1.2":
version: 2.1.4
resolution: "form-data-encoder@npm:2.1.4"
checksum: e0b3e5950fb69b3f32c273944620f9861f1933df9d3e42066e038e26dfb343d0f4465de9f27e0ead1a09d9df20bc2eed06a63c2ca2f8f00949e7202bae9e29dd
languageName: node
linkType: hard
"form-data@npm:^3.0.0":
version: 3.0.1
resolution: "form-data@npm:3.0.1"
@@ -16998,25 +16954,6 @@ __metadata:
languageName: node
linkType: hard
"got@npm:^13.0.0":
version: 13.0.0
resolution: "got@npm:13.0.0"
dependencies:
"@sindresorhus/is": ^5.2.0
"@szmarczak/http-timer": ^5.0.1
cacheable-lookup: ^7.0.0
cacheable-request: ^10.2.8
decompress-response: ^6.0.0
form-data-encoder: ^2.1.2
get-stream: ^6.0.1
http2-wrapper: ^2.1.10
lowercase-keys: ^3.0.0
p-cancelable: ^3.0.0
responselike: ^3.0.0
checksum: bcae6601efd710bc6c5b454c5e44bcb16fcfe57a1065e2d61ff918c1d69c3cf124984ebf509ca64ed10f0da2d2b5531b77da05aa786e75849d084fb8fbea711b
languageName: node
linkType: hard
"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9":
version: 4.2.11
resolution: "graceful-fs@npm:4.2.11"
@@ -17417,7 +17354,7 @@ __metadata:
languageName: node
linkType: hard
"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1":
"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0":
version: 4.1.1
resolution: "http-cache-semantics@npm:4.1.1"
checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236
@@ -17475,16 +17412,6 @@ __metadata:
languageName: node
linkType: hard
"http2-wrapper@npm:^2.1.10":
version: 2.2.0
resolution: "http2-wrapper@npm:2.2.0"
dependencies:
quick-lru: ^5.1.1
resolve-alpn: ^1.2.0
checksum: 6fd20e5cb6a58151715b3581e06a62a47df943187d2d1f69e538a50cccb7175dd334ecfde7900a37d18f3e13a1a199518a2c211f39860e81e9a16210c199cfaa
languageName: node
linkType: hard
"https-proxy-agent@npm:^4.0.0":
version: 4.0.0
resolution: "https-proxy-agent@npm:4.0.0"
@@ -19678,7 +19605,7 @@ __metadata:
languageName: node
linkType: hard
"keyv@npm:^4.0.0, keyv@npm:^4.5.2":
"keyv@npm:^4.0.0":
version: 4.5.2
resolution: "keyv@npm:4.5.2"
dependencies:
@@ -20432,13 +20359,6 @@ __metadata:
languageName: node
linkType: hard
"lowercase-keys@npm:^3.0.0":
version: 3.0.0
resolution: "lowercase-keys@npm:3.0.0"
checksum: 67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5
languageName: node
linkType: hard
"lowlight@npm:^1.17.0":
version: 1.20.0
resolution: "lowlight@npm:1.20.0"
@@ -20918,13 +20838,6 @@ __metadata:
languageName: node
linkType: hard
"mimic-response@npm:^4.0.0":
version: 4.0.0
resolution: "mimic-response@npm:4.0.0"
checksum: 33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850
languageName: node
linkType: hard
"min-indent@npm:^1.0.0":
version: 1.0.1
resolution: "min-indent@npm:1.0.1"
@@ -21742,13 +21655,6 @@ __metadata:
languageName: node
linkType: hard
"normalize-url@npm:^8.0.0":
version: 8.0.0
resolution: "normalize-url@npm:8.0.0"
checksum: 24c20b75ebfd526d8453084692720b49d111c63c0911f1b7447427829597841eef5a8ba3f6bb93d6654007b991c1f5cd85da2c907800e439e2e2ec6c2abd0fc0
languageName: node
linkType: hard
"npm-run-path@npm:^2.0.0":
version: 2.0.2
resolution: "npm-run-path@npm:2.0.2"
@@ -22126,13 +22032,6 @@ __metadata:
languageName: node
linkType: hard
"p-cancelable@npm:^3.0.0":
version: 3.0.0
resolution: "p-cancelable@npm:3.0.0"
checksum: 2b5ae34218f9c2cf7a7c18e5d9a726ef9b165ef07e6c959f6738371509e747334b5f78f3bcdeb03d8a12dcb978faf641fd87eb21486ed7d36fb823b8ddef3219
languageName: node
linkType: hard
"p-defer@npm:^1.0.0":
version: 1.0.0
resolution: "p-defer@npm:1.0.0"
@@ -24188,7 +24087,7 @@ __metadata:
languageName: node
linkType: hard
"resolve-alpn@npm:^1.0.0, resolve-alpn@npm:^1.2.0":
"resolve-alpn@npm:^1.0.0":
version: 1.2.1
resolution: "resolve-alpn@npm:1.2.1"
checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0
@@ -24358,15 +24257,6 @@ __metadata:
languageName: node
linkType: hard
"responselike@npm:^3.0.0":
version: 3.0.0
resolution: "responselike@npm:3.0.0"
dependencies:
lowercase-keys: ^3.0.0
checksum: e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e
languageName: node
linkType: hard
"restore-cursor@npm:^3.1.0":
version: 3.1.0
resolution: "restore-cursor@npm:3.1.0"