get lot of typings done

This commit is contained in:
Jacob Nguyen
2023-12-10 14:50:00 -06:00
parent d33b950dad
commit 623353c0d5
12 changed files with 155 additions and 39 deletions

1
.gitignore vendored
View File

@@ -9,3 +9,4 @@
.yarn/cache .yarn/cache
#.pnp.* #.pnp.*
node_modules/**/* node_modules/**/*
packages/poster/dts/discord.d.ts

1
.nrepl-port Normal file
View File

@@ -0,0 +1 @@
55388

View File

@@ -4,5 +4,8 @@
"private": true, "private": true,
"workspaces": [ "workspaces": [
"packages/*" "packages/*"
] ],
"devDependencies": {
"openapi-typescript": "^6.7.2"
}
} }

1
packages/.nrepl-port Normal file
View File

@@ -0,0 +1 @@
49862

View File

@@ -1,32 +1,51 @@
declare module 'index.js'; declare module 'index.js';
import type { paths } from './discord.d.ts'
type Method = "get" | "post" | "patch" | "put" | "delete"
type GlobalGetAll = paths["/applications/{application_id}/commands"]["get"]
type GlobalGet = paths["/applications/{application_id}/commands/{command_id}"]["get"]
type GlobalPost = paths["/applications/{application_id}/commands"]["post"]
type GlobalEdit = paths["/applications/{application_id}/commands/{command_id}"]["patch"]
type GlobalPut = paths["/applications/{application_id}/commands"]['put']
type GlobalDelete = paths["/applications/{application_id}/commands/{command_id}"]["delete"]
type GuildPost = paths["/applications/{application_id}/guilds/{guild_id}/commands"]["post"]
type GuildGet = paths["/applications/{application_id}/guilds/{guild_id}/commands/{command_id}"]["get"]
type GuildEdit = paths["/applications/{application_id}/guilds/{guild_id}/commands/{command_id}"]["patch"]
type GuildDelete = paths["/applications/{application_id}/guilds/{guild_id}/commands/{command_id}"]["delete"]
type GuildPut = paths["/applications/{application_id}/guilds/{guild_id}/commands"]["put"]
interface RoutesOptions {
"global/get-all": [];
"global/get": [GlobalGet["parameters"]["path"] & { application_id?: never }];
"global/post": [{ body: GlobalPost["requestBody"]["content"]['application/json'] }
& GlobalPost["parameters"]["path"]
& { application_id?: never }];
"global/edit": [{ body: GlobalEdit["requestBody"]["content"]['application/json']}
& GlobalEdit["parameters"]["path"]
& { application_id?: never }];
"global/put": [{ body: GlobalPut["requestBody"]["content"]['application/json']}
& GlobalPut["parameters"]['path']
& { application_id?: never } ];
"global/delete": [];
"guild/post": [{ body: GuildPost["requestBody"]["content"]['application/json'] }];
"guild/get": [GuildGet["parameters"]["path"] & { application_id?: never }];
"guild/edit": [{ body: GuildEdit["requestBody"]["content"]['application/json'] }
& GuildEdit["parameters"]["path"]
& { application_id?: never }];
"guild/delete": [GuildDelete["parameters"]["path"] & { application_id?: never }];
"guild/put": [{ body: GuildPut["requestBody"]["content"]['application/json']}
& GuildPut["parameters"]["path"]
& { application_id?: never }];
}
interface Routes {
"global/put": {
body: {
id?: string;
name: string;
name_localizations?: Record<string, unknown>
description: string;
description_localizations?: Record<string, unknown>
/**
* type of command, default = 1
*/
type?: number;
nsfw?: boolean;
default_permission?:boolean
/**
* @deprecated
*/
default_member_permissions?: string;
options?: Record<string,unknown>[]
}
}
};
interface Send { interface Send {
<T extends keyof Routes>(command : T, opts: Routes[T]): Promise<Response> <T extends keyof RoutesOptions>(command : T, ...opts: RoutesOptions[T]): Promise<Response>
}; }
export default function (token: string, appid: string): Send; export default function (token: string, appid: string): Send;

View File

