Bu sayfa Lolly'nin kodunu değiştiren kişiler içindir: motorun, kabukların ve araç paketlerinin nasıl bir araya geldiği, her birinin depoda nerede durduğu ve her değişikliği kısıtlayan taahhütler. Lolly'nin ne yaptığını ve onu kimlerin kullandığını bilmek istiyorsan önce How Lolly works sayfasını oku.
İki yardımcı kaynak daha derine iner. engine/README.md, koddan üretilen, modül modül motor haritasıdır. Threat Model & Trust Boundaries aynı mimariyi güven sınırları olarak okur ve motorun neyi güvenilmez saydığıyla ilgili her soru için doğru sayfadır.
Genel resim
Araçlar en üstte veridir. Ortadaki motor hiçbir platform hakkında bir şey bilmez. En alttaki kabuklar tek bir sözleşmeyi uygular ve kataloglar içeriği sağlar.
Onu saf veri ve Handlebars ile tarif edebiliyorsan motora aittir. DOM'a, dosya sistemine, ağa ya da herhangi bir tarayıcı veya işletim sistemi API'sine dokunuyorsa ana bilgisayara (host), yani köprünün kabuk tarafına aittir. Motor açık kaynaktır ve belirli bir markayı veya platformu bilen hiçbir şey motora girmez.
Depo yapısı
Lolly tek bir depodur. Aşağıdaki her dizin, SUSE araç paketini ve kataloğunu tutan, herkese açık bir klonun getirmediği özel bir git alt modülü olan brands/suse dışında, içinde düz bir dizindir. Bir derlemenin hangi paketleri okuduğu bir içerik profilidir (profiles.json) ve küresel olarak değiştirilmek yerine süreç başına çözülür. Build Guide klonlama komutunu ve özel paket içindeki bir değişikliğin nasıl işlendiğini içerir.
| Dizin | Neyi tutar |
|---|---|
engine/ | Platformdan bağımsız çekirdek: yükleyici, çalışma zamanı, girdiler, şablonlar, URL modu, birimler ve biçim modülleri |
shells/ | Web uygulaması, Tauri masaüstü ve mobil uygulamaları, CLI, TUI ve tarayıcı uzantısı |
packages/ | Araç yazarı SDK'sı (@lolly-tools/core), paylaşılan Node kabuk parçaları ve belge oluşturucusu, diğerleri arasında |
community/ | Markadan bağımsız araçlar ve paylaşılan emoji paketleri |
brands/ | Marka paketleri: lolly-demo (Lolly Demo, lolly.tools'un çalıştırdığı tasarım sistemi), lolly-start (boş başlangıç) ve özel suse |
services/ | İsteğe bağlı MCP, sertifika ve Penpot hizmetleri ve paylaştıkları sunucu kodu |
schemas/ | Araç bildirimleri, varlık girişleri ve varlık başvuruları için JSON Schema |
scripts/, tests/, docs/, api/ | Derleme ve katalog betikleri, motor test paketi, bu belgeler ve üretilmiş sunucusuz paketler |
İlk karşılaşacağın motor ve kabuk dosyaları
engine/src/
index.ts public surface: loader, runtime, template, inputs, url-mode
loader.ts fetches and validates tool files
runtime.ts orchestrates one mounted tool, from load to export
template.ts Handlebars hydration and annotateTemplate
inputs.ts manifest to runtime input model
url-mode.ts URL to input state and back
validate.ts JSON Schema validation of manifests
compose.ts nested tool renders (composes)
embed.ts portable lolly.tools embed URLs
bridge/host-v1.ts type re-export of the @lolly-tools/core contract
shells/web/src/
main.ts boot and routing
bridge/ the web implementations of the host APIs
catalog/sync.ts boot-time catalog sync and offline cache
views/ the gallery, tool, projects, free canvas and the other views
pro/ Batch (#/batch)
shells/cli/ bin/lolly.ts (entry), src/run.ts (headless render), src/bridge.ts
shells/tui/ src/main.tsx (the full-screen app), src/bridge.tsDepo kökünde tools/ veya catalog/ dizini yoktur. packages/node-shell/src/content-roots.ts, "<id> aracı nerede yaşıyor" ve "katalog nerede" sorularını, sorulduğunda profiles.json üzerinden yanıtlar. Gerçek bir tools/ ve catalog/ çifti yalnızca dist/, bir RPM yükü veya bir kapsayıcı imajı gibi bir derleme çıktısına yazılır; çünkü bir tarayıcı bu iki yolu HTTP üzerinden getirir.
Lolly nerede çalışır
Her yüzey aynı motoru ve aynı araç dosyalarını kullanır.
- Web uygulaması. Hizmet çalışanı araçları ve varlıkları önbelleğe aldıktan sonra çevrimdışı çalışan bir aşamalı web uygulaması. Hesap gerektirmez; durum her cihazda IndexedDB içinde yaşar. Tek bir duyarlı düzen masaüstüne ve telefona hizmet eder: telefonda denetimler bir sayfa olur ve dışa aktarma denetimleri yüzen bir hapdan açılır.
- Masaüstü ve mobil uygulamalar. Aynı web uygulamasının, yerel dosya iletişim kutuları, dosya sistemi durumu ve tam çevrimdışı kullanımla Tauri paketleri.
- CLI.
lolly <tool-id> --input=value --output=file.pngaynı motoru arayüzsüz bir DOM'da yükler ve dosyayı yazar. Ayrı bir uygulama değil, farklı bir aktarım üzerinden URL modudur. Bkz. CLI. - TUI. CLI'nin köprüsünü yeniden kullanan, tam ekran, önce klavye odaklı bir terminal uygulaması; kayıtlı oturumları diskte tutar (uygulama kuruluysa masaüstü uygulamasının kendi klasöründe, aksi hâlde
~/.lollyaltında) ve arayüzsüz tarayıcıyı yalnızca bir biçim gerektirdiğinde sınırlı kapsamla başlatır. Bkz. TUI.
signed by Lollyvector SVG131 paths~6.1k nodes158 groups1 image142 KBCheck it yourselfİmzalı dosyayı al
Aynı araç telefon genişliğinde ikinci bir düzen gerektirmez: denetimler üstte bir sayfa olur ve önizleme ekranı tutar.
signed by Lollyvector SVG97 paths~3.3k nodes113 groups99 KBCheck it yourselfİmzalı dosyayı al
signed by Lollyvector SVG97 paths~3.3k nodes113 groups100 KBCheck it yourselfİmzalı dosyayı al
Web uygulaması ayrıca Batch ile (#/batch, shells/web/src/pro/) gelir; bir veya birçok araç boyunca aynı anda birçok satırı render eden elektronik tablo tarzı bir ızgara; Batch'i Batch and Multi-edit kapsar. Settings → Capabilities, platformun yapabildiğini bildirdiği her şeyi haritalar.
signed by Lollyvector SVG133 paths~15k nodes185 groups1 image195 KBCheck it yourselfİmzalı dosyayı al
signed by Lollyvector SVG133 paths~15k nodes185 groups1 image195 KBCheck it yourselfİmzalı dosyayı al
Mimari taahhütler
Bu kararlar yerleşiktir. Herhangi birini değiştirmek büyük bir iştir, çünkü kod tabanındaki diğer her kararı şekillendirirler.
1. Deklaratif araçlar, buyurgan bir kaçış kapısıyla
Bir araç bir bildirim (tool.json), bir şablon (template.html) ve isteğe bağlı hooks.js dosyasıdır. Girdileri bildirim bildirir, asla şablon değil: girdiler Handlebars belirteçlerinden çıkarılmaz. Araçların çoğu yalnızca bildirim ve şablondur; geliştirici olmayanların onları yazabilmesini sağlayan budur.
signed by Lollyvector SVG39 paths~2.6k nodes54 groups2 images43 KBCheck it yourselfİmzalı dosyayı al
signed by Lollyvector SVG39 paths~2.6k nodes54 groups2 images43 KBCheck it yourselfİmzalı dosyayı al
QR kodlama veya grafik şekillendirme gibi değer hesaplayan araçlar kancalar ekler: çalışma zamanının yetenek köprüsü enjekte edilerek çağırdığı adlandırılmış yaşam döngüsü işlevleri. Kancalar bir taşınabilirlik sözleşmesidir, güvenlik sanal alanı değil ve bir zaman bütçesi içinde çalışırlar. Kancaları sayfa globallerinden arınmış olduğu kanıtlanan araçlar isolate: true taşır ve bir Worker içinde çalışır. Tool hooks yaşam döngüsünü ve bütçeleri içerir; Threat Model sayfa içi yürütücünün neyi içerip neyi içermediğini söyler.
2. Araçlar ve varlıklar veridir, paketlenmiş kod değil
Web ve Tauri uygulamaları araç ve varlık kataloglarını açılışta getirir, önbelleğe alır ve orada ne varsa onunla çalışır; bu yüzden yeni bir araç veya varlık için uygulama sürümü gerekmez. Varlık baytları SHA-256 sağlama toplamlıdır ve bir varlığın id ve version değerleri önbellek geçersiz kılmayı yönetir.
3. Araçların gördüğü tek API yetenek köprüsüdür
Araçlar şablonlarının dışında DOM'a asla dokunmaz, fetch'i doğrudan asla çağırmaz ve dosya sistemini asla okumaz. Sürümlü host.* yöntemlerini çağırırlar. Sözleşmenin kurallı tanımı, araç yazarı SDK'sı @lolly-tools/core içindeki packages/core/src/host-v1.ts dosyasıdır; böylece üçüncü bir taraf motora bağımlı olmadan onun üzerine kurabilir; engine/src/bridge/host-v1.ts türlerini yeniden dışa aktarır.
| Gerekli API | Ne yapar |
|---|---|
host.profile | Kullanıcının ayrıntıları; bindToProfile ile girdileri önceden doldurur |
host.assets | Katalog sorguları, varlık çözümleme ve ana bilgisayarın seçicisi |
host.state | Girdi yuvalarını kaydet ve yükle: web'de IndexedDB, Tauri'de dosya sistemi, CLI'de bellek |
host.clipboard | Panoya metin veya görsel yaz, platform yedekleriyle |
host.export | Render hedefini rasterleştir veya serileştir ve cihaz üzerindeki dosya dönüştürme yolu |
host.log | Ana bilgisayara düzeyli günlükleme |
Diğer her API isteğe bağlı ve ekleyicidir: tokens, text, color, geom, pdf, compose, media, recorder ve çok daha fazlası. Bir aracın bildirimi, kancalarının önce denetlemeden çağırdığı isteğe bağlı API'leri requires altında listeler ve birinden yoksun bir ana bilgisayar aracı bağlamayı reddeder; kancalar geri kalanı özellik algılamayla bulur. recorder gibi birkaçı ayrıca aracın bildirdiği bir cihaz yeteneği gerektirir. packages/core/src/host-v1/apis.ts hepsini listeler ve Host API her birini belgelendirir. Bir yöntem eklemek küçük bir sürümdür; birini kaldırmak veya değiştirmek büyük bir sürümdür ve v2 yayımlandığında v1 çalışmaya devam eder.
4. Varlık kimlikleri sonsuza dek geçerlidir
lolly/logo/primary bir sözleşmedir. Yayımlandıktan sonra bir kimlik asla değişmez ve asla yeniden kullanılmaz. Bir bayt değişikliği varlık girişindeki version değerini artırır ve bir yedek deprecated: true ve isteğe bağlı olarak replacedBy ayarlar; böylece mevcut başvurular her zaman çözümlenir. Kayıtlı oturumları ve paylaşılan bağlantıları yıllarca çalışır tutan budur.
5. URL modu birinci sınıftır
Her girdi bir URL parametresi olarak ifade edilebilir, yani bir bağlantı bitmiş bir dosyadır:
https://lolly.tools/t/qr-code?url=https://example.com&ecl=H signed by Lollyvector SVG55 paths~2.6k nodes38 groups60 KBCheck it yourselfİmzalı dosyayı al
signed by Lollyvector SVG55 paths~2.6k nodes38 groups61 KBCheck it yourselfİmzalı dosyayı al
Bir parametreyi değiştir ve farklı bir dosyan olur. Bu paletin tamamı bir tohum rengi, bir uyum ve bir adım sayısıdır:
signed by Lollyvector SVG10 groups25 KBCheck it yourselfİmzalı dosyayı al
signed by Lollyvector SVG10 groups25 KBCheck it yourselfİmzalı dosyayı al
CLI aynı URL durumunu argümanlarından kurar ve aynı işlem hattını çalıştırır; bu yüzden CLI uygulamadan sapamaz. engine/src/url-mode.ts ayrıştırır ve serileştirir; ayrılmış adlar kümesi (format, width, dpi, c2pa, z ve diğerleri) bir araca asla geçirilmez ve Reserved URL parameters hepsini listeler. Varlık girdileri id ile taşınır ve şablon dolmadan önce host.assets.get() ile çözülür.
6. Depolama köprüden geçer
Web uygulaması IndexedDB, Tauri dosya sistemi ve CLI bellek kullanır. Araçlar yalnızca host.state.save(slot, data) ve host.state.load(slot) görür, asla localStorage değil. İnsanlar hesap olmadan araç başına birkaç adlandırılmış oturum tutabilir. Köprü tek dikiş olduğu için o durum taşınabilirdir de: shells/web/src/data-transfer.ts onu başka her kurulumda içe aktarılan tek bir lolly-backup dosyasına geri okur (Data transfer) ve Sync aynı paketi kişinin seçtiği depolamaya gönderir.
7. Olgunluk etiketleri bir aracın ne olduğunu söyler
Her araç status: official | community | experimental bildirir. Galeri duruma göre sıralar ve deneysel araçlar dışa aktarmalarını varsayılan olarak filigranlar: çağıran watermark: false vermedikçe çalışma zamanı filigranı açar ve cihaz üzerindeki araçlar muaftır. Bir ekibin kataloğun etrafına koyduğu her süreç bunun üstünde yer alır.
8. Girdiler bildirimde türlendirilir
Bir girdi bir type bildirir: text, longtext, number, boolean, color, select, asset, date, time, datetime-local, url, blocks, vector, table veya file. Ana bilgisayar tür başına bir denetim render eder, bu yüzden araçlar denetim kodu yazmaz ve her girdi bindToProfile taşıyabilir. Üçü en çok ağırlık taşır:
asset,filterveallowUploadile, varlık sistemine açılan köprüdür.allowUpload: falsebir yuvayı kitaplık varlıklarıyla sınırlar ve kullanıcı yüklemeleri kitaplığınAssetRefbiçimini paylaşır.blocks, bir yan panelde düzenlenen, Meeting Planner, Wayfinding, Diagrams ve diğerleri tarafından kullanılan yinelenen bir alan grubudur. Render edilmiş bir bloğa tıklamak satırına odaklanır.file, Strip Hidden Data ve Compress gibi cihaz üzerindeki yardımcı araçlar için kullanıcının kendi dosyasını bellekte tutar vevectorsabit bir sayı kümesini tek bir denetimde gruplar.
9. Şablonlar mantıksızdır
Şablonlar, geliştirici olmayanların yazabilmesi için seçilmiş Handlebars'tır: {{x}} kaçırır ve {{{x}}} açık bir tercihtir. Mantık, açık ve gözden geçirilebilir olduğu hooks.js içinde yaşar. Birçok şablon bir kancanın hesapladığı işaretleme için {{{ kullanır; bu yüzden her kanca teslim ettiğini kaçırmalıdır. Yardımcılar default, upper, lower, eq, markdown, asset, framing ve media ile kardeş .ics, .vcf ve .csv şablonları için icsStamp, rfcText, csvCell ve arrow'dur. Templates and rendering bunları kapsar.
10. Araçlar araçları bileştirir
Bir araç, araçtan araca içe aktarma olmadan başka bir aracın render'ını gömebilir; kompozisyonu motor çözer. Bir bildirim composes: [{ id, tool, inputs }] bildirebilir ve çocuğu {{asset <id>}} ile yerleştirebilir; taşınabilir bir gömme URL'si (https://lolly.tools/tool/<id>.svg?…) çocuğu yerelde render eder; Design'ın canlı bir QR kodu veya grafik yerleştirme biçimi budur. Bir SVG çocuğu, bir SVG veya PDF ebeveyninde vektör kalır. Çocuklar ara ürünlerdir, asla filigranlanmaz veya damgalanmaz ve birini render edemeyen bir kabuk, ebeveyn yine render edilirken yuvayı boş bırakır. Composition and brand overlays ayrıntıları içerir.
Yapmamayı seçtiklerimiz
- Şablonlarda keyfi JavaScript yok. Mantık
hooks.jsiçinde yaşar. - Zorunlu varlık sunucusu yok. İnsanlar uygulamadaki Assets'e kendi dosyalarını ekler ve işi bir oturum olarak devreder: girdiler ve ayarlar için bir paylaşım bağlantısı, yüklemeler de gittiğinde bir
.lollydosyası. Paylaşılan bir oturum, bir aracın seçicisinde şablon olabilir. Yönetilen bir katalog isteyen bir kuruluş Lolly Work'ün kataloğunu, onaylarını ve politikalarını kullanabilir ya da marka paketini git'te yönetip değişiklikleri orada inceleyebilir. - Zorunlu erişim denetimi yok. Açık uygulama varsayılan olarak herkese açıktır ve olgunluk etiketleri ile filigranlar marka riskini taşır. Kuruluş girişi, roller ve politika, bir ekip istediğinde Lolly Work'ten gelir.
- Merkezi veritabanı yok. Kullanıcı durumu her cihazda yaşar ve isteğe bağlı Sync onu kişinin seçtiği depolamaya kopyalar, asla bir Lolly veritabanına değil.
- Araçlar ve motor arasında paylaşılan kod yolu yok. Motor ve topluluk araçları açık kaynaktır ve özel
brands/suse/gibi bir marka paketi kendi araçlarını ve kataloğunu kendi koşulları altında taşır. Hiçbir araçengine/içinden içe aktarmaz, bu yüzden bölünme temiz kalır.
Bir render'ın yaşam döngüsü
Biri https://lolly.tools/t/qr-code?url=https://example.com&ecl=H adresini açar:
- Önyükleme. Web uygulaması IndexedDB'yi açar, yetenek köprüsünü kurar ve araç ile varlık kataloglarını eşitler ya da çevrimdışıyken önbellekten yükler.
- Rota. Yol,
qr-codeiçin araç görünümünü seçer; sorgu ilk değerleridir. - Yükle.
loadTooltool.jsondosyasını getirir, şemaya göre doğrular ve şablonu, stilleri ve kancaları getirir. - Bağlantıyı ayrıştır.
parseUrlStateparametreleri girdi değerlerine çevirir.?logo=lolly/logo/primarygibi bir varlık başvurusu çözülmemiş bir{ id }olur. - Çalışma zamanını başlat.
createRuntime(tool, host, initialValues)girdi modelini profil verisi, varsayılanlar ve bağlantıdan kurar, varlık başvurularını çözer, kancaları yükler veonInitçağırır. - Render. Kabuk çalışma zamanına abone olur, denetimleri modelden çizer ve doldurulmuş şablonu
#tool-canvasiçine yazar. - Etkileşim. Yazmak
runtime.setInputçağırır; o da kısıtları uygular,onInputçağırır, şablonu yeniden doldurur ve yeniden çizer. - Dışa aktar. Download,
runtime.export(node, format)çağırır ve kabuğunhost.exportdeğeri dosyayı üretir: bir raster, DOM yürüteçten bir vektör, bir PDF, bir belge veyaschemas/tool.schema.jsoniçindeki diğer biçimlerden biri. Fiziksel birimler biçim başına dönüştürülür ve meta veriler ile Content Credentials, biçimin tutabildiği yerde gömülür. Deneysel araçlar filigranlarını araçtan değil ana bilgisayardan alır. Dışa aktarma adımını Templates and rendering ve Export a file kapsar.
signed by Lollyvector SVG77 paths~6.0k nodes87 groups3 images88 KBCheck it yourselfİmzalı dosyayı al
signed by Lollyvector SVG77 paths~6.0k nodes87 groups3 images88 KBCheck it yourselfİmzalı dosyayı al
Aynı yaşam döngüsü Tauri'de ve çıktının bir dosyaya veya stdout'a gittiği arayüzsüz bir DOM'lu CLI'de çalışır.
Lisanslar
engine/, shells/, services/, schemas/ ve belge oluşturucusu dahil kod, tek bir herkese açık depoda, lolly-tools/lolly, MPL-2.0'dır. Belgeleme metni CC BY-SA 4.0'dır. Marka paketleri kendi koşullarını her paketin NOTICE.md dosyasında taşır: topluluk araçları MPL-2.0'dır ve özel SUSE paketi SUSE'ye özgü mülkiyettedir. About tam lisans notunu içerir.