twitter-snap 0.0.8 → 0.0.10

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 (55) hide show
  1. package/.eslintrc.json +3 -0
  2. package/README.md +46 -26
  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 -330
  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 -0
  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-env.d.ts +5 -0
  35. package/next.config.js +4 -0
  36. package/package.json +33 -46
  37. package/tsconfig.json +12 -4
  38. package/dist/assets/LICENSE +0 -21
  39. package/dist/assets/LICENSE-GRAPHICS +0 -393
  40. package/dist/assets/LICENSE_OFL.txt +0 -92
  41. package/dist/assets/NotoSansCJKjp-Bold.otf +0 -0
  42. package/dist/assets/NotoSansCJKjp-Regular.otf +0 -0
  43. package/dist/core/satori.d.ts +0 -12
  44. package/dist/core/satori.d.ts.map +0 -1
  45. package/dist/core/satori.js +0 -3
  46. package/dist/core/satori.js.map +0 -1
  47. package/dist/style/normal.d.ts +0 -4
  48. package/dist/style/normal.d.ts.map +0 -1
  49. package/dist/style/normal.js +0 -158
  50. package/dist/style/normal.js.map +0 -1
  51. package/dist/utils/example.d.ts +0 -3
  52. package/dist/utils/example.d.ts.map +0 -1
  53. package/dist/utils/example.js +0 -55
  54. package/dist/utils/example.js.map +0 -1
  55. package/init.ps1 +0 -18
package/.eslintrc.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "next/core-web-vitals"
3
+ }
package/README.md CHANGED
@@ -1,26 +1,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 https://twitter.com/elonmusk/status/1518623997054918657
8
- ```
9
-
10
- ![image](./docs/img/output.png)
11
-
12
- ```shell
13
- Usage: twitter-snap [options] <string>
14
-
15
- Arguments:
16
- string tweet url or tweet id
17
-
18
- Options:
19
- -V, --version output the version number
20
- -o, --output <path> output file path (default: "output.png")
21
- -w, --width <number> image width (default: "600")
22
- -h, --height <number> image height (default: "400")
23
- --font <path> font path (default: "assets/NotoSansCJK-Regular.otf")
24
- --bold-font <path> bold font path (default: "assets/NotoSansCJK-Bold.otf")
25
- --help display help for command
26
- ```
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
+ ```
@@ -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 && getClient(cookies),
25
+ fonts: fonts && 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,SAAS,CAAC,OAAO,CAAC;QACrC,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;QAC/B,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 | Promise<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 | Promise<TwitterOpenApiClient>;
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,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9D,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,EAAG,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9D,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,sCAKP;IAEF,MAAM,sBAA6B,uBAAuB,4BAaxD;CACH"}