@@ -5,8 +5,9 @@
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"build:debug": "shadow-cljs compile poster && node -e \"require('fs').copyFileSync('dts/index.d.ts', 'dist/index.d.ts')\"", "build:debug": "shadow-cljs compile poster",
"build:release": "shadow-cljs release poster && node -e \"require('fs').copyFileSync('dts/index.d.ts', 'dist/index.d.ts')\"", "build:release": "shadow-cljs release poster",
"gen-discord-types": "npx openapi-typescript https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json --output ./dts/discord.d.ts",
"repl": "shadow-cljs node-repl" "repl": "shadow-cljs node-repl"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -8,4 +8,7 @@
:builds :builds
{:poster {:target :node-library {:poster {:target :node-library
:output-to "dist/index.js" :output-to "dist/index.js"
:exports-var core.poster/poster}}} :exports-var core.poster/poster
:build-hooks
[(dev.mv/hook 1 2 3)]
}}}

View File

@@ -3,7 +3,7 @@
(def routes { (def routes {
:global/get-all ["GET" "/applications/{application.id}/commands"] :global/get-all ["GET" "/applications/{application.id}/commands"]
:global/get ["GET" "/applications/{application.id}/commands/commands/{command.id}"] :global/get ["GET" "/applications/{application.id}/commands/{command.id}"]
:global/post ["POST" "/applications/{application.id}/commands"] :global/post ["POST" "/applications/{application.id}/commands"]
:global/edit ["PATCH" "/applications/{application.id}/commands/{command.id}"] :global/edit ["PATCH" "/applications/{application.id}/commands/{command.id}"]
:global/delete ["DELETE", "/applications/{application.id}/commands/{command.id}"] :global/delete ["DELETE", "/applications/{application.id}/commands/{command.id}"]
@@ -18,7 +18,7 @@
(defn request-init [spec] (defn request-init [spec]
(let [[method url] (routes spec)] (let [[method url] (routes spec)]
[ url (fn [body headers] [url (fn [body headers]
#js { "method" method #js { "method" method
"headers" headers "headers" headers
"body" (.stringify js/JSON body )}) "body" (.stringify js/JSON body )})
@@ -29,8 +29,7 @@
(def actions (into {} (def actions (into {}
(map (fn [[k v]] [(keyword->str k) (request-init k)])) (map (fn [[k v]] [(keyword->str k) (request-init k)]))
routes routes))
))

View File

@@ -14,8 +14,8 @@
(let [header #js{ "Content-Type" "application/json" (let [header #js{ "Content-Type" "application/json"
"Authorization" (str "Bot " token) }] "Authorization" (str "Bot " token) }]
(fn [action opts] (fn [action opts]
(let [ [url mkrequest] (actions action) (let [[url mkrequest] (actions action)
full-url (processed-url url #js { "app_id" appid full-url (processed-url url #js{"app_id" appid
"guild_id" (.-guild_id ^js opts) "guild_id" (.-guild_id ^js opts)
"command_id" (.-command_id ^js opts) })] "command_id" (.-command_id ^js opts)})]
(js/fetch full-url (mkrequest (.-body ^js opts ) header)))))) (js/fetch full-url (mkrequest (.-body ^js opts ) header))))))

View File

@@ -0,0 +1,9 @@
(ns dev.mv)
(defn hook
{:shadow.build/stage :compile-finish}
[build-state & args]
(do
(spit "./dist/discord.d.ts" (slurp "./dts/discord.d.ts"))
(spit "./dist/index.d.ts" (slurp "./dts/index.d.ts")))
build-state)

View File

@@ -3,7 +3,7 @@ import poster from '../dist/index.js';
const send = poster("token", "appid"); const send = poster("token", "appid");
const req = await send("global/put", { }); const req = await send("global/get-all");
console.log(req); console.log(req);

View File

