loopwind 0.25.6 → 0.25.7

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 (90) hide show
  1. package/app/.astro/types.d.ts +1 -0
  2. package/app/dist/_astro/callback.Ci5gaEfJ.css +1 -0
  3. package/app/dist/auth/callback/index.html +81 -0
  4. package/app/dist/device/index.html +70 -0
  5. package/app/dist/index.html +327 -0
  6. package/app/package-lock.json +9239 -0
  7. package/app/package.json +23 -0
  8. package/app/wrangler.toml +8 -0
  9. package/dist/cli.js +54 -0
  10. package/dist/cli.js.map +1 -1
  11. package/dist/commands/login.d.ts +5 -0
  12. package/dist/commands/login.d.ts.map +1 -0
  13. package/dist/commands/login.js +60 -0
  14. package/dist/commands/login.js.map +1 -0
  15. package/dist/commands/logout.d.ts +5 -0
  16. package/dist/commands/logout.d.ts.map +1 -0
  17. package/dist/commands/logout.js +15 -0
  18. package/dist/commands/logout.js.map +1 -0
  19. package/dist/commands/publish.d.ts +10 -0
  20. package/dist/commands/publish.d.ts.map +1 -0
  21. package/dist/commands/publish.js +155 -0
  22. package/dist/commands/publish.js.map +1 -0
  23. package/dist/commands/templates.d.ts +5 -0
  24. package/dist/commands/templates.d.ts.map +1 -0
  25. package/dist/commands/templates.js +60 -0
  26. package/dist/commands/templates.js.map +1 -0
  27. package/dist/commands/unpublish.d.ts +5 -0
  28. package/dist/commands/unpublish.d.ts.map +1 -0
  29. package/dist/commands/unpublish.js +54 -0
  30. package/dist/commands/unpublish.js.map +1 -0
  31. package/dist/commands/whoami.d.ts +5 -0
  32. package/dist/commands/whoami.d.ts.map +1 -0
  33. package/dist/commands/whoami.js +30 -0
  34. package/dist/commands/whoami.js.map +1 -0
  35. package/dist/lib/api.d.ts +92 -0
  36. package/dist/lib/api.d.ts.map +1 -0
  37. package/dist/lib/api.js +149 -0
  38. package/dist/lib/api.js.map +1 -0
  39. package/dist/lib/auth.d.ts +41 -0
  40. package/dist/lib/auth.d.ts.map +1 -0
  41. package/dist/lib/auth.js +89 -0
  42. package/dist/lib/auth.js.map +1 -0
  43. package/dist/lib/bundler.d.ts +18 -0
  44. package/dist/lib/bundler.d.ts.map +1 -0
  45. package/dist/lib/bundler.js +105 -0
  46. package/dist/lib/bundler.js.map +1 -0
  47. package/dist/lib/helpers.d.ts +35 -2
  48. package/dist/lib/helpers.d.ts.map +1 -1
  49. package/dist/lib/helpers.js +91 -13
  50. package/dist/lib/helpers.js.map +1 -1
  51. package/dist/lib/utils.d.ts.map +1 -1
  52. package/dist/lib/utils.js +9 -0
  53. package/dist/lib/utils.js.map +1 -1
  54. package/dist/sdk/edge.d.ts +65 -0
  55. package/dist/sdk/edge.d.ts.map +1 -0
  56. package/dist/sdk/edge.js +329 -0
  57. package/dist/sdk/edge.js.map +1 -0
  58. package/dist/sdk/errors.d.ts +64 -0
  59. package/dist/sdk/errors.d.ts.map +1 -0
  60. package/dist/sdk/errors.js +94 -0
  61. package/dist/sdk/errors.js.map +1 -0
  62. package/dist/sdk/index.d.ts +29 -0
  63. package/dist/sdk/index.d.ts.map +1 -0
  64. package/dist/sdk/index.js +30 -0
  65. package/dist/sdk/index.js.map +1 -0
  66. package/dist/sdk/render.d.ts +52 -0
  67. package/dist/sdk/render.d.ts.map +1 -0
  68. package/dist/sdk/render.js +432 -0
  69. package/dist/sdk/render.js.map +1 -0
  70. package/dist/sdk/types.d.ts +185 -0
  71. package/dist/sdk/types.d.ts.map +1 -0
  72. package/dist/sdk/types.js +5 -0
  73. package/dist/sdk/types.js.map +1 -0
  74. package/dist/types/template.d.ts +18 -0
  75. package/dist/types/template.d.ts.map +1 -1
  76. package/package.json +26 -4
  77. package/plans/PLATFORM.md +1637 -237
  78. package/plans/PLATFORM_IMPLEMENTATION.md +1347 -530
  79. package/plans/SDK.md +797 -0
  80. package/platform/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/ebad93a0a7be9c5768c512f3e30740b64d2b6e575277a40d77044af5ae8fd3f2.sqlite +0 -0
  81. package/platform/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/ebad93a0a7be9c5768c512f3e30740b64d2b6e575277a40d77044af5ae8fd3f2.sqlite-shm +0 -0
  82. package/platform/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/ebad93a0a7be9c5768c512f3e30740b64d2b6e575277a40d77044af5ae8fd3f2.sqlite-wal +0 -0
  83. package/platform/migrations/0001_initial.sql +90 -0
  84. package/platform/package-lock.json +3104 -0
  85. package/platform/package.json +30 -0
  86. package/platform/wrangler.toml +43 -0
  87. package/tests-sdk/createRenderer.test.ts +251 -0
  88. package/tests-sdk/errors.test.ts +230 -0
  89. package/tests-sdk/render.test.ts +241 -0
  90. package/tests-sdk/tw.test.ts +277 -0
