twitter-snap 0.0.9 → 0.0.11

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.
Files changed (53) hide show
  1. package/.eslintrc.json +3 -3
  2. package/README.md +57 -46
  3. package/dist/app/api/twitter/route.d.ts +3 -0
  4. package/dist/app/api/twitter/route.d.ts.map +1 -0
  5. package/dist/app/api/twitter/route.js +19 -0
  6. package/dist/app/api/twitter/route.js.map +1 -0
  7. package/dist/app/layout.d.ts +7 -0
  8. package/dist/app/layout.d.ts.map +1 -0
  9. package/dist/app/layout.js +11 -0
  10. package/dist/app/layout.js.map +1 -0
  11. package/dist/app/page.d.ts +2 -0
  12. package/dist/app/page.d.ts.map +1 -0
  13. package/dist/app/page.js +23 -0
  14. package/dist/app/page.js.map +1 -0
  15. package/dist/cli.js +23 -100
  16. package/dist/cli.js.map +1 -1
  17. package/dist/core/twitterSnap.d.ts +17 -38
  18. package/dist/core/twitterSnap.d.ts.map +1 -1
  19. package/dist/core/twitterSnap.js +30 -331
  20. package/dist/core/twitterSnap.js.map +1 -1
  21. package/dist/theme/normal.d.ts +4 -0
  22. package/dist/theme/normal.d.ts.map +1 -0
  23. package/dist/theme/normal.js +212 -0
  24. package/dist/theme/normal.js.map +1 -0
  25. package/dist/tsconfig.tsbuildinfo +1 -1
  26. package/dist/utils/cookies.d.ts +2 -0
  27. package/dist/utils/cookies.d.ts.map +1 -0
  28. package/dist/utils/cookies.js +15 -0
  29. package/dist/utils/cookies.js.map +1 -0
  30. package/dist/utils/fonts.d.ts +5 -0
  31. package/dist/utils/fonts.d.ts.map +1 -0
  32. package/dist/utils/fonts.js +13 -0
  33. package/dist/utils/fonts.js.map +1 -0
  34. package/next.config.js +4 -4
  35. package/package.json +4 -3
  36. package/tsconfig.json +24 -39
  37. package/dist/assets/LICENSE +0 -21
  38. package/dist/assets/LICENSE-GRAPHICS +0 -393
  39. package/dist/assets/LICENSE_OFL.txt +0 -92
  40. package/dist/assets/NotoSansCJKjp-Bold.otf +0 -0
  41. package/dist/assets/NotoSansCJKjp-Regular.otf +0 -0
  42. package/dist/core/satori.d.ts +0 -12
  43. package/dist/core/satori.d.ts.map +0 -1
  44. package/dist/core/satori.js +0 -3
  45. package/dist/core/satori.js.map +0 -1
  46. package/dist/style/normal.d.ts +0 -4
  47. package/dist/style/normal.d.ts.map +0 -1
  48. package/dist/style/normal.js +0 -158
  49. package/dist/style/normal.js.map +0 -1
  50. package/dist/utils/example.d.ts +0 -3
  51. package/dist/utils/example.d.ts.map +0 -1
  52. package/dist/utils/example.js +0 -55
  53. package/dist/utils/example.js.map +0 -1