@@ -1811,6 +1811,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@fastify/busboy@npm:^2.0.0":
version: 2.1.0
resolution: "@fastify/busboy@npm:2.1.0"
checksum: 3233abd10f73e50668cb4bb278a79b7b3fadd30215ac6458299b0e5a09a29c3586ec07597aae6bd93f5cbedfcef43a8aeea51829cd28fc13850cdbcd324c28d5
languageName: node
linkType: hard
"@isaacs/cliui@npm:^8.0.2": "@isaacs/cliui@npm:^8.0.2":
version: 8.0.2 version: 8.0.2
resolution: "@isaacs/cliui@npm:8.0.2" resolution: "@isaacs/cliui@npm:8.0.2"
@@ -2263,6 +2270,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ansi-colors@npm:^4.1.3":
version: 4.1.3
resolution: "ansi-colors@npm:4.1.3"
checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e
languageName: node
linkType: hard
"ansi-regex@npm:^2.0.0": "ansi-regex@npm:^2.0.0":
version: 2.1.1 version: 2.1.1
resolution: "ansi-regex@npm:2.1.1" resolution: "ansi-regex@npm:2.1.1"
@@ -2340,6 +2354,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"argparse@npm:^2.0.1":
version: 2.0.1
resolution: "argparse@npm:2.0.1"
checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced
languageName: node
linkType: hard
"array-buffer-byte-length@npm:^1.0.0": "array-buffer-byte-length@npm:^1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "array-buffer-byte-length@npm:1.0.0" resolution: "array-buffer-byte-length@npm:1.0.0"
@@ -3871,6 +3892,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"fast-glob@npm:^3.3.1":
version: 3.3.2
resolution: "fast-glob@npm:3.3.2"
dependencies:
"@nodelib/fs.stat": ^2.0.2
"@nodelib/fs.walk": ^1.2.3
glob-parent: ^5.1.2
merge2: ^1.3.0
micromatch: ^4.0.4
checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1
languageName: node
linkType: hard
"fastq@npm:^1.6.0": "fastq@npm:^1.6.0":
version: 1.15.0 version: 1.15.0
resolution: "fastq@npm:1.15.0" resolution: "fastq@npm:1.15.0"
@@ -4806,6 +4840,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"js-yaml@npm:^4.1.0":
version: 4.1.0
resolution: "js-yaml@npm:4.1.0"
dependencies:
argparse: ^2.0.1
bin:
js-yaml: bin/js-yaml.js
checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a
languageName: node
linkType: hard
"jsesc@npm:^2.5.1": "jsesc@npm:^2.5.1":
version: 2.5.2 version: 2.5.2
resolution: "jsesc@npm:2.5.2" resolution: "jsesc@npm:2.5.2"
@@ -5534,6 +5579,22 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"openapi-typescript@npm:^6.7.2":
version: 6.7.2
resolution: "openapi-typescript@npm:6.7.2"
dependencies:
ansi-colors: ^4.1.3
fast-glob: ^3.3.1
js-yaml: ^4.1.0
supports-color: ^9.4.0
undici: ^5.27.2
yargs-parser: ^21.1.1
bin:
openapi-typescript: bin/cli.js
checksum: cec414943b930f60bd3b58fc0f5b996ac54e35261a4bd9a8c25e6a3a3395281f5288cb6231bc74cb8c3b60d58436a510d6628c53198722bd3dc6d1e2e3fe4aef
languageName: node
linkType: hard
"os-browserify@npm:^0.3.0": "os-browserify@npm:^0.3.0":
version: 0.3.0 version: 0.3.0
resolution: "os-browserify@npm:0.3.0" resolution: "os-browserify@npm:0.3.0"
@@ -7232,6 +7293,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"supports-color@npm:^9.4.0":
version: 9.4.0
resolution: "supports-color@npm:9.4.0"
checksum: cb8ff8daeaf1db642156f69a9aa545b6c01dd9c4def4f90a49f46cbf24be0c245d392fcf37acd119cd1819b99dad2cc9b7e3260813f64bcfd7f5b18b5a1eefb8
languageName: node
linkType: hard
"supports-preserve-symlinks-flag@npm:^1.0.0": "supports-preserve-symlinks-flag@npm:^1.0.0":
version: 1.0.0 version: 1.0.0
resolution: "supports-preserve-symlinks-flag@npm:1.0.0" resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
@@ -7368,6 +7436,8 @@ __metadata:
"tools@workspace:.": "tools@workspace:.":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "tools@workspace:." resolution: "tools@workspace:."
dependencies:
openapi-typescript: ^6.7.2
languageName: unknown languageName: unknown
linkType: soft linkType: soft
@@ -7602,6 +7672,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"undici@npm:^5.27.2":
version: 5.28.2
resolution: "undici@npm:5.28.2"
dependencies:
"@fastify/busboy": ^2.0.0
checksum: f9e9335803f962fff07c3c11c6d50bbc76248bacf97035047155adb29c3622a65bd6bff23a22218189740133149d22e63b68131d8c40e78ac6cb4b6d686a6dfa
languageName: node
linkType: hard
"unicode-canonical-property-names-ecmascript@npm:^2.0.0": "unicode-canonical-property-names-ecmascript@npm:^2.0.0":
version: 2.0.0 version: 2.0.0
resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0"