@@ -0,0 +1,432 @@
1
+ /**
2
+ * Loopwind SDK - Render Functions
3
+ */
4
+ import satori from 'satori';
5
+ import { Resvg } from '@resvg/resvg-wasm';
6
+ import sharp from 'sharp';
7
+ import { tw as twConverter } from '../lib/tailwind.js';
8
+ import { qr, image } from '../lib/helpers.js';
9
+ import { ensureResvgWasm } from '../lib/resvg-init.js';
10
+ import { RenderError, ValidationError, TimeoutError, } from './errors.js';
11
+ // Default fonts (loaded lazily)
12
+ let defaultFonts = null;
13
+ /**
14
+ * Load default Inter fonts from bundled assets or CDN
15
+ * Satori requires TTF/OTF/WOFF format (not WOFF2)
16
+ */
17
+ async function loadDefaultFonts() {
18
+ if (defaultFonts)
19
+ return defaultFonts;
20
+ const fonts = [];
21
+ try {
22
+ // First try to load bundled fonts from package (WOFF format)
23
+ const path = await import('path');
24
+ const fs = await import('fs/promises');
25
+ const { fileURLToPath } = await import('url');
26
+ const __filename = fileURLToPath(import.meta.url);
27
+ const __dirname = path.dirname(__filename);
28
+ const fontsDir = path.join(__dirname, '..', 'assets', 'fonts');
29
+ try {
30
+ const regularPath = path.join(fontsDir, 'Inter-Regular.woff');
31
+ const boldPath = path.join(fontsDir, 'Inter-Bold.woff');
32
+ const [regular, bold] = await Promise.all([
33
+ fs.readFile(regularPath),
34
+ fs.readFile(boldPath),
35
+ ]);
36
+ fonts.push({ name: 'Inter', data: regular, weight: 400, style: 'normal' }, { name: 'Inter', data: bold, weight: 700, style: 'normal' });
37
+ }
38
+ catch {
39
+ // Bundled fonts not found, fetch from CDN (using WOFF, not WOFF2)
40
+ const [regular, bold] = await Promise.all([
41
+ fetch('https://cdn.jsdelivr.net/npm/@fontsource/inter@5.0.18/files/inter-latin-400-normal.woff')
42
+ .then(r => {
43
+ if (!r.ok)
44
+ throw new Error(`HTTP ${r.status}`);
45
+ return r.arrayBuffer();
46
+ }),
47
+ fetch('https://cdn.jsdelivr.net/npm/@fontsource/inter@5.0.18/files/inter-latin-700-normal.woff')
48
+ .then(r => {
49
+ if (!r.ok)
50
+ throw new Error(`HTTP ${r.status}`);
51
+ return r.arrayBuffer();
52
+ }),
53
+ ]);
54
+ fonts.push({ name: 'Inter', data: regular, weight: 400, style: 'normal' }, { name: 'Inter', data: bold, weight: 700, style: 'normal' });
55
+ }
56
+ }
57
+ catch (error) {
58
+ throw new Error(`Failed to load default fonts: ${error.message}. Please provide custom fonts.`);
59
+ }
60
+ if (fonts.length === 0) {
61
+ throw new Error('No fonts could be loaded. Please provide custom fonts.');
62
+ }
63
+ defaultFonts = fonts;
64
+ return fonts;
65
+ }
66
+ /**
67
+ * Convert FontConfig array to Satori font format
68
+ */
69
+ function toSatoriFonts(fonts) {
70
+ return fonts.map(f => ({
71
+ name: f.name,
72
+ data: f.data,
73
+ weight: f.weight || 400,
74
+ style: f.style || 'normal',
75
+ }));
76
+ }
77
+ /**
78
+ * Validate render options
79
+ */
80
+ function validateOptions(options) {
81
+ const { width, height, format, fps, duration, quality, crf, scale } = options;
82
+ if (width !== undefined && (width < 1 || width > 16384)) {
83
+ throw new ValidationError('Width must be between 1 and 16384', 'width', '1-16384', width);
84
+ }
85
+ if (height !== undefined && (height < 1 || height > 16384)) {
86
+ throw new ValidationError('Height must be between 1 and 16384', 'height', '1-16384', height);
87
+ }
88
+ if (format !== undefined) {
89
+ const validFormats = ['png', 'svg', 'jpg', 'jpeg', 'webp', 'mp4', 'gif'];
90
+ if (!validFormats.includes(format)) {
91
+ throw new ValidationError(`Invalid format: ${format}`, 'format', validFormats.join(', '), format);
92
+ }
93
+ }
94
+ if (fps !== undefined && (fps < 1 || fps > 120)) {
95
+ throw new ValidationError('FPS must be between 1 and 120', 'fps', '1-120', fps);
96
+ }
97
+ if (duration !== undefined && (duration < 0.1 || duration > 300)) {
98
+ throw new ValidationError('Duration must be between 0.1 and 300 seconds', 'duration', '0.1-300', duration);
99
+ }
100
+ if (quality !== undefined && (quality < 1 || quality > 100)) {
101
+ throw new ValidationError('Quality must be between 1 and 100', 'quality', '1-100', quality);
102
+ }
103
+ if (crf !== undefined && (crf < 0 || crf > 51)) {
104
+ throw new ValidationError('CRF must be between 0 and 51', 'crf', '0-51', crf);
105
+ }
106
+ if (scale !== undefined && (scale < 0.1 || scale > 10)) {
107
+ throw new ValidationError('Scale must be between 0.1 and 10', 'scale', '0.1-10', scale);
108
+ }
109
+ }
110
+ /**
111
+ * Check if format is a video format
112
+ */
113
+ function isVideoFormat(format) {
114
+ return format === 'mp4' || format === 'gif';
115
+ }
116
+ /**
117
+ * Render a single frame to SVG
118
+ */
119
+ async function renderFrameToSVG(template, props, width, height, fonts, frameInfo, config, debug) {
120
+ // Create helpers
121
+ const twFn = (classes) => twConverter(classes, null, config || {}, {
122
+ progress: frameInfo?.progress ?? 0,
123
+ frame: frameInfo?.index ?? 0,
124
+ totalFrames: frameInfo?.total,
125
+ durationMs: frameInfo?.duration ? frameInfo.duration * 1000 : undefined,
126
+ });
127
+ // Pre-generate QR codes and images from props
128
+ const qrCache = new Map();
129
+ const imageCache = new Map();
130
+ // Pre-generate QR codes for string props
131
+ const qrPromises = [];
132
+ for (const value of Object.values(props)) {
133
+ if (typeof value === 'string' && value.length > 0) {
134
+ const promise = qr(value)
135
+ .then(dataUri => { qrCache.set(value, dataUri); })
136
+ .catch(() => { });
137
+ qrPromises.push(promise);
138
+ }
139
+ }
140
+ await Promise.all(qrPromises);
141
+ // Pre-load images from props
142
+ const imagePromises = [];
143
+ for (const value of Object.values(props)) {
144
+ if (typeof value === 'string' && (value.startsWith('http://') ||
145
+ value.startsWith('https://') ||
146
+ /\.(jpg|jpeg|png|gif|webp|svg)$/i.test(value))) {
147
+ const promise = image(value)
148
+ .then(dataUri => { imageCache.set(value, dataUri); })
149
+ .catch(() => { });
150
+ imagePromises.push(promise);
151
+ }
152
+ }
153
+ await Promise.all(imagePromises);
154
+ // Helper functions
155
+ const qrHelper = (text) => qrCache.get(text) || '';
156
+ const imageHelper = (pathOrUrl) => imageCache.get(pathOrUrl) || pathOrUrl;
157
+ // Build full props
158
+ const fullProps = {
159
+ ...props,
160
+ tw: twFn,
161
+ qr: qrHelper,
162
+ image: imageHelper,
163
+ ...(frameInfo && { frame: frameInfo }),
164
+ };
165
+ // Render template to JSX
166
+ let element;
167
+ try {
168
+ element = template(fullProps);
169
+ }
170
+ catch (error) {
171
+ throw new RenderError(`Template execution failed: ${error.message}`, 'jsx', error);
172
+ }
173
+ // Render to SVG using Satori
174
+ try {
175
+ const svg = await satori(element, {
176
+ width,
177
+ height,
178
+ fonts: toSatoriFonts(fonts),
179
+ debug: debug || false,
180
+ });
181
+ return svg;
182
+ }
183
+ catch (error) {
184
+ throw new RenderError(`SVG generation failed: ${error.message}`, 'svg', error);
185
+ }
186
+ }
187
+ /**
188
+ * Convert SVG to PNG using resvg
189
+ */
190
+ async function svgToPng(svg, width, scale) {
191
+ await ensureResvgWasm();
192
+ try {
193
+ const resvg = new Resvg(svg, {
194
+ fitTo: {
195
+ mode: 'width',
196
+ value: Math.round(width * scale),
197
+ },
198
+ });
199
+ const pngData = resvg.render();
200
+ return Buffer.from(pngData.asPng());
201
+ }
202
+ catch (error) {
203
+ throw new RenderError(`PNG rasterization failed: ${error.message}`, 'rasterize', error);
204
+ }
205
+ }
206
+ /**
207
+ * Convert PNG to other image formats using sharp
208
+ */
209
+ async function convertFormat(pngBuffer, format, quality) {
210
+ try {
211
+ let pipeline = sharp(pngBuffer);
212
+ switch (format) {
213
+ case 'jpg':
214
+ case 'jpeg':
215
+ pipeline = pipeline.jpeg({ quality });
216
+ break;
217
+ case 'webp':
218
+ pipeline = pipeline.webp({ quality });
219
+ break;
220
+ }
221
+ return pipeline.toBuffer();
222
+ }
223
+ catch (error) {
224
+ throw new RenderError(`Format conversion failed: ${error.message}`, 'encode', error);
225
+ }
226
+ }
227
+ /**
228
+ * Render a template to image
229
+ */
230
+ async function renderImage(template, options, config) {
231
+ const { props, width = config?.defaults?.width || 1200, height = config?.defaults?.height || 630, format = 'png', quality = 90, scale = 2, fonts: customFonts, debug = false, } = options;
232
+ // Load fonts
233
+ const fonts = customFonts || await loadDefaultFonts();
234
+ // Render to SVG
235
+ const svg = await renderFrameToSVG(template, props, width, height, fonts, undefined, config, debug);
236
+ // Return SVG if requested
237
+ if (format === 'svg') {
238
+ return Buffer.from(svg, 'utf-8');
239
+ }
240
+ // Convert to PNG
241
+ const png = await svgToPng(svg, width, scale);
242
+ // Return PNG if requested
243
+ if (format === 'png') {
244
+ return png;
245
+ }
246
+ // Convert to other formats
247
+ return convertFormat(png, format, quality);
248
+ }
249
+ /**
250
+ * Render a template to video
251
+ */
252
+ async function renderVideo(template, options, config) {
253
+ const { props, width = config?.defaults?.width || 1920, height = config?.defaults?.height || 1080, format = 'mp4', fps = 30, duration = 5, crf = 23, fonts: customFonts, } = options;
254
+ // Load fonts
255
+ const fonts = customFonts || await loadDefaultFonts();
256
+ // Calculate total frames
257
+ const totalFrames = Math.floor(fps * duration);
258
+ const frames = [];
259
+ // Render each frame
260
+ for (let i = 0; i < totalFrames; i++) {
261
+ const progress = i / (totalFrames - 1);
262
+ const time = i / fps;
263
+ const frameInfo = {
264
+ index: i,
265
+ total: totalFrames,
266
+ progress,
267
+ time,
268
+ fps,
269
+ duration,
270
+ };
271
+ const svg = await renderFrameToSVG(template, props, width, height, fonts, frameInfo, config);
272
+ const png = await svgToPng(svg, width, 1); // Scale 1 for video
273
+ frames.push(png);
274
+ }
275
+ // Encode video using h264-mp4-encoder
276
+ if (format === 'mp4') {
277
+ const { default: HME } = await import('h264-mp4-encoder');
278
+ const encoder = await HME.createH264MP4Encoder();
279
+ encoder.width = width;
280
+ encoder.height = height;
281
+ encoder.frameRate = fps;
282
+ encoder.quantizationParameter = crf;
283
+ encoder.initialize();
284
+ // Add frames
285
+ for (const frame of frames) {
286
+ const { data } = await sharp(frame).raw().toBuffer({ resolveWithObject: true });
287
+ encoder.addFrameRgba(new Uint8Array(data));
288
+ }
289
+ encoder.finalize();
290
+ const mp4 = encoder.FS.readFile(encoder.outputFilename);
291
+ encoder.delete();
292
+ return Buffer.from(mp4);
293
+ }
294
+ // Encode GIF using gifenc
295
+ if (format === 'gif') {
296
+ const { GIFEncoder, quantize, applyPalette } = await import('gifenc');
297
+ const gif = GIFEncoder();
298
+ const frameDelay = Math.round(1000 / fps);
299
+ for (const frame of frames) {
300
+ const { data, info } = await sharp(frame)
301
+ .raw()
302
+ .toBuffer({ resolveWithObject: true });
303
+ const rgba = new Uint8Array(data);
304
+ const palette = quantize(rgba, 256);
305
+ const indexed = applyPalette(rgba, palette);
306
+ gif.writeFrame(indexed, info.width, info.height, {
307
+ palette,
308
+ delay: frameDelay,
309
+ });
310
+ }
311
+ gif.finish();
312
+ return Buffer.from(gif.bytes());
313
+ }
314
+ throw new ValidationError(`Unsupported video format: ${format}`, 'format', 'mp4, gif', format);
315
+ }
316
+ /**
317
+ * Main render function
318
+ *
319
+ * @example
320
+ * ```typescript
321
+ * import { render } from 'loopwind';
322
+ *
323
+ * const OGImage = ({ title, tw }) => (
324
+ * <div style={tw("w-full h-full bg-blue-500 flex items-center justify-center")}>
325
+ * <h1 style={tw("text-white text-6xl")}>{title}</h1>
326
+ * </div>
327
+ * );
328
+ *
329
+ * const png = await render(OGImage, {
330
+ * props: { title: 'Hello World' },
331
+ * width: 1200,
332
+ * height: 630,
333
+ * format: 'png',
334
+ * });
335
+ * ```
336
+ */
337
+ export async function render(template, options) {
338
+ // Validate options
339
+ validateOptions(options);
340
+ const format = options.format || 'png';
341
+ // Handle timeout
342
+ if (options.timeout) {
343
+ const startTime = Date.now();
344
+ const timeoutPromise = new Promise((_, reject) => {
345
+ setTimeout(() => {
346
+ const elapsed = Date.now() - startTime;
347
+ reject(new TimeoutError(`Render timed out after ${options.timeout}ms`, options.timeout, elapsed));
348
+ }, options.timeout);
349
+ });
350
+ const renderPromise = isVideoFormat(format)
351
+ ? renderVideo(template, options)
352
+ : renderImage(template, options);
353
+ return Promise.race([renderPromise, timeoutPromise]);
354
+ }
355
+ // No timeout
356
+ if (isVideoFormat(format)) {
357
+ return renderVideo(template, options);
358
+ }
359
+ return renderImage(template, options);
360
+ }
361
+ /**
362
+ * Create a reusable renderer with preset configuration
363
+ *
364
+ * @example
365
+ * ```typescript
366
+ * import { createRenderer } from 'loopwind';
367
+ *
368
+ * const render = createRenderer({
369
+ * fonts: [
370
+ * { name: 'Inter', data: interFont, weight: 400 },
371
+ * ],
372
+ * colors: {
373
+ * primary: '#3b82f6',
374
+ * },
375
+ * defaults: {
376
+ * width: 1200,
377
+ * height: 630,
378
+ * },
379
+ * });
380
+ *
381
+ * // Now render without repeating config
382
+ * const png = await render(OGImage, { props: { title: 'Hello' }, format: 'png' });
383
+ * ```
384
+ */
385
+ export function createRenderer(config) {
386
+ // Pre-process fonts if provided as FontConfig[]
387
+ const fonts = Array.isArray(config.fonts) ? config.fonts : undefined;
388
+ return async function (templateOrName, options) {
389
+ // Resolve template by name if string
390
+ let template;
391
+ if (typeof templateOrName === 'string') {
392
+ if (!config.templates || !config.templates[templateOrName]) {
393
+ throw new ValidationError(`Template "${templateOrName}" not found in registry`, 'template', Object.keys(config.templates || {}).join(', ') || 'no templates registered', templateOrName);
394
+ }
395
+ template = config.templates[templateOrName];
396
+ }
397
+ else {
398
+ template = templateOrName;
399
+ }
400
+ // Merge options with defaults
401
+ const mergedOptions = {
402
+ ...options,
403
+ width: options.width ?? config.defaults?.width,
404
+ height: options.height ?? config.defaults?.height,
405
+ format: options.format ?? config.defaults?.format,
406
+ fonts: options.fonts ?? fonts,
407
+ };
408
+ // Validate
409
+ validateOptions(mergedOptions);
410
+ const format = mergedOptions.format || 'png';
411
+ // Handle timeout
412
+ if (mergedOptions.timeout) {
413
+ const startTime = Date.now();
414
+ const timeoutPromise = new Promise((_, reject) => {
415
+ setTimeout(() => {
416
+ const elapsed = Date.now() - startTime;
417
+ reject(new TimeoutError(`Render timed out after ${mergedOptions.timeout}ms`, mergedOptions.timeout, elapsed));
418
+ }, mergedOptions.timeout);
419
+ });
420
+ const renderPromise = isVideoFormat(format)
421
+ ? renderVideo(template, mergedOptions, config)
422
+ : renderImage(template, mergedOptions, config);
423
+ return Promise.race([renderPromise, timeoutPromise]);
424
+ }
425
+ // No timeout
426
+ if (isVideoFormat(format)) {
427
+ return renderVideo(template, mergedOptions, config);
428
+ }
429
+ return renderImage(template, mergedOptions, config);
430
+ };
431
+ }
432
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/sdk/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Loopwind SDK Types
3
+ */
4
+ import type React from 'react';
5
+ /**
6
+ * Tailwind-to-style converter function
7
+ */
8
+ export type TwFunction = (classes: string) => React.CSSProperties;
9
+ /**
10
+ * Frame information for video templates
11
+ */
12
+ export interface FrameInfo {
13
+ /** Current frame number (0-based) */
14
+ index: number;
15
+ /** Total number of frames */
16
+ total: number;
17
+ /** Progress from 0 to 1 */
18
+ progress: number;
19
+ /** Current time in seconds */
20
+ time: number;
21
+ /** Frames per second */
22
+ fps: number;
23
+ /** Total duration in seconds */
24
+ duration: number;
25
+ }
26
+ /**
27
+ * Image transform options
28
+ */
29
+ export interface ImageTransformOptions {
30
+ width?: number;
31
+ height?: number;
32
+ fit?: 'cover' | 'contain' | 'fill' | 'inside' | 'outside';
33
+ format?: 'png' | 'jpeg' | 'webp' | 'avif';
34
+ quality?: number;
35
+ background?: string;
36
+ }
37
+ /**
38
+ * Props that templates receive
39
+ */
40
+ export interface BaseTemplateProps {
41
+ /** Tailwind class converter */
42
+ tw: TwFunction;
43
+ /** Frame info for video templates */
44
+ frame?: FrameInfo;
45
+ /** Image loader helper */
46
+ image?: (pathOrUrl: string, transform?: ImageTransformOptions) => string;
47
+ /** QR code generator helper */
48
+ qr?: (text: string, options?: QRCodeOptions) => string;
49
+ }
50
+ /**
51
+ * QR code generation options
52
+ */
53
+ export interface QRCodeOptions {
54
+ width?: number;
55
+ margin?: number;
56
+ errorCorrectionLevel?: 'L' | 'M' | 'Q' | 'H';
57
+ color?: {
58
+ dark?: string;
59
+ light?: string;
60
+ };
61
+ }
62
+ /**
63
+ * JSON-serializable value types for template props
64
+ */
65
+ export type JsonValue = string | number | boolean | null | undefined | JsonValue[] | {
66
+ [key: string]: JsonValue;
67
+ };
68
+ /**
69
+ * Template props must be JSON-serializable
70
+ */
71
+ export type TemplateProps = Record<string, JsonValue>;
72
+ /**
73
+ * Template function type
74
+ */
75
+ export type Template<P extends TemplateProps = TemplateProps> = (props: P & BaseTemplateProps) => React.ReactElement;
76
+ /**
77
+ * Font configuration
78
+ */
79
+ export interface FontConfig {
80
+ /** Font family name */
81
+ name: string;
82
+ /** Font data (ArrayBuffer or Buffer) */
83
+ data: ArrayBuffer | Buffer;
84
+ /** Font weight */
85
+ weight?: 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
86
+ /** Font style */
87
+ style?: 'normal' | 'italic';
88
+ }
89
+ /**
90
+ * Simple font family definition
91
+ */
92
+ export type SimpleFontFamily = string[];
93
+ /**
94
+ * Font family with custom files
95
+ */
96
+ export interface FontFamilyWithFiles {
97
+ family: string[];
98
+ files: Array<{
99
+ data: ArrayBuffer | Buffer;
100
+ weight?: number;
101
+ style?: 'normal' | 'italic';
102
+ }>;
103
+ }
104
+ /**
105
+ * Fonts configuration
106
+ */
107
+ export type FontsConfig = Record<string, SimpleFontFamily | FontFamilyWithFiles>;
108
+ /**
109
+ * Design tokens configuration
110
+ */
111
+ export interface TokensConfig {
112
+ borderRadius?: Record<string, string>;
113
+ spacing?: Record<string, string>;
114
+ fontSize?: Record<string, string>;
115
+ [key: string]: Record<string, string> | undefined;
116
+ }
117
+ /**
118
+ * Renderer configuration
119
+ */
120
+ export interface RendererConfig {
121
+ /** Custom colors for tw() */
122
+ colors?: Record<string, string>;
123
+ /** Font configuration */
124
+ fonts?: FontsConfig | FontConfig[];
125
+ /** Design tokens */
126
+ tokens?: TokensConfig;
127
+ /** Default dimensions and format */
128
+ defaults?: {
129
+ width?: number;
130
+ height?: number;
131
+ format?: OutputFormat;
132
+ };
133
+ /** Pre-registered templates */
134
+ templates?: Record<string, Template>;
135
+ }
136
+ /**
137
+ * Output format
138
+ */
139
+ export type OutputFormat = 'png' | 'svg' | 'jpg' | 'jpeg' | 'webp' | 'mp4' | 'gif';
140
+ /**
141
+ * Image format (no video)
142
+ */
143
+ export type ImageFormat = 'png' | 'svg' | 'jpg' | 'jpeg' | 'webp';
144
+ /**
145
+ * Video format
146
+ */
147
+ export type VideoFormat = 'mp4' | 'gif';
148
+ /**
149
+ * Render options
150
+ */
151
+ export interface RenderOptions<P extends TemplateProps = TemplateProps> {
152
+ /** Props to pass to template */
153
+ props: P;
154
+ /** Output width in pixels */
155
+ width?: number;
156
+ /** Output height in pixels */
157
+ height?: number;
158
+ /** Output format */
159
+ format?: OutputFormat;
160
+ /** JPEG/WebP quality (1-100) */
161
+ quality?: number;
162
+ /** Video frames per second */
163
+ fps?: number;
164
+ /** Video duration in seconds */
165
+ duration?: number;
166
+ /** Video quality (CRF 0-51, lower = better) */
167
+ crf?: number;
168
+ /** Custom fonts (if not using createRenderer) */
169
+ fonts?: FontConfig[];
170
+ /** Render scale (default: 2 for images, 1 for video) */
171
+ scale?: number;
172
+ /** Debug mode (shows bounding boxes) */
173
+ debug?: boolean;
174
+ /** Timeout in milliseconds */
175
+ timeout?: number;
176
+ }
177
+ /**
178
+ * Render result
179
+ */
180
+ export type RenderResult = Buffer | Uint8Array;
181
+ /**
182
+ * Renderer function signature
183
+ */
184
+ export type RenderFunction = <P extends TemplateProps>(template: Template<P> | string, options: RenderOptions<P>) => Promise<RenderResult>;
185
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Loopwind SDK Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}