CDN for widgets, themes, apps and services Made to work with SuperNote
- Server.js - entry point (Orchestrator)
- Router.js - All routes are written here in simplest protocol form
[protocol, payloadStructure, responseStructure]
(for complicated structures keep in extra files/folders) - /Router folder - each route handler is a file
- /Helper folder - for any helper/utility functions
- /Services folder - for any database or other service related code
Home page assets are now split into files under /Home:
- /Home/index.html - root page markup shell
- /Home/home.css - root page styles
- /Home/home.js - root page client behavior
Current homepage scope:
- API list
- Metadata search, type filter, and sort (powered by
GET /meta) - Widget playground is intentionally skipped for now
local data folder -
Folder structure is just for readabilty not used in server logic.
Server only cares about the meta.json files.
In production mostly Widgets, Themes, apps and services mostly come from remote repositories.
- /Widgets folder - widgets use html,css,js (mostly) (atoms, varients and components)
3 catogaries - Widgets , WidgetVariant , WidgetTheme - /Themes folder - all themes are defined here - css (mostly)
- /Services folder - all services are defined here - js (mostly)
- /Apps folder - all apps are defined here (fully functional entity) - html,css,js (mostly)
- /Atoms folder - all atomic widgets and varients are kept here
- /Components folder - all components are kept here (combination of 1 or more atomic widgets)
- slug - is a unique identifier (versions not included)
"slug": "{Entity-Type}>{Entity-Family}>{Entity-Identifier}"
example =>
"slug": "widget>design-system>Atom.button.icon"- version - is a unique identifier (slug+version = complete-entity-reference)
example => "version": "1.0.0" //<major ver>.<minor ver>.<patch ver>
slug+version = complete-entity-reference
example => "widget>design-system>Atom.input@1.0.0"-
GET /meta- returns list of meta//Body { page: 0 //default pageSize: 100 //default filter: [ {operator:"OpenBracket"}, {value: "component" , operator: "in", field: "description"}, {operator:"AND"}, {value: "widget>design-system>" , operator: "startsWith", field: "slug"} {operator:"CloseBracket"} ], sort:[ {field:"name", order:"asc"}, {field:"version", order:"desc"} ] }
-
GET /meta/:slug- returns list of meta -
GET /meta/:slug/:version- returns single meta -
GET /summary
//Responce
{
"Widgets": {
"count": <number>,
"families": [<slug>,...]
},
"Themes":{
"count": <number>,
"families": [<slug>,...]
},
"Services":{
"count": <number>,
"families": [<slug>,...]
},
"Apps":{
"count": <number>,
"families": [<slug>,...]
},
}-
GET /plugin-full/<slug>/<version>- returns not-minified resolved version of plugin. -
GET /plugin-full/<slug>/<version>/:file- returns not-minified file. -
GET /plugin/<slug>/<version>- returns minified resolved version of plugin. -
GET /plugin/<slug>/<version>/:file- returns the file minified -
POST /plugin/<slug>/<version>- checks if same exists -
if yes - returns error msg.
if no - add metaJSON to registry
//body - metajsonGET /verify/local-registry- reconciles localmeta.jsonfiles with the local registry - adds any missing local meta rows - marksinvalid_flag=truefor registry rows where local meta was deletedjson //Response { "ok": true, "message": "local registry verification complete", "data": { "scannedCount": 8, "parseErrors": [], "insertedCount": 1, "updatedCount": 7, "markedInvalidCount": 2, "revalidatedCount": 1, "invalidTotal": 2 } }
GET /meta,GET /meta/:slug,GET /meta/:slug/:version- query:
includeInvalid=trueto include invalidated local rows/meta/widget%3Edesign-system%3EAtom.demo?includeInvalid=true
- query:
- Server runs on constant port (use 3005) - use Bun.serve()
- onBootup
- create/use a database with all available meta.json files
- key -
<slug> + <version> - capable of
GET /metapage, filter and sort operations
- Registry database:
registry/registry.sqlite3(Bun SQLite). - SQLite side files like
registry.sqlite3-walandregistry.sqlite3-shmmay be created by runtime. POST /plugin/:slug/:versionstores entries in SQLite assource_type=posted.- Local file derived entries are stored as
source_type=localand reconciled viaGET /verify/local-registry. - In v1,
/pluginreturns minified file content and/plugin-fullreturns original content.
GET /serves the Home assets via Router home handler.- Home displays API list and simple metadata explorer (search/filter/sort).
- Home does not include widget playground in this version.
//Registry JSON sample format
{
// <slug>:<version>:<metaFileContent>
//example =>
"widget>design-system>Atom.input":{
"1.0.0": {
"name": "Input",
"version": "1.0.0",
"slug": "widget>design-system>Atom.input",
"description": "An input component for consistent UI development.",
"baseURL": "Data/Widgets/DesignSystem/Atoms/Input/Core",
"baseType": "local",
"files": [
{"url": "${baseURL}/Input.js", "entry": true},
{"url": "${baseURL}/Input.html"},
{"url": "${baseURL}/Input.css"}
]
}
}
}