From 91f57298495216839fc0ca78dc9492e953700bc5 Mon Sep 17 00:00:00 2001 From: jacob Date: Sun, 7 Apr 2024 14:31:19 -0500 Subject: [PATCH] move to squint --- packages/poster/.gitignore | 1 + packages/poster/package.json | 20 ++++++----- packages/poster/squint.edn | 3 ++ packages/poster/src/core/actions.cljs | 4 +-- packages/poster/src/core/poster.cljs | 48 +++++++++++++++------------ packages/poster/src/dev/mv.clj | 10 ------ packages/poster/test/spec.mjs | 2 +- 7 files changed, 43 insertions(+), 45 deletions(-) create mode 100644 packages/poster/squint.edn delete mode 100644 packages/poster/src/dev/mv.clj diff --git a/packages/poster/.gitignore b/packages/poster/.gitignore index 0f6650e..aa33e20 100644 --- a/packages/poster/.gitignore +++ b/packages/poster/.gitignore @@ -1,2 +1,3 @@ dist/ .shadow-cljs +src/*.d.ts diff --git a/packages/poster/package.json b/packages/poster/package.json index 6ddf917..808800d 100644 --- a/packages/poster/package.json +++ b/packages/poster/package.json @@ -2,16 +2,15 @@ "name": "@sern/poster", "version": "1.1.0", "description": "Post discord application commands", - "main": "dist/index.js", - "scripts": { - "poster:debug": "shadow-cljs compile poster", - "poster:prod": "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" + "exports": { + "." : "./dist/core/poster.mjs", + "" : "" }, - "devDependencies": { - "shadow-cljs": "^2.8.52", - "source-map-support": "^0.5.13" + "scripts": { + "poster:debug": "npx squint compile", + "poster:prod": "npx squint compile", + "gen-discord-types": "npx openapi-typescript https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json --output ./src/resources/discord.d.ts", + "repl": "npx squint repl" }, "keywords": [], "author": "", @@ -19,5 +18,8 @@ "publishConfig": { "access": "public", "tag": "beta" + }, + "dependencies": { + "squint-cljs": "latest" } } diff --git a/packages/poster/squint.edn b/packages/poster/squint.edn new file mode 100644 index 0000000..65aae6d --- /dev/null +++ b/packages/poster/squint.edn @@ -0,0 +1,3 @@ +{:paths ["src"] + :output-dir "dist/" + :copy-resources #{ :d.ts }} diff --git a/packages/poster/src/core/actions.cljs b/packages/poster/src/core/actions.cljs index 415c2fe..e1f3615 100644 --- a/packages/poster/src/core/actions.cljs +++ b/packages/poster/src/core/actions.cljs @@ -25,11 +25,9 @@ "body" (.stringify js/JSON body )}) ])) -(defn- keyword->str [ky] - (subs (str ky) 1)) (def actions (into {} - (map (fn [[k v]] [(keyword->str k) (request-init v)])) + (map (fn [[k v]] [k (request-init v)])) routes)) diff --git a/packages/poster/src/core/poster.cljs b/packages/poster/src/core/poster.cljs index 43f4da2..bb3bd9d 100644 --- a/packages/poster/src/core/poster.cljs +++ b/packages/poster/src/core/poster.cljs @@ -1,41 +1,45 @@ (ns core.poster - (:require [clojure.string :refer [replace]] - [shadow.cljs.modern :refer (js-await)] + (:require [clojure.string :as s] [core.actions :refer [actions]])) -(def base "https://discord.com/api/v10") +(def ^:private base "https://discord.com/api/v10") (defn- inject [remaining-url opts] (-> (str base remaining-url) - (replace #"\{application\.id\}" (.-app_id ^js opts)) - (replace #"\{guild\.id\}" (.-guild_id ^js opts)) - (replace #"\{command\.id\}" (.-command_id ^js opts)))) + (s/replace #"\{application\.id\}" (or (.-app_id ^js opts) "")) + (s/replace #"\{guild\.id\}" (or (.-guild_id ^js opts) "")) + (s/replace #"\{command\.id\}" (or (.-command_id ^js opts) "")))) (defn- ?params [^js query] (new js/URLSearchParams query)) -(defn fetch-application [headers] - #_(println (str base (actions "application/me"))) - (-> (js/fetch (str base (first (actions "application/me"))) #js{ "headers" headers }) - (.then (fn [res] (.json res))) - (.then (fn [json] (.-id json))))) -(defn poster [token, appid] +(defn- ^:async fetch-application [headers] + (js-await (-> (js/fetch (str base (first (get actions "application/me"))) #js{ "headers" headers }) + (.then (fn ^:=> [res] (.json res))) + (.then (fn ^:=> [son] (if-let [id (.-id son)] + id (throw (str "Reason " (.-message son)))))) + (.catch (fn ^:=> [e] (throw e)))))) + +(defn- poster [token, appid] (let [header #js{ "Content-Type" "application/json" - "Authorization" (str "Bot " token) } ] - (js-await [appid (fetch-application header)] - (fn [action opts] - (let [[url mkrequest] (actions action) + "Authorization" (str "Bot " token) }] + (^:async fn [action opts] + (let [[url mkrequest] (get actions action) + appid (js-await (fetch-application header)) options #js{"app_id" appid "guild_id" (.-guild_id ^js opts) "command_id" (.-command_id ^js opts)} - url (new js/URL (inject url options))] + url (new js/URL (inject url options)) ] (set! (.-search url) (?params (.-query ^js opts))) - (js/fetch url (mkrequest (.-body ^js opts) header))))))) + (js/fetch url (mkrequest (.-body ^js opts) header)))))) -(defn isOk? [^js response] +(defn- isOk? [^js response] (.-ok response)) -(defn is4XX? [^js response] - (not (.-ok response))) - + +(def default { + :client poster + :isOk isOk? + :is4XX (complement isOk?) +}) diff --git a/packages/poster/src/dev/mv.clj b/packages/poster/src/dev/mv.clj deleted file mode 100644 index 550363b..0000000 --- a/packages/poster/src/dev/mv.clj +++ /dev/null @@ -1,10 +0,0 @@ -(ns dev.mv) -(require '[clojure.java.io :as io]) -(defn hook - {:shadow.build/stage :compile-finish} - [build-state & args] - (do - (when (not (.exists (io/file "./dist"))) (.mkdir (io/file "./dist"))) - (spit "./dist/discord.d.ts" (slurp "./dts/discord.d.ts")) - (spit "./dist/index.d.ts" (slurp "./dts/index.d.ts"))) - build-state) diff --git a/packages/poster/test/spec.mjs b/packages/poster/test/spec.mjs index 0ec50da..a073a59 100644 --- a/packages/poster/test/spec.mjs +++ b/packages/poster/test/spec.mjs @@ -1,4 +1,4 @@ -import poster from '../dist/index.js'; +import poster from '../dist/core/poster.mjs'; const send = await poster.client("");