package/.eslintrc.json CHANGED
@@ -1,3 +1,3 @@
1
- {
2
- "extends": "next/core-web-vitals"
3
- }
1
+ {
2
+ "extends": "next/core-web-vitals"
3
+ }
package/README.md CHANGED
@@ -1,46 +1,57 @@
1
- # twitter-snap
2
-
3
- Create beautiful Tweet images fast.
4
- Fast, good design, Browser is not a dependency.
5
-
6
- ```shell
7
- npx twitter-snap https://twitter.com/elonmusk/status/1518623997054918657
8
- ```
9
-
10
- ![image](./docs/img/output.png)
11
-
12
- ## Arguments
13
-
14
- ```shell
15
- Usage: twitter-snap [options] <string>
16
-
17
- Arguments:
18
- string tweet url or tweet id
19
-
20
- Options:
21
- -V, --version output the version number
22
- -o, --output <path> output file path (default: "output.png")
23
- -w, --width <number> image width (default: "600")
24
- -h, --height <number> image height
25
- -t, --theme <string> theme (default: "normal")
26
- --fonts <path> font config file path .json
27
- --emoji <string> emoji type (twemoji,openmoji,blobmoji,noto,fluent,fluentFlat) (default: "twemoji")
28
- --cookies <path> net escape cookie file path .txt
29
- --help display help for command
30
- ```
31
-
32
- ### Font
33
-
34
- You can specify the font by creating a font config file.
35
-
36
- ```json
37
- [
38
- {
39
- "data": "./fonts/NotoSansJP-Regular.otf",
40
- "name": "Noto Sans JP",
41
- "weight": 400,
42
- "theme": "normal",
43
- "lang": "ja-JP"
44
- }
45
- ]
46
- ```
1
+ # twitter-snap
2
+
3
+ Create beautiful Tweet images fast.
4
+ Fast, good design, Browser is not a dependency.
5
+
6
+ ```shell
7
+ npx twitter-snap@latest https://twitter.com/elonmusk/status/15186239970549186570
8
+ ```
9
+
10
+ ```shell
11
+ npx twitter-snap 1518623997054918657
12
+ ```
13
+
14
+ ![image](./docs/img/output.png)
15
+
16
+ ## Arguments
17
+
18
+ ```shell
19
+ Usage: twitter-snap [options] <string>
20
+
21
+ Arguments:
22
+ string tweet url or tweet id
23
+
24
+ Options:
25
+ -V, --version output the version number
26
+ -o, --output <path> output file path (default: "output.png")
27
+ -w, --width <number> image width (default: "600")
28
+ -h, --height <number> image height
29
+ -t, --theme <string> theme (default: "normal")
30
+ --fonts <path> font config file path .json
31
+ --emoji <string> emoji type (twemoji,openmoji,blobmoji,noto,fluent,fluentFlat) (default: "twemoji")
32
+ --cookies <path> net escape cookie file path .txt
33
+ --help display help for command
34
+ ```
35
+
36
+ ### Fonts
37
+
38
+ You can specify the font by creating a font config file. (path: `--fonts`)
39
+
40
+ ```json
41
+ [
42
+ {
43
+ "data": "NotoSansJP-Regular.ttf",
44
+ "name": "Noto Sans JP",
45
+ "weight": 400,
46
+ "theme": "normal",
47
+ "lang": "ja-JP"
48
+ },
49
+ {
50
+ "data": "NotoSansJP-Bold.ttf",
51
+ "name": "Noto Sans JP",
52
+ "weight": 700,
53
+ "theme": "normal",
54
+ "lang": "ja-JP"
55
+ }
56
+ ]
57
+ ```
@@ -0,0 +1,3 @@
1
+ import { NextRequest } from "next/server";
2
+ export declare function GET(req: NextRequest): Promise<Response>;
3
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/app/api/twitter/route.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,wBAAsB,GAAG,CAAC,GAAG,EAAE,WAAW,qBAezC"}
@@ -0,0 +1,19 @@
1
+ import { TwitterOpenApi } from "twitter-openapi-typescript";
2
+ const guest = new TwitterOpenApi().getGuestClient();
3
+ export async function GET(req) {
4
+ const { searchParams } = new URL(req.url);
5
+ const id = searchParams.get("id");
6
+ const client = await guest;
7
+ if (!id) {
8
+ return new Response("Missing id", { status: 400 });
9
+ }
10
+ const tweet = await client.getDefaultApi().getTweetResultByRestId({
11
+ tweetId: id,
12
+ });
13
+ return new Response(JSON.stringify(tweet), {
14
+ headers: {
15
+ "content-type": "application/json",
16
+ },
17
+ });
18
+ }
19
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/app/api/twitter/route.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC,cAAc,EAAE,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,GAAgB;IACxC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;IAC3B,IAAI,CAAC,EAAE,EAAE;QACP,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;KACpD;IACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,sBAAsB,CAAC;QAChE,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;IACH,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACzC,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import type { Metadata } from "next";
3
+ export declare const metadata: Metadata;
4
+ export default function RootLayout({ children, }: {
5
+ children: React.ReactNode;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/app/layout.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAKrC,eAAO,MAAM,QAAQ,EAAE,QAGtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAQA"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Inter } from "next/font/google";
3
+ const inter = Inter({ subsets: ["latin"] });
4
+ export const metadata = {
5
+ title: "Create Next App",
6
+ description: "Generated by create next app",
7
+ };
8
+ export default function RootLayout({ children, }) {
9
+ return (_jsx("html", { lang: "en", children: _jsx("body", { className: inter.className, style: { margin: 0 }, children: children }) }));
10
+ }
11
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/app/layout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,8BAA8B;CAC5C,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,QAAQ,GAGT;IACC,OAAO,CACL,eAAM,IAAI,EAAC,IAAI,YACb,eAAM,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,YACnD,QAAQ,GACJ,GACF,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function Home(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/app/page.tsx"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,UAAU,IAAI,4CA6B3B"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect } from "react";
4
+ import { useState } from "react";
5
+ import Normal from "./../theme/normal";
6
+ export default function Home() {
7
+ const toAPi = (e) => `/api/twitter?id=${e}`;
8
+ const toId = (e) => (isNaN(Number(e)) ? e.split("/").pop() : e);
9
+ const [state, setState] = useState(null);
10
+ const [id, setId] = useState("1518623997054918657");
11
+ useEffect(() => {
12
+ fetch(toAPi(toId(id)))
13
+ .then((e) => e.json())
14
+ .then((e) => setState(e.data));
15
+ }, [id]);
16
+ return (_jsxs(_Fragment, { children: [_jsx("input", { value: id, onChange: (e) => setId(e.target.value) }), state && (_jsx("div", { style: {
17
+ width: "600px",
18
+ display: "flex",
19
+ justifyContent: "center",
20
+ alignItems: "center",
21
+ }, children: _jsx(Normal, { data: state }) }))] }));
22
+ }
23
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/app/page.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAc,EAAO,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAGvC,MAAM,CAAC,OAAO,UAAU,IAAI;IAC1B,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACrB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACT,OAAO,CACL,8BACE,gBAAO,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,EAC3D,KAAK,IAAI,CACR,cACE,KAAK,EAAE;oBACL,KAAK,EAAE,OAAO;oBACd,OAAO,EAAE,MAAM;oBACf,cAAc,EAAE,QAAQ;oBACxB,UAAU,EAAE,QAAQ;iBACrB,YAED,KAAC,MAAM,IAAC,IAAI,EAAE,KAAK,GAAI,GACnB,CACP,IACA,CACJ,CAAC;AACJ,CAAC"}
package/dist/cli.js CHANGED
@@ -1,111 +1,34 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
- var __generator = (this && this.__generator) || function (thisArg, body) {
13
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15
- function verb(n) { return function (v) { return step([n, v]); }; }
16
- function step(op) {
17
- if (f) throw new TypeError("Generator is already executing.");
18
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
19
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
20
- if (y = 0, t) op = [op[0] & 2, t.value];
21
- switch (op[0]) {
22
- case 0: case 1: t = op; break;
23
- case 4: _.label++; return { value: op[1], done: false };
24
- case 5: _.label++; y = op[1]; op = [0]; continue;
25
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
26
- default:
27
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
29
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
30
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
31
- if (t[2]) _.ops.pop();
32
- _.trys.pop(); continue;
33
- }
34
- op = body.call(thisArg, _);
35
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
36
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
37
- }
38
- };
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- var twitterSnap_1 = require("./core/twitterSnap");
41
- var commander_1 = require("commander");
42
- var fs_1 = require("fs");
43
- var path = require("path");
44
- var current = path.dirname((0, fs_1.realpathSync)(__filename));
45
- var version = "0.0.8";
46
- var font = path.join(current, "./assets/NotoSansCJKjp-Regular.otf");
47
- var boldFont = path.join(current, "./assets/NotoSansCJKjp-Bold.otf");
48
- var emojiFont = path.join(current, "./assets/twemoji/{code}.svg");
49
- var program = new commander_1.Command();
2
+ import { TwitterSnap } from "./core/twitterSnap.js";
3
+ import { Command } from "commander";
4
+ import { promises as fs } from "fs";
5
+ import { getClient } from "./utils/cookies.js";
6
+ import { getFonts } from "./utils/fonts.js";
7
+ const version = "0.0.10";
8
+ const program = new Command();
50
9
  program.name("twitter-snap").version(version);
51
10
  program
52
11
  .argument("<string>", "tweet url or tweet id")
53
12
  .option("-o, --output <path>", "output file path", "output.png")
54
13
  .option("-w, --width <number>", "image width", "600")
55
14
  .option("-h, --height <number>", "image height")
56
- .option("-s, --style <string>", "style", "normal")
57
- .option("--font <path>", "font path", font)
58
- .option("--bold-font <path>", "bold font path", boldFont)
59
- .option("--emoji-font <path>", "emoji font path", emojiFont)
60
- .action(function (text, _a) {
61
- var output = _a.output, width = _a.width, height = _a.height, style = _a.style, font = _a.font, boldFont = _a.boldFont;
62
- return __awaiter(void 0, void 0, void 0, function () {
63
- var id, twitterSnap, _b, _c, writer;
64
- var _d, _e, _f;
65
- return __generator(this, function (_g) {
66
- switch (_g.label) {
67
- case 0:
68
- id = isNaN(text) ? text.split("/").pop() : text;
69
- _b = twitterSnap_1.TwitterSnap.bind;
70
- _d = {
71
- width: parseInt(width),
72
- height: height ? parseInt(height) : undefined
73
- };
74
- _e = {
75
- name: "Regular"
76
- };
77
- return [4 /*yield*/, fs_1.promises.readFile(font)];
78
- case 1:
79
- _c = [
80
- (_e.data = _g.sent(),
81
- _e.weight = 400,
82
- _e.style = "normal",
83
- _e)
84
- ];
85
- _f = {
86
- name: "Bold"
87
- };
88
- return [4 /*yield*/, fs_1.promises.readFile(boldFont)];
89
- case 2:
90
- twitterSnap = new (_b.apply(twitterSnap_1.TwitterSnap, [void 0, (_d.font = _c.concat([
91
- (_f.data = _g.sent(),
92
- _f.weight = 700,
93
- _f.style = "normal",
94
- _f)
95
- ]),
96
- _d.emojiFont = emojiFont,
97
- _d)]))();
98
- return [4 /*yield*/, twitterSnap.render({ id: id, styleName: style })];
99
- case 3:
100
- writer = _g.sent();
101
- return [4 /*yield*/, writer.save(output)];
102
- case 4:
103
- _g.sent();
104
- process.exit(0);
105
- return [2 /*return*/];
106
- }
107
- });
15
+ .option("-t, --theme <string>", "theme", "normal")
16
+ .option("--fonts <path>", "font config file path .json")
17
+ .option("--emoji <string>", "emoji type (twemoji,openmoji,blobmoji,noto,fluent,fluentFlat)", "twemoji")
18
+ .option("--cookies <path>", "net escape cookie file path .txt")
19
+ .action(async (text, { output, width, height, theme, fonts, emoji, cookies }) => {
20
+ const id = isNaN(text) ? text.split("/").pop() : text;
21
+ const twitterSnap = new TwitterSnap({
22
+ width: parseInt(width),
23
+ height: height ? parseInt(height) : undefined,
24
+ client: cookies && (await getClient(cookies)),
25
+ fonts: fonts && (await getFonts(fonts)),
26
+ emoji: emoji,
108
27
  });
28
+ const res = await twitterSnap.render({ id, themeName: theme });
29
+ const png = Buffer.from(await res.arrayBuffer());
30
+ await fs.writeFile(output, png);
31
+ process.exit(0);
109
32
  });
110
33
  program.parse(process.argv);
111
34
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAiD;AACjD,uCAAoC;AACpC,yBAAkD;AAClD,2BAA6B;AAE7B,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAA,iBAAY,EAAC,UAAU,CAAC,CAAC,CAAC;AAEvD,IAAM,OAAO,GAAG,OAAO,CAAC;AACxB,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;AACtE,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;AACvE,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;AAEpE,IAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9C,OAAO;KACJ,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,CAAC;KAC/D,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,KAAK,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,cAAc,CAAC;KAC/C,MAAM,CAAC,sBAAsB,EAAE,OAAO,EAAE,QAAQ,CAAC;KACjD,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;KAC1C,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,QAAQ,CAAC;KACxD,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,SAAS,CAAC;KAC3D,MAAM,CAAC,UAAO,IAAI,EAAE,EAAgD;QAA9C,MAAM,YAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,KAAK,WAAA,EAAE,IAAI,UAAA,EAAE,QAAQ,cAAA;;;;;;;oBAC3D,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;yBAC9B,yBAAW;;wBACjC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;wBACtB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;;;wBAGzC,IAAI,EAAE,SAAS;;oBACT,qBAAM,aAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAA;;;yBAA7B,OAAI,GAAE,SAAuB;4BAC7B,SAAM,GAAE,GAAG;4BACX,QAAK,GAAE,QAAQ;;;;wBAGf,IAAI,EAAE,MAAM;;oBACN,qBAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAA;;oBAZjC,WAAW,GAAG,cAAI,yBAAW,YAGjC,OAAI;6BASA,OAAI,GAAE,SAA2B;gCACjC,SAAM,GAAE,GAAG;gCACX,QAAK,GAAE,QAAQ;;0BAElB;4BACD,YAAS,GAAE,SAAS;oCACpB;oBACa,qBAAM,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,IAAA,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAA;;oBAA3D,MAAM,GAAG,SAAkD;oBACjE,qBAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAA;;oBAAzB,SAAyB,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;;CACjB,CAAC,CAAC;AACL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9C,OAAO;KACJ,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,CAAC;KAC/D,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,KAAK,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,cAAc,CAAC;KAC/C,MAAM,CAAC,sBAAsB,EAAE,OAAO,EAAE,QAAQ,CAAC;KACjD,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;KACvD,MAAM,CACL,kBAAkB,EAClB,+DAA+D,EAC/D,SAAS,CACV;KACA,MAAM,CAAC,kBAAkB,EAAE,kCAAkC,CAAC;KAC9D,MAAM,CACL,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IACtE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7C,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,EAAE,KAAK,IAAI,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEhC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CACF,CAAC;AACJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -1,54 +1,33 @@
1
- /// <reference types="react" />
2
- import { SatoriOptions } from "satori";
3
- import { Transformer } from "@napi-rs/image";
4
- import { FontOptions } from "./satori";
5
- import { TweetApiUtilsData } from "twitter-openapi-typescript";
6
- export type StyleComponent = (props: {
1
+ import { ReactElement } from "react";
2
+ import { ImageResponse } from "@vercel/og";
3
+ import { ImageResponseOptions } from "@vercel/og/dist/types";
4
+ import { TwitterOpenApiClient, TweetApiUtilsData } from "twitter-openapi-typescript";
5
+ export type themeComponent = (props: {
7
6
  data: TweetApiUtilsData;
8
- }) => React.ReactElement;
7
+ }) => ReactElement;
9
8
  type TwitterSnapParams = {
10
9
  width: number;
11
10
  height?: number;
12
- font: FontOptions[];
13
- emojiFont: string;
11
+ client?: TwitterOpenApiClient;
12
+ fonts?: ImageResponseOptions["fonts"];
13
+ emoji?: ImageResponseOptions["emoji"];
14
14
  };
15
15
  type TwitterSnapRenderParams = {
16
16
  id: string;
17
- styleName?: string;
17
+ themeName?: string;
18
18
  };
19
19
  export declare class TwitterSnap {
20
20
  width: number;
21
21
  height: number | undefined;
22
- option: SatoriOptions;
23
- static styles: {
24
- [key: string]: StyleComponent;
22
+ client: TwitterOpenApiClient | undefined;
23
+ fonts: ImageResponseOptions["fonts"];
24
+ emoji: ImageResponseOptions["emoji"];
25
+ static themes: {
26
+ [key: string]: themeComponent;
25
27
  };
26
28
  constructor(param: TwitterSnapParams);
27
- render: ({ id, styleName }: TwitterSnapRenderParams) => Promise<TwitterSnapWriter>;
28
- }
29
- type TwitterSnapWriterParams = {
30
- width: number;
31
- height: number | undefined;
32
- svg: string;
33
- };
34
- export declare class TwitterSnapWriter {
35
- data: string;
36
- _trasformer: Transformer | undefined;
37
- constructor(param: TwitterSnapWriterParams);
38
- trasformer: () => Promise<Transformer>;
39
- save: (output: string) => Promise<void>;
40
- svg: (output: string) => Promise<void>;
41
- raw: (output: string) => Promise<void>;
42
- jpeg: (output: string) => Promise<void>;
43
- png: (output: string) => Promise<void>;
44
- bmp: (output: string) => Promise<void>;
45
- ico: (output: string) => Promise<void>;
46
- tiff: (output: string) => Promise<void>;
47
- webp: (output: string) => Promise<void>;
48
- avif: (output: string) => Promise<void>;
49
- pnm: (output: string) => Promise<void>;
50
- tga: (output: string) => Promise<void>;
51
- farbfeld: (output: string) => Promise<void>;
29
+ getClient: () => Promise<TwitterOpenApiClient>;
30
+ render: ({ id, themeName }: TwitterSnapRenderParams) => Promise<ImageResponse>;
52
31
  }
53
32
  export {};
54
33
  //# sourceMappingURL=twitterSnap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"twitterSnap.d.ts","sourceRoot":"","sources":["../../src/core/twitterSnap.ts"],"names":[],"mappings":";AAAA,OAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAkB,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/E,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE;IACnC,IAAI,EAAE,iBAAiB,CAAC;CACzB,KAAK,KAAK,CAAC,YAAY,CAAC;AAEzB,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,KAAK,uBAAuB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,WAAW;IACtB,KAAK,EAAG,MAAM,CAAC;IACf,MAAM,EAAG,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAG,aAAa,CAAC;IAEvB,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAAE,CAE9C;gBAEU,KAAK,EAAE,iBAAiB;IAwBpC,MAAM,sBAA6B,uBAAuB,gCAYxD;CACH;AAED,KAAK,uBAAuB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,IAAI,EAAG,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;gBAEzB,KAAK,EAAE,uBAAuB;IAI1C,UAAU,6BAQR;IAEF,IAAI,WAAkB,MAAM,mBA+B1B;IAEF,GAAG,WAAkB,MAAM,mBAEzB;IACF,GAAG,WAAkB,MAAM,mBAEzB;IACF,IAAI,WAAkB,MAAM,mBAG1B;IACF,GAAG,WAAkB,MAAM,mBAGzB;IAEF,GAAG,WAAkB,MAAM,mBAGzB;IAEF,GAAG,WAAkB,MAAM,mBAGzB;IACF,IAAI,WAAkB,MAAM,mBAG1B;IACF,IAAI,WAAkB,MAAM,mBAG1B;IACF,IAAI,WAAkB,MAAM,mBAG1B;IACF,GAAG,WAAkB,MAAM,mBAGzB;IACF,GAAG,WAAkB,MAAM,mBAGzB;IACF,QAAQ,WAAkB,MAAM,mBAG9B;CACH"}
1
+ {"version":3,"file":"twitterSnap.d.ts","sourceRoot":"","sources":["../../src/core/twitterSnap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAEL,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE;IACnC,IAAI,EAAE,iBAAiB,CAAC;CACzB,KAAK,YAAY,CAAC;AAEnB,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,WAAW;IACtB,KAAK,EAAG,MAAM,CAAC;IACf,MAAM,EAAG,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACzC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAErC,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAAE,CAE9C;gBAEU,KAAK,EAAE,iBAAiB;IAQpC,SAAS,sCAGP;IAEF,MAAM,sBAA6B,uBAAuB,4BAaxD;CACH"}