From c1ea735a35f47ab33c66d1759f06a7925658f606 Mon Sep 17 00:00:00 2001 From: Cogi Date: Sun, 14 Jan 2024 21:26:46 +0900 Subject: [PATCH 1/2] temporary update --- .gitignore | 4 +- readme.kr.md | 21 ++++ readme.md | 2 +- src/client/src/client.ts | 26 ++++- .../src/component/db/card-item.component.ts | 87 ++++++++++++++ .../db/cluster-item-list.component.ts | 58 ++++++++++ .../db/database-item-list.component.ts | 58 ++++++++++ .../db/doc/database-doc.component.ts | 57 +++++++++ .../db/doc/table-doc.component copy.ts | 64 +++++++++++ .../db/recent-item-list.component.ts | 56 +++++++++ .../component/db/table-item-list.component.ts | 58 ++++++++++ src/client/src/component/erd.ts | 2 +- src/client/src/component/ui/logo.component.ts | 29 +++++ .../src/component/ui/search.component.ts | 29 +++++ src/server/src/index.ts | 53 ++++++--- src/server/static/css/color.default.css | 6 + src/server/static/css/font.default.css | 29 +++++ .../static/css/layouts/layout.default.css | 30 +++++ .../css/layouts/layout.documentation.css | 30 +++++ .../server/static/css/pages/database.css | 0 src/server/static/css/pages/home.css | 7 ++ src/server/static/img/logo.png | Bin 0 -> 31435 bytes src/server/static/templates/cluster.html | 0 src/server/static/templates/database.html | 108 ++++++++++++++++++ src/server/static/templates/home.html | 73 ++++++++++++ src/server/static/templates/index.html | 32 ++++-- .../mariadb/user/procedure-example.sql | 0 test/example/mariadb/user/user.database.sql | 7 ++ test/example/mariadb/user/user.table.sql | 61 ++++++++++ test/example/sqls/table-example.sql | 62 ---------- test/unit/parse-sql.spec.ts | 2 +- todos.md | 9 ++ 32 files changed, 965 insertions(+), 95 deletions(-) create mode 100644 readme.kr.md create mode 100644 src/client/src/component/db/card-item.component.ts create mode 100644 src/client/src/component/db/cluster-item-list.component.ts create mode 100644 src/client/src/component/db/database-item-list.component.ts create mode 100644 src/client/src/component/db/doc/database-doc.component.ts create mode 100644 src/client/src/component/db/doc/table-doc.component copy.ts create mode 100644 src/client/src/component/db/recent-item-list.component.ts create mode 100644 src/client/src/component/db/table-item-list.component.ts create mode 100644 src/client/src/component/ui/logo.component.ts create mode 100644 src/client/src/component/ui/search.component.ts create mode 100644 src/server/static/css/color.default.css create mode 100644 src/server/static/css/font.default.css create mode 100644 src/server/static/css/layouts/layout.default.css create mode 100644 src/server/static/css/layouts/layout.documentation.css rename test/example/sqls/procedure-example.sql => src/server/static/css/pages/database.css (100%) create mode 100644 src/server/static/css/pages/home.css create mode 100644 src/server/static/img/logo.png create mode 100644 src/server/static/templates/cluster.html create mode 100644 src/server/static/templates/database.html create mode 100644 src/server/static/templates/home.html create mode 100644 test/example/mariadb/user/procedure-example.sql create mode 100644 test/example/mariadb/user/user.database.sql create mode 100644 test/example/mariadb/user/user.table.sql delete mode 100644 test/example/sqls/table-example.sql create mode 100644 todos.md diff --git a/.gitignore b/.gitignore index 4881966..1955a3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .test -node_modules \ No newline at end of file +node_modules + +.DS_Store \ No newline at end of file diff --git a/readme.kr.md b/readme.kr.md new file mode 100644 index 0000000..cc52a2e --- /dev/null +++ b/readme.kr.md @@ -0,0 +1,21 @@ +# sqlDoc + +SQLDoc은 Database와 관련된 문서를 효과적으로 생성하고 관리하는게 목표입니다. +이를 통해서 거대한 Database에 대한 하나의 직관적인 Insight와 커뮤니케이션에서 오는 문제를 해결하고자 합니다. + +## Installation + +```bash + +``` + +## Usage + +generate the documentation from `mytable.sql`, `myprocedure.sql` into `doc/`. + +```bash +npm run start:server:watch +npm run build:client:watch + +sqldoc -i mytable.sql myprocedure.sql -o doc/ +``` diff --git a/readme.md b/readme.md index e1d1225..29331be 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@ # sqlDoc -sqlDoc creates a documentation from sql descriptions in your sql code. +Hello Sql doc ## Installation diff --git a/src/client/src/client.ts b/src/client/src/client.ts index 5a41a6e..d00bede 100644 --- a/src/client/src/client.ts +++ b/src/client/src/client.ts @@ -1,9 +1,15 @@ import { WordCount } from "component/table"; import { parseCommentTable } from "../../lib/parser/comment_parser"; import { exampleStrings } from "../test/example/sql"; - -const SidebarWrapper = document.getElementById("SideBar"); -const TableBoardWrapper = document.getElementById("TableBoard"); +import { LogoComponent } from "component/ui/logo.component"; +import { SearchComponent } from "component/ui/search.component"; +import { CardItemComponent } from "component/db/card-item.component"; +import { RecentItemListComponent } from "component/db/recent-item-list.component"; +import { DatabaseItemListComponent } from "component/db/database-item-list.component"; +import { TableItemListComponent } from "component/db/table-item-list.component"; +import { ClusterItemListComponent } from "component/db/cluster-item-list.component"; +import { TableDocComponent } from "component/db/doc/table-doc.component copy"; +import { DatabaseDocComponent } from "component/db/doc/database-doc.component"; let exampleInput = exampleStrings; @@ -13,4 +19,16 @@ let sidebar = ""; let contentBody = ""; -console.log(WordCount); +WordCount; +LogoComponent; +SearchComponent; +CardItemComponent; +RecentItemListComponent; +DatabaseItemListComponent; +ClusterItemListComponent; +TableItemListComponent; + +DatabaseDocComponent; +TableDocComponent; + +console.log(parsedData); diff --git a/src/client/src/component/db/card-item.component.ts b/src/client/src/component/db/card-item.component.ts new file mode 100644 index 0000000..68f863e --- /dev/null +++ b/src/client/src/component/db/card-item.component.ts @@ -0,0 +1,87 @@ +type ItemType = "cluster" | "db" | "table"; +const InputAttributes = ["type", "cluster", "shard", "database"] as const; + +export class CardItemComponent extends HTMLDivElement { + constructor(input?: { noInit?: boolean }) { + super(); + const noInit = input?.noInit; + + const type = this.getAttribute("type") || ""; + const cluster = this.getAttribute("cluster") || ""; + const shard = this.getAttribute("shard") || ""; + const database = this.getAttribute("database") || ""; + + if (!noInit) this.__init({ type, cluster, shard, database }); + } + + private __init(input: { + type?: string; + cluster?: string; + shard?: string; + database?: string; + }) { + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + // Attributes + const type_at = input.type || ""; + const cluster_at = input.cluster || ""; + const shard_at = input.shard || ""; + const database_at = input.database || ""; + + const materialLink_el = document.createElement("link"); + materialLink_el.href = + "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200"; + materialLink_el.rel = "stylesheet"; + + const card_el = document.createElement("div"); + card_el.style.display = "flex"; + card_el.style.flexDirection = "column"; + card_el.style.alignItems = "center"; + card_el.style.justifyContent = "center"; + card_el.style.width = "160px"; + card_el.style.height = "160px"; + card_el.style.border = "2px dotted #B9D7EA"; + + const icon_el = document.createElement("span"); + icon_el.classList.add("material-symbols-outlined"); + icon_el.style.fontSize = "32px"; + icon_el.style.marginBottom = "8px"; + icon_el.textContent = (() => { + if (type_at == "cluster") return "hub"; + if (type_at == "db") return "database"; + if (type_at == "add") return "add"; + return ""; + })(); + + const cluster_name_el = document.createElement("div"); + cluster_name_el.textContent = cluster_at; + + const database_name_el = document.createElement("div"); + database_name_el.textContent = database_at; + + // Compound + card_el.appendChild(icon_el); + card_el.appendChild(cluster_name_el); + card_el.appendChild(database_name_el); + + // Append it to the shadow root + shadow_el.appendChild(materialLink_el); + shadow_el.appendChild(card_el); + } + + static renderItem(input: { + type?: string; + cluster?: string; + shard?: string; + database?: string; + }) { + const item = new CardItemComponent({ noInit: true }); + item.__init(input); + return item; + } +} + +// Define the new element +customElements.define("d-card-item", CardItemComponent, { extends: "div" }); diff --git a/src/client/src/component/db/cluster-item-list.component.ts b/src/client/src/component/db/cluster-item-list.component.ts new file mode 100644 index 0000000..13dd597 --- /dev/null +++ b/src/client/src/component/db/cluster-item-list.component.ts @@ -0,0 +1,58 @@ +import { CardItemComponent } from "./card-item.component"; + +type RecentItems = { + type?: string; + cluster?: string; + shard?: string; + database?: string; +}; + +export class ClusterItemListComponent extends HTMLDivElement { + listEl: HTMLDivElement; + + items: CardItemComponent[] = []; + + constructor() { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + // Attributes + const api_at = this.getAttribute("api"); + + // Elements + const list_el = document.createElement("div"); + list_el.style.display = "flex"; + list_el.style.gap = "16px"; + this.listEl = list_el; + + // Append + shadow_el.appendChild(list_el); + + // Init + const data: RecentItems[] = []; + + this.renderCardItem(data); + } + + renderCardItem(input: RecentItems[]) { + const cardItems: CardItemComponent[] = []; + for (const item of input) { + const cardItem = CardItemComponent.renderItem(item); + this.items.push(cardItem); + this.listEl.appendChild(cardItem); + } + + if (input.length == 0) { + const addItem = CardItemComponent.renderItem({ type: "add" }); + this.listEl.appendChild(addItem); + } + } +} + +// Define the new element +customElements.define("d-cluster-item-list", ClusterItemListComponent, { + extends: "div", +}); diff --git a/src/client/src/component/db/database-item-list.component.ts b/src/client/src/component/db/database-item-list.component.ts new file mode 100644 index 0000000..310a228 --- /dev/null +++ b/src/client/src/component/db/database-item-list.component.ts @@ -0,0 +1,58 @@ +import { CardItemComponent } from "./card-item.component"; + +type RecentItems = { + type?: string; + cluster?: string; + shard?: string; + database?: string; +}; + +export class DatabaseItemListComponent extends HTMLDivElement { + listEl: HTMLDivElement; + + items: CardItemComponent[] = []; + + constructor() { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + // Attributes + const api_at = this.getAttribute("api"); + + // Elements + const list_el = document.createElement("div"); + list_el.style.display = "flex"; + list_el.style.gap = "16px"; + this.listEl = list_el; + + // Append + shadow_el.appendChild(list_el); + + // Init + const data: RecentItems[] = []; + + this.renderCardItem(data); + } + + renderCardItem(input: RecentItems[]) { + const cardItems: CardItemComponent[] = []; + for (const item of input) { + const cardItem = CardItemComponent.renderItem(item); + this.items.push(cardItem); + this.listEl.appendChild(cardItem); + } + + if (input.length == 0) { + const addItem = CardItemComponent.renderItem({ type: "add" }); + this.listEl.appendChild(addItem); + } + } +} + +// Define the new element +customElements.define("d-database-item-list", DatabaseItemListComponent, { + extends: "div", +}); diff --git a/src/client/src/component/db/doc/database-doc.component.ts b/src/client/src/component/db/doc/database-doc.component.ts new file mode 100644 index 0000000..3f6630a --- /dev/null +++ b/src/client/src/component/db/doc/database-doc.component.ts @@ -0,0 +1,57 @@ +import { CardItemComponent } from "../card-item.component"; + +export class DatabaseDocComponent extends HTMLDivElement { + items: CardItemComponent[] = []; + tables: [] = []; + + constructor() { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + // Attributes + const api_at = this.getAttribute("api"); + const database_at = this.getAttribute("database"); + const cluster_at = this.getAttribute("cluster"); + const shard_at = this.getAttribute("shard"); + const description_at = this.getAttribute("description"); + + // Elements + const wrapper_el = document.createElement("div"); + + const database_el = document.createElement("div"); + (() => { + const databaseName_el = document.createElement("div"); + databaseName_el.style.fontSize = "2rem"; + databaseName_el.textContent = database_at; + + const clusterName_el = document.createElement("div"); + clusterName_el.style.fontSize = "1.2rem"; + clusterName_el.textContent = cluster_at; + + const shardName_el = document.createElement("div"); + shardName_el.style.fontSize = "1.2rem"; + shardName_el.textContent = shard_at; + + wrapper_el.appendChild(databaseName_el); + wrapper_el.appendChild(clusterName_el); + wrapper_el.appendChild(shardName_el); + })(); + + const tables_el = document.createElement("div"); + (() => {})(); + + // Append + shadow_el.appendChild(wrapper_el); + wrapper_el.appendChild(database_el); + } + + renderTables() {} +} + +// Define the new element +customElements.define("d-database-doc", DatabaseDocComponent, { + extends: "div", +}); diff --git a/src/client/src/component/db/doc/table-doc.component copy.ts b/src/client/src/component/db/doc/table-doc.component copy.ts new file mode 100644 index 0000000..d8eaef4 --- /dev/null +++ b/src/client/src/component/db/doc/table-doc.component copy.ts @@ -0,0 +1,64 @@ +import { CardItemComponent } from "../card-item.component"; + +type RecentItems = { + type?: string; + cluster?: string; + shard?: string; + database?: string; +}; + +export class TableDocComponent extends HTMLDivElement { + items: CardItemComponent[] = []; + + constructor(input?: { noInit?: boolean }) { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + // Attributes + const api_at = this.getAttribute("api"); + const table_at = this.getAttribute("table"); + const description_at = this.getAttribute("description"); + + // Elements + const table_el = document.createElement("div"); + table_el; + + const tableDesc_el = document.createElement("div"); + (() => { + const tableName_el = document.createElement("div"); + tableName_el.style.paddingBottom = "8px"; + tableName_el.style.fontSize = "2rem"; + tableName_el.textContent = table_at; + + const tableExplain_el = document.createElement("div"); + tableExplain_el.textContent = description_at; + + tableDesc_el.appendChild(tableName_el); + tableDesc_el.appendChild(tableExplain_el); + + console.log(tableName_el); + })(); + + const fieldDesc_el = document.createElement("div"); + (() => { + const field_el = document.createElement("div"); + fieldDesc_el.style.fontSize = "1.4rem"; + fieldDesc_el.textContent = "Fields"; + + fieldDesc_el.appendChild(field_el); + })(); + + // Append + shadow_el.appendChild(table_el); + table_el.appendChild(tableDesc_el); + table_el.appendChild(fieldDesc_el); + } +} + +// Define the new element +customElements.define("d-table-doc", TableDocComponent, { + extends: "div", +}); diff --git a/src/client/src/component/db/recent-item-list.component.ts b/src/client/src/component/db/recent-item-list.component.ts new file mode 100644 index 0000000..c942f82 --- /dev/null +++ b/src/client/src/component/db/recent-item-list.component.ts @@ -0,0 +1,56 @@ +import { CardItemComponent } from "./card-item.component"; + +type RecentItems = { + type?: string; + cluster?: string; + shard?: string; + database?: string; +}; + +export class RecentItemListComponent extends HTMLDivElement { + listEl: HTMLDivElement; + + items: CardItemComponent[] = []; + + constructor() { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + // Attributes + const api_at = this.getAttribute("api"); + + // Elements + const list_el = document.createElement("div"); + list_el.style.display = "flex"; + list_el.style.gap = "16px"; + this.listEl = list_el; + + // Append + shadow_el.appendChild(list_el); + + // Init + const data: RecentItems[] = [ + { type: "cluster", cluster: "ExampleGlobalCluster" }, + { type: "db", database: "ExampleDatabase" }, + ]; + + this.renderCardItem(data); + } + + renderCardItem(input: RecentItems[]) { + const cardItems: CardItemComponent[] = []; + for (const item of input) { + const cardItem = CardItemComponent.renderItem(item); + this.items.push(cardItem); + this.listEl.appendChild(cardItem); + } + } +} + +// Define the new element +customElements.define("d-recent-item-list", RecentItemListComponent, { + extends: "div", +}); diff --git a/src/client/src/component/db/table-item-list.component.ts b/src/client/src/component/db/table-item-list.component.ts new file mode 100644 index 0000000..8348ba8 --- /dev/null +++ b/src/client/src/component/db/table-item-list.component.ts @@ -0,0 +1,58 @@ +import { CardItemComponent } from "./card-item.component"; + +type RecentItems = { + type?: string; + cluster?: string; + shard?: string; + database?: string; +}; + +export class TableItemListComponent extends HTMLDivElement { + listEl: HTMLDivElement; + + items: CardItemComponent[] = []; + + constructor() { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + // Attributes + const api_at = this.getAttribute("api"); + + // Elements + const list_el = document.createElement("div"); + list_el.style.display = "flex"; + list_el.style.gap = "16px"; + this.listEl = list_el; + + // Append + shadow_el.appendChild(list_el); + + // Init + const data: RecentItems[] = []; + + this.renderCardItem(data); + } + + renderCardItem(input: RecentItems[]) { + const cardItems: CardItemComponent[] = []; + for (const item of input) { + const cardItem = CardItemComponent.renderItem(item); + this.items.push(cardItem); + this.listEl.appendChild(cardItem); + } + + if (input.length == 0) { + const addItem = CardItemComponent.renderItem({ type: "add" }); + this.listEl.appendChild(addItem); + } + } +} + +// Define the new element +customElements.define("d-table-item-list", TableItemListComponent, { + extends: "div", +}); diff --git a/src/client/src/component/erd.ts b/src/client/src/component/erd.ts index ef32346..046b409 100644 --- a/src/client/src/component/erd.ts +++ b/src/client/src/component/erd.ts @@ -1 +1 @@ -console.log(":)"); \ No newline at end of file +console.log(":)"); diff --git a/src/client/src/component/ui/logo.component.ts b/src/client/src/component/ui/logo.component.ts new file mode 100644 index 0000000..afa4178 --- /dev/null +++ b/src/client/src/component/ui/logo.component.ts @@ -0,0 +1,29 @@ +// Create a class for the element +export class LogoComponent extends HTMLDivElement { + constructor() { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + const logo_size = this.getAttribute("size"); + + // Create text node and add word count to it + const img_el = document.createElement("img"); + + img_el.setAttribute("src", "/static/img/logo.png"); + img_el.style.blockSize = logo_size || "128px"; + + const text_el = document.createElement("span"); + + // Append it to the shadow root + shadow_el.appendChild(img_el); + + // Update count when element content changes + setInterval(function () {}, 200); + } +} + +// Define the new element +customElements.define("d-logo", LogoComponent, { extends: "div" }); diff --git a/src/client/src/component/ui/search.component.ts b/src/client/src/component/ui/search.component.ts new file mode 100644 index 0000000..758738c --- /dev/null +++ b/src/client/src/component/ui/search.component.ts @@ -0,0 +1,29 @@ +// Create a class for the element +export class SearchComponent extends HTMLDivElement { + constructor() { + super(); + + // Parents + const parent_el = this.parentNode; + const shadow_el = this.attachShadow({ mode: "open" }); + + const logo_size = this.getAttribute("size"); + + // Create text node and add word count to it + const img_el = document.createElement("img"); + + img_el.setAttribute("src", "/static/img/logo.png"); + img_el.style.blockSize = logo_size || "128px"; + + const text_el = document.createElement("span"); + + // Append it to the shadow root + shadow_el.appendChild(img_el); + + // Update count when element content changes + setInterval(function () {}, 200); + } +} + +// Define the new element +customElements.define("d-search", SearchComponent, { extends: "div" }); diff --git a/src/server/src/index.ts b/src/server/src/index.ts index cb74f8e..19b86e5 100644 --- a/src/server/src/index.ts +++ b/src/server/src/index.ts @@ -3,38 +3,59 @@ import express from "express"; import morgan from "morgan"; import * as njk from "nunjucks"; - import settings from "./settings"; const app = express(); -const njk_env = njk.configure(path.join(settings.serverRoot, 'static', 'templates'), +const njk_env = njk.configure( + path.join(settings.serverRoot, "static", "templates"), { - "autoescape": true, - "watch": true, - "express": app + autoescape: true, + watch: true, + express: app, } ); -njk_env.addGlobal('isExpirationOut',(inputDatetime:string)=>{ +njk_env.addGlobal("isExpirationOut", (inputDatetime: string) => { const expiration = new Date(inputDatetime); const current_date = new Date(); - return 0 > (expiration.getTime() - current_date.getTime()); + return 0 > expiration.getTime() - current_date.getTime(); }); +app.use( + morgan(":method :url :status :res[content-length] - :response-time ms") +); -app.use(morgan(':method :url :status :res[content-length] - :response-time ms')); +app.use( + "/static/js", + express.static(path.join(settings.serverRoot, "static", "js")) +); +app.use( + "/static/css", + express.static(path.join(settings.serverRoot, "static", "css")) +); +app.use( + "/static/img", + express.static(path.join(settings.serverRoot, "static", "img")) +); +app.use( + "/static/assets", + express.static(path.join(settings.serverRoot, "static", "assets")) +); -app.use('/static/js', express.static(path.join(settings.serverRoot, 'static', 'js'))); -app.use('/static/img', express.static(path.join(settings.serverRoot, 'static', 'img'))); -app.use('/static/assets', express.static(path.join(settings.serverRoot, 'static', 'assets'))); +app.get("/", (req, res) => { + return res.render("home.html"); +}); -app.get("/", (req, res)=>{ - return res.render("index.html") -}) +app.get("/clusters/:clusterId", (req, res) => { + return res.render("cluster.html"); +}); +app.get("/databases/:databaseId", (req, res) => { + return res.render("database.html"); +}); -app.listen(settings.port, '0.0.0.0', ()=>{ +app.listen(settings.port, "0.0.0.0", () => { console.log(`Server is running on ${settings.port} port`); -}); \ No newline at end of file +}); diff --git a/src/server/static/css/color.default.css b/src/server/static/css/color.default.css new file mode 100644 index 0000000..5f0f573 --- /dev/null +++ b/src/server/static/css/color.default.css @@ -0,0 +1,6 @@ +:root { + --blue_1:#769FCD; + --blue_2:#B9D7EA; + --blue_3: #D6E6F2; + --blue_4: #F7FBFC; +} \ No newline at end of file diff --git a/src/server/static/css/font.default.css b/src/server/static/css/font.default.css new file mode 100644 index 0000000..8633287 --- /dev/null +++ b/src/server/static/css/font.default.css @@ -0,0 +1,29 @@ +@import url('https://fonts.googleapis.com/css?family=Open+Sans'); + +.text-1, .text-2, .text-3 { + font-family: "Open Sans", sans-serif; +} + +.text-1 { + font-size: 2rem; +} + +.text-2 { + font-size: 1.7rem; +} + +.text-3 { + font-size: 1.4rem; +} + +.text-4 { + font-size: 1.2rem; +} + +.text-5 { + font-size: 1rem; +} + +.text-6 { + font-size: 0.7rem; +} diff --git a/src/server/static/css/layouts/layout.default.css b/src/server/static/css/layouts/layout.default.css new file mode 100644 index 0000000..6319d7c --- /dev/null +++ b/src/server/static/css/layouts/layout.default.css @@ -0,0 +1,30 @@ +* { + box-sizing: border-box; +} + +body { + padding: 0px; + margin: 0px; +} + +._body { +} + +.body { + + + max-width: 1440px; + width: 100%; + height: 100%; + + display:flex; + flex-direction: column; + align-items: center; + + margin: auto; + padding:16px; +} + +.box-1 { + +} \ No newline at end of file diff --git a/src/server/static/css/layouts/layout.documentation.css b/src/server/static/css/layouts/layout.documentation.css new file mode 100644 index 0000000..6319d7c --- /dev/null +++ b/src/server/static/css/layouts/layout.documentation.css @@ -0,0 +1,30 @@ +* { + box-sizing: border-box; +} + +body { + padding: 0px; + margin: 0px; +} + +._body { +} + +.body { + + + max-width: 1440px; + width: 100%; + height: 100%; + + display:flex; + flex-direction: column; + align-items: center; + + margin: auto; + padding:16px; +} + +.box-1 { + +} \ No newline at end of file diff --git a/test/example/sqls/procedure-example.sql b/src/server/static/css/pages/database.css similarity index 100% rename from test/example/sqls/procedure-example.sql rename to src/server/static/css/pages/database.css diff --git a/src/server/static/css/pages/home.css b/src/server/static/css/pages/home.css new file mode 100644 index 0000000..0f2a121 --- /dev/null +++ b/src/server/static/css/pages/home.css @@ -0,0 +1,7 @@ +.section { + padding-top: 32px; +} + +.section-content { + padding-top: 8px; +} \ No newline at end of file diff --git a/src/server/static/img/logo.png b/src/server/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0308b84d42a4d55aa81666026d3fa894dd24d3 GIT binary patch literal 31435 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

Wn~to%YGoRo%Z0jmN<0@<3P(fX;`YWM=j+i)N;N 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 + + + + + + + +

+ +
+ + +
+
+
+
+
+
+
search
+ +
+
+
+
+
+ + +
+
+
+
ExampleDatabase
+
+
Cluster Name
+
Shard Name
+
+
+ +
+
+ +
+
+ +
+
+ +
User
+
+ This table is only for user. Never use in another service. only read.
+ But only write in user services. +
+
+ +
+ +
Fields
+ +
+ +
+
id
+
+ BIGINT(24) + UNSIGNED + PRIMARY KEY + AUTO_INCREMENT +
+ + + +
+
+ This is just for clustred index. don't use for relation.
+ later this database will be sharded +
+
+
+ +
+ +
+ +
+ +
+
+ Table References +
+
+ ERD Table Example +
+
+
+
+ +
+ footer +
+
+ +
+ + + +
+ + \ No newline at end of file diff --git a/src/server/static/templates/home.html b/src/server/static/templates/home.html new file mode 100644 index 0000000..a1ef715 --- /dev/null +++ b/src/server/static/templates/home.html @@ -0,0 +1,73 @@ + + + + + + + + +
+ +
+ + +
+
+
+
+
+
+
search
+ +
+
+
+
+
+ + +
+
+
Recently
+
+
+
+
+ +
+
Clusters
+
+
+
+
+ +
+
Databases
+
+
+
+
+ +
+
Tables
+
+
+
+
+ + +
+ +
+
+ +
+ + +
+
+
+
+
+ + diff --git a/src/server/static/templates/index.html b/src/server/static/templates/index.html index 1b5322b..7bda7e2 100644 --- a/src/server/static/templates/index.html +++ b/src/server/static/templates/index.html @@ -5,17 +5,31 @@ Simple word count web component -

Word count rating widget

+
+ +
+
+
+ +
+
Databases
+
+ +
+
+

Word count rating widget

-
-

Sample heading

+
+

Sample heading

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pulvinar sed justo sed viverra. Aliquam ac scelerisque tellus. Vivamus porttitor nunc vel nibh rutrum hendrerit. Donec viverra vestibulum pretium. Mauris at eros vitae ante pellentesque bibendum. Etiam et blandit purus, nec aliquam libero. Etiam leo felis, pulvinar et diam id, sagittis pulvinar diam. Nunc pellentesque rutrum sapien, sed faucibus urna sodales in. Sed tortor nisl, egestas nec egestas luctus, faucibus vitae purus. Ut elit nunc, pretium eget fermentum id, accumsan et velit. Sed mattis velit diam, a elementum nunc facilisis sit amet.

+

Pellentesque ornare tellus sit amet massa tincidunt congue. Morbi cursus, tellus vitae pulvinar dictum, dui turpis faucibus ipsum, nec hendrerit augue nisi et enim. Curabitur felis metus, euismod et augue et, luctus dignissim metus. Mauris placerat tellus id efficitur ornare. Cras enim urna, vestibulum vel molestie vitae, mollis vitae eros. Sed lacinia scelerisque diam, a varius urna iaculis ut. Nam lacinia, velit consequat venenatis pellentesque, leo tortor porttitor est, sit amet accumsan ex lectus eget ipsum. Quisque luctus, ex ac fringilla tincidunt, risus mauris sagittis mauris, at iaculis mauris purus eget neque. Donec viverra in ex sed ullamcorper. In ac nisi vel enim accumsan feugiat et sed augue. Donec nisl metus, sollicitudin eu tempus a, scelerisque sed diam.

+

+
+ +
+
+
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pulvinar sed justo sed viverra. Aliquam ac scelerisque tellus. Vivamus porttitor nunc vel nibh rutrum hendrerit. Donec viverra vestibulum pretium. Mauris at eros vitae ante pellentesque bibendum. Etiam et blandit purus, nec aliquam libero. Etiam leo felis, pulvinar et diam id, sagittis pulvinar diam. Nunc pellentesque rutrum sapien, sed faucibus urna sodales in. Sed tortor nisl, egestas nec egestas luctus, faucibus vitae purus. Ut elit nunc, pretium eget fermentum id, accumsan et velit. Sed mattis velit diam, a elementum nunc facilisis sit amet.

- -

Pellentesque ornare tellus sit amet massa tincidunt congue. Morbi cursus, tellus vitae pulvinar dictum, dui turpis faucibus ipsum, nec hendrerit augue nisi et enim. Curabitur felis metus, euismod et augue et, luctus dignissim metus. Mauris placerat tellus id efficitur ornare. Cras enim urna, vestibulum vel molestie vitae, mollis vitae eros. Sed lacinia scelerisque diam, a varius urna iaculis ut. Nam lacinia, velit consequat venenatis pellentesque, leo tortor porttitor est, sit amet accumsan ex lectus eget ipsum. Quisque luctus, ex ac fringilla tincidunt, risus mauris sagittis mauris, at iaculis mauris purus eget neque. Donec viverra in ex sed ullamcorper. In ac nisi vel enim accumsan feugiat et sed augue. Donec nisl metus, sollicitudin eu tempus a, scelerisque sed diam.

- -

- diff --git a/test/example/mariadb/user/procedure-example.sql b/test/example/mariadb/user/procedure-example.sql new file mode 100644 index 0000000..e69de29 diff --git a/test/example/mariadb/user/user.database.sql b/test/example/mariadb/user/user.database.sql new file mode 100644 index 0000000..ea24337 --- /dev/null +++ b/test/example/mariadb/user/user.database.sql @@ -0,0 +1,7 @@ +/** + * @database [InnoDB] User + * This database is made of Tablef related user. + * This database is only for user. Never use in another service. + * Only Read. but Only write in User Service. +*/ +CREATE DATABASE UserDatabase DEFAULT CHARACTER SET = 'utf8' COLLATE= 'utf8_general_ci'; diff --git a/test/example/mariadb/user/user.table.sql b/test/example/mariadb/user/user.table.sql new file mode 100644 index 0000000..f99e86d --- /dev/null +++ b/test/example/mariadb/user/user.table.sql @@ -0,0 +1,61 @@ +use UserDatabase; + +/** + * @table [InnoDB] User + * This table is user Table. + * This table is only for user. Never use in another service. + * Only Read. but Only write in User Service. + * + * @tableColumn {BIGINT UNSIGNED} [PRIMARY KEY, AUTO_INCREMENT] id + * This is just for clustred index. don't use for relation. + * later this database will be sharded. + * + * @tableColumn {TINYINT UNSIGNED} [DEFAULT=0] type + * 0 is Anonymous user. + * 1 is Authenticated user. + * 2 is Admin. + * 3 is Super Admin. + * @tableColumn {DATETIME} [DEFAULT=CURRENT_TIMESTAMP] joinDate + * Just signed date. + * @tableColumn {VARCHAR(64)} [UNIQUE, NOT NULL] userEmail + * For resetting password. + * @tableColumn {VARCHAR(24)} [UNIQUE, NOT NULL] username + * For login. + * @tableColumn {VARCHAR(24)} [NOT NULL] nickname + * For exposing to other. + * @tableColumn {VARCHAR(24)} [UNIQUE, NOT NULL] password + * This column is stored as encrypted value. +*/ +CREATE TABLE `User`( + `id` BIGINT(24) UNSIGNED PRIMARY KEY AUTO_INCREMENT, + `type` TINYINT UNSIGNED NOT NULL DEFAULT 0, + `joinDate` DATETIME DEFAULT CURRENT_TIMESTAMP, + `userEmail` VARCHAR(64) UNIQUE NOT NULL + `username` VARCHAR(24) UNIQUE NOT NULL, + `nickname` VARCHAR(24) NOT NULL, + `password` VARCHAR(64) NOT NULL, +) ENGINE = InnoDB; + +/** + * @table [InnoDB] Page + * This is for storing content written by User. + * + * @tableColumn {BIGINT UNSIGNED} [PRIMARY KEY, AUTO_INCREMENT] id + * This is just for clustred index. don't use for relation. + * later this database will be sharded. + * use userId with createDate instead of this. + * @tableColumn {BIGINT UNSIGNED} [FOREIGN KEY] userId + * @tableColumn {DATETIME} [DEFAULT=CURRENT_TIMESTAMP] text + * @tableColumn {VARCHAR(24)} [UNIQUE, NOT NULL] createDate +*/ +CREATE TABLE `Page`( + `id` BIGINT(24) UNSIGNED PRIMARY KEY AUTO_INCREMENT, + `userId` BIGINT(24) UNSIGNED, + `title` VARCHAR(24) NOT NULL, + `text` TEXT default NULL, + `createDate` DATETIME DEFAULT CURRENT_TIMESTAMP + + CONSTRAINT `FK_Page_User` + FOREIGN KEY(`userId`) REFERENCES User(`id`) + ON DELETE CASCADE +) ENGINE = InnoDB; \ No newline at end of file diff --git a/test/example/sqls/table-example.sql b/test/example/sqls/table-example.sql deleted file mode 100644 index 646d48e..0000000 --- a/test/example/sqls/table-example.sql +++ /dev/null @@ -1,62 +0,0 @@ -CREATE DATABASE SqldocExampleDatabase DEFAULT CHARACTER SET = 'utf8' COLLATE= 'utf8_general_ci'; -use SqldocExampleDatabase; - -/** - * @table [InnoDB] User - * This table is user Table. - * This table is only for user. Never use in another service. - * Only Read. but Only write in User Service. - * - * @tableColumn {BIGINT UNSIGNED} [PRIMARY KEY, AUTO_INCREMENT] id - * This is just for clustred index. don't use for relation. - * later this database will be sharded. - * - * @tableColumn {TINYINT UNSIGNED} [DEFAULT=0] type - * 0 is Anonymous user. - * 1 is Authenticated user. - * 2 is Admin. - * 3 is Super Admin. - * @tableColumn {DATETIME} [DEFAULT=CURRENT_TIMESTAMP] joinDate - * Just signed date. - * @tableColumn {VARCHAR(64)} [UNIQUE, NOT NULL] userEmail - * For resetting password. - * @tableColumn {VARCHAR(24)} [UNIQUE, NOT NULL] username - * For login. - * @tableColumn {VARCHAR(24)} [NOT NULL] nickname - * For exposing to other. - * @tableColumn {VARCHAR(24)} [UNIQUE, NOT NULL] password - * This column is stored as encrypted value. -*/ -CREATE TABLE `User`( - `id` BIGINT(24) UNSIGNED PRIMARY KEY AUTO_INCREMENT, - `type` TINYINT UNSIGNED NOT NULL DEFAULT 0, - `joinDate` DATETIME DEFAULT CURRENT_TIMESTAMP, - `userEmail` VARCHAR(64) UNIQUE NOT NULL - `username` VARCHAR(24) UNIQUE NOT NULL, - `nickname` VARCHAR(24) NOT NULL, - `password` VARCHAR(64) NOT NULL, -) ENGINE = InnoDB; - -/** - * @table [InnoDB] Page - * This is for storing content written by User. - * - * @tableColumn {BIGINT UNSIGNED} [PRIMARY KEY, AUTO_INCREMENT] id - * This is just for clustred index. don't use for relation. - * later this database will be sharded. - * use userId with createDate instead of this. - * @tableColumn {BIGINT UNSIGNED} [FOREIGN KEY] userId - * @tableColumn {DATETIME} [DEFAULT=CURRENT_TIMESTAMP] text - * @tableColumn {VARCHAR(24)} [UNIQUE, NOT NULL] createDate -*/ -CREATE TABLE `Page`( - `id` BIGINT(24) UNSIGNED PRIMARY KEY AUTO_INCREMENT, - `userId` BIGINT(24) UNSIGNED, - `title` VARCHAR(24) NOT NULL, - `text` TEXT default NULL, - `createDate` DATETIME DEFAULT CURRENT_TIMESTAMP - - CONSTRAINT `FK_Page_User` - FOREIGN KEY(`userId`) REFERENCES User(`id`) - ON DELETE CASCADE -) ENGINE = InnoDB; \ No newline at end of file diff --git a/test/unit/parse-sql.spec.ts b/test/unit/parse-sql.spec.ts index b571823..2c87551 100644 --- a/test/unit/parse-sql.spec.ts +++ b/test/unit/parse-sql.spec.ts @@ -20,7 +20,7 @@ describe("Parsing SQL", () => { it("Should parse a sql file", async () => { const parsed_table = parseCommentTable( getRawStrings({ - inputFilePath: "../example/sqls/table-example.sql", + inputFilePath: "../example/mariadb/user/user.table.sql", callerFilePath: __dirname, })! ); diff --git a/todos.md b/todos.md new file mode 100644 index 0000000..255b993 --- /dev/null +++ b/todos.md @@ -0,0 +1,9 @@ +### Cluster Documentation + +### Database Documentation + +### Table Documentation + +### Test Data Generation + +### Realtime Documentation update From 2a220fbf9aff3ff6ce6f1d60ef735995cc9b5eca Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 21 Jun 2025 12:58:15 +0900 Subject: [PATCH 2/2] refactor: update directory architecture --- {src/client => libs/core}/package.json | 2 +- libs/core/src/index.ts | 1 + {src/lib => libs/core/src}/info.ts | 2 +- .../core/src}/parser/comment_parser.ts | 0 {src/lib => libs/core/src}/parser/field.ts | 0 .../core/src}/parser/types/common.ts | 0 {src/lib => libs/core/src}/render/element.ts | 0 {src/lib => libs/core/src}/render/event.ts | 0 {src/client => libs/core}/tsconfig.json | 3 +- package-lock.json | 903 +++++++++++++++++- package.json | 36 +- {src => packages}/client/package-lock.json | 0 packages/client/package.json | 30 + {src => packages}/client/rollup.config.js | 0 packages/client/src/client.ts | 36 + .../src/component/db/card-item.component.ts | 0 .../db/cluster-item-list.component.ts | 0 .../db/database-item-list.component.ts | 0 .../db/doc/database-doc.component.ts | 0 .../db/doc/table-doc.component copy.ts | 0 .../db/recent-item-list.component.ts | 0 .../component/db/table-item-list.component.ts | 0 {src => packages}/client/src/component/erd.ts | 0 .../client/src/component/table-reference.ts | 0 .../client/src/component/table.ts | 0 .../client/src/component/ui/logo.component.ts | 0 .../src/component/ui/search.component.ts | 0 {src => packages}/client/test/example/sql.ts | 0 packages/client/tsconfig.json | 25 + {src => packages}/server/.gitignore | 0 packages/server/package.json | 59 ++ {src => packages}/server/src/index.ts | 0 {src => packages}/server/src/settings.ts | 0 .../server/static/css/color.default.css | 0 .../server/static/css/font.default.css | 0 .../static/css/layouts/layout.default.css | 0 .../css/layouts/layout.documentation.css | 0 .../server/static/css/pages/database.css | 0 .../server/static/css/pages/home.css | 0 {src => packages}/server/static/img/logo.png | Bin .../server/static/templates/_index.html | 0 .../server/static/templates/cluster.html | 0 .../server/static/templates/database.html | 0 .../server/static/templates/home.html | 0 .../static/templates/include/layout.njk | 0 .../server/static/templates/index.html | 0 .../server/static/templates/page/erd.njk | 0 {src => packages}/server/tsconfig.json | 7 +- scripts/common.ts | 4 +- src/client/src/client.ts | 34 - test/unit/parse-sql.spec.ts | 4 +- tsconfig.json => tsconfig.base.json | 9 +- 52 files changed, 1029 insertions(+), 126 deletions(-) rename {src/client => libs/core}/package.json (97%) create mode 100644 libs/core/src/index.ts rename {src/lib => libs/core/src}/info.ts (99%) rename {src/lib => libs/core/src}/parser/comment_parser.ts (100%) rename {src/lib => libs/core/src}/parser/field.ts (100%) rename {src/lib => libs/core/src}/parser/types/common.ts (100%) rename {src/lib => libs/core/src}/render/element.ts (100%) rename {src/lib => libs/core/src}/render/event.ts (100%) rename {src/client => libs/core}/tsconfig.json (90%) rename {src => packages}/client/package-lock.json (100%) create mode 100644 packages/client/package.json rename {src => packages}/client/rollup.config.js (100%) create mode 100644 packages/client/src/client.ts rename {src => packages}/client/src/component/db/card-item.component.ts (100%) rename {src => packages}/client/src/component/db/cluster-item-list.component.ts (100%) rename {src => packages}/client/src/component/db/database-item-list.component.ts (100%) rename {src => packages}/client/src/component/db/doc/database-doc.component.ts (100%) rename {src => packages}/client/src/component/db/doc/table-doc.component copy.ts (100%) rename {src => packages}/client/src/component/db/recent-item-list.component.ts (100%) rename {src => packages}/client/src/component/db/table-item-list.component.ts (100%) rename {src => packages}/client/src/component/erd.ts (100%) rename {src => packages}/client/src/component/table-reference.ts (100%) rename {src => packages}/client/src/component/table.ts (100%) rename {src => packages}/client/src/component/ui/logo.component.ts (100%) rename {src => packages}/client/src/component/ui/search.component.ts (100%) rename {src => packages}/client/test/example/sql.ts (100%) create mode 100644 packages/client/tsconfig.json rename {src => packages}/server/.gitignore (100%) create mode 100644 packages/server/package.json rename {src => packages}/server/src/index.ts (100%) rename {src => packages}/server/src/settings.ts (100%) rename {src => packages}/server/static/css/color.default.css (100%) rename {src => packages}/server/static/css/font.default.css (100%) rename {src => packages}/server/static/css/layouts/layout.default.css (100%) rename {src => packages}/server/static/css/layouts/layout.documentation.css (100%) rename {src => packages}/server/static/css/pages/database.css (100%) rename {src => packages}/server/static/css/pages/home.css (100%) rename {src => packages}/server/static/img/logo.png (100%) rename {src => packages}/server/static/templates/_index.html (100%) rename {src => packages}/server/static/templates/cluster.html (100%) rename {src => packages}/server/static/templates/database.html (100%) rename {src => packages}/server/static/templates/home.html (100%) rename {src => packages}/server/static/templates/include/layout.njk (100%) rename {src => packages}/server/static/templates/index.html (100%) rename {src => packages}/server/static/templates/page/erd.njk (100%) rename {src => packages}/server/tsconfig.json (78%) delete mode 100644 src/client/src/client.ts rename tsconfig.json => tsconfig.base.json (72%) diff --git a/src/client/package.json b/libs/core/package.json similarity index 97% rename from src/client/package.json rename to libs/core/package.json index 5983f48..b9b836d 100644 --- a/src/client/package.json +++ b/libs/core/package.json @@ -1,5 +1,5 @@ { - "name": "client", + "name": "core", "version": "1.0.0", "description": "", "main": "index.js", diff --git a/libs/core/src/index.ts b/libs/core/src/index.ts new file mode 100644 index 0000000..1767e84 --- /dev/null +++ b/libs/core/src/index.ts @@ -0,0 +1 @@ +export { parseCommentTable } from "./parser/comment_parser" \ No newline at end of file diff --git a/src/lib/info.ts b/libs/core/src/info.ts similarity index 99% rename from src/lib/info.ts rename to libs/core/src/info.ts index e2830e2..4281dd8 100644 --- a/src/lib/info.ts +++ b/libs/core/src/info.ts @@ -30,4 +30,4 @@ class ViewAnnotation extends Annotation { class ProcedureAnnotation extends Annotation { name = 'ProcedureAnnotation'; description = ''; -} \ No newline at end of file +} diff --git a/src/lib/parser/comment_parser.ts b/libs/core/src/parser/comment_parser.ts similarity index 100% rename from src/lib/parser/comment_parser.ts rename to libs/core/src/parser/comment_parser.ts diff --git a/src/lib/parser/field.ts b/libs/core/src/parser/field.ts similarity index 100% rename from src/lib/parser/field.ts rename to libs/core/src/parser/field.ts diff --git a/src/lib/parser/types/common.ts b/libs/core/src/parser/types/common.ts similarity index 100% rename from src/lib/parser/types/common.ts rename to libs/core/src/parser/types/common.ts diff --git a/src/lib/render/element.ts b/libs/core/src/render/element.ts similarity index 100% rename from src/lib/render/element.ts rename to libs/core/src/render/element.ts diff --git a/src/lib/render/event.ts b/libs/core/src/render/event.ts similarity index 100% rename from src/lib/render/event.ts rename to libs/core/src/render/event.ts diff --git a/src/client/tsconfig.json b/libs/core/tsconfig.json similarity index 90% rename from src/client/tsconfig.json rename to libs/core/tsconfig.json index bfb42f6..ff0dc65 100644 --- a/src/client/tsconfig.json +++ b/libs/core/tsconfig.json @@ -1,4 +1,5 @@ { + "extends": "../../tsconfig.base.json", "compilerOptions": { "target": "ES2020", "lib": [ @@ -6,10 +7,8 @@ "DOM" ], "module": "ES2020", - "sourceMap": true, "removeComments": true, "strict": true, - "baseUrl": "./src", "outDir": "./dest", "esModuleInterop": true, "skipLibCheck": true, diff --git a/package-lock.json b/package-lock.json index 134bbed..54a020f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,22 +8,33 @@ "name": "sqldoc", "version": "1.0.0", "license": "MIT", + "workspaces": [ + "packages/*", + "libs/*" + ], + "devDependencies": { + "ts-node": "^10.9.2" + } + }, + "libs/core": { + "version": "1.0.0", + "license": "ISC", "dependencies": { - "@types/express": "^4.17.17", - "@types/morgan": "^1.9.4", - "@types/nunjucks": "^3.2.2", - "express": "^4.18.2", - "morgan": "^1.10.0", - "nunjucks": "^3.2.4" + "axios": "^1.4.0", + "express": "^4.18.2" }, "devDependencies": { - "@types/jest": "^29.5.2", - "jest": "^29.5.0", - "lit-html": "^2.0.0", - "nodemon": "^2.0.22", - "ts-jest": "^29.1.0", - "ts-node": "^10.9.1", - "tslib": "^2.6.1" + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "^25.0.3", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/axios": "^0.14.0", + "rollup": "^3.26.3", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-typescript2": "^0.35.0", + "tslib": "^2.6.0", + "typescript": "^5.1.6" } }, "node_modules/@ampproject/remapping": { @@ -1089,10 +1100,11 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", @@ -1104,6 +1116,203 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@rollup/plugin-alias": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", + "integrity": "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz", + "integrity": "sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@sinclair/typebox": { "version": "0.25.24", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", @@ -1152,6 +1361,17 @@ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, + "node_modules/@types/axios": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.4.tgz", + "integrity": "sha512-9JgOaunvQdsQ/qW2OPmE5+hCeUB52lQSolecrFrthct55QekhmXEwT203s20RL+UHtCQc15y3VXpby9E7Kkh/g==", + "deprecated": "This is a stub types definition. axios provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "*" + } + }, "node_modules/@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -1210,6 +1430,13 @@ "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { "version": "4.17.17", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", @@ -1319,6 +1546,13 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", @@ -1486,6 +1720,36 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/babel-jest": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", @@ -1712,6 +1976,19 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1732,6 +2009,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1864,6 +2154,10 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "node_modules/client": { + "resolved": "packages/client", + "link": true + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1912,6 +2206,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", @@ -1920,6 +2226,13 @@ "node": ">= 6" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1964,6 +2277,10 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/core": { + "resolved": "libs/core", + "link": true + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -1992,6 +2309,16 @@ "ms": "2.0.0" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -2007,6 +2334,15 @@ "node": ">=0.10.0" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2051,6 +2387,20 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2097,6 +2447,51 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2133,6 +2528,13 @@ "node": ">=4" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -2274,6 +2676,24 @@ "node": ">= 0.8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2287,6 +2707,42 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2303,6 +2759,21 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2324,9 +2795,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -2347,14 +2822,24 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2369,6 +2854,19 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -2422,6 +2920,18 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -2432,6 +2942,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -2448,10 +2959,11 @@ "node": ">=4" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2459,10 +2971,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -2470,6 +2986,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -2637,6 +3165,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2646,6 +3181,16 @@ "node": ">=0.12.0" } }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -3432,6 +3977,19 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -3492,6 +4050,16 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3531,6 +4099,15 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4038,6 +4615,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -4170,6 +4753,168 @@ "node": ">=10" } }, + "node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-node-resolve": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", + "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "rollup": ">=1.11.0" + } + }, + "node_modules/rollup-plugin-node-resolve/node_modules/@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": ">=10.0.0", + "rollup": ">=0.31.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-sourcemaps/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/rollup-plugin-sourcemaps/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup-plugin-sourcemaps/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.35.0.tgz", + "integrity": "sha512-szcIO9hPUx3PhQl91u4pfNAH2EKbtrXaES+m163xQVE5O1CC0ea6YZV/5woiDDW3CR9jF2CszPrKN+AFiND0bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.3.7", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true, + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -4245,6 +4990,10 @@ "node": ">= 0.8.0" } }, + "node_modules/server": { + "resolved": "packages/server", + "link": true + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -4335,6 +5084,18 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -4602,10 +5363,11 @@ "dev": true }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -4684,11 +5446,11 @@ } }, "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, - "peer": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4703,6 +5465,16 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -4930,6 +5702,53 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "packages/client": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^1.4.0", + "express": "^4.18.2" + }, + "devDependencies": { + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "^25.0.3", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/axios": "^0.14.0", + "rollup": "^3.26.3", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-typescript2": "^0.35.0", + "tslib": "^2.6.0", + "typescript": "^5.1.6" + } + }, + "packages/server": { + "version": "1.0.0", + "license": "MIT", + "workspaces": [ + "packages/*", + "libs/*" + ], + "dependencies": { + "@types/express": "^4.17.17", + "@types/morgan": "^1.9.4", + "@types/nunjucks": "^3.2.2", + "express": "^4.18.2", + "morgan": "^1.10.0", + "nunjucks": "^3.2.4" + }, + "devDependencies": { + "@types/jest": "^29.5.2", + "jest": "^29.5.0", + "lit-html": "^2.0.0", + "nodemon": "^2.0.22", + "ts-jest": "^29.1.0", + "ts-node": "^10.9.2", + "tslib": "^2.6.1" + } } } } diff --git a/package.json b/package.json index c78189a..794195a 100644 --- a/package.json +++ b/package.json @@ -19,37 +19,11 @@ "type": "git", "url": "https://github.com/dbwodlf3/sqldoc.git" }, + "workspaces": [ + "packages/*", + "libs/*" + ], "devDependencies": { - "@types/jest": "^29.5.2", - "jest": "^29.5.0", - "lit-html": "^2.0.0", - "nodemon": "^2.0.22", - "ts-jest": "^29.1.0", - "ts-node": "^10.9.1", - "tslib": "^2.6.1" - }, - "dependencies": { - "@types/express": "^4.17.17", - "@types/morgan": "^1.9.4", - "@types/nunjucks": "^3.2.2", - "express": "^4.18.2", - "morgan": "^1.10.0", - "nunjucks": "^3.2.4" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" + "ts-node": "^10.9.2" } } diff --git a/src/client/package-lock.json b/packages/client/package-lock.json similarity index 100% rename from src/client/package-lock.json rename to packages/client/package-lock.json diff --git a/packages/client/package.json b/packages/client/package.json new file mode 100644 index 0000000..00a133f --- /dev/null +++ b/packages/client/package.json @@ -0,0 +1,30 @@ +{ + "name": "client", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.4.0", + "express": "^4.18.2" + }, + "devDependencies": { + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "^25.0.3", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/axios": "^0.14.0", + "rollup": "^3.26.3", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-typescript2": "^0.35.0", + "tslib": "^2.6.0", + "typescript": "^5.1.6" + } +} diff --git a/src/client/rollup.config.js b/packages/client/rollup.config.js similarity index 100% rename from src/client/rollup.config.js rename to packages/client/rollup.config.js diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts new file mode 100644 index 0000000..b50c385 --- /dev/null +++ b/packages/client/src/client.ts @@ -0,0 +1,36 @@ +import { parseCommentTable } from "@core"; + +import { exampleStrings } from "../test/example/sql"; + +import { WordCount } from "./component/table"; +import { LogoComponent } from "./component/ui/logo.component"; +import { SearchComponent } from "./component/ui/search.component"; +import { CardItemComponent } from "./component/db/card-item.component"; +import { RecentItemListComponent } from "./component/db/recent-item-list.component"; +import { DatabaseItemListComponent } from "./component/db/database-item-list.component"; +import { TableItemListComponent } from "./component/db/table-item-list.component"; +import { ClusterItemListComponent } from "./component/db/cluster-item-list.component"; +import { TableDocComponent } from "./component/db/doc/table-doc.component copy"; +import { DatabaseDocComponent } from "./component/db/doc/database-doc.component"; + +let exampleInput = exampleStrings; + +let parsedData = parseCommentTable(exampleInput); + +let sidebar = ""; + +let contentBody = ""; + +WordCount; +LogoComponent; +SearchComponent; +CardItemComponent; +RecentItemListComponent; +DatabaseItemListComponent; +ClusterItemListComponent; +TableItemListComponent; + +DatabaseDocComponent; +TableDocComponent; + +console.log(parsedData); diff --git a/src/client/src/component/db/card-item.component.ts b/packages/client/src/component/db/card-item.component.ts similarity index 100% rename from src/client/src/component/db/card-item.component.ts rename to packages/client/src/component/db/card-item.component.ts diff --git a/src/client/src/component/db/cluster-item-list.component.ts b/packages/client/src/component/db/cluster-item-list.component.ts similarity index 100% rename from src/client/src/component/db/cluster-item-list.component.ts rename to packages/client/src/component/db/cluster-item-list.component.ts diff --git a/src/client/src/component/db/database-item-list.component.ts b/packages/client/src/component/db/database-item-list.component.ts similarity index 100% rename from src/client/src/component/db/database-item-list.component.ts rename to packages/client/src/component/db/database-item-list.component.ts diff --git a/src/client/src/component/db/doc/database-doc.component.ts b/packages/client/src/component/db/doc/database-doc.component.ts similarity index 100% rename from src/client/src/component/db/doc/database-doc.component.ts rename to packages/client/src/component/db/doc/database-doc.component.ts diff --git a/src/client/src/component/db/doc/table-doc.component copy.ts b/packages/client/src/component/db/doc/table-doc.component copy.ts similarity index 100% rename from src/client/src/component/db/doc/table-doc.component copy.ts rename to packages/client/src/component/db/doc/table-doc.component copy.ts diff --git a/src/client/src/component/db/recent-item-list.component.ts b/packages/client/src/component/db/recent-item-list.component.ts similarity index 100% rename from src/client/src/component/db/recent-item-list.component.ts rename to packages/client/src/component/db/recent-item-list.component.ts diff --git a/src/client/src/component/db/table-item-list.component.ts b/packages/client/src/component/db/table-item-list.component.ts similarity index 100% rename from src/client/src/component/db/table-item-list.component.ts rename to packages/client/src/component/db/table-item-list.component.ts diff --git a/src/client/src/component/erd.ts b/packages/client/src/component/erd.ts similarity index 100% rename from src/client/src/component/erd.ts rename to packages/client/src/component/erd.ts diff --git a/src/client/src/component/table-reference.ts b/packages/client/src/component/table-reference.ts similarity index 100% rename from src/client/src/component/table-reference.ts rename to packages/client/src/component/table-reference.ts diff --git a/src/client/src/component/table.ts b/packages/client/src/component/table.ts similarity index 100% rename from src/client/src/component/table.ts rename to packages/client/src/component/table.ts diff --git a/src/client/src/component/ui/logo.component.ts b/packages/client/src/component/ui/logo.component.ts similarity index 100% rename from src/client/src/component/ui/logo.component.ts rename to packages/client/src/component/ui/logo.component.ts diff --git a/src/client/src/component/ui/search.component.ts b/packages/client/src/component/ui/search.component.ts similarity index 100% rename from src/client/src/component/ui/search.component.ts rename to packages/client/src/component/ui/search.component.ts diff --git a/src/client/test/example/sql.ts b/packages/client/test/example/sql.ts similarity index 100% rename from src/client/test/example/sql.ts rename to packages/client/test/example/sql.ts diff --git a/packages/client/tsconfig.json b/packages/client/tsconfig.json new file mode 100644 index 0000000..f0febf5 --- /dev/null +++ b/packages/client/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2020", + "lib": [ + "ES2020", + "DOM" + ], + "module": "ESNext", + "removeComments": true, + "moduleResolution": "node", + "strict": true, + "outDir": "./dest", + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "downlevelIteration": true, + "experimentalDecorators": true + }, + "include": [ + "./**/*.ts", + "rollup.config.js" + ], + "exclude": [] +} \ No newline at end of file diff --git a/src/server/.gitignore b/packages/server/.gitignore similarity index 100% rename from src/server/.gitignore rename to packages/server/.gitignore diff --git a/packages/server/package.json b/packages/server/package.json new file mode 100644 index 0000000..63fe090 --- /dev/null +++ b/packages/server/package.json @@ -0,0 +1,59 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "generate sql documentation", + "main": "index.js", + "directories": { + "doc": "docs" + }, + "scripts": { + "test": "jest --config ./test/unit/jest-unit.json", + "build:client": "", + "build:client:watch": "npx ts-node ./scripts/build-watch.client", + "start:server": "npx ts-node ./scripts/start", + "start:server:watch": "npx ts-node ./scripts/start-watch" + }, + "author": "Cogi", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/dbwodlf3/sqldoc.git" + }, + "workspaces": [ + "packages/*", + "libs/*" + ], + "devDependencies": { + "@types/jest": "^29.5.2", + "jest": "^29.5.0", + "lit-html": "^2.0.0", + "nodemon": "^2.0.22", + "ts-jest": "^29.1.0", + "ts-node": "^10.9.2", + "tslib": "^2.6.1" + }, + "dependencies": { + "@types/express": "^4.17.17", + "@types/morgan": "^1.9.4", + "@types/nunjucks": "^3.2.2", + "express": "^4.18.2", + "morgan": "^1.10.0", + "nunjucks": "^3.2.4" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/src/server/src/index.ts b/packages/server/src/index.ts similarity index 100% rename from src/server/src/index.ts rename to packages/server/src/index.ts diff --git a/src/server/src/settings.ts b/packages/server/src/settings.ts similarity index 100% rename from src/server/src/settings.ts rename to packages/server/src/settings.ts diff --git a/src/server/static/css/color.default.css b/packages/server/static/css/color.default.css similarity index 100% rename from src/server/static/css/color.default.css rename to packages/server/static/css/color.default.css diff --git a/src/server/static/css/font.default.css b/packages/server/static/css/font.default.css similarity index 100% rename from src/server/static/css/font.default.css rename to packages/server/static/css/font.default.css diff --git a/src/server/static/css/layouts/layout.default.css b/packages/server/static/css/layouts/layout.default.css similarity index 100% rename from src/server/static/css/layouts/layout.default.css rename to packages/server/static/css/layouts/layout.default.css diff --git a/src/server/static/css/layouts/layout.documentation.css b/packages/server/static/css/layouts/layout.documentation.css similarity index 100% rename from src/server/static/css/layouts/layout.documentation.css rename to packages/server/static/css/layouts/layout.documentation.css diff --git a/src/server/static/css/pages/database.css b/packages/server/static/css/pages/database.css similarity index 100% rename from src/server/static/css/pages/database.css rename to packages/server/static/css/pages/database.css diff --git a/src/server/static/css/pages/home.css b/packages/server/static/css/pages/home.css similarity index 100% rename from src/server/static/css/pages/home.css rename to packages/server/static/css/pages/home.css diff --git a/src/server/static/img/logo.png b/packages/server/static/img/logo.png similarity index 100% rename from src/server/static/img/logo.png rename to packages/server/static/img/logo.png diff --git a/src/server/static/templates/_index.html b/packages/server/static/templates/_index.html similarity index 100% rename from src/server/static/templates/_index.html rename to packages/server/static/templates/_index.html diff --git a/src/server/static/templates/cluster.html b/packages/server/static/templates/cluster.html similarity index 100% rename from src/server/static/templates/cluster.html rename to packages/server/static/templates/cluster.html diff --git a/src/server/static/templates/database.html b/packages/server/static/templates/database.html similarity index 100% rename from src/server/static/templates/database.html rename to packages/server/static/templates/database.html diff --git a/src/server/static/templates/home.html b/packages/server/static/templates/home.html similarity index 100% rename from src/server/static/templates/home.html rename to packages/server/static/templates/home.html diff --git a/src/server/static/templates/include/layout.njk b/packages/server/static/templates/include/layout.njk similarity index 100% rename from src/server/static/templates/include/layout.njk rename to packages/server/static/templates/include/layout.njk diff --git a/src/server/static/templates/index.html b/packages/server/static/templates/index.html similarity index 100% rename from src/server/static/templates/index.html rename to packages/server/static/templates/index.html diff --git a/src/server/static/templates/page/erd.njk b/packages/server/static/templates/page/erd.njk similarity index 100% rename from src/server/static/templates/page/erd.njk rename to packages/server/static/templates/page/erd.njk diff --git a/src/server/tsconfig.json b/packages/server/tsconfig.json similarity index 78% rename from src/server/tsconfig.json rename to packages/server/tsconfig.json index 3b272d0..5daa3e8 100644 --- a/src/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -1,17 +1,12 @@ { + "extends": "../../tsconfig.base.json", "compilerOptions": { "resolveJsonModule": true, "target": "ES5", - "lib": [ - "ES2020", - "DOM" - ], "module": "CommonJS", "inlineSourceMap": true, - "rootDir": "./", "removeComments": true, "strict": true, - "baseUrl": "./src", "outDir": "./dest", "esModuleInterop": true, "skipLibCheck": true, diff --git a/scripts/common.ts b/scripts/common.ts index 64d1dd7..b591f75 100644 --- a/scripts/common.ts +++ b/scripts/common.ts @@ -1,8 +1,8 @@ import path from "path"; const projectRoot = path.resolve(path.dirname(__dirname)); -const serverRoot = path.join(projectRoot, "src", "server"); -const clientRoot = path.join(projectRoot, "src", "client"); +const serverRoot = path.join(projectRoot, "packages", "server"); +const clientRoot = path.join(projectRoot, "packages", "client"); export default { projectRoot, diff --git a/src/client/src/client.ts b/src/client/src/client.ts deleted file mode 100644 index d00bede..0000000 --- a/src/client/src/client.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { WordCount } from "component/table"; -import { parseCommentTable } from "../../lib/parser/comment_parser"; -import { exampleStrings } from "../test/example/sql"; -import { LogoComponent } from "component/ui/logo.component"; -import { SearchComponent } from "component/ui/search.component"; -import { CardItemComponent } from "component/db/card-item.component"; -import { RecentItemListComponent } from "component/db/recent-item-list.component"; -import { DatabaseItemListComponent } from "component/db/database-item-list.component"; -import { TableItemListComponent } from "component/db/table-item-list.component"; -import { ClusterItemListComponent } from "component/db/cluster-item-list.component"; -import { TableDocComponent } from "component/db/doc/table-doc.component copy"; -import { DatabaseDocComponent } from "component/db/doc/database-doc.component"; - -let exampleInput = exampleStrings; - -let parsedData = parseCommentTable(exampleInput); - -let sidebar = ""; - -let contentBody = ""; - -WordCount; -LogoComponent; -SearchComponent; -CardItemComponent; -RecentItemListComponent; -DatabaseItemListComponent; -ClusterItemListComponent; -TableItemListComponent; - -DatabaseDocComponent; -TableDocComponent; - -console.log(parsedData); diff --git a/test/unit/parse-sql.spec.ts b/test/unit/parse-sql.spec.ts index 2c87551..6003365 100644 --- a/test/unit/parse-sql.spec.ts +++ b/test/unit/parse-sql.spec.ts @@ -1,7 +1,7 @@ import path from "path"; import fs from "fs"; -import { ParserInputParameter } from "lib/parser/types/common"; -import { parseCommentTable } from "../../src/lib/parser/comment_parser"; +import { ParserInputParameter } from "../../libs/core/parser/types/common"; +import { parseCommentTable } from "../../libs/core/parser/comment_parser"; // Helper function getRawStrings(inputString: ParserInputParameter) { diff --git a/tsconfig.json b/tsconfig.base.json similarity index 72% rename from tsconfig.json rename to tsconfig.base.json index cdef2d4..302d6e1 100644 --- a/tsconfig.json +++ b/tsconfig.base.json @@ -1,20 +1,19 @@ { "compilerOptions": { - "resolveJsonModule": true, - "target": "ES5", - "lib": ["ES2020", "DOM"], - "module": "CommonJS", "inlineSourceMap": true, "rootDir": "./", "removeComments": true, "strict": true, - "baseUrl": "./src", + "baseUrl": ".", "outDir": "./dest", "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "downlevelIteration": true, "importHelpers": true, + "paths": { + "@core": ["libs/core/src"], + } }, "include":["./**/*.ts"], "exclude": [