From 25c0e5af8a6b21ec28a30bfa0656528f9f835040 Mon Sep 17 00:00:00 2001 From: xyny Date: Sat, 18 May 2024 17:38:10 +0300 Subject: [PATCH] feat: fetch module schemas from blue-build/modules (#2) --- .gitignore | 3 ++- fetchModuleSchemas.js | 31 +++++++++++++++++++++++++++++++ package-lock.json | 4 +++- package.json | 6 ++++-- src-tsp/main.tsp | 2 +- src-tsp/modules.tsp | 12 ------------ src-tsp/modules/akmods.tsp | 9 --------- src-tsp/modules/bling.tsp | 8 -------- src-tsp/modules/fonts.tsp | 11 ----------- src-tsp/modules/rpm-ostree.tsp | 10 ---------- 10 files changed, 41 insertions(+), 55 deletions(-) create mode 100644 fetchModuleSchemas.js delete mode 100644 src-tsp/modules.tsp delete mode 100644 src-tsp/modules/akmods.tsp delete mode 100644 src-tsp/modules/bling.tsp delete mode 100644 src-tsp/modules/fonts.tsp delete mode 100644 src-tsp/modules/rpm-ostree.tsp diff --git a/.gitignore b/.gitignore index 2accabc..f193069 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ tsp-output/* node_modules/* -dist/* \ No newline at end of file +dist/* +src-tsp/modules/* \ No newline at end of file diff --git a/fetchModuleSchemas.js b/fetchModuleSchemas.js new file mode 100644 index 0000000..7094504 --- /dev/null +++ b/fetchModuleSchemas.js @@ -0,0 +1,31 @@ +import { parse } from 'yaml' +import { pascalCase } from "change-case"; +import fs from "node:fs" + +const modulesDir = "./src-tsp/modules" + +const res = await fetch("https://raw.githubusercontent.com/blue-build/modules/113-feat-create-json-schemas-for-module-configuration/modules.json") +const modules = await res.json() + +let moduleImports = [] +let moduleModels = [] + +fs.existsSync(modulesDir) && fs.rmSync(modulesDir, { recursive: true }); +fs.mkdirSync(modulesDir) + +for (const module of modules) { + const res = await fetch(module) + const moduleYml = parse(await res.text()) + if (moduleYml.typespec) { + const res = await fetch(moduleYml.typespec) + fs.writeFileSync(`${modulesDir}/${moduleYml.name}.tsp`, await res.text()) + + moduleImports.push(`${moduleYml.name}.tsp`) + moduleModels.push(`${pascalCase(moduleYml.name)}`) + } +} + +fs.writeFileSync(`${modulesDir}/index.tsp`, +moduleImports.map(m => `import "./${m}";`).join("\n") + ` +alias Module = ${moduleModels.map(m => `${m}Module`).join(" | ")};` +) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index db537f2..c9448ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,9 @@ "version": "0.1.0", "dependencies": { "@typespec/compiler": "latest", - "@typespec/json-schema": "^0.56.0" + "@typespec/json-schema": "^0.56.0", + "change-case": "^5.4.4", + "yaml": "^2.4.2" } }, "node_modules/@babel/code-frame": { diff --git a/package.json b/package.json index 5b54a0b..730c2e7 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,13 @@ "type": "module", "dependencies": { "@typespec/compiler": "latest", - "@typespec/json-schema": "^0.56.0" + "@typespec/json-schema": "^0.56.0", + "change-case": "^5.4.4", + "yaml": "^2.4.2" }, "private": true, "scripts": { - "build": "rm -rf ./tsp-output && npx tsp compile ./src-tsp", + "build": "node ./fetchModuleSchemas.js && rm -rf ./tsp-output && npx tsp compile ./src-tsp", "build-web": "npm run build && node ./buildWeb.js" } } diff --git a/src-tsp/main.tsp b/src-tsp/main.tsp index eb45cb7..bd19994 100644 --- a/src-tsp/main.tsp +++ b/src-tsp/main.tsp @@ -1,5 +1,5 @@ import "@typespec/json-schema"; -import "./modules.tsp"; +import "./modules/index.tsp"; using TypeSpec.JsonSchema; diff --git a/src-tsp/modules.tsp b/src-tsp/modules.tsp deleted file mode 100644 index 7f5f284..0000000 --- a/src-tsp/modules.tsp +++ /dev/null @@ -1,12 +0,0 @@ -import "./modules/akmods.tsp"; -import "./modules/bling.tsp"; -import "./modules/fonts.tsp"; -import "./modules/rpm-ostree.tsp"; - -alias Module = - akmodsModule | - blingModule | - fontsModule | - rpmOstreeModule -; - diff --git a/src-tsp/modules/akmods.tsp b/src-tsp/modules/akmods.tsp deleted file mode 100644 index 4983e6c..0000000 --- a/src-tsp/modules/akmods.tsp +++ /dev/null @@ -1,9 +0,0 @@ -import "@typespec/json-schema"; -using TypeSpec.JsonSchema; - -@jsonSchema("/modules/akmods.json") -model akmodsModule { - type: "akmods", - base: "main" | "asus" | "fsync" | "surface", - install: Array -} \ No newline at end of file diff --git a/src-tsp/modules/bling.tsp b/src-tsp/modules/bling.tsp deleted file mode 100644 index 016fe8c..0000000 --- a/src-tsp/modules/bling.tsp +++ /dev/null @@ -1,8 +0,0 @@ -import "@typespec/json-schema"; -using TypeSpec.JsonSchema; - -@jsonSchema("/modules/bling.json") -model blingModule { - type: "bling", - install: "ublue-update" | "1password" | "dconf-update-service" | "gnome-vrr" | "laptop" | "flatpaksync" -} \ No newline at end of file diff --git a/src-tsp/modules/fonts.tsp b/src-tsp/modules/fonts.tsp deleted file mode 100644 index 4124315..0000000 --- a/src-tsp/modules/fonts.tsp +++ /dev/null @@ -1,11 +0,0 @@ -import "@typespec/json-schema"; -using TypeSpec.JsonSchema; - -@jsonSchema("/modules/fonts.json") -model fontsModule { - type: "fonts", - fonts: { - "nerd-fonts": Array, - "google-fonts": Array - } -} \ No newline at end of file diff --git a/src-tsp/modules/rpm-ostree.tsp b/src-tsp/modules/rpm-ostree.tsp deleted file mode 100644 index 51ccc9c..0000000 --- a/src-tsp/modules/rpm-ostree.tsp +++ /dev/null @@ -1,10 +0,0 @@ -import "@typespec/json-schema"; -using TypeSpec.JsonSchema; - -@jsonSchema("/modules/rpm-ostree.json") -model rpmOstreeModule { - type: "rpm-ostree", - repos: Array, - install: Array, - remove: Array, -} \ No newline at end of file