loopwind 0.23.0 → 0.24.0
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/README.md +13 -117
- package/dist/cli.js +16 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +6 -10
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/agent.d.ts +8 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +101 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +17 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/render.d.ts.map +1 -1
- package/dist/commands/render.js +17 -19
- package/dist/commands/render.js.map +1 -1
- package/dist/default-templates/AGENTS.md +10 -24
- package/dist/lib/config.d.ts +2 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +4 -9
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -3
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +2 -4
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/installer.d.ts +2 -0
- package/dist/lib/installer.d.ts.map +1 -1
- package/dist/lib/installer.js +6 -7
- package/dist/lib/installer.js.map +1 -1
- package/dist/lib/renderer.d.ts.map +1 -1
- package/dist/lib/renderer.js +4 -1
- package/dist/lib/renderer.js.map +1 -1
- package/dist/lib/utils.d.ts +13 -29
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +45 -155
- package/dist/lib/utils.js.map +1 -1
- package/dist/types/config.d.ts +0 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/package.json +1 -15
- package/REGISTRY_SETUP.md +0 -363
- package/dist/default-templates/image/template.d.ts +0 -20
- package/dist/default-templates/image/template.d.ts.map +0 -1
- package/dist/default-templates/image/template.js +0 -18
- package/dist/default-templates/image/template.js.map +0 -1
- package/dist/default-templates/image/template.tsx +0 -20
- package/dist/default-templates/kitchen-sink/template.tsx +0 -64
- package/dist/default-templates/page/template.tsx +0 -37
- package/dist/default-templates/video/template.d.ts +0 -26
- package/dist/default-templates/video/template.d.ts.map +0 -1
- package/dist/default-templates/video/template.js +0 -33
- package/dist/default-templates/video/template.js.map +0 -1
- package/dist/default-templates/video/template.tsx +0 -37
- package/dist/default-templates/website/pages/home.tsx +0 -17
- package/dist/default-templates/website/parts/footer.tsx +0 -17
- package/dist/default-templates/website/parts/header.tsx +0 -17
- package/dist/default-templates/website/template.tsx +0 -17
- package/dist/default-templates/website-template/pages/home.tsx +0 -13
- package/dist/default-templates/website-template/parts/footer.tsx +0 -15
- package/dist/default-templates/website-template/parts/header.tsx +0 -15
- package/dist/default-templates/website-template/template.tsx +0 -32
- package/dist/lib/encode-worker.d.ts +0 -2
- package/dist/lib/encode-worker.d.ts.map +0 -1
- package/dist/lib/encode-worker.js +0 -29
- package/dist/lib/encode-worker.js.map +0 -1
- package/dist/lib/mjpeg-muxer.d.ts +0 -46
- package/dist/lib/mjpeg-muxer.d.ts.map +0 -1
- package/dist/lib/mjpeg-muxer.js +0 -513
- package/dist/lib/mjpeg-muxer.js.map +0 -1
- package/dist/lib/render-core.d.ts +0 -63
- package/dist/lib/render-core.d.ts.map +0 -1
- package/dist/lib/render-core.js +0 -65
- package/dist/lib/render-core.js.map +0 -1
- package/dist/lib/tailwind-browser.d.ts +0 -27
- package/dist/lib/tailwind-browser.d.ts.map +0 -1
- package/dist/lib/tailwind-browser.js +0 -853
- package/dist/lib/tailwind-browser.js.map +0 -1
- package/dist/lib/video-player.d.ts +0 -25
- package/dist/lib/video-player.d.ts.map +0 -1
- package/dist/lib/video-player.js +0 -392
- package/dist/lib/video-player.js.map +0 -1
- package/dist/sdk/compiler.d.ts +0 -94
- package/dist/sdk/compiler.d.ts.map +0 -1
- package/dist/sdk/compiler.js +0 -122
- package/dist/sdk/compiler.js.map +0 -1
- package/dist/sdk/edge/index.d.ts +0 -91
- package/dist/sdk/edge/index.d.ts.map +0 -1
- package/dist/sdk/edge/index.js +0 -187
- package/dist/sdk/edge/index.js.map +0 -1
- package/dist/sdk/index.d.ts +0 -62
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/index.js +0 -141
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/preview.d.ts +0 -65
- package/dist/sdk/preview.d.ts.map +0 -1
- package/dist/sdk/preview.js +0 -262
- package/dist/sdk/preview.js.map +0 -1
- package/dist/sdk/template.d.ts +0 -162
- package/dist/sdk/template.d.ts.map +0 -1
- package/dist/sdk/template.js +0 -231
- package/dist/sdk/template.js.map +0 -1
- package/dist/sdk/workers/index.d.ts +0 -135
- package/dist/sdk/workers/index.d.ts.map +0 -1
- package/dist/sdk/workers/index.js +0 -271
- package/dist/sdk/workers/index.js.map +0 -1
- package/dist/sdk/workers/tailwind-config.d.ts +0 -48
- package/dist/sdk/workers/tailwind-config.d.ts.map +0 -1
- package/dist/sdk/workers/tailwind-config.js +0 -187
- package/dist/sdk/workers/tailwind-config.js.map +0 -1
- package/dist/sdk/workers/tailwind.d.ts +0 -9
- package/dist/sdk/workers/tailwind.d.ts.map +0 -1
- package/dist/sdk/workers/tailwind.js +0 -8
- package/dist/sdk/workers/tailwind.js.map +0 -1
- package/examples/code-editor-templates.ts +0 -173
- package/examples/nextjs-api/README.md +0 -180
- package/examples/nextjs-api/package.json +0 -21
- package/examples/nextjs-api/pages/api/intro-video.ts +0 -53
- package/examples/nextjs-api/pages/api/og-image.ts +0 -50
- package/examples/nextjs-template-import.ts +0 -58
- package/examples/sdk-video-preview.tsx +0 -120
- package/examples/template-compiler-workflow.ts +0 -251
- package/examples/visual-builder-templates.ts +0 -336
- package/render-examples-600x400.mjs +0 -161
- package/render-spring-variants-fixed.mjs +0 -60
- package/render-staggered-text.mjs +0 -56
- package/test-cloudflare-worker/README.md +0 -64
- package/test-cloudflare-worker/dist/README.md +0 -1
- package/test-cloudflare-worker/dist/index.js +0 -23743
- package/test-cloudflare-worker/dist/index.js.map +0 -8
- package/test-cloudflare-worker/package-lock.json +0 -1773
- package/test-cloudflare-worker/package.json +0 -25
- package/test-cloudflare-worker/test-sdk.mjs +0 -75
- package/test-cloudflare-worker/wrangler.toml +0 -14
- package/test-font-files.mjs +0 -72
- package/test-jsx-support.mjs +0 -146
- package/test-sdk-config.mjs +0 -454
- package/test-sdk-source-config.mjs +0 -427
- package/test-sdk-user-templates.mjs +0 -469
- package/test-static-debug.tsx +0 -19
- package/test-templates/TESTS.md +0 -63
- package/test-templates/config-test.mjs +0 -17
- package/test-templates/demo-intro-props.json +0 -4
- package/test-templates/run-tests.sh +0 -44
- package/test-templates/test-sdk.mjs +0 -139
- package/test-video-720p.mjs +0 -96
- package/test-video-breakdown.mjs +0 -98
- package/test-video-perf-1080.mjs +0 -67
- package/test-video-perf.mjs +0 -56
- package/test-video-props.json +0 -3
- package/test-worker-1080p.mjs +0 -103
- package/test-worker-viability.mjs +0 -140
- package/website/.astro/content.db +0 -0
- package/website/.astro/integrations/_inox-tools_astro-when/types.d.ts +0 -1
- package/website/.astro/integrations/astro_db/db.d.ts +0 -15
- package/website/.astro/settings.json +0 -5
- package/website/.astro/types.d.ts +0 -2
- package/website/DEPLOYMENT.md +0 -143
- package/website/OG_IMAGES.md +0 -142
- package/website/README.md +0 -158
- package/website/astro.config.mjs +0 -41
- package/website/dist/.gitkeep +0 -5
- package/website/dist/_astro/PlaygroundEditor.DzFavsm8.js +0 -26
- package/website/dist/_astro/VideoPreviewClient.BrajhYmh.js +0 -1
- package/website/dist/_astro/agents.CZXv4DCM.css +0 -1
- package/website/dist/_astro/client.BHSq4mdQ.js +0 -33
- package/website/dist/_astro/index.CTbGshLK.js +0 -9
- package/website/dist/_astro/jsx-runtime.BjG_zV1W.js +0 -9
- package/website/dist/_routes.json +0 -31
- package/website/dist/_worker.js/_@astrojs-ssr-adapter.mjs +0 -1033
- package/website/dist/_worker.js/_astro-internal_middleware.mjs +0 -40
- package/website/dist/_worker.js/chunks/Logo_Cud5QvBJ.mjs +0 -22
- package/website/dist/_worker.js/chunks/_@astro-renderers_-YVK7NHa.mjs +0 -15015
- package/website/dist/_worker.js/chunks/abap_BTmsHiP5.mjs +0 -1
- package/website/dist/_worker.js/chunks/actionscript-3_DmBelb1E.mjs +0 -1
- package/website/dist/_worker.js/chunks/ada_8-E0ahCN.mjs +0 -1
- package/website/dist/_worker.js/chunks/andromeeda_XI-CXx50.mjs +0 -1
- package/website/dist/_worker.js/chunks/angular-html_DKGh3gGH.mjs +0 -1
- package/website/dist/_worker.js/chunks/angular-ts_-qZGsJoA.mjs +0 -1
- package/website/dist/_worker.js/chunks/apache_ijTUt0Ee.mjs +0 -1
- package/website/dist/_worker.js/chunks/apex_agu1c6Sh.mjs +0 -1
- package/website/dist/_worker.js/chunks/apl_Bj2f7Art.mjs +0 -1
- package/website/dist/_worker.js/chunks/applescript_B_vXrOh3.mjs +0 -1
- package/website/dist/_worker.js/chunks/ara_DCEQ2rnh.mjs +0 -1
- package/website/dist/_worker.js/chunks/asciidoc_CGN_EkYS.mjs +0 -1
- package/website/dist/_worker.js/chunks/asm_BBWZgnDp.mjs +0 -1
- package/website/dist/_worker.js/chunks/astro/assets-service_j52rQLzU.mjs +0 -721
- package/website/dist/_worker.js/chunks/astro/server_CsUrSZgd.mjs +0 -2512
- package/website/dist/_worker.js/chunks/astro-designed-error-pages_1ELXm5Tt.mjs +0 -542
- package/website/dist/_worker.js/chunks/astro_Dr_hht3h.mjs +0 -1
- package/website/dist/_worker.js/chunks/aurora-x_9GHG8nSq.mjs +0 -1
- package/website/dist/_worker.js/chunks/awk_DHRvhXot.mjs +0 -1
- package/website/dist/_worker.js/chunks/ayu-dark_CcvqmEHE.mjs +0 -1
- package/website/dist/_worker.js/chunks/ballerina_C7SdeSZb.mjs +0 -1
- package/website/dist/_worker.js/chunks/bat_Dv4A3u45.mjs +0 -1
- package/website/dist/_worker.js/chunks/beancount_BfPf9Luv.mjs +0 -1
- package/website/dist/_worker.js/chunks/berry_B8rfM3lL.mjs +0 -1
- package/website/dist/_worker.js/chunks/bibtex_TcjYgtJM.mjs +0 -1
- package/website/dist/_worker.js/chunks/bicep_CrlFWCdN.mjs +0 -1
- package/website/dist/_worker.js/chunks/blade_lanKVYID.mjs +0 -1
- package/website/dist/_worker.js/chunks/bsl_BhppzXMB.mjs +0 -1
- package/website/dist/_worker.js/chunks/c_6FBALJTK.mjs +0 -1
- package/website/dist/_worker.js/chunks/cadence_2txU9LVE.mjs +0 -1
- package/website/dist/_worker.js/chunks/cairo_BkrFAIlP.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-frappe_CkEqIYhU.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-latte_DG4Gx_-v.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-macchiato_Cwi3vCXf.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-mocha_L9_OPlFX.mjs +0 -1
- package/website/dist/_worker.js/chunks/clarity_BEAe4Ulu.mjs +0 -1
- package/website/dist/_worker.js/chunks/clojure_VnUX6p2g.mjs +0 -1
- package/website/dist/_worker.js/chunks/cmake_0-SGkZEj.mjs +0 -1
- package/website/dist/_worker.js/chunks/cobol_92M_KGaE.mjs +0 -1
- package/website/dist/_worker.js/chunks/codeowners_CzMwskBv.mjs +0 -1
- package/website/dist/_worker.js/chunks/codeql_DWJZNHv1.mjs +0 -1
- package/website/dist/_worker.js/chunks/coffee_CQjKU2fh.mjs +0 -1
- package/website/dist/_worker.js/chunks/common-lisp_BBLWDpS5.mjs +0 -1
- package/website/dist/_worker.js/chunks/coq_hedRFV3D.mjs +0 -1
- package/website/dist/_worker.js/chunks/cpp_DlS1i6Zs.mjs +0 -1
- package/website/dist/_worker.js/chunks/crystal_D6n65fKV.mjs +0 -1
- package/website/dist/_worker.js/chunks/csharp_C6FCVFzc.mjs +0 -1
- package/website/dist/_worker.js/chunks/css_C5uJEgmJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/csv_CtMYuuJl.mjs +0 -1
- package/website/dist/_worker.js/chunks/cue_BsPexqx6.mjs +0 -1
- package/website/dist/_worker.js/chunks/cypher_apzf6OBi.mjs +0 -1
- package/website/dist/_worker.js/chunks/d_DcvIRcgm.mjs +0 -1
- package/website/dist/_worker.js/chunks/dark-plus_C01ONtzj.mjs +0 -1
- package/website/dist/_worker.js/chunks/dart_WkzM5WrV.mjs +0 -1
- package/website/dist/_worker.js/chunks/dax_DjXAO5V4.mjs +0 -1
- package/website/dist/_worker.js/chunks/desktop_C92LCxdc.mjs +0 -1
- package/website/dist/_worker.js/chunks/diff_CVwM_9XJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/docker_DPzgJf6Z.mjs +0 -1
- package/website/dist/_worker.js/chunks/dotenv_D_vgANvA.mjs +0 -1
- package/website/dist/_worker.js/chunks/dracula-soft_CLnUBwFm.mjs +0 -1
- package/website/dist/_worker.js/chunks/dracula_lBVpb6Lb.mjs +0 -1
- package/website/dist/_worker.js/chunks/dream-maker_DTLbzd_J.mjs +0 -1
- package/website/dist/_worker.js/chunks/edge_i54JYm3_.mjs +0 -1
- package/website/dist/_worker.js/chunks/elixir_BJCIjTu4.mjs +0 -1
- package/website/dist/_worker.js/chunks/elm_BbXD39-_.mjs +0 -1
- package/website/dist/_worker.js/chunks/emacs-lisp_pxa5cXaN.mjs +0 -1
- package/website/dist/_worker.js/chunks/erb_Ccjijeee.mjs +0 -1
- package/website/dist/_worker.js/chunks/erlang_B2VM_hi7.mjs +0 -1
- package/website/dist/_worker.js/chunks/everforest-dark_BxvIPBim.mjs +0 -1
- package/website/dist/_worker.js/chunks/everforest-light_B7VoyaJM.mjs +0 -1
- package/website/dist/_worker.js/chunks/fennel_D-uo7X6c.mjs +0 -1
- package/website/dist/_worker.js/chunks/fish_BjePoK3m.mjs +0 -1
- package/website/dist/_worker.js/chunks/fluent_C8fgkzLX.mjs +0 -1
- package/website/dist/_worker.js/chunks/fortran-fixed-form_D1pu5zrc.mjs +0 -1
- package/website/dist/_worker.js/chunks/fortran-free-form_CSGOhJD6.mjs +0 -1
- package/website/dist/_worker.js/chunks/fsharp_B0xy-A4Y.mjs +0 -1
- package/website/dist/_worker.js/chunks/gdresource_CWppjlHq.mjs +0 -1
- package/website/dist/_worker.js/chunks/gdscript_eQCHchcS.mjs +0 -1
- package/website/dist/_worker.js/chunks/gdshader_C4kxepX7.mjs +0 -1
- package/website/dist/_worker.js/chunks/genie_ACtQLcDW.mjs +0 -1
- package/website/dist/_worker.js/chunks/gherkin_BFp2uKUd.mjs +0 -1
- package/website/dist/_worker.js/chunks/git-commit_CLg9ZwMV.mjs +0 -1
- package/website/dist/_worker.js/chunks/git-rebase_DG8A80Nt.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark-default_BI0EP2Kv.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark-dimmed_a_NIC0Xb.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark-high-contrast_jZGqT7hk.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark_CHCDNd2O.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-light-default_DRbOW5RG.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-light-high-contrast_tn_kWutM.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-light_D9brYzot.mjs +0 -1
- package/website/dist/_worker.js/chunks/gleam_Dmhu1oxW.mjs +0 -1
- package/website/dist/_worker.js/chunks/glimmer-js_BfZbXy8A.mjs +0 -1
- package/website/dist/_worker.js/chunks/glimmer-ts_B9QVICrD.mjs +0 -1
- package/website/dist/_worker.js/chunks/glsl_DD2PPwOs.mjs +0 -1
- package/website/dist/_worker.js/chunks/gnuplot_D2OYChUX.mjs +0 -1
- package/website/dist/_worker.js/chunks/go_DYGFTe3h.mjs +0 -1
- package/website/dist/_worker.js/chunks/graphql_B7XsT3nH.mjs +0 -1
- package/website/dist/_worker.js/chunks/groovy_BO12Uwkl.mjs +0 -1
- package/website/dist/_worker.js/chunks/hack_CB2_ztCP.mjs +0 -1
- package/website/dist/_worker.js/chunks/haml_CyfDcDD3.mjs +0 -1
- package/website/dist/_worker.js/chunks/handlebars_CfpxpWm2.mjs +0 -1
- package/website/dist/_worker.js/chunks/haskell_jUeC5uN5.mjs +0 -1
- package/website/dist/_worker.js/chunks/haxe_B6GxP1WB.mjs +0 -1
- package/website/dist/_worker.js/chunks/hcl_DwoHV2oh.mjs +0 -1
- package/website/dist/_worker.js/chunks/hjson_DV7cJRk4.mjs +0 -1
- package/website/dist/_worker.js/chunks/hlsl_BlFCscPI.mjs +0 -1
- package/website/dist/_worker.js/chunks/houston_COBFG1Mx.mjs +0 -1
- package/website/dist/_worker.js/chunks/html-derivative_C9pJ337h.mjs +0 -1
- package/website/dist/_worker.js/chunks/html_D1OkrZS5.mjs +0 -1
- package/website/dist/_worker.js/chunks/http_DIGXRqvJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/hxml_DEwh9i-c.mjs +0 -1
- package/website/dist/_worker.js/chunks/hy_DDoIgW1K.mjs +0 -1
- package/website/dist/_worker.js/chunks/imba_B00zbHo4.mjs +0 -1
- package/website/dist/_worker.js/chunks/index_BDWR1Q-q.mjs +0 -1861
- package/website/dist/_worker.js/chunks/ini_D7XQA_p8.mjs +0 -1
- package/website/dist/_worker.js/chunks/java_B9wdFd8K.mjs +0 -1
- package/website/dist/_worker.js/chunks/javascript_CLsPGOON.mjs +0 -1
- package/website/dist/_worker.js/chunks/jinja_jarBCAN1.mjs +0 -1
- package/website/dist/_worker.js/chunks/jison_oGg3J708.mjs +0 -1
- package/website/dist/_worker.js/chunks/json5_DlZ1Kyaa.mjs +0 -1
- package/website/dist/_worker.js/chunks/json_DaYk_FMp.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsonc_DlwgfSDs.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsonl_BbCCVaZF.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsonnet_Dt-G75xe.mjs +0 -1
- package/website/dist/_worker.js/chunks/jssm_BtKFTj2A.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsx_DDx_xAZ8.mjs +0 -1
- package/website/dist/_worker.js/chunks/julia_CK0lv68l.mjs +0 -1
- package/website/dist/_worker.js/chunks/kanagawa-dragon_BldAK3Oo.mjs +0 -1
- package/website/dist/_worker.js/chunks/kanagawa-lotus_DVM8FX9_.mjs +0 -1
- package/website/dist/_worker.js/chunks/kanagawa-wave_Dpih0AKP.mjs +0 -1
- package/website/dist/_worker.js/chunks/kotlin_kWneB9V_.mjs +0 -1
- package/website/dist/_worker.js/chunks/kusto_BKVATd95.mjs +0 -1
- package/website/dist/_worker.js/chunks/laserwave_BqatxsVl.mjs +0 -1
- package/website/dist/_worker.js/chunks/latex_LVDcGBbc.mjs +0 -1
- package/website/dist/_worker.js/chunks/lean_W7qo-5M2.mjs +0 -1
- package/website/dist/_worker.js/chunks/less_DFNwJnBH.mjs +0 -1
- package/website/dist/_worker.js/chunks/light-plus_Dp0AoWsO.mjs +0 -1
- package/website/dist/_worker.js/chunks/liquid_D24qs0pc.mjs +0 -1
- package/website/dist/_worker.js/chunks/log_IPWMXriF.mjs +0 -1
- package/website/dist/_worker.js/chunks/logo_C6KaatrQ.mjs +0 -1
- package/website/dist/_worker.js/chunks/lua_CwnEf-T7.mjs +0 -1
- package/website/dist/_worker.js/chunks/luau_Br3-CXjS.mjs +0 -1
- package/website/dist/_worker.js/chunks/make_UBNG-kOo.mjs +0 -1
- package/website/dist/_worker.js/chunks/markdown_C7mhJFCm.mjs +0 -1
- package/website/dist/_worker.js/chunks/marko_4tchUvI7.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-darker_SKtaNEPn.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-lighter_zOX_DZCH.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-ocean_BN9WbhdC.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-palenight_DT_covjH.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme_6RpeM3kc.mjs +0 -1
- package/website/dist/_worker.js/chunks/matlab_DCOXsPKR.mjs +0 -1
- package/website/dist/_worker.js/chunks/mdc_B9gb2UFP.mjs +0 -1
- package/website/dist/_worker.js/chunks/mdx_DGU7Nu9u.mjs +0 -1
- package/website/dist/_worker.js/chunks/mermaid_B69URzsZ.mjs +0 -1
- package/website/dist/_worker.js/chunks/min-dark_BgxifOMI.mjs +0 -1
- package/website/dist/_worker.js/chunks/min-light_BrPjXxUp.mjs +0 -1
- package/website/dist/_worker.js/chunks/mipsasm_9U-4_t7k.mjs +0 -1
- package/website/dist/_worker.js/chunks/mojo_B0wt7ug3.mjs +0 -1
- package/website/dist/_worker.js/chunks/monokai_B6Pxpoyi.mjs +0 -1
- package/website/dist/_worker.js/chunks/move_1eid4CyR.mjs +0 -1
- package/website/dist/_worker.js/chunks/narrat_Ds6-p5JZ.mjs +0 -1
- package/website/dist/_worker.js/chunks/nextflow_v2N1Qlqa.mjs +0 -1
- package/website/dist/_worker.js/chunks/nginx_Bp9Ab2NH.mjs +0 -1
- package/website/dist/_worker.js/chunks/night-owl_CdwOw_sc.mjs +0 -1
- package/website/dist/_worker.js/chunks/nim_BXGDUe53.mjs +0 -1
- package/website/dist/_worker.js/chunks/nix_CUig1nJH.mjs +0 -1
- package/website/dist/_worker.js/chunks/noop-middleware_B8fH5jha.mjs +0 -10
- package/website/dist/_worker.js/chunks/nord_SPoG1iae.mjs +0 -1
- package/website/dist/_worker.js/chunks/nushell_DJw1Lca8.mjs +0 -1
- package/website/dist/_worker.js/chunks/objective-c_Bktzl_CO.mjs +0 -1
- package/website/dist/_worker.js/chunks/objective-cpp_CP4DWdDp.mjs +0 -1
- package/website/dist/_worker.js/chunks/ocaml_CeEAs7bZ.mjs +0 -1
- package/website/dist/_worker.js/chunks/one-dark-pro_-hIwCNMi.mjs +0 -1
- package/website/dist/_worker.js/chunks/one-light_DSmYvJ05.mjs +0 -1
- package/website/dist/_worker.js/chunks/pascal_C-S_Ms_o.mjs +0 -1
- package/website/dist/_worker.js/chunks/perl_CKamvo15.mjs +0 -1
- package/website/dist/_worker.js/chunks/php_BlmcX_F3.mjs +0 -1
- package/website/dist/_worker.js/chunks/plastic_Ryt8tVoA.mjs +0 -1
- package/website/dist/_worker.js/chunks/plsql_Cb3v7cBj.mjs +0 -1
- package/website/dist/_worker.js/chunks/po_DZbdNRlo.mjs +0 -1
- package/website/dist/_worker.js/chunks/poimandres_bYmE3_5d.mjs +0 -1
- package/website/dist/_worker.js/chunks/polar_pJkMGwoW.mjs +0 -1
- package/website/dist/_worker.js/chunks/postcss_BAXSOKgk.mjs +0 -1
- package/website/dist/_worker.js/chunks/powerquery_oITMGN4x.mjs +0 -1
- package/website/dist/_worker.js/chunks/powershell_6306-xIF.mjs +0 -1
- package/website/dist/_worker.js/chunks/prisma_DSDxnZGz.mjs +0 -1
- package/website/dist/_worker.js/chunks/prolog_CxG7tjZR.mjs +0 -1
- package/website/dist/_worker.js/chunks/proto_CS9ByXm1.mjs +0 -1
- package/website/dist/_worker.js/chunks/pug_BMtLJo6U.mjs +0 -1
- package/website/dist/_worker.js/chunks/puppet_BfeeSzee.mjs +0 -1
- package/website/dist/_worker.js/chunks/purescript_BFfueNaH.mjs +0 -1
- package/website/dist/_worker.js/chunks/python_Cc4Faapv.mjs +0 -1
- package/website/dist/_worker.js/chunks/qml_C1CTJTK8.mjs +0 -1
- package/website/dist/_worker.js/chunks/qmldir_nG1KaqKR.mjs +0 -1
- package/website/dist/_worker.js/chunks/qss_Cncxk263.mjs +0 -1
- package/website/dist/_worker.js/chunks/r_ChR54Ihi.mjs +0 -1
- package/website/dist/_worker.js/chunks/racket_BDrhptDs.mjs +0 -1
- package/website/dist/_worker.js/chunks/raku_07OUHa0P.mjs +0 -1
- package/website/dist/_worker.js/chunks/razor_DIP3INLa.mjs +0 -1
- package/website/dist/_worker.js/chunks/red_DOPXfj-6.mjs +0 -1
- package/website/dist/_worker.js/chunks/reg_B64SwEDj.mjs +0 -1
- package/website/dist/_worker.js/chunks/regexp_ButFGoB5.mjs +0 -1
- package/website/dist/_worker.js/chunks/rel_BWJAWqZD.mjs +0 -1
- package/website/dist/_worker.js/chunks/riscv_79gXlbsF.mjs +0 -1
- package/website/dist/_worker.js/chunks/rose-pine-dawn_DHIjVGd3.mjs +0 -1
- package/website/dist/_worker.js/chunks/rose-pine-moon_t86aEbs0.mjs +0 -1
- package/website/dist/_worker.js/chunks/rose-pine_BHgrcDCs.mjs +0 -1
- package/website/dist/_worker.js/chunks/rst_D3F4Fcpj.mjs +0 -1
- package/website/dist/_worker.js/chunks/ruby_Cs7vM9iv.mjs +0 -1
- package/website/dist/_worker.js/chunks/rust_DpyRVatH.mjs +0 -1
- package/website/dist/_worker.js/chunks/sas_DW45xZXN.mjs +0 -1
- package/website/dist/_worker.js/chunks/sass_C6SiMwN_.mjs +0 -1
- package/website/dist/_worker.js/chunks/scala_DlZOjNZk.mjs +0 -1
- package/website/dist/_worker.js/chunks/scheme_D2ezSJXu.mjs +0 -1
- package/website/dist/_worker.js/chunks/scss_DG5Spjqu.mjs +0 -1
- package/website/dist/_worker.js/chunks/sdbl_ZCYaj4VN.mjs +0 -1
- package/website/dist/_worker.js/chunks/shaderlab_CAcRkg1_.mjs +0 -1
- package/website/dist/_worker.js/chunks/shellscript_BWwhkDVh.mjs +0 -1
- package/website/dist/_worker.js/chunks/shellsession_BfEA3juK.mjs +0 -1
- package/website/dist/_worker.js/chunks/slack-dark_CL3lSpCc.mjs +0 -1
- package/website/dist/_worker.js/chunks/slack-ochin_DdZKOQVh.mjs +0 -1
- package/website/dist/_worker.js/chunks/smalltalk_DgilzSui.mjs +0 -1
- package/website/dist/_worker.js/chunks/snazzy-light_eJU08Pz_.mjs +0 -1
- package/website/dist/_worker.js/chunks/solarized-dark_Dg_YQywx.mjs +0 -1
- package/website/dist/_worker.js/chunks/solarized-light_BnIsrA6p.mjs +0 -1
- package/website/dist/_worker.js/chunks/solidity_DkseH8pQ.mjs +0 -1
- package/website/dist/_worker.js/chunks/soy_DU7bOYoG.mjs +0 -1
- package/website/dist/_worker.js/chunks/sparql_BuI1DBDH.mjs +0 -1
- package/website/dist/_worker.js/chunks/splunk_B8Ha9Pkg.mjs +0 -1
- package/website/dist/_worker.js/chunks/sql_BniHwea5.mjs +0 -1
- package/website/dist/_worker.js/chunks/ssh-config_CkE1GuVe.mjs +0 -1
- package/website/dist/_worker.js/chunks/stata_Dtqpbd_l.mjs +0 -1
- package/website/dist/_worker.js/chunks/stylus_CXTtglzO.mjs +0 -1
- package/website/dist/_worker.js/chunks/svelte_BjWYcUCN.mjs +0 -1
- package/website/dist/_worker.js/chunks/swift_BzHql_rM.mjs +0 -1
- package/website/dist/_worker.js/chunks/synthwave-84_DLRNhxNA.mjs +0 -1
- package/website/dist/_worker.js/chunks/system-verilog_ChyInPph.mjs +0 -1
- package/website/dist/_worker.js/chunks/systemd_Bi9Qa2qD.mjs +0 -1
- package/website/dist/_worker.js/chunks/talonscript_B3sH_Y-V.mjs +0 -1
- package/website/dist/_worker.js/chunks/tasl_BJ5yipRs.mjs +0 -1
- package/website/dist/_worker.js/chunks/tcl_CoJQjNoP.mjs +0 -1
- package/website/dist/_worker.js/chunks/templ_CrU7Ffil.mjs +0 -1
- package/website/dist/_worker.js/chunks/terraform_DT9JSFpC.mjs +0 -1
- package/website/dist/_worker.js/chunks/tex_5PKu2yA0.mjs +0 -1
- package/website/dist/_worker.js/chunks/tokyo-night_Buo8OK7-.mjs +0 -1
- package/website/dist/_worker.js/chunks/toml_CPuXX3oc.mjs +0 -1
- package/website/dist/_worker.js/chunks/ts-tags_D0M_1VSH.mjs +0 -1
- package/website/dist/_worker.js/chunks/tsv_CuivVNot.mjs +0 -1
- package/website/dist/_worker.js/chunks/tsx_MkuGr8MY.mjs +0 -1
- package/website/dist/_worker.js/chunks/turtle_BqgEPK7f.mjs +0 -1
- package/website/dist/_worker.js/chunks/twig_r1G9rpYJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/typescript_Au5buqzM.mjs +0 -1
- package/website/dist/_worker.js/chunks/typespec_47rhBK_z.mjs +0 -1
- package/website/dist/_worker.js/chunks/typst_BAtuQLh-.mjs +0 -1
- package/website/dist/_worker.js/chunks/v_BIvWImHg.mjs +0 -1
- package/website/dist/_worker.js/chunks/vala_DYEacj30.mjs +0 -1
- package/website/dist/_worker.js/chunks/vb_CikQuqGJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/verilog_BQRENwI-.mjs +0 -1
- package/website/dist/_worker.js/chunks/vesper_DA0kvTmj.mjs +0 -1
- package/website/dist/_worker.js/chunks/vhdl_DHscJIyg.mjs +0 -1
- package/website/dist/_worker.js/chunks/viml_F2pvMwvG.mjs +0 -1
- package/website/dist/_worker.js/chunks/vitesse-black_D9tjNzd0.mjs +0 -1
- package/website/dist/_worker.js/chunks/vitesse-dark_Bnm5d0hd.mjs +0 -1
- package/website/dist/_worker.js/chunks/vitesse-light_CHwbyjNR.mjs +0 -1
- package/website/dist/_worker.js/chunks/vue-html_DyYtbbMK.mjs +0 -1
- package/website/dist/_worker.js/chunks/vue_DofN6juy.mjs +0 -1
- package/website/dist/_worker.js/chunks/vyper_CiR0m-OV.mjs +0 -1
- package/website/dist/_worker.js/chunks/wasm_CwIGgRGf.mjs +0 -1
- package/website/dist/_worker.js/chunks/wasm_jKWhg0J0.mjs +0 -1
- package/website/dist/_worker.js/chunks/wenyan_DKvVZKXW.mjs +0 -1
- package/website/dist/_worker.js/chunks/wgsl_BOWZY7yw.mjs +0 -1
- package/website/dist/_worker.js/chunks/wikitext_CXDhhHPy.mjs +0 -1
- package/website/dist/_worker.js/chunks/wolfram_ChkmGnW0.mjs +0 -1
- package/website/dist/_worker.js/chunks/xml_DXH3hHIu.mjs +0 -1
- package/website/dist/_worker.js/chunks/xsl_DuP2mFjg.mjs +0 -1
- package/website/dist/_worker.js/chunks/yaml_IGiEkTge.mjs +0 -1
- package/website/dist/_worker.js/chunks/zenscript_59iXGyNw.mjs +0 -1
- package/website/dist/_worker.js/chunks/zig_DKzb0zdT.mjs +0 -1
- package/website/dist/_worker.js/index.js +0 -61
- package/website/dist/_worker.js/manifest_Bk6136-u.mjs +0 -98
- package/website/dist/_worker.js/pages/_image.astro.mjs +0 -24
- package/website/dist/_worker.js/pages/agents.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/animation.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/api/playground/render.astro.mjs +0 -25562
- package/website/dist/_worker.js/pages/api/playground/templates.astro.mjs +0 -92
- package/website/dist/_worker.js/pages/api/raw-markdown/_---path_.astro.mjs +0 -44
- package/website/dist/_worker.js/pages/config.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/fonts.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/getting-started.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/helpers.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/images.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/index.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/llm.txt.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/playground/_example_.astro.mjs +0 -95
- package/website/dist/_worker.js/pages/playground.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/preview.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/sdk.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/sitemap.xml.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/styling.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/templates.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/video.astro.mjs +0 -1
- package/website/dist/_worker.js/renderers.mjs +0 -2
- package/website/dist/agents/index.html +0 -54
- package/website/dist/animation/index.html +0 -1505
- package/website/dist/config/index.html +0 -186
- package/website/dist/fonts/index.html +0 -200
- package/website/dist/getting-started/index.html +0 -109
- package/website/dist/helpers/index.html +0 -350
- package/website/dist/images/index.html +0 -337
- package/website/dist/index.html +0 -141
- package/website/dist/llm.txt +0 -3626
- package/website/dist/playground/index.html +0 -6
- package/website/dist/preview/index.html +0 -113
- package/website/dist/robots.txt +0 -40
- package/website/dist/sdk/index.html +0 -1588
- package/website/dist/sitemap.xml +0 -76
- package/website/dist/styling/index.html +0 -368
- package/website/dist/templates/index.html +0 -76
- package/website/dist/video/index.html +0 -354
- package/website/package-lock.json +0 -8099
- package/website/package.json +0 -43
- package/website/public/.gitkeep +0 -5
- package/website/public/robots.txt +0 -40
- package/website/templates/og-image.tsx +0 -60
- package/website/wrangler.toml +0 -9
package/dist/sdk/compiler.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import * as Babel from '@babel/standalone';
|
|
2
|
-
/**
|
|
3
|
-
* Compile JSX template source to plain JavaScript
|
|
4
|
-
*
|
|
5
|
-
* This function transforms JSX syntax to React.createElement calls using Babel.
|
|
6
|
-
* Use this in your admin panel, build pipeline, or anywhere you need to compile
|
|
7
|
-
* user-generated JSX templates before storing or deploying them.
|
|
8
|
-
*
|
|
9
|
-
* **When to use this:**
|
|
10
|
-
* - In admin panels where users edit templates in a code editor
|
|
11
|
-
* - In build pipelines that process templates before deployment
|
|
12
|
-
* - Before storing templates in a database
|
|
13
|
-
*
|
|
14
|
-
* **Benefits:**
|
|
15
|
-
* - Compile JSX at save time instead of runtime
|
|
16
|
-
* - Catch syntax errors early (before production)
|
|
17
|
-
* - Reduce production bundle size (no Babel in production)
|
|
18
|
-
* - Faster rendering (no compilation overhead)
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* // In your admin panel API
|
|
23
|
-
* import { compileTemplate } from 'loopwind/sdk/compiler';
|
|
24
|
-
*
|
|
25
|
-
* export async function POST(req: Request) {
|
|
26
|
-
* const { templateId, jsxCode } = await req.json();
|
|
27
|
-
*
|
|
28
|
-
* try {
|
|
29
|
-
* // Compile JSX to JavaScript
|
|
30
|
-
* const compiled = compileTemplate(jsxCode);
|
|
31
|
-
*
|
|
32
|
-
* // Save compiled version to database
|
|
33
|
-
* await db.templates.update(templateId, {
|
|
34
|
-
* sourceCode: compiled,
|
|
35
|
-
* updatedAt: new Date()
|
|
36
|
-
* });
|
|
37
|
-
*
|
|
38
|
-
* return Response.json({ success: true });
|
|
39
|
-
* } catch (error) {
|
|
40
|
-
* return Response.json({
|
|
41
|
-
* error: 'Compilation failed',
|
|
42
|
-
* message: error.message
|
|
43
|
-
* }, { status: 400 });
|
|
44
|
-
* }
|
|
45
|
-
* }
|
|
46
|
-
* ```
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* // Input JSX
|
|
51
|
-
* const jsxSource = `
|
|
52
|
-
* export const meta = {
|
|
53
|
-
* name: 'card',
|
|
54
|
-
* size: { width: 1200, height: 630 }
|
|
55
|
-
* };
|
|
56
|
-
*
|
|
57
|
-
* export default ({ tw, title }) => (
|
|
58
|
-
* <div style={tw('flex items-center justify-center w-full h-full bg-blue-500')}>
|
|
59
|
-
* <h1 style={tw('text-6xl font-bold text-white')}>{title}</h1>
|
|
60
|
-
* </div>
|
|
61
|
-
* );
|
|
62
|
-
* `;
|
|
63
|
-
*
|
|
64
|
-
* // Compile to plain JavaScript
|
|
65
|
-
* const compiled = compileTemplate(jsxSource);
|
|
66
|
-
*
|
|
67
|
-
* // compiled now contains React.createElement calls
|
|
68
|
-
* // You can safely use this with defineTemplateFromSource in production
|
|
69
|
-
* ```
|
|
70
|
-
*
|
|
71
|
-
* @param jsxSource - Template source code containing JSX syntax
|
|
72
|
-
* @returns Compiled JavaScript with React.createElement calls
|
|
73
|
-
* @throws Error if the JSX syntax is invalid or compilation fails
|
|
74
|
-
*/
|
|
75
|
-
export function compileTemplate(jsxSource) {
|
|
76
|
-
try {
|
|
77
|
-
const result = Babel.transform(jsxSource, {
|
|
78
|
-
presets: ['react'],
|
|
79
|
-
filename: 'template.tsx',
|
|
80
|
-
});
|
|
81
|
-
if (!result.code) {
|
|
82
|
-
throw new Error('Babel compilation returned empty code');
|
|
83
|
-
}
|
|
84
|
-
return result.code;
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
throw new Error(`Failed to compile JSX template: ${error instanceof Error ? error.message : String(error)}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Check if source code contains JSX syntax
|
|
92
|
-
*
|
|
93
|
-
* This is a simple heuristic check that looks for common JSX patterns.
|
|
94
|
-
* Use this to determine if source code needs compilation.
|
|
95
|
-
*
|
|
96
|
-
* @example
|
|
97
|
-
* ```typescript
|
|
98
|
-
* const code1 = '<div>Hello</div>';
|
|
99
|
-
* const code2 = 'React.createElement("div", null, "Hello")';
|
|
100
|
-
*
|
|
101
|
-
* containsJSX(code1); // true
|
|
102
|
-
* containsJSX(code2); // false
|
|
103
|
-
* ```
|
|
104
|
-
*
|
|
105
|
-
* @param sourceCode - Source code to check
|
|
106
|
-
* @returns true if the code appears to contain JSX
|
|
107
|
-
*/
|
|
108
|
-
export function containsJSX(sourceCode) {
|
|
109
|
-
// Look for JSX-like patterns:
|
|
110
|
-
// - Opening tags: <div, <Component
|
|
111
|
-
// - Self-closing tags: <div />, <Component />
|
|
112
|
-
// - JSX fragments: <>, </>
|
|
113
|
-
const jsxPatterns = [
|
|
114
|
-
/<[A-Za-z][A-Za-z0-9]*\s/, // <div , <Component
|
|
115
|
-
/<[A-Za-z][A-Za-z0-9]*>/, // <div>, <Component>
|
|
116
|
-
/<[A-Za-z][A-Za-z0-9]*\s*\/>/, // <div/>, <Component />
|
|
117
|
-
/<>\s*/, // Fragment opening
|
|
118
|
-
/<\/>\s*/, // Fragment closing
|
|
119
|
-
];
|
|
120
|
-
return jsxPatterns.some((pattern) => pattern.test(sourceCode));
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=compiler.js.map
|
package/dist/sdk/compiler.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/sdk/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;YACxC,OAAO,EAAE,CAAC,OAAO,CAAC;YAClB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,8BAA8B;IAC9B,mCAAmC;IACnC,8CAA8C;IAC9C,2BAA2B;IAC3B,MAAM,WAAW,GAAG;QAClB,yBAAyB,EAAE,oBAAoB;QAC/C,wBAAwB,EAAE,qBAAqB;QAC/C,6BAA6B,EAAE,wBAAwB;QACvD,OAAO,EAAE,mBAAmB;QAC5B,SAAS,EAAE,mBAAmB;KAC/B,CAAC;IAEF,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
package/dist/sdk/edge/index.d.ts
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loopwind SDK for Edge Runtimes (Cloudflare Workers, Vercel Edge, etc.)
|
|
3
|
-
*
|
|
4
|
-
* This module provides image rendering without Node.js dependencies.
|
|
5
|
-
* Uses @resvg/resvg-wasm instead of @resvg/resvg-js.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { renderImage, defineTemplate } from 'loopwind/sdk/edge';
|
|
10
|
-
*
|
|
11
|
-
* const template = defineTemplate({
|
|
12
|
-
* name: 'og-image',
|
|
13
|
-
* size: { width: 1200, height: 630 },
|
|
14
|
-
* render: ({ tw, title }) => <div style={tw('flex')}>{title}</div>
|
|
15
|
-
* });
|
|
16
|
-
*
|
|
17
|
-
* const png = await renderImage(template, { title: 'Hello' });
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
import type { DesignConfig } from '../../types/config.js';
|
|
21
|
-
export type { TemplateMeta, TemplateProps } from '../../types/template.js';
|
|
22
|
-
export type { DesignConfig } from '../../types/config.js';
|
|
23
|
-
export { defineTemplate, defineTemplateFromSchema } from '../template.js';
|
|
24
|
-
export type { TemplateDefinition, StyleConfig, TemplateSchema, SchemaElement } from '../template.js';
|
|
25
|
-
/**
|
|
26
|
-
* Initialize WASM module (called automatically on first render)
|
|
27
|
-
*/
|
|
28
|
-
export declare function initResvgWasm(): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Render options for edge image generation
|
|
31
|
-
*/
|
|
32
|
-
export interface RenderImageOptions {
|
|
33
|
-
format?: 'png' | 'svg';
|
|
34
|
-
scale?: number;
|
|
35
|
-
fonts?: FontConfig[];
|
|
36
|
-
config?: DesignConfig;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Font configuration for rendering
|
|
40
|
-
*/
|
|
41
|
-
export interface FontConfig {
|
|
42
|
-
name: string;
|
|
43
|
-
data: ArrayBuffer;
|
|
44
|
-
weight?: number;
|
|
45
|
-
style?: 'normal' | 'italic';
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Template definition for edge rendering
|
|
49
|
-
*/
|
|
50
|
-
export interface EdgeTemplateDefinition<TProps = Record<string, unknown>> {
|
|
51
|
-
name: string;
|
|
52
|
-
description?: string;
|
|
53
|
-
type?: 'image';
|
|
54
|
-
size: {
|
|
55
|
-
width: number;
|
|
56
|
-
height: number;
|
|
57
|
-
};
|
|
58
|
-
config?: DesignConfig;
|
|
59
|
-
render: (props: TProps & EdgeTemplateProps) => JSX.Element;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Props passed to edge template render function
|
|
63
|
-
*/
|
|
64
|
-
export interface EdgeTemplateProps {
|
|
65
|
-
tw: (classes: string) => React.CSSProperties;
|
|
66
|
-
config?: DesignConfig;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Render an image from a template definition (Edge-compatible)
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* ```typescript
|
|
73
|
-
* const template = {
|
|
74
|
-
* name: 'og-image',
|
|
75
|
-
* size: { width: 1200, height: 630 },
|
|
76
|
-
* render: ({ tw, title }) => (
|
|
77
|
-
* <div style={tw('flex items-center justify-center w-full h-full bg-black')}>
|
|
78
|
-
* <h1 style={tw('text-6xl font-bold text-white')}>{title}</h1>
|
|
79
|
-
* </div>
|
|
80
|
-
* )
|
|
81
|
-
* };
|
|
82
|
-
*
|
|
83
|
-
* const png = await renderImage(template, { title: 'Hello World' });
|
|
84
|
-
* ```
|
|
85
|
-
*/
|
|
86
|
-
export declare function renderImage<TProps = Record<string, unknown>>(template: EdgeTemplateDefinition<TProps>, props: TProps, options?: RenderImageOptions): Promise<ArrayBuffer>;
|
|
87
|
-
/**
|
|
88
|
-
* Render to SVG only (no WASM needed)
|
|
89
|
-
*/
|
|
90
|
-
export declare function renderSVG<TProps = Record<string, unknown>>(template: EdgeTemplateDefinition<TProps>, props: TProps, options?: Omit<RenderImageOptions, 'format'>): Promise<string>;
|
|
91
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/edge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKrG;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BnD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,KAAK,GAAG,CAAC,OAAO,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,aAAa,CAAC;IAC7C,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AA+CD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,CAAC,CAmDtB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,GAC/C,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
|
package/dist/sdk/edge/index.js
DELETED
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loopwind SDK for Edge Runtimes (Cloudflare Workers, Vercel Edge, etc.)
|
|
3
|
-
*
|
|
4
|
-
* This module provides image rendering without Node.js dependencies.
|
|
5
|
-
* Uses @resvg/resvg-wasm instead of @resvg/resvg-js.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { renderImage, defineTemplate } from 'loopwind/sdk/edge';
|
|
10
|
-
*
|
|
11
|
-
* const template = defineTemplate({
|
|
12
|
-
* name: 'og-image',
|
|
13
|
-
* size: { width: 1200, height: 630 },
|
|
14
|
-
* render: ({ tw, title }) => <div style={tw('flex')}>{title}</div>
|
|
15
|
-
* });
|
|
16
|
-
*
|
|
17
|
-
* const png = await renderImage(template, { title: 'Hello' });
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
import satori from 'satori';
|
|
21
|
-
import { Resvg, initWasm } from '@resvg/resvg-wasm';
|
|
22
|
-
// @ts-ignore - WASM import handled by bundler
|
|
23
|
-
import resvgWasm from '@resvg/resvg-wasm/index_bg.wasm?init';
|
|
24
|
-
import { tw as createTwHelper } from '../../lib/tailwind.js';
|
|
25
|
-
// Re-export template definition helpers (these don't use Node.js APIs)
|
|
26
|
-
export { defineTemplate, defineTemplateFromSchema } from '../template.js';
|
|
27
|
-
let wasmInitialized = false;
|
|
28
|
-
let wasmInitPromise = null;
|
|
29
|
-
/**
|
|
30
|
-
* Initialize WASM module (called automatically on first render)
|
|
31
|
-
*/
|
|
32
|
-
export async function initResvgWasm() {
|
|
33
|
-
if (wasmInitialized)
|
|
34
|
-
return;
|
|
35
|
-
if (wasmInitPromise) {
|
|
36
|
-
await wasmInitPromise;
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
wasmInitPromise = (async () => {
|
|
40
|
-
try {
|
|
41
|
-
// Try to initialize with the bundled WASM
|
|
42
|
-
if (typeof resvgWasm === 'function') {
|
|
43
|
-
const wasmModule = await resvgWasm();
|
|
44
|
-
await initWasm(wasmModule);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
await initWasm(resvgWasm);
|
|
48
|
-
}
|
|
49
|
-
wasmInitialized = true;
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
// If already initialized, ignore
|
|
53
|
-
if (String(error).includes('already been initialized')) {
|
|
54
|
-
wasmInitialized = true;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
})();
|
|
61
|
-
await wasmInitPromise;
|
|
62
|
-
}
|
|
63
|
-
// Font cache
|
|
64
|
-
let fontCache = null;
|
|
65
|
-
/**
|
|
66
|
-
* Load default Inter font from CDN
|
|
67
|
-
*/
|
|
68
|
-
async function loadDefaultFonts() {
|
|
69
|
-
if (fontCache)
|
|
70
|
-
return fontCache;
|
|
71
|
-
const fonts = [];
|
|
72
|
-
try {
|
|
73
|
-
// Load Inter Regular
|
|
74
|
-
const regularResponse = await fetch('https://cdn.jsdelivr.net/npm/@fontsource/inter@5.0.18/files/inter-latin-400-normal.woff2');
|
|
75
|
-
if (regularResponse.ok) {
|
|
76
|
-
fonts.push({
|
|
77
|
-
name: 'Inter',
|
|
78
|
-
data: await regularResponse.arrayBuffer(),
|
|
79
|
-
weight: 400,
|
|
80
|
-
style: 'normal',
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
// Load Inter Bold
|
|
84
|
-
const boldResponse = await fetch('https://cdn.jsdelivr.net/npm/@fontsource/inter@5.0.18/files/inter-latin-700-normal.woff2');
|
|
85
|
-
if (boldResponse.ok) {
|
|
86
|
-
fonts.push({
|
|
87
|
-
name: 'Inter',
|
|
88
|
-
data: await boldResponse.arrayBuffer(),
|
|
89
|
-
weight: 700,
|
|
90
|
-
style: 'normal',
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
console.warn('Failed to load default fonts:', error);
|
|
96
|
-
}
|
|
97
|
-
fontCache = fonts;
|
|
98
|
-
return fonts;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Render an image from a template definition (Edge-compatible)
|
|
102
|
-
*
|
|
103
|
-
* @example
|
|
104
|
-
* ```typescript
|
|
105
|
-
* const template = {
|
|
106
|
-
* name: 'og-image',
|
|
107
|
-
* size: { width: 1200, height: 630 },
|
|
108
|
-
* render: ({ tw, title }) => (
|
|
109
|
-
* <div style={tw('flex items-center justify-center w-full h-full bg-black')}>
|
|
110
|
-
* <h1 style={tw('text-6xl font-bold text-white')}>{title}</h1>
|
|
111
|
-
* </div>
|
|
112
|
-
* )
|
|
113
|
-
* };
|
|
114
|
-
*
|
|
115
|
-
* const png = await renderImage(template, { title: 'Hello World' });
|
|
116
|
-
* ```
|
|
117
|
-
*/
|
|
118
|
-
export async function renderImage(template, props, options = {}) {
|
|
119
|
-
const { format = 'png', scale = 2, fonts: customFonts, config } = options;
|
|
120
|
-
// Merge configs
|
|
121
|
-
const mergedConfig = {
|
|
122
|
-
...template.config,
|
|
123
|
-
...config,
|
|
124
|
-
colors: { ...template.config?.colors, ...config?.colors },
|
|
125
|
-
fonts: { ...template.config?.fonts, ...config?.fonts },
|
|
126
|
-
};
|
|
127
|
-
// Create tw helper
|
|
128
|
-
const tw = (classes) => createTwHelper(classes, undefined, mergedConfig);
|
|
129
|
-
// Load fonts
|
|
130
|
-
const fonts = customFonts || await loadDefaultFonts();
|
|
131
|
-
// Render to SVG with satori
|
|
132
|
-
const svg = await satori(template.render({ ...props, tw, config: mergedConfig }), {
|
|
133
|
-
width: template.size.width,
|
|
134
|
-
height: template.size.height,
|
|
135
|
-
fonts: fonts.map(f => ({
|
|
136
|
-
name: f.name,
|
|
137
|
-
data: f.data,
|
|
138
|
-
weight: f.weight || 400,
|
|
139
|
-
style: f.style || 'normal',
|
|
140
|
-
})),
|
|
141
|
-
});
|
|
142
|
-
if (format === 'svg') {
|
|
143
|
-
return new TextEncoder().encode(svg).buffer;
|
|
144
|
-
}
|
|
145
|
-
// Initialize WASM if needed
|
|
146
|
-
await initResvgWasm();
|
|
147
|
-
// Convert to PNG using resvg-wasm
|
|
148
|
-
const resvg = new Resvg(svg, {
|
|
149
|
-
fitTo: {
|
|
150
|
-
mode: 'width',
|
|
151
|
-
value: Math.round(template.size.width * scale),
|
|
152
|
-
},
|
|
153
|
-
});
|
|
154
|
-
const pngData = resvg.render();
|
|
155
|
-
const pngBuffer = pngData.asPng();
|
|
156
|
-
return pngBuffer.buffer;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Render to SVG only (no WASM needed)
|
|
160
|
-
*/
|
|
161
|
-
export async function renderSVG(template, props, options = {}) {
|
|
162
|
-
const { fonts: customFonts, config } = options;
|
|
163
|
-
// Merge configs
|
|
164
|
-
const mergedConfig = {
|
|
165
|
-
...template.config,
|
|
166
|
-
...config,
|
|
167
|
-
colors: { ...template.config?.colors, ...config?.colors },
|
|
168
|
-
fonts: { ...template.config?.fonts, ...config?.fonts },
|
|
169
|
-
};
|
|
170
|
-
// Create tw helper
|
|
171
|
-
const tw = (classes) => createTwHelper(classes, undefined, mergedConfig);
|
|
172
|
-
// Load fonts
|
|
173
|
-
const fonts = customFonts || await loadDefaultFonts();
|
|
174
|
-
// Render to SVG with satori
|
|
175
|
-
const svg = await satori(template.render({ ...props, tw, config: mergedConfig }), {
|
|
176
|
-
width: template.size.width,
|
|
177
|
-
height: template.size.height,
|
|
178
|
-
fonts: fonts.map(f => ({
|
|
179
|
-
name: f.name,
|
|
180
|
-
data: f.data,
|
|
181
|
-
weight: f.weight || 400,
|
|
182
|
-
style: f.style || 'normal',
|
|
183
|
-
})),
|
|
184
|
-
});
|
|
185
|
-
return svg;
|
|
186
|
-
}
|
|
187
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sdk/edge/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/index.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { TemplateDefinition, StyleConfig } from './template.js';
|
|
2
|
-
export { defineTemplate, defineTemplateFromSource, defineTemplateFromSchema } from './template.js';
|
|
3
|
-
export type { TemplateDefinition, StyleConfig, TemplateSchema, SchemaElement } from './template.js';
|
|
4
|
-
export { previewVideo, VideoPreview } from './preview.js';
|
|
5
|
-
export type { PreviewFrames, VideoPreviewProps } from './preview.js';
|
|
6
|
-
/**
|
|
7
|
-
* Render options for image generation
|
|
8
|
-
*/
|
|
9
|
-
export interface RenderImageOptions {
|
|
10
|
-
format?: 'png' | 'jpeg' | 'jpg' | 'webp' | 'svg';
|
|
11
|
-
quality?: number;
|
|
12
|
-
config?: StyleConfig;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Render options for video generation
|
|
16
|
-
*/
|
|
17
|
-
export interface RenderVideoOptions {
|
|
18
|
-
quality?: number;
|
|
19
|
-
onProgress?: (frame: number, total: number, phase?: 'svg' | 'encode') => void;
|
|
20
|
-
config?: StyleConfig;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Render an image from a template definition
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const template = defineTemplate({
|
|
28
|
-
* name: 'og-image',
|
|
29
|
-
* size: { width: 1200, height: 630 },
|
|
30
|
-
* render: ({ tw, title }) => <div style={tw('flex')}>{title}</div>
|
|
31
|
-
* });
|
|
32
|
-
*
|
|
33
|
-
* const png = await renderImage(template, { title: 'Hello World' });
|
|
34
|
-
* // Returns Buffer containing PNG data
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export declare function renderImage<TProps = any>(template: TemplateDefinition<TProps>, props: TProps, options?: RenderImageOptions): Promise<Buffer>;
|
|
38
|
-
/**
|
|
39
|
-
* Render a video from a template definition
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* ```typescript
|
|
43
|
-
* const template = defineTemplate({
|
|
44
|
-
* name: 'intro-video',
|
|
45
|
-
* type: 'video',
|
|
46
|
-
* size: { width: 1920, height: 1080 },
|
|
47
|
-
* video: { fps: 30, duration: 3 },
|
|
48
|
-
* render: ({ tw, progress, title }) => (
|
|
49
|
-
* <div style={tw('flex items-center justify-center w-full h-full bg-black')}>
|
|
50
|
-
* <h1 style={{ ...tw('text-8xl font-bold text-white'), opacity: progress }}>
|
|
51
|
-
* {title}
|
|
52
|
-
* </h1>
|
|
53
|
-
* </div>
|
|
54
|
-
* )
|
|
55
|
-
* });
|
|
56
|
-
*
|
|
57
|
-
* const mp4 = await renderVideo(template, { title: 'Hello' });
|
|
58
|
-
* // Returns Buffer containing MP4 data
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
export declare function renderVideo<TProps = any>(template: TemplateDefinition<TProps>, props: TProps, options?: RenderVideoOptions): Promise<Buffer>;
|
|
62
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/sdk/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQrE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACnG,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IAC9E,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAAC,MAAM,GAAG,GAAG,EAC5C,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAoDjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,WAAW,CAAC,MAAM,GAAG,GAAG,EAC5C,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,EACpC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
|
package/dist/sdk/index.js
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { renderToSVG, renderToPNG, renderToJPEG, renderToWebP } from '../lib/renderer.js';
|
|
2
|
-
import { templateToMeta } from './template.js';
|
|
3
|
-
import { renderVideo as renderVideoInternal } from '../lib/video-renderer.js';
|
|
4
|
-
import fs from 'fs/promises';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import os from 'os';
|
|
7
|
-
export { defineTemplate, defineTemplateFromSource, defineTemplateFromSchema } from './template.js';
|
|
8
|
-
export { previewVideo, VideoPreview } from './preview.js';
|
|
9
|
-
/**
|
|
10
|
-
* Render an image from a template definition
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* const template = defineTemplate({
|
|
15
|
-
* name: 'og-image',
|
|
16
|
-
* size: { width: 1200, height: 630 },
|
|
17
|
-
* render: ({ tw, title }) => <div style={tw('flex')}>{title}</div>
|
|
18
|
-
* });
|
|
19
|
-
*
|
|
20
|
-
* const png = await renderImage(template, { title: 'Hello World' });
|
|
21
|
-
* // Returns Buffer containing PNG data
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export async function renderImage(template, props, options = {}) {
|
|
25
|
-
const { format = 'png', quality = 92, config } = options;
|
|
26
|
-
const meta = templateToMeta(template);
|
|
27
|
-
if (meta.type === 'video') {
|
|
28
|
-
throw new Error('Cannot render video template as image. Use renderVideo() instead.');
|
|
29
|
-
}
|
|
30
|
-
// Save template to temp file so we can use the existing renderer
|
|
31
|
-
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'loopwind-sdk-'));
|
|
32
|
-
const templatePath = path.join(tempDir, 'template.tsx');
|
|
33
|
-
try {
|
|
34
|
-
// Write template component with embedded meta
|
|
35
|
-
const templateContent = `import React from 'react';
|
|
36
|
-
|
|
37
|
-
const h = React.createElement;
|
|
38
|
-
|
|
39
|
-
export const meta = ${JSON.stringify(meta, null, 2)};
|
|
40
|
-
|
|
41
|
-
export default ${template.render.toString()};`;
|
|
42
|
-
await fs.writeFile(templatePath, templateContent);
|
|
43
|
-
// Merge configs: options.config overrides template.config (deep merge for colors/fonts)
|
|
44
|
-
const mergedConfig = {
|
|
45
|
-
...template.config,
|
|
46
|
-
...config,
|
|
47
|
-
colors: { ...template.config?.colors, ...config?.colors },
|
|
48
|
-
fonts: { ...template.config?.fonts, ...config?.fonts },
|
|
49
|
-
};
|
|
50
|
-
// Use existing renderer and pass config directly (no filesystem writes!)
|
|
51
|
-
// Pass absolute template path instead of template name
|
|
52
|
-
if (format === 'svg') {
|
|
53
|
-
const svg = await renderToSVG(templatePath, props, { config: mergedConfig });
|
|
54
|
-
return Buffer.from(svg);
|
|
55
|
-
}
|
|
56
|
-
else if (format === 'jpeg' || format === 'jpg') {
|
|
57
|
-
const buffer = await renderToJPEG(templatePath, props, { quality, config: mergedConfig });
|
|
58
|
-
return buffer;
|
|
59
|
-
}
|
|
60
|
-
else if (format === 'webp') {
|
|
61
|
-
const buffer = await renderToWebP(templatePath, props, { config: mergedConfig });
|
|
62
|
-
// Note: renderToWebP doesn't take quality param, uses fixed 90
|
|
63
|
-
return buffer;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
// PNG
|
|
67
|
-
const buffer = await renderToPNG(templatePath, props, { config: mergedConfig });
|
|
68
|
-
return buffer;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
// Cleanup temp files
|
|
73
|
-
await fs.rm(tempDir, { recursive: true, force: true });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Render a video from a template definition
|
|
78
|
-
*
|
|
79
|
-
* @example
|
|
80
|
-
* ```typescript
|
|
81
|
-
* const template = defineTemplate({
|
|
82
|
-
* name: 'intro-video',
|
|
83
|
-
* type: 'video',
|
|
84
|
-
* size: { width: 1920, height: 1080 },
|
|
85
|
-
* video: { fps: 30, duration: 3 },
|
|
86
|
-
* render: ({ tw, progress, title }) => (
|
|
87
|
-
* <div style={tw('flex items-center justify-center w-full h-full bg-black')}>
|
|
88
|
-
* <h1 style={{ ...tw('text-8xl font-bold text-white'), opacity: progress }}>
|
|
89
|
-
* {title}
|
|
90
|
-
* </h1>
|
|
91
|
-
* </div>
|
|
92
|
-
* )
|
|
93
|
-
* });
|
|
94
|
-
*
|
|
95
|
-
* const mp4 = await renderVideo(template, { title: 'Hello' });
|
|
96
|
-
* // Returns Buffer containing MP4 data
|
|
97
|
-
* ```
|
|
98
|
-
*/
|
|
99
|
-
export async function renderVideo(template, props, options = {}) {
|
|
100
|
-
const { config, ...renderOptions } = options;
|
|
101
|
-
const meta = templateToMeta(template);
|
|
102
|
-
if (meta.type !== 'video') {
|
|
103
|
-
throw new Error('Cannot render image template as video. Use renderImage() instead.');
|
|
104
|
-
}
|
|
105
|
-
if (!meta.video) {
|
|
106
|
-
throw new Error('Template is missing video metadata (fps, duration)');
|
|
107
|
-
}
|
|
108
|
-
// Save template to temp file so we can use the existing renderer
|
|
109
|
-
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'loopwind-sdk-'));
|
|
110
|
-
const templatePath = path.join(tempDir, 'template.tsx');
|
|
111
|
-
const outputPath = path.join(tempDir, 'output.mp4');
|
|
112
|
-
try {
|
|
113
|
-
// Write template component with embedded meta
|
|
114
|
-
const templateContent = `import React from 'react';
|
|
115
|
-
|
|
116
|
-
const h = React.createElement;
|
|
117
|
-
|
|
118
|
-
export const meta = ${JSON.stringify(meta, null, 2)};
|
|
119
|
-
|
|
120
|
-
export default ${template.render.toString()};`;
|
|
121
|
-
await fs.writeFile(templatePath, templateContent);
|
|
122
|
-
// Merge configs: options.config overrides template.config (deep merge for colors/fonts)
|
|
123
|
-
const mergedConfig = {
|
|
124
|
-
...template.config,
|
|
125
|
-
...config,
|
|
126
|
-
colors: { ...template.config?.colors, ...config?.colors },
|
|
127
|
-
fonts: { ...template.config?.fonts, ...config?.fonts },
|
|
128
|
-
};
|
|
129
|
-
// Use existing video renderer and pass config directly (no filesystem writes!)
|
|
130
|
-
// Pass absolute template path instead of template name
|
|
131
|
-
await renderVideoInternal(templatePath, props, outputPath, { ...renderOptions, config: mergedConfig });
|
|
132
|
-
// Read the generated MP4
|
|
133
|
-
const buffer = await fs.readFile(outputPath);
|
|
134
|
-
return buffer;
|
|
135
|
-
}
|
|
136
|
-
finally {
|
|
137
|
-
// Cleanup temp files
|
|
138
|
-
await fs.rm(tempDir, { recursive: true, force: true });
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=index.js.map
|
package/dist/sdk/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"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"}
|