@fedify/botkit 0.3.0-dev.108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +75 -0
- package/dist/bot-impl.d.ts +111 -0
- package/dist/bot-impl.d.ts.map +1 -0
- package/dist/bot-impl.js +602 -0
- package/dist/bot-impl.js.map +1 -0
- package/dist/bot-impl.test.d.ts +2 -0
- package/dist/bot-impl.test.js +1642 -0
- package/dist/bot-impl.test.js.map +1 -0
- package/dist/bot.d.ts +270 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +118 -0
- package/dist/bot.js.map +1 -0
- package/dist/bot.test.d.ts +2 -0
- package/dist/bot.test.js +80 -0
- package/dist/bot.test.js.map +1 -0
- package/dist/components/Layout.d.ts +26 -0
- package/dist/components/Layout.d.ts.map +1 -0
- package/dist/components/Layout.js +36 -0
- package/dist/components/Layout.js.map +1 -0
- package/dist/components/Message.d.ts +21 -0
- package/dist/components/Message.d.ts.map +1 -0
- package/dist/components/Message.js +99 -0
- package/dist/components/Message.js.map +1 -0
- package/dist/components/Message.test.d.ts +2 -0
- package/dist/components/Message.test.js +32 -0
- package/dist/components/Message.test.js.map +1 -0
- package/dist/deno.js +73 -0
- package/dist/deno.js.map +1 -0
- package/dist/emoji.d.ts +87 -0
- package/dist/emoji.d.ts.map +1 -0
- package/dist/emoji.js +37 -0
- package/dist/emoji.js.map +1 -0
- package/dist/emoji.test.d.ts +2 -0
- package/dist/emoji.test.js +109 -0
- package/dist/emoji.test.js.map +1 -0
- package/dist/events.d.ts +110 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +4 -0
- package/dist/follow-impl.d.ts +23 -0
- package/dist/follow-impl.d.ts.map +1 -0
- package/dist/follow-impl.js +51 -0
- package/dist/follow-impl.js.map +1 -0
- package/dist/follow-impl.test.d.ts +2 -0
- package/dist/follow-impl.test.js +110 -0
- package/dist/follow-impl.test.js.map +1 -0
- package/dist/follow.d.ts +44 -0
- package/dist/follow.d.ts.map +1 -0
- package/dist/follow.js +4 -0
- package/dist/message-impl.d.ts +54 -0
- package/dist/message-impl.d.ts.map +1 -0
- package/dist/message-impl.js +439 -0
- package/dist/message-impl.js.map +1 -0
- package/dist/message-impl.test.d.ts +2 -0
- package/dist/message-impl.test.js +519 -0
- package/dist/message-impl.test.js.map +1 -0
- package/dist/message.d.ts +223 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/message.js +8 -0
- package/dist/mod.d.ts +13 -0
- package/dist/mod.js +13 -0
- package/dist/pages.d.ts +20 -0
- package/dist/pages.d.ts.map +1 -0
- package/dist/pages.js +361 -0
- package/dist/pages.js.map +1 -0
- package/dist/reaction.d.ts +90 -0
- package/dist/reaction.d.ts.map +1 -0
- package/dist/reaction.js +7 -0
- package/dist/repository.d.ts +323 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +483 -0
- package/dist/repository.js.map +1 -0
- package/dist/repository.test.d.ts +2 -0
- package/dist/repository.test.js +336 -0
- package/dist/repository.test.js.map +1 -0
- package/dist/session-impl.d.ts +32 -0
- package/dist/session-impl.d.ts.map +1 -0
- package/dist/session-impl.js +195 -0
- package/dist/session-impl.js.map +1 -0
- package/dist/session-impl.test.d.ts +20 -0
- package/dist/session-impl.test.d.ts.map +1 -0
- package/dist/session-impl.test.js +464 -0
- package/dist/session-impl.test.js.map +1 -0
- package/dist/session.d.ts +139 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +4 -0
- package/dist/text.d.ts +391 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +640 -0
- package/dist/text.js.map +1 -0
- package/dist/text.test.d.ts +2 -0
- package/dist/text.test.js +473 -0
- package/dist/text.test.js.map +1 -0
- package/package.json +137 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.test.js","names":["url: string","keyPair: CryptoKeyPair","bot: BotWithVoidContextData","origin: string | URL | Context<void>","_contextData?: void","_req: Request","_emojis: Record<TEmojiName, CustomEmoji>","t: Text<\"block\", void>","m: Text<\"inline\", void>","t2: Text<\"block\", void>","t3: Text<\"block\", void>","t4: Text<\"block\", void>","t5: Text<\"block\", void>","t6: Text<\"block\", void>","t7: Text<\"block\", void>","t8: Text<\"block\", void>","t9: Text<\"block\", void>","t10: Text<\"block\", void>","m2: Text<\"inline\", void>","m3: Text<\"inline\", void>","m4: Text<\"inline\", void>","m5: Text<\"inline\", void>","m6: Text<\"inline\", void>","m7: Text<\"inline\", void>","m8: Text<\"inline\", void>","m9: Text<\"inline\", void>","t: Text<\"inline\", void>","t2: Text<\"inline\", void>","t3: Text<\"inline\", void>","t4: Text<\"inline\", void>","emojiData: CustomEmoji","emojiData1: CustomEmoji","emojiData2: CustomEmoji"],"sources":["../src/text.test.ts"],"sourcesContent":["// BotKit by Fedify: A framework for creating ActivityPub bots\n// Copyright (C) 2025 Hong Minhee <https://hongminhee.org/>\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as\n// published by the Free Software Foundation, either version 3 of the\n// License, or (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see <https://www.gnu.org/licenses/>.\nimport {\n type Context,\n createFederation,\n MemoryKvStore,\n} from \"@fedify/fedify/federation\";\nimport { getDocumentLoader } from \"@fedify/fedify/runtime\";\nimport { importJwk } from \"@fedify/fedify/sig\";\nimport { Emoji, Hashtag, Image, Mention, Person } from \"@fedify/fedify/vocab\";\nimport assert from \"node:assert\";\nimport { describe, test } from \"node:test\";\nimport { BotImpl } from \"./bot-impl.ts\";\nimport type { BotWithVoidContextData } from \"./bot.ts\";\nimport type { CustomEmoji, DeferredCustomEmoji } from \"./emoji.ts\";\nimport type { Session } from \"./session.ts\";\nimport {\n code,\n customEmoji,\n CustomEmojiText,\n em,\n hashtag,\n isText,\n link,\n markdown,\n mention,\n mentions,\n strong,\n type Text,\n text,\n} from \"./text.ts\";\n\nconst defaultDocumentLoader = getDocumentLoader();\n\nconst federation = createFederation<void>({\n kv: new MemoryKvStore(),\n documentLoader(url: string) {\n const parsed = new URL(url);\n if (parsed.host !== \"example.com\") {\n return defaultDocumentLoader(url);\n }\n const document = {\n \"@context\": \"https://www.w3.org/ns/activitystreams\",\n type: \"Person\",\n id: url,\n preferredUsername: url.split(\"/\").at(-1),\n url,\n };\n return Promise.resolve({\n document,\n documentUrl: url,\n contextUrl: null,\n });\n },\n authenticatedDocumentLoaderFactory(_identity) {\n return this.documentLoader!;\n },\n});\n\nconst keyPair: CryptoKeyPair = {\n privateKey: await importJwk({\n kty: \"RSA\",\n alg: \"RS256\",\n // cSpell: disable\n n: \"15DAu9S9sROZ_NonfZm5S0PSeYuh2POeo0cpvvGnp_T9jQWjMuGdhwOPT7OOD9N-R1IY-2hXkk-RjfWNzbxMoNKvOpz_1MHRg18W5Lw60mIxZFztLKlNhOZS7rVrlJc--jj1wLETEfY5ocYCyRZm25UeT_Q1JSePdnhEGVXo4sSqoUcMV5Bgys5PlISfQj_bHDpcIi9snJ70hOzYTy7k7fNuCHHsK08DN4bZMG58qQNrPFtZW6fgpQiu0kgtUBFgQu-uUNn1h0io-7OhMU2dXeV8lwCILhIFRvrRV9vKQydBejbyYuzFY-Xq98biB9Aox8GD0jJE4tTVj6CpsmaN9yq6nI8ibWjnk87IKdU3jex5zB8chR0cm2tyIWr6dKhCTexmtYTF0pGW7PZ2Dnn31BU3cPkrkplu752D4eQ47BsAspMsHRxXE3NtqlmN02Y-6AIzt1tuPBPHldQHUpxtGrwFh9b9biC2mtb_w6F0oyxVyZsAZnuK2tN0-uX_iMPoC5VLnPrzgWjQiMArivg4u1cQ35hrvuFYFAdNf2WaBDyDNxaCoTD28z9bF1titlbQ48tDw0adZ1Zp8_x12JqA5HNpqDfmyT4KPU_6Ag7J7cGfGeO2vsjcc1oGhqZ-n6JlnSvVImHS5eKC6CDhW7ceuKC_oX-XPWWQQHhPniwM2RE\",\n e: \"AQAB\",\n d: \"eAD5ipdQUrfazcyUl3Nwl9nV3hxBqYlWEweW0dmtv-6_CDbPN5AqJfNxYKlQuLbAYevuRGc9-RGasjC1FIdzEUS4kCS-ty5--GeDUysGhABuBrVEw8wsf4PJP2J31WytfpcfGHp7Z1BvnQOioVd7Q1qsWU5WF60CTK1_G6ubzkI1yzrGQCj7-WsJGmEKV9M8o2ZJzC4ihL5o2WcQtGQixeTyqHjjROjjnZHQbwnTFDP3Cs6_3CqFANrol9_eeehyclED9bag3QMyL408ezn-FTugNF_zb9JQZcdTq1mMK_46kVLtdOzipk5klDN_uWHEkg_E1sttVemuShri3ZICDUSd70Y4VeQxNLUKJNBSYdSLmcVgfIHaXMmcrknmBuz23SrGR6JZR4DSJtr3sylR2tlOxpZhJAUZf17f8aZD7EnbR7qcNtjZmf8RyAKrEXLgL6f3jm6FfE_b027kcmLMXL7bJtlTBYnM9MrBnXSsJftHRrmB1Xe-0Hq24Q7ctrhRhFF3Ij8MjNRjdn6NWdIXzltreblLEO44iTJtlWeYtg-C9566F_yWZnjDZEQ8nvBhpCM3iXlRfzhlEebBoBbf-Mf-0hJRRUL3EtGuMueylzeyk4tTzvOfK2FUnVAi8bIhjz4m8RhN7kC4ubqUXZbKwzjeI1dhWyfDphrPiRtCetE\",\n p: \"_4BmuvmlMZmiD_uGE__iWIHizMe4Ay34WOSNAm0uhjfNgWpWHdxosQQeSehBE8x_CwJGKbCl69ewmEAOYnP3KYpytvcHVEMO7XQAE66p_19PzIy95WY6CR20CFXUykzQ_6gE_nFB39rxcxprxAqaNEGM2PtwpiTSwoyZFWkgSE6O6rwv03vNAMeib3CZU3kdg4mHiZAryk9U6uphZ_lJ2wOSMX_SHkcEAwePoae8E_jIJ0drfIkyR5pSkghThjHIv95hcHuuDodm2W9e7sppv3EpjE81ANKEfkrrauDfX9BrRDC-14hhCK7t7bYJ9bj49nmSSLmLHNw1W2eyvvAHEw\",\n q: \"1_xoQ6UBnAsql-87v7UddCiJEppk9LkfYb-DBEtBHbTFDvxbE0Px7ooNevgwlMDmi6t4hSkQZEwF5sLFHv1-fNFtpwVGzqu6ekXYfw0FxWRVjJTh5e91G3mOMVprGvgSMk3PRO33dBAhA6MMGIMi72XCGWNpy7ajfawYdpeMO6k6aC93jT9RmoaB_UmwyM2lmzaWP9RKInJ6t_i-eFm05_0qkPdPdg5b3HbNpKyAMLVxA8DAauHvcCx9CsAZ8ZbvL-mC5AX7v7B9iovXCStHpfA5f73M7AGFGRZpt51mvx8pxHVwF2tW6h03HEBz5BX-9YMTaepH369CRovGo4Jvyw\",\n dp:\n \"hlBlsN0T7mMpQuWisljOEGEXbTeAkItWBsT_K8thrcUgD2xrIP-BOa1Eju29aD8UeiET6U6nqreUajUiWrdDs17It05dV_p4mnNkpvQnAcyFEq7aFQIMeEZZIhic6ExBgmQ9W9UGIDvkufGlvUUlk1ryRA7KRU0OTp_CyfKdueUyVEvhiHeIaWSJC7RRpgQBc-iUi8hyfMP_jA7ybcoq_St_au4a8ze58C3FX-HhiU47SgrNgoZNHD8QMRyXa_A37EVnS854zcJ4Ws2lRjq6JJ3EjbIF1wzUAeA4qdLVGnViLlLBwGQ9PmdXRKNx0O8QUeHO-NQxQVax5f85hA6CaQ\",\n dq:\n \"MVKMpNXrlizeny-cn1zGyx3un3bukwwrZHENhE-DITuEvLVYPwAHIYgZJ_nBblbWzxJrRU1pVt4dguL7jOYqmmpg9gE4eD2zKfUFSY45wSf2eVIOfCnAvnN1y0Nwrgn0bdRi_sSw-6orP99eBcL8mVrNhmqzYDfnAe3o8DwPZBhzJBOi43iQNA9_Y84ONuzvYpCGozDhdRhbeeOt62Hg9BFWRSCU3srMo33l3DMgWv80Pb0os7_ApAckzu2rfwYOvQxAPb44DUBKivcANjHR_Mzs9ITtZP-720zI-4tQSVjeeuSuokp64J-nVCZL0MxNGtfB-S_tFeG56s5EoFZLHQ\",\n qi:\n \"1J7CfWYlg4Igsu2N7bhgLzbc1l6A3odyyOlM70uH8P41kCYgpRDdH8Ms8yOJE-F13ha5drICZqsD7IjgG0cZONJ_0xTeka0AYMvCwjuJZ_4CzVFYNICxSHFUI-sCu1p-zb70eXU6fiwOFgzoPbnrwywpbxcTV_8H0XszwPcI3fjrGk6N-hi23Ur1gIjhnri_-x8mzwmtPA1ID1G17U4X93mP7dlYCzGigq8ORbSdZthOKdjtHXITBOgpcTiuyTTwAEqh3xyXscfsgzi0X6olBevJCGeTzOrqQX026JmNVykaS1-o_ea_Y0cD0q6Nxd5TwLZMCLZi1M5PLHhGlJg9MQ\",\n // cSpell: enable\n key_ops: [\"sign\"],\n ext: true,\n }, \"private\"),\n publicKey: await importJwk({\n kty: \"RSA\",\n alg: \"RS256\",\n // cSpell: disable\n n: \"15DAu9S9sROZ_NonfZm5S0PSeYuh2POeo0cpvvGnp_T9jQWjMuGdhwOPT7OOD9N-R1IY-2hXkk-RjfWNzbxMoNKvOpz_1MHRg18W5Lw60mIxZFztLKlNhOZS7rVrlJc--jj1wLETEfY5ocYCyRZm25UeT_Q1JSePdnhEGVXo4sSqoUcMV5Bgys5PlISfQj_bHDpcIi9snJ70hOzYTy7k7fNuCHHsK08DN4bZMG58qQNrPFtZW6fgpQiu0kgtUBFgQu-uUNn1h0io-7OhMU2dXeV8lwCILhIFRvrRV9vKQydBejbyYuzFY-Xq98biB9Aox8GD0jJE4tTVj6CpsmaN9yq6nI8ibWjnk87IKdU3jex5zB8chR0cm2tyIWr6dKhCTexmtYTF0pGW7PZ2Dnn31BU3cPkrkplu752D4eQ47BsAspMsHRxXE3NtqlmN02Y-6AIzt1tuPBPHldQHUpxtGrwFh9b9biC2mtb_w6F0oyxVyZsAZnuK2tN0-uX_iMPoC5VLnPrzgWjQiMArivg4u1cQ35hrvuFYFAdNf2WaBDyDNxaCoTD28z9bF1titlbQ48tDw0adZ1Zp8_x12JqA5HNpqDfmyT4KPU_6Ag7J7cGfGeO2vsjcc1oGhqZ-n6JlnSvVImHS5eKC6CDhW7ceuKC_oX-XPWWQQHhPniwM2RE\",\n e: \"AQAB\",\n // cSpell: enable\n key_ops: [\"verify\"],\n ext: true,\n }, \"public\"),\n};\n\nfederation.setActorDispatcher(\"/ap/actor/{identifier}\", (ctx, identifier) => {\n return new Person({\n id: ctx.getActorUri(identifier),\n preferredUsername: identifier,\n });\n}).setKeyPairsDispatcher((_ctx, _identifier) => {\n return [keyPair];\n});\n\nconst bot: BotWithVoidContextData = {\n federation,\n identifier: \"bot\",\n getSession(origin: string | URL | Context<void>, _contextData?: void) {\n const ctx = typeof origin === \"string\" || origin instanceof URL\n ? federation.createContext(new URL(origin))\n : origin;\n return {\n bot,\n context: ctx,\n actorId: ctx.getActorUri(bot.identifier),\n actorHandle: `@bot@${ctx.host}` as const,\n getActor() {\n const actor = new Person({\n id: ctx.getActorUri(bot.identifier),\n preferredUsername: \"bot\",\n });\n return Promise.resolve(actor);\n },\n follow() {\n throw new Error(\"Not implemented\");\n },\n unfollow() {\n throw new Error(\"Not implemented\");\n },\n follows() {\n throw new Error(\"Not implemented\");\n },\n publish() {\n throw new Error(\"Not implemented\");\n },\n getOutbox() {\n throw new Error(\"Not implemented\");\n },\n } satisfies Session<void>;\n },\n fetch(_req: Request) {\n return Promise.resolve(new Response());\n },\n addCustomEmojis<TEmojiName extends string>(\n _emojis: Record<TEmojiName, CustomEmoji>,\n ): Record<TEmojiName, DeferredCustomEmoji<void>> {\n return {} as Record<TEmojiName, DeferredCustomEmoji<void>>;\n },\n};\n\ntest(\"isText()\", () => {\n const t = text`Hello, World`;\n assert.ok(isText(t));\n const t2 = em(\"Hello, World\");\n assert.ok(isText(t2));\n assert.deepStrictEqual(isText(\"Hello, World\"), false);\n});\n\ntest(\"mentions()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const actor = new URL(\"https://hollo.social/@fedify\");\n const actor2 = new URL(\"https://example.com/users/john\");\n const actor3 = new Person({ id: actor });\n const t: Text<\"block\", void> = text`Hello, world!`;\n assert.deepStrictEqual(await mentions(session, t, actor), false);\n assert.deepStrictEqual(await mentions(session, t, actor2), false);\n assert.deepStrictEqual(await mentions(session, t, actor3), false);\n\n const m: Text<\"inline\", void> = mention(actor);\n assert.ok(await mentions(session, m, actor));\n assert.deepStrictEqual(await mentions(session, m, actor2), false);\n assert.ok(await mentions(session, m, actor3));\n});\n\ntest(\"text`...`\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const t: Text<\"block\", void> = text`Hello, <${123}>`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n \"<p>Hello, <123></p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t.getTags(session)), []);\n assert.deepStrictEqual(t.getCachedObjects(), []);\n\n const t2: Text<\"block\", void> = text`Hello, ${em(\"World\")}`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t2.getHtml(session))).join(\"\"),\n \"<p>Hello, <em>World</em></p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t2.getTags(session)), []);\n assert.deepStrictEqual(t2.getCachedObjects(), []);\n\n const actor = new Person({\n id: new URL(\"https://example.com/users/john\"),\n preferredUsername: \"john\",\n url: new URL(\"https://example.com/@john\"),\n });\n const t3: Text<\"block\", void> = text`Hello, ${mention(actor)}`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t3.getHtml(session))).join(\"\"),\n '<p>Hello, <a href=\"https://example.com/@john\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">@<span>john@example.com' +\n \"</span></a></p>\",\n );\n const tags3 = await Array.fromAsync(t3.getTags(session));\n assert.deepStrictEqual(tags3.length, 1);\n assert.ok(tags3[0] instanceof Mention);\n assert.deepStrictEqual(tags3[0].name, \"@john@example.com\");\n assert.deepStrictEqual(\n tags3[0].href,\n new URL(\"https://example.com/users/john\"),\n );\n const cache3 = t3.getCachedObjects();\n assert.deepStrictEqual(cache3.length, 1);\n assert.ok(cache3[0] instanceof Person);\n assert.deepStrictEqual(\n cache3[0].id,\n new URL(\"https://example.com/users/john\"),\n );\n\n const t4: Text<\"block\", void> = text`Hello\\nworld!`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t4.getHtml(session))).join(\"\"),\n \"<p>Hello<br>world!</p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t4.getTags(session)), []);\n assert.deepStrictEqual(t4.getCachedObjects(), []);\n\n const t5: Text<\"block\", void> =\n text`Hello\\nworld!\\n\\nGoodbye!\\n\\t\\n \\nHello!`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t5.getHtml(session))).join(\"\"),\n \"<p>Hello<br>world!</p><p>Goodbye!</p><p>Hello!</p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t5.getTags(session)), []);\n assert.deepStrictEqual(t5.getCachedObjects(), []);\n\n const t6: Text<\"block\", void> = text`\\n\\n\\nHello\\nworld\\n\\n\\nGoodbye!\\n`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t6.getHtml(session))).join(\"\"),\n \"<p>Hello<br>world</p><p>Goodbye!</p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t6.getTags(session)), []);\n assert.deepStrictEqual(t6.getCachedObjects(), []);\n\n const t7: Text<\"block\", void> = text`Here's a link: ${new URL(\n \"https://fedify.dev/\",\n )}.`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t7.getHtml(session))).join(\"\"),\n '<p>Here's a link: <a href=\"https://fedify.dev/\" target=\"_blank\">' +\n \"https://fedify.dev/</a>.</p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t7.getTags(session)), []);\n assert.deepStrictEqual(t7.getCachedObjects(), []);\n\n const t8: Text<\"block\", void> = text`Here's a multiline text:\n \n${\"First line.\\nSecond line.\"}`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t8.getHtml(session))).join(\"\"),\n \"<p>Here's a multiline text:</p><p>First line.<br>Second line.</p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t8.getTags(session)), []);\n assert.deepStrictEqual(t8.getCachedObjects(), []);\n\n const t9: Text<\"block\", void> =\n text`Interpolating blocks: ${text`Hello\\nworld!`} ... and ... ${text`Goodbye!`}`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t9.getHtml(session))).join(\"\"),\n \"<p>Interpolating blocks: </p><p>Hello<br>world!</p><p> ... and ... </p><p>Goodbye!</p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t9.getTags(session)), []);\n assert.deepStrictEqual(t9.getCachedObjects(), []);\n\n const t10: Text<\"block\", void> =\n text`Interpolating blocks:\\n\\n${text`Hello\\nworld!`}\\n\\n... and ...\\n\\n${text`Goodbye!`}`;\n assert.deepStrictEqual(\n (await Array.fromAsync(t10.getHtml(session))).join(\"\"),\n \"<p>Interpolating blocks:</p><p>Hello<br>world!</p><p>... and ...</p><p>Goodbye!</p>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t10.getTags(session)), []);\n assert.deepStrictEqual(t10.getCachedObjects(), []);\n});\n\ntest(\"mention()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const m: Text<\"inline\", void> = mention(\n new Person({\n id: new URL(\"https://example.com/users/john\"),\n preferredUsername: \"john\",\n url: new URL(\"https://example.com/@john\"),\n }),\n );\n assert.deepStrictEqual(\n (await Array.fromAsync(m.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/@john\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">@<span>john@example.com' +\n \"</span></a>\",\n );\n const tags = await Array.fromAsync(m.getTags(session));\n assert.deepStrictEqual(tags.length, 1);\n assert.ok(tags[0] instanceof Mention);\n assert.deepStrictEqual(tags[0].name, \"@john@example.com\");\n assert.deepStrictEqual(\n tags[0].href,\n new URL(\"https://example.com/users/john\"),\n );\n const cache = m.getCachedObjects();\n assert.deepStrictEqual(cache.length, 1);\n assert.ok(cache[0] instanceof Person);\n assert.deepStrictEqual(\n cache[0].id,\n new URL(\"https://example.com/users/john\"),\n );\n\n const m2: Text<\"inline\", void> = mention(\n \"Jane Doe\",\n new URL(\"https://example.com/@jane\"),\n );\n assert.deepStrictEqual(\n (await Array.fromAsync(m2.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/@jane\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">Jane Doe</a>',\n );\n const tags2 = await Array.fromAsync(m2.getTags(session));\n assert.deepStrictEqual(tags2.length, 1);\n assert.ok(tags2[0] instanceof Mention);\n assert.deepStrictEqual(tags2[0].name, \"Jane Doe\");\n assert.deepStrictEqual(tags2[0].href, new URL(\"https://example.com/@jane\"));\n const cache2 = m2.getCachedObjects();\n assert.deepStrictEqual(cache2.length, 1);\n assert.ok(cache2[0] instanceof Person);\n assert.deepStrictEqual(cache2[0].id, new URL(\"https://example.com/@jane\"));\n\n const m3: Text<\"inline\", void> = mention(\n \"John Doe\",\n new Person({\n id: new URL(\"https://example.com/users/john\"),\n preferredUsername: \"john\",\n url: new URL(\"https://example.com/@john\"),\n }),\n );\n assert.deepStrictEqual(\n (await Array.fromAsync(m3.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/@john\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">John Doe</a>',\n );\n const tags3 = await Array.fromAsync(m3.getTags(session));\n assert.deepStrictEqual(tags3.length, 1);\n assert.ok(tags3[0] instanceof Mention);\n assert.deepStrictEqual(tags3[0].name, \"John Doe\");\n assert.deepStrictEqual(\n tags3[0].href,\n new URL(\"https://example.com/users/john\"),\n );\n const cache3 = m3.getCachedObjects();\n assert.deepStrictEqual(cache3.length, 1);\n assert.ok(cache3[0] instanceof Person);\n assert.deepStrictEqual(\n cache3[0].id,\n new URL(\"https://example.com/users/john\"),\n );\n\n const m4: Text<\"inline\", void> = mention(\"@fedify@hollo.social\");\n assert.deepStrictEqual(\n (await Array.fromAsync(m4.getHtml(session))).join(\"\"),\n '<a href=\"https://hollo.social/@fedify\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">@<span>' +\n \"fedify@hollo.social</span></a>\",\n );\n const tags4 = await Array.fromAsync(m4.getTags(session));\n assert.deepStrictEqual(tags4.length, 1);\n assert.ok(tags4[0] instanceof Mention);\n assert.deepStrictEqual(tags4[0].name, \"@fedify@hollo.social\");\n assert.deepStrictEqual(\n tags4[0].href,\n new URL(\"https://hollo.social/@fedify\"),\n );\n const cache4 = m4.getCachedObjects();\n assert.deepStrictEqual(cache4.length, 1);\n assert.ok(cache4[0] instanceof Person);\n assert.deepStrictEqual(cache4[0].id, new URL(\"https://hollo.social/@fedify\"));\n\n const m5: Text<\"inline\", void> = mention(\n new URL(\"https://hollo.social/@fedify\"),\n );\n assert.deepStrictEqual(\n (await Array.fromAsync(m5.getHtml(session))).join(\"\"),\n '<a href=\"https://hollo.social/@fedify\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">@<span>' +\n \"fedify@hollo.social</span></a>\",\n );\n const tags5 = await Array.fromAsync(m5.getTags(session));\n assert.deepStrictEqual(tags5.length, 1);\n assert.ok(tags5[0] instanceof Mention);\n assert.deepStrictEqual(tags5[0].name, \"@fedify@hollo.social\");\n assert.deepStrictEqual(\n tags5[0].href,\n new URL(\"https://hollo.social/@fedify\"),\n );\n const cache5 = m5.getCachedObjects();\n assert.deepStrictEqual(cache5.length, 1);\n assert.ok(cache5[0] instanceof Person);\n assert.deepStrictEqual(cache5[0].id, new URL(\"https://hollo.social/@fedify\"));\n\n const m6: Text<\"inline\", void> = mention(\"@bot@example.com\");\n assert.deepStrictEqual(\n (await Array.fromAsync(m6.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/ap/actor/bot\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">@<span>' +\n \"bot@example.com</span></a>\",\n );\n const tags6 = await Array.fromAsync(m6.getTags(session));\n assert.deepStrictEqual(tags6.length, 1);\n assert.ok(tags6[0] instanceof Mention);\n assert.deepStrictEqual(tags6[0].name, \"@bot@example.com\");\n assert.deepStrictEqual(\n tags6[0].href,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n const cache6 = m6.getCachedObjects();\n assert.deepStrictEqual(cache6.length, 1);\n assert.ok(cache6[0] instanceof Person);\n assert.deepStrictEqual(\n cache6[0].id,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n\n const m7: Text<\"inline\", void> = mention(\n \"Example\",\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n assert.deepStrictEqual(\n (await Array.fromAsync(m7.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/ap/actor/bot\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">Example</a>',\n );\n const tags7 = await Array.fromAsync(m7.getTags(session));\n assert.deepStrictEqual(tags7.length, 1);\n assert.ok(tags7[0] instanceof Mention);\n assert.deepStrictEqual(tags7[0].name, \"Example\");\n assert.deepStrictEqual(\n tags7[0].href,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n const cache7 = m7.getCachedObjects();\n assert.deepStrictEqual(cache7.length, 1);\n assert.ok(cache7[0] instanceof Person);\n assert.deepStrictEqual(\n cache7[0].id,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n\n const m8: Text<\"inline\", void> = mention(\n new Person({\n id: new URL(\"https://example.com/ap/actor/bot\"),\n preferredUsername: \"bot\",\n }),\n );\n assert.deepStrictEqual(\n (await Array.fromAsync(m8.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/ap/actor/bot\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">@<span>' +\n \"bot@example.com</span></a>\",\n );\n const tags8 = await Array.fromAsync(m8.getTags(session));\n assert.deepStrictEqual(tags8.length, 1);\n assert.ok(tags8[0] instanceof Mention);\n assert.deepStrictEqual(tags8[0].name, \"@bot@example.com\");\n assert.deepStrictEqual(\n tags8[0].href,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n const cache8 = m8.getCachedObjects();\n assert.deepStrictEqual(cache8.length, 1);\n assert.ok(cache8[0] instanceof Person);\n assert.deepStrictEqual(\n cache8[0].id,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n\n const m9: Text<\"inline\", void> = mention(\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n assert.deepStrictEqual(\n (await Array.fromAsync(m9.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/ap/actor/bot\" translate=\"no\" ' +\n 'class=\"h-card u-url mention\" target=\"_blank\">@<span>' +\n \"bot@example.com</span></a>\",\n );\n const tags9 = await Array.fromAsync(m9.getTags(session));\n assert.deepStrictEqual(tags9.length, 1);\n assert.ok(tags9[0] instanceof Mention);\n assert.deepStrictEqual(tags9[0].name, \"@bot@example.com\");\n assert.deepStrictEqual(\n tags9[0].href,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n const cache9 = m9.getCachedObjects();\n assert.deepStrictEqual(cache9.length, 1);\n assert.ok(cache9[0] instanceof Person);\n assert.deepStrictEqual(\n cache9[0].id,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n});\n\ntest(\"hashtag()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const t: Text<\"inline\", void> = hashtag(\"Fediverse\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/tags/fediverse\" class=\"mention hashtag\" ' +\n 'rel=\"tag\" target=\"_blank\">#<span>Fediverse</span></a>',\n );\n const tags = await Array.fromAsync(t.getTags(session));\n assert.deepStrictEqual(tags.length, 1);\n assert.ok(tags[0] instanceof Hashtag);\n assert.deepStrictEqual(tags[0].name, \"#fediverse\");\n assert.deepStrictEqual(\n tags[0].href,\n new URL(\"https://example.com/tags/fediverse\"),\n );\n assert.deepStrictEqual(t.getCachedObjects(), []);\n});\n\ntest(\"em()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const t: Text<\"inline\", void> = em(\"Hello, World\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n \"<em>Hello, World</em>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t.getTags(session)), []);\n assert.deepStrictEqual(t.getCachedObjects(), []);\n});\n\ntest(\"strong()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const t: Text<\"inline\", void> = strong(\"Hello, World\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n \"<strong>Hello, World</strong>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t.getTags(session)), []);\n assert.deepStrictEqual(t.getCachedObjects(), []);\n});\n\ntest(\"link()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const t: Text<\"inline\", void> = link(em(\"label\"), \"https://example.com/\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/\" target=\"_blank\"><em>label</em></a>',\n );\n assert.deepStrictEqual(await Array.fromAsync(t.getTags(session)), []);\n assert.deepStrictEqual(t.getCachedObjects(), []);\n\n const t2: Text<\"inline\", void> = link(\"label\", \"https://example.com/\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t2.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/\" target=\"_blank\">label</a>',\n );\n assert.deepStrictEqual(await Array.fromAsync(t2.getTags(session)), []);\n assert.deepStrictEqual(t2.getCachedObjects(), []);\n\n const t3: Text<\"inline\", void> = link(\"https://example.com/\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t3.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/\" target=\"_blank\">https://example.com/</a>',\n );\n assert.deepStrictEqual(await Array.fromAsync(t3.getTags(session)), []);\n assert.deepStrictEqual(t3.getCachedObjects(), []);\n\n const t4: Text<\"inline\", void> = link(em(\"label\"), \"https://example.com/\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t4.getHtml(session))).join(\"\"),\n '<a href=\"https://example.com/\" target=\"_blank\"><em>label</em></a>',\n );\n assert.deepStrictEqual(await Array.fromAsync(t4.getTags(session)), []);\n assert.deepStrictEqual(t4.getCachedObjects(), []);\n});\n\ntest(\"code()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const t: Text<\"inline\", void> = code(\"a + b\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n \"<code>a + b</code>\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t.getTags(session)), []);\n assert.deepStrictEqual(t.getCachedObjects(), []);\n});\n\ntest(\"markdown()\", async () => {\n const session = bot.getSession(\"https://example.com\");\n const md = `Here's a Markdown text.\n\n- I can have a list.\n- I can have a **bold** text.\n- I can have an _italic_ text.\n- I can mention @fedify@hollo.social.\n- I can tag #Hashtag.`;\n const t: Text<\"block\", void> = markdown(md);\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n \"<p>Here's a Markdown text.</p>\\n<ul>\\n\" +\n \"<li>I can have a list.</li>\\n\" +\n \"<li>I can have a <strong>bold</strong> text.</li>\\n\" +\n \"<li>I can have an <em>italic</em> text.</li>\\n\" +\n \"<li>I can mention \" +\n '<a translate=\"no\" class=\"h-card u-url mention\" target=\"_blank\" href=\"https://hollo.social/@fedify\">' +\n '<span class=\"at\">@</span><span class=\"user\">fedify</span>' +\n '<span class=\"at\">@</span><span class=\"domain\">hollo.social</span></a>.</li>\\n' +\n '<li>I can tag <a class=\"mention hashtag\" rel=\"tag\" target=\"_blank\" href=\"https://example.com/tags/hashtag\">#<span>Hashtag</span></a>.</li>\\n' +\n \"</ul>\\n\",\n );\n const tags = await Array.fromAsync(t.getTags(session));\n assert.deepStrictEqual(tags.length, 2);\n assert.ok(tags[0] instanceof Mention);\n assert.deepStrictEqual(tags[0].name, \"@fedify@hollo.social\");\n assert.deepStrictEqual(tags[0].href, new URL(\"https://hollo.social/@fedify\"));\n assert.ok(tags[1] instanceof Hashtag);\n assert.deepStrictEqual(tags[1].name, \"#hashtag\");\n assert.deepStrictEqual(\n tags[1].href,\n new URL(\"https://example.com/tags/hashtag\"),\n );\n const cache = t.getCachedObjects();\n assert.deepStrictEqual(cache.length, 1);\n assert.ok(cache[0] instanceof Person);\n assert.deepStrictEqual(cache[0].id, new URL(\"https://hollo.social/@fedify\"));\n\n const t2: Text<\"block\", void> = markdown(\"@fedify@hollo.social\", {\n mentions: false,\n });\n assert.deepStrictEqual(\n (await Array.fromAsync(t2.getHtml(session))).join(\"\"),\n \"<p>@fedify@hollo.social</p>\\n\",\n );\n assert.deepStrictEqual(await Array.fromAsync(t2.getTags(session)), []);\n assert.deepStrictEqual(t2.getCachedObjects(), []);\n\n const t3: Text<\"block\", void> = markdown(\"@bot@example.com\");\n assert.deepStrictEqual(\n (await Array.fromAsync(t3.getHtml(session))).join(\"\"),\n '<p><a translate=\"no\" class=\"h-card u-url mention\" target=\"_blank\" href=\"https://example.com/ap/actor/bot\">' +\n '<span class=\"at\">@</span><span class=\"user\">bot</span>' +\n '<span class=\"at\">@</span><span class=\"domain\">example.com</span></a></p>\\n',\n );\n const tags3 = await Array.fromAsync(t3.getTags(session));\n assert.deepStrictEqual(tags3.length, 1);\n assert.ok(tags3[0] instanceof Mention);\n assert.deepStrictEqual(tags3[0].name, \"@bot@example.com\");\n assert.deepStrictEqual(\n tags3[0].href,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n const cache3 = t3.getCachedObjects();\n assert.deepStrictEqual(cache3.length, 1);\n assert.ok(cache3[0] instanceof Person);\n assert.deepStrictEqual(\n cache3[0].id,\n new URL(\"https://example.com/ap/actor/bot\"),\n );\n});\n\ndescribe(\"customEmoji(), CustomEmojiText\", () => {\n const localBot = new BotImpl<void>({\n kv: new MemoryKvStore(),\n username: \"bot\",\n });\n const session = localBot.getSession(\"https://example.com\");\n const emojiData: CustomEmoji = {\n type: \"image/png\",\n url: \"https://example.com/emoji.png\",\n };\n const deferredEmoji = localBot.addCustomEmoji(\"testEmoji\", emojiData);\n const emojiObject = deferredEmoji(session); // Get the Emoji object\n\n test(\"customEmoji() function\", () => {\n const emojiText = customEmoji<void>(deferredEmoji);\n assert.ok(emojiText instanceof CustomEmojiText);\n assert.deepStrictEqual(\n (emojiText as CustomEmojiText<void>).getEmoji(session),\n emojiObject,\n );\n\n const emojiTextDirect = customEmoji<void>(emojiObject);\n assert.ok(emojiTextDirect instanceof CustomEmojiText);\n assert.deepStrictEqual(\n (emojiTextDirect as CustomEmojiText<void>).getEmoji(session),\n emojiObject,\n );\n });\n\n test(\"CustomEmojiText.getHtml()\", async () => {\n const emojiText = new CustomEmojiText(deferredEmoji);\n assert.deepStrictEqual(\n (await Array.fromAsync(emojiText.getHtml(session))).join(\"\"),\n \"\\u200b:testEmoji:\\u200b\", // Zero-width spaces around name\n );\n\n // Test with Emoji object directly\n const emojiTextDirect = new CustomEmojiText<void>(emojiObject);\n assert.deepStrictEqual(\n (await Array.fromAsync(emojiTextDirect.getHtml(session))).join(\"\"),\n \"\\u200b:testEmoji:\\u200b\",\n );\n\n // Test with emoji without name\n const emojiNoName = new Emoji({\n id: new URL(\"https://example.com/ap/emoji/noname\"),\n icon: new Image({ url: new URL(\"https://example.com/noname.png\") }),\n });\n const emojiTextNoName = new CustomEmojiText<void>(emojiNoName);\n assert.deepStrictEqual(\n (await Array.fromAsync(emojiTextNoName.getHtml(session))).join(\"\"),\n \"\",\n );\n });\n\n test(\"CustomEmojiText.getTags()\", async () => {\n const emojiText = new CustomEmojiText(deferredEmoji);\n const tags = await Array.fromAsync(emojiText.getTags(session));\n assert.deepStrictEqual(tags.length, 1);\n assert.ok(tags[0] instanceof Emoji);\n assert.deepStrictEqual(tags[0].id, emojiObject.id);\n assert.deepStrictEqual(tags[0].name, emojiObject.name);\n\n // Test with Emoji object directly\n const emojiTextDirect = new CustomEmojiText<void>(emojiObject);\n const tagsDirect = await Array.fromAsync(emojiTextDirect.getTags(session));\n assert.deepStrictEqual(tagsDirect.length, 1);\n assert.deepStrictEqual(tagsDirect[0], emojiObject);\n });\n\n test(\"CustomEmojiText.getCachedObjects()\", () => {\n const emojiText = new CustomEmojiText(deferredEmoji);\n assert.deepStrictEqual(emojiText.getCachedObjects(), []); // CustomEmojiText doesn't cache objects itself\n\n const emojiTextDirect = new CustomEmojiText(emojiObject);\n assert.deepStrictEqual(emojiTextDirect.getCachedObjects(), []);\n });\n});\n\ntest(\"customEmoji()\", async () => {\n const localBot = new BotImpl<void>({\n kv: new MemoryKvStore(),\n username: \"bot\",\n });\n const session = localBot.getSession(\"https://example.com\");\n const emojiData1: CustomEmoji = {\n type: \"image/png\",\n url: \"https://example.com/emoji1.png\",\n };\n const emojiData2: CustomEmoji = {\n type: \"image/gif\",\n file: \"/path/to/emoji2.gif\",\n };\n const deferredEmoji1 = localBot.addCustomEmoji(\"emoji1\", emojiData1);\n const deferredEmoji2 = localBot.addCustomEmoji(\"emoji2\", emojiData2);\n const emojiObject1 = deferredEmoji1(session);\n const emojiObject2 = deferredEmoji2(session);\n\n const t = text<void>`Hello ${customEmoji(deferredEmoji1)} world ${\n customEmoji(emojiObject2)\n }!`;\n\n // Test getHtml()\n assert.deepStrictEqual(\n (await Array.fromAsync(t.getHtml(session))).join(\"\"),\n \"<p>Hello \\u200b:emoji1:\\u200b world \\u200b:emoji2:\\u200b!</p>\",\n );\n\n // Test getTags()\n const tags = await Array.fromAsync(t.getTags(session));\n assert.deepStrictEqual(tags.length, 2);\n assert.ok(tags[0] instanceof Emoji);\n assert.deepStrictEqual(tags[0].id, emojiObject1.id);\n assert.ok(tags[1] instanceof Emoji);\n assert.deepStrictEqual(tags[1].id, emojiObject2.id);\n\n // Test getCachedObjects()\n assert.deepStrictEqual(t.getCachedObjects(), []); // TemplatedText itself doesn't cache, relies on children\n});\n\n// cSpell: ignore apos\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fedify/botkit",
|
|
3
|
+
"version": "0.3.0-dev.108+5ff4003a",
|
|
4
|
+
"description": "A framework for creating ActivityPub bots",
|
|
5
|
+
"license": "AGPL-3.0-only",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Hong Minhee",
|
|
8
|
+
"email": "hong@minhee.org",
|
|
9
|
+
"url": "https://hongminhee.org/"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://botkit.fedify.dev/",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/fedify-dev/botkit.git"
|
|
15
|
+
},
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/fedify-dev/botkit/issues"
|
|
18
|
+
},
|
|
19
|
+
"funding": [
|
|
20
|
+
"https://opencollective.com/fedify",
|
|
21
|
+
"https://github.com/sponsors/dahlia"
|
|
22
|
+
],
|
|
23
|
+
"engines": {
|
|
24
|
+
"deno": ">=2.0.0",
|
|
25
|
+
"node": ">=22.0.0",
|
|
26
|
+
"bun": ">=1.1.0"
|
|
27
|
+
},
|
|
28
|
+
"type": "module",
|
|
29
|
+
"module": "./dist/mod.js",
|
|
30
|
+
"main": "./dist/mod.cjs",
|
|
31
|
+
"types": "./dist/mod.d.ts",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"types": {
|
|
35
|
+
"import": "./dist/mod.d.ts",
|
|
36
|
+
"require": "./dist/mod.d.cts"
|
|
37
|
+
},
|
|
38
|
+
"import": "./dist/mod.js",
|
|
39
|
+
"require": "./dist/mod.cjs"
|
|
40
|
+
},
|
|
41
|
+
"./bot": {
|
|
42
|
+
"types": {
|
|
43
|
+
"import": "./dist/bot.d.ts",
|
|
44
|
+
"require": "./dist/bot.d.cts"
|
|
45
|
+
},
|
|
46
|
+
"import": "./dist/bot.js",
|
|
47
|
+
"require": "./dist/bot.cjs"
|
|
48
|
+
},
|
|
49
|
+
"./emoji": {
|
|
50
|
+
"types": {
|
|
51
|
+
"import": "./dist/emoji.d.ts",
|
|
52
|
+
"require": "./dist/emoji.d.cts"
|
|
53
|
+
},
|
|
54
|
+
"import": "./dist/emoji.js",
|
|
55
|
+
"require": "./dist/emoji.cjs"
|
|
56
|
+
},
|
|
57
|
+
"./events": {
|
|
58
|
+
"types": {
|
|
59
|
+
"import": "./dist/events.d.ts",
|
|
60
|
+
"require": "./dist/events.d.cts"
|
|
61
|
+
},
|
|
62
|
+
"import": "./dist/events.js",
|
|
63
|
+
"require": "./dist/events.cjs"
|
|
64
|
+
},
|
|
65
|
+
"./follow": {
|
|
66
|
+
"types": {
|
|
67
|
+
"import": "./dist/follow.d.ts",
|
|
68
|
+
"require": "./dist/follow.d.cts"
|
|
69
|
+
},
|
|
70
|
+
"import": "./dist/follow.js",
|
|
71
|
+
"require": "./dist/follow.cjs"
|
|
72
|
+
},
|
|
73
|
+
"./message": {
|
|
74
|
+
"types": {
|
|
75
|
+
"import": "./dist/message.d.ts",
|
|
76
|
+
"require": "./dist/message.d.cts"
|
|
77
|
+
},
|
|
78
|
+
"import": "./dist/message.js",
|
|
79
|
+
"require": "./dist/message.cjs"
|
|
80
|
+
},
|
|
81
|
+
"./reaction": {
|
|
82
|
+
"types": {
|
|
83
|
+
"import": "./dist/reaction.d.ts",
|
|
84
|
+
"require": "./dist/reaction.d.cts"
|
|
85
|
+
},
|
|
86
|
+
"import": "./dist/reaction.js",
|
|
87
|
+
"require": "./dist/reaction.cjs"
|
|
88
|
+
},
|
|
89
|
+
"./session": {
|
|
90
|
+
"types": {
|
|
91
|
+
"import": "./dist/session.d.ts",
|
|
92
|
+
"require": "./dist/session.d.cts"
|
|
93
|
+
},
|
|
94
|
+
"import": "./dist/session.js",
|
|
95
|
+
"require": "./dist/session.cjs"
|
|
96
|
+
},
|
|
97
|
+
"./text": {
|
|
98
|
+
"types": {
|
|
99
|
+
"import": "./dist/text.d.ts",
|
|
100
|
+
"require": "./dist/text.d.cts"
|
|
101
|
+
},
|
|
102
|
+
"import": "./dist/text.js",
|
|
103
|
+
"require": "./dist/text.cjs"
|
|
104
|
+
},
|
|
105
|
+
"./package.json": "./package.json"
|
|
106
|
+
},
|
|
107
|
+
"sideEffects": false,
|
|
108
|
+
"files": [
|
|
109
|
+
"dist",
|
|
110
|
+
"LICENSE",
|
|
111
|
+
"package.json",
|
|
112
|
+
"README.md"
|
|
113
|
+
],
|
|
114
|
+
"dependencies": {
|
|
115
|
+
"@fedify/fedify": "^1.6.1",
|
|
116
|
+
"@fedify/markdown-it-hashtag": "^0.3.0",
|
|
117
|
+
"@fedify/markdown-it-mention": "^0.3.0",
|
|
118
|
+
"@js-temporal/polyfill": "^0.5.1",
|
|
119
|
+
"@logtape/logtape": "^1.0.0",
|
|
120
|
+
"@phensley/language-tag": "^1.12.2",
|
|
121
|
+
"hono": "^4.8.2",
|
|
122
|
+
"html-entities": "^2.6.0",
|
|
123
|
+
"markdown-it": "^14.1.0",
|
|
124
|
+
"mime-db": "^1.54.0",
|
|
125
|
+
"uuid": "^11.1.0",
|
|
126
|
+
"x-forwarded-fetch": "^0.2.0",
|
|
127
|
+
"xss": "^1.0.15"
|
|
128
|
+
},
|
|
129
|
+
"devDependencies": {
|
|
130
|
+
"tsdown": "^0.12.8"
|
|
131
|
+
},
|
|
132
|
+
"scripts": {
|
|
133
|
+
"build": "tsdown",
|
|
134
|
+
"prepublish": "deno task check && tsdown",
|
|
135
|
+
"test": "tsdown && cd dist/ && node --test"
|
|
136
|
+
}
|
|
137
|
+
}
|