From 115bfc7f0dfd4c8dca196e3b353095cba357f9cf Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Tue, 23 Jul 2024 00:02:39 +0200 Subject: [PATCH] refactor(federation): :recycle: Move around code to get better TypeScript output --- build.ts | 12 +++++++++--- federation/README.md | 3 +-- federation/http/index.ts | 4 ++-- federation/index.ts | 17 ++++++++++++++--- federation/jsr.jsonc | 3 +-- federation/package.json | 5 ----- federation/requester.ts | 7 ------- federation/requester/constants.ts | 2 +- federation/requester/index.ts | 8 ++++---- federation/schemas.ts | 4 ++-- federation/schemas/base.ts | 10 +++++----- federation/schemas/extensions.ts | 2 +- federation/schemas/extensions/custom_emojis.ts | 4 ++-- federation/schemas/extensions/polls.ts | 4 ++-- federation/schemas/extensions/reactions.ts | 2 +- federation/schemas/extensions/vanity.ts | 2 +- federation/validator/index.ts | 6 +++--- tsconfig.json | 6 +++++- 18 files changed, 54 insertions(+), 47 deletions(-) delete mode 100644 federation/requester.ts diff --git a/build.ts b/build.ts index 430d34b..1772fc9 100644 --- a/build.ts +++ b/build.ts @@ -2,7 +2,7 @@ import dts from "bun-plugin-dts"; import ora from "ora"; const entrypoints = { - federation: ["index.ts", "schemas.ts", "requester.ts"], + federation: ["index.ts", "schemas.ts"], client: ["index.ts", "types.ts"], }; @@ -15,11 +15,17 @@ for (const pkg of ["federation", "client"]) { ), outdir: `${pkg}/dist`, format: "esm", - minify: true, + minify: false, sourcemap: "external", splitting: true, target: "browser", - plugins: [dts()], + plugins: [ + dts({ + output: { + noBanner: true, + }, + }), + ], }).then((output) => { if (!output.success) { subSpinner.fail(`Failed to build ${pkg} module`); diff --git a/federation/README.md b/federation/README.md index bbcea52..342f16b 100644 --- a/federation/README.md +++ b/federation/README.md @@ -57,8 +57,7 @@ Your editor's IntelliSense should provide you with every method and property ava A `FederationRequester` class is provided to make requests to a remote server. It sets the correct headers and has multiple methods to make requesters easier. ```typescript -import { FederationRequester } from "@lysand-org/federation/requester"; -import { SignatureConstructor } from "@lysand-org/federation/cryptography"; +import { FederationRequester, SignatureConstructor } from "@lysand-org/federation"; const requester = new FederationRequester( new URL("https://example.com"), diff --git a/federation/http/index.ts b/federation/http/index.ts index 8d7ccac..5e42f8f 100644 --- a/federation/http/index.ts +++ b/federation/http/index.ts @@ -10,8 +10,8 @@ import type { ServerMetadata, Undo, User, -} from "../schemas"; -import type { EntityValidator } from "../validator/index"; +} from "@/federation/schemas"; +import type { EntityValidator } from "@/federation/validator/index"; type MaybePromise = T | Promise; diff --git a/federation/index.ts b/federation/index.ts index 76cbdf9..32fae29 100644 --- a/federation/index.ts +++ b/federation/index.ts @@ -5,10 +5,18 @@ * @see module:federation/schemas/base */ +import { + SignatureConstructor, + SignatureValidator, +} from "@/federation/cryptography"; +import { RequestParserHandler } from "@/federation/http"; +import { + FederationRequester, + type Output, + ResponseError, +} from "@/federation/requester/index"; +import { EntityValidator } from "@/federation/validator"; import type { ValidationError } from "zod-validation-error"; -import { SignatureConstructor, SignatureValidator } from "./cryptography"; -import { RequestParserHandler } from "./http"; -import { EntityValidator } from "./validator"; export { EntityValidator, @@ -16,4 +24,7 @@ export { SignatureConstructor, SignatureValidator, RequestParserHandler, + type Output, + ResponseError, + FederationRequester, }; diff --git a/federation/jsr.jsonc b/federation/jsr.jsonc index 4587782..a638048 100644 --- a/federation/jsr.jsonc +++ b/federation/jsr.jsonc @@ -4,7 +4,6 @@ "version": "0.0.0", "exports": { ".": "./index.ts", - "./types": "./schemas.ts", - "./requester": "./requester.ts" + "./types": "./schemas.ts" } } diff --git a/federation/package.json b/federation/package.json index 62cb1b3..8476b38 100644 --- a/federation/package.json +++ b/federation/package.json @@ -43,11 +43,6 @@ "default": "./dist/index.js", "types": "./dist/index.d.ts" }, - "./requester": { - "import": "./dist/requester.js", - "default": "./dist/requester.js", - "types": "./dist/requester.d.ts" - }, "./types": { "import": "./dist/schemas.js", "default": "./dist/schemas.js", diff --git a/federation/requester.ts b/federation/requester.ts deleted file mode 100644 index 1aaeec7..0000000 --- a/federation/requester.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { - FederationRequester, - type Output, - ResponseError, -} from "./requester/index"; - -export { type Output, ResponseError, FederationRequester }; diff --git a/federation/requester/constants.ts b/federation/requester/constants.ts index f9bbf3a..552e37f 100644 --- a/federation/requester/constants.ts +++ b/federation/requester/constants.ts @@ -1,3 +1,3 @@ -import pkg from "../package.json" with { type: "json" }; +import pkg from "@/federation/package.json" with { type: "json" }; export const DEFAULT_UA = `LysandFederation/${pkg.version} (+${pkg.homepage})`; diff --git a/federation/requester/index.ts b/federation/requester/index.ts index 0048e03..2f6a37f 100644 --- a/federation/requester/index.ts +++ b/federation/requester/index.ts @@ -1,8 +1,8 @@ +import type { SignatureConstructor } from "@/federation/cryptography"; +import { DEFAULT_UA } from "@/federation/requester/constants"; +import type { User } from "@/federation/schemas"; +import { WebFingerSchema } from "@/federation/schemas/webfinger"; import { fromZodError } from "zod-validation-error"; -import type { SignatureConstructor } from "../cryptography"; -import type { User } from "../schemas"; -import { WebFingerSchema } from "../schemas/webfinger"; -import { DEFAULT_UA } from "./constants"; type HttpVerb = "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; diff --git a/federation/schemas.ts b/federation/schemas.ts index 15d9122..d7f55bc 100644 --- a/federation/schemas.ts +++ b/federation/schemas.ts @@ -1,4 +1,3 @@ -import type { z } from "zod"; import type { ActionSchema, ActorPublicKeyDataSchema, @@ -21,7 +20,8 @@ import type { UserSchema, VanityExtensionSchema, VisibilitySchema, -} from "./schemas/base"; +} from "@/federation/schemas/base"; +import type { z } from "zod"; // biome-ignore lint/suspicious/noExplicitAny: Used only as a base type type AnyZod = z.ZodType; diff --git a/federation/schemas/base.ts b/federation/schemas/base.ts index b907fca..748deb8 100644 --- a/federation/schemas/base.ts +++ b/federation/schemas/base.ts @@ -1,9 +1,9 @@ +import { ContentFormatSchema } from "@/federation/schemas/content_format"; +import { ExtensionPropertySchema } from "@/federation/schemas/extensions"; +import { CustomEmojiExtensionSchema } from "@/federation/schemas/extensions/custom_emojis"; +import { VanityExtensionSchema } from "@/federation/schemas/extensions/vanity"; +import { extensionTypeRegex } from "@/federation/schemas/regex"; import { z } from "zod"; -import { ContentFormatSchema } from "./content_format"; -import { ExtensionPropertySchema } from "./extensions"; -import { CustomEmojiExtensionSchema } from "./extensions/custom_emojis"; -import { VanityExtensionSchema } from "./extensions/vanity"; -import { extensionTypeRegex } from "./regex"; const EntitySchema = z.object({ id: z.string().uuid(), diff --git a/federation/schemas/extensions.ts b/federation/schemas/extensions.ts index 7078bde..e1518c2 100644 --- a/federation/schemas/extensions.ts +++ b/federation/schemas/extensions.ts @@ -1,5 +1,5 @@ +import { CustomEmojiExtensionSchema } from "@/federation/schemas/extensions/custom_emojis"; import { z } from "zod"; -import { CustomEmojiExtensionSchema } from "./extensions/custom_emojis"; export const ExtensionPropertySchema = z.object({ "org.lysand:custom_emojis": diff --git a/federation/schemas/extensions/custom_emojis.ts b/federation/schemas/extensions/custom_emojis.ts index fb4ac0f..ed8812d 100644 --- a/federation/schemas/extensions/custom_emojis.ts +++ b/federation/schemas/extensions/custom_emojis.ts @@ -1,3 +1,5 @@ +import { ContentFormatSchema } from "@/federation/schemas/content_format"; +import { emojiRegex } from "@/federation/schemas/regex"; /** * Custom emojis extension. * @module federation/schemas/extensions/custom_emojis @@ -5,8 +7,6 @@ * @see https://lysand.org/extensions/custom-emojis */ import { z } from "zod"; -import { ContentFormatSchema } from "../content_format"; -import { emojiRegex } from "../regex"; /** * @description Used to validate the properties the extension's custom field diff --git a/federation/schemas/extensions/polls.ts b/federation/schemas/extensions/polls.ts index 7d5c7b3..a6cab65 100644 --- a/federation/schemas/extensions/polls.ts +++ b/federation/schemas/extensions/polls.ts @@ -1,3 +1,5 @@ +import { ExtensionSchema } from "@/federation/schemas/base"; +import { ContentFormatSchema } from "@/federation/schemas/content_format"; /** * Polls extension * @module federation/schemas/extensions/polls @@ -5,8 +7,6 @@ * @see https://lysand.org/extensions/polls */ import { z } from "zod"; -import { ExtensionSchema } from "../base"; -import { ContentFormatSchema } from "../content_format"; /** * @description Poll extension entity diff --git a/federation/schemas/extensions/reactions.ts b/federation/schemas/extensions/reactions.ts index 5475309..ef3a8a6 100644 --- a/federation/schemas/extensions/reactions.ts +++ b/federation/schemas/extensions/reactions.ts @@ -1,3 +1,4 @@ +import { ExtensionSchema } from "@/federation/schemas/base"; /** * Reactions extension * @module federation/schemas/extensions/reactions @@ -5,7 +6,6 @@ * @see https://lysand.org/extensions/reactions */ import { z } from "zod"; -import { ExtensionSchema } from "../base"; /** * @description Reaction extension entity diff --git a/federation/schemas/extensions/vanity.ts b/federation/schemas/extensions/vanity.ts index 059de6d..31e905f 100644 --- a/federation/schemas/extensions/vanity.ts +++ b/federation/schemas/extensions/vanity.ts @@ -5,8 +5,8 @@ * @see https://lysand.org/extensions/vanity */ +import { ContentFormatSchema } from "@/federation/schemas/content_format"; import { z } from "zod"; -import { ContentFormatSchema } from "../content_format"; /** * @description Vanity extension entity diff --git a/federation/validator/index.ts b/federation/validator/index.ts index 5c7c527..6fb6096 100644 --- a/federation/validator/index.ts +++ b/federation/validator/index.ts @@ -1,5 +1,3 @@ -import type { z } from "zod"; -import { fromError } from "zod-validation-error"; import { ActionSchema, ActorPublicKeyDataSchema, @@ -22,7 +20,9 @@ import { UserSchema, VanityExtensionSchema, VisibilitySchema, -} from "../schemas/base"; +} from "@/federation/schemas/base"; +import type { z } from "zod"; +import { fromError } from "zod-validation-error"; // biome-ignore lint/suspicious/noExplicitAny: Used only as a base type type AnyZod = z.ZodType; diff --git a/tsconfig.json b/tsconfig.json index 1cf67a4..9253cb5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,7 +22,11 @@ "experimentalDecorators": true, "verbatimModuleSyntax": true, "noUnusedLocals": true, - "noUnusedParameters": true + "noUnusedParameters": true, + "paths": { + "@/federation/*": ["./federation/*"], + "@/client/*": ["./client/*"] + } }, "include": ["*.ts", "*.d.ts", "**/*.ts", "**/*.d.ts"] }