diff --git a/components/CategorySelectBox.vue b/components/CategorySelectBox.vue
index 7fc3af4..9b21e86 100644
--- a/components/CategorySelectBox.vue
+++ b/components/CategorySelectBox.vue
@@ -3,7 +3,7 @@ import type { InputOption } from '~/types'
const props = defineProps<{
options: InputOption[]
- modelValue: string
+ modelValue: string | number
count?: number
titleShowCount?: boolean
}>()
@@ -14,7 +14,7 @@ const selectedValue = useVModel(props, 'modelValue', emits)
const isOptionSelected = computed(() => {
return props.options.find(option => option.value === selectedValue.value)
})
-function onOptionSelected(value: string) {
+function onOptionSelected(value: string | number) {
emits('selected', value)
}
diff --git a/components/EditButton.vue b/components/EditButton.vue
index 1178872..df98db1 100644
--- a/components/EditButton.vue
+++ b/components/EditButton.vue
@@ -1,6 +1,6 @@
diff --git a/components/Navigation.vue b/components/Navigation.vue
index 8743754..f689c26 100644
--- a/components/Navigation.vue
+++ b/components/Navigation.vue
@@ -143,7 +143,7 @@ watch(y, (newY, oldY) => {
lg:bg-app-bg-dark_grey
>
diff --git a/components/Project/ProjectOpenessTeamMembers.vue b/components/Project/ProjectOpenessTeamMembers.vue
index 26d82db..d33ff67 100644
--- a/components/Project/ProjectOpenessTeamMembers.vue
+++ b/components/Project/ProjectOpenessTeamMembers.vue
@@ -1,7 +1,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ 'Project Name' }}
+
+
+
+
+ {{ name }}
+
+
+ Invalid project name
+
+
+
+
+ jumpTo($event)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
or you can submit changes by publishing them
+
+
+
+
+
+
+
+
+
diff --git a/pages/project/[id].vue b/pages/project/[id]/index.vue
similarity index 100%
rename from pages/project/[id].vue
rename to pages/project/[id]/index.vue
diff --git a/pages/project/create.vue b/pages/project/create.vue
new file mode 100644
index 0000000..15bc198
--- /dev/null
+++ b/pages/project/create.vue
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ 'Project Name' }}
+
+
+
+
+ {{ name }}
+
+
+ Invalid project name
+
+
+
+
+ jumpTo($event)"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
or you can submit changes by publishing them
+
+
+
+
+
+
+
+
+
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 88c4b1c..4839db9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,6 +18,9 @@ importers:
'@iconify-json/bi':
specifier: ^1.2.0
version: 1.2.0
+ '@iconify-json/eos-icons':
+ specifier: ^1.1.10
+ version: 1.2.0
'@iconify-json/heroicons-outline':
specifier: ^1.2.0
version: 1.2.0
@@ -29,7 +32,7 @@ importers:
version: 1.2.0
'@iconify-json/iconoir':
specifier: ^1.2.0
- version: 1.2.0
+ version: 1.2.1
'@iconify-json/material-symbols':
specifier: ^1.2.1
version: 1.2.1
@@ -38,7 +41,7 @@ importers:
version: 1.2.0
'@iconify-json/simple-icons':
specifier: ^1.2.2
- version: 1.2.2
+ version: 1.2.3
'@nuxt/devtools':
specifier: ^1.4.1
version: 1.4.1(rollup@4.21.2)(vite@5.4.2(@types/node@20.8.7)(terser@5.22.0))
@@ -60,6 +63,9 @@ importers:
'@unocss/nuxt':
specifier: ^0.62.3
version: 0.62.3(magicast@0.3.5)(postcss@8.4.44)(rollup@4.21.2)(vite@5.4.2(@types/node@20.8.7)(terser@5.22.0))(webpack@5.89.0(esbuild@0.23.1))
+ '@vee-validate/nuxt':
+ specifier: ^4.13.2
+ version: 4.13.2(magicast@0.3.5)(rollup@4.21.2)(vue@3.4.38(typescript@5.5.4))
'@vueuse/nuxt':
specifier: ^11.0.3
version: 11.0.3(magicast@0.3.5)(nuxt@3.13.0(@parcel/watcher@2.4.1)(@types/node@20.8.7)(encoding@0.1.13)(eslint@9.9.1(jiti@1.21.6))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.3)(rollup@4.21.2)(terser@5.22.0)(typescript@5.5.4)(vite@5.4.2(@types/node@20.8.7)(terser@5.22.0))(vue-tsc@2.1.4(typescript@5.5.4)))(rollup@4.21.2)(vue@3.4.38(typescript@5.5.4))
@@ -75,6 +81,9 @@ importers:
nuxt-lodash:
specifier: ^2.5.3
version: 2.5.3(rollup@4.21.2)
+ octokit:
+ specifier: ^4.0.2
+ version: 4.0.2
pinia:
specifier: ^2.2.2
version: 2.2.2(typescript@5.5.4)(vue@3.4.38(typescript@5.5.4))
@@ -90,6 +99,12 @@ importers:
vue-tsc:
specifier: ^2.1.4
version: 2.1.4(typescript@5.5.4)
+ yaml:
+ specifier: ^2.5.1
+ version: 2.5.1
+ yup:
+ specifier: ^1.4.0
+ version: 1.4.0
packages:
@@ -1113,6 +1128,9 @@ packages:
'@iconify-json/bi@1.2.0':
resolution: {integrity: sha512-kaBV87cQlyeMkBBiMqsf3b43Nsxdk/rYKvR29dnktht57WUyHCnBAuH+ca/bscX856CzRpVX+sYs7arjrJD0qA==}
+ '@iconify-json/eos-icons@1.2.0':
+ resolution: {integrity: sha512-grdfoS20Z4gWAzNPza7ytguNBWeTOkx4Y6aZHs149t2Z6AhW7zG3VWkkq6M+YuL2G8ugHnBw7ZxgazZ6oiMnIQ==}
+
'@iconify-json/heroicons-outline@1.2.0':
resolution: {integrity: sha512-Qy1sRmQYqih6xRxwCtnX0hXJ4252t83C0CnNWAP3gF0fH0Qmp9RY66LMB0moYGxQxUhsTFIl2nNceSVSBUo8Tg==}
@@ -1122,8 +1140,8 @@ packages:
'@iconify-json/ic@1.2.0':
resolution: {integrity: sha512-L4+m77xTQB08X3I+3xs1+IrvK+aNcuN/7ODu5aUPznHKLU+/8UYcsjUgNHze6vPOGPQ0AG+kCwvy91EYPXSRxw==}
- '@iconify-json/iconoir@1.2.0':
- resolution: {integrity: sha512-GbYAERFy9c1laIo1QZon9sBjRkX9rksirehmLIvvohn+W++fpPlvQnzVl0VpY/v2GCvs1pZ42spTKDj0AcofvA==}
+ '@iconify-json/iconoir@1.2.1':
+ resolution: {integrity: sha512-x55gpORwMGkmmT9UO11rzfMOp40k0ggQnPiOoh9axbyuHrkFMN7pdoCbaXkzqAdShcoI1dLzARbdqXi2sAPJXQ==}
'@iconify-json/material-symbols@1.2.1':
resolution: {integrity: sha512-r9yaBzlUmN87aCTSoCNtDCd7R9F0iVDjNPL9QHHhm1WglFJvTUKx9iBC5xcZpP0qN0bg9R5FkM90CndWxEBAnw==}
@@ -1131,8 +1149,8 @@ packages:
'@iconify-json/mdi@1.2.0':
resolution: {integrity: sha512-E9/3l5Syg3wfuarorFodhn4s8YorxhH3U3U20LaNBNiqw1kFNIDWhF6HymuzAD35k7RH0OBasJ+ZUyFtVVV6eg==}
- '@iconify-json/simple-icons@1.2.2':
- resolution: {integrity: sha512-VMgCoMnpvcCJ5b3rTOGPzW5j6959nIdRCk+8FGzK/vAaDd6f9sx65OcKOqP3C75llpybH/iQhk5yrJ/TOdQKeg==}
+ '@iconify-json/simple-icons@1.2.3':
+ resolution: {integrity: sha512-KZpqyPkDdyAvrpMz9/FYovwFsr3xrHf9esJeBng3iqNInhuZhF33XO1k6Yf8g2p10ynUW7AYEiGJkYzDi4DENQ==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -1360,6 +1378,113 @@ packages:
'@nuxtjs/color-mode@3.4.4':
resolution: {integrity: sha512-VSNJVGnRIjiGmfbMa0cN+rwNRowDRTL/wku/z5MpKSanVo3khIRitBNqNviso1l3T+LW0pLHeXBNp6L8g/l1EA==}
+ '@octokit/app@15.1.0':
+ resolution: {integrity: sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/auth-app@7.1.1':
+ resolution: {integrity: sha512-kRAd6yelV9OgvlEJE88H0VLlQdZcag9UlLr7dV0YYP37X8PPDvhgiTy66QVhDXdyoT0AleFN2w/qXkPdrSzINg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/auth-oauth-app@8.1.1':
+ resolution: {integrity: sha512-5UtmxXAvU2wfcHIPPDWzVSAWXVJzG3NWsxb7zCFplCWEmMCArSZV0UQu5jw5goLQXbFyOr5onzEH37UJB3zQQg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/auth-oauth-device@7.1.1':
+ resolution: {integrity: sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/auth-oauth-user@5.1.1':
+ resolution: {integrity: sha512-rRkMz0ErOppdvEfnemHJXgZ9vTPhBuC6yASeFaB7I2yLMd7QpjfrL1mnvRPlyKo+M6eeLxrKanXJ9Qte29SRsw==}
+ engines: {node: '>= 18'}
+
+ '@octokit/auth-token@5.1.1':
+ resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==}
+ engines: {node: '>= 18'}
+
+ '@octokit/auth-unauthenticated@6.1.0':
+ resolution: {integrity: sha512-zPSmfrUAcspZH/lOFQnVnvjQZsIvmfApQH6GzJrkIunDooU1Su2qt2FfMTSVPRp7WLTQyC20Kd55lF+mIYaohQ==}
+ engines: {node: '>= 18'}
+
+ '@octokit/core@6.1.2':
+ resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/endpoint@10.1.1':
+ resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==}
+ engines: {node: '>= 18'}
+
+ '@octokit/graphql@8.1.1':
+ resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/oauth-app@7.1.3':
+ resolution: {integrity: sha512-EHXbOpBkSGVVGF1W+NLMmsnSsJRkcrnVmDKt0TQYRBb6xWfWzoi9sBD4DIqZ8jGhOWO/V8t4fqFyJ4vDQDn9bg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/oauth-authorization-url@7.1.1':
+ resolution: {integrity: sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA==}
+ engines: {node: '>= 18'}
+
+ '@octokit/oauth-methods@5.1.2':
+ resolution: {integrity: sha512-C5lglRD+sBlbrhCUTxgJAFjWgJlmTx5bQ7Ch0+2uqRjYv7Cfb5xpX4WuSC9UgQna3sqRGBL9EImX9PvTpMaQ7g==}
+ engines: {node: '>= 18'}
+
+ '@octokit/openapi-types@22.2.0':
+ resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==}
+
+ '@octokit/openapi-webhooks-types@8.3.0':
+ resolution: {integrity: sha512-vKLsoR4xQxg4Z+6rU/F65ItTUz/EXbD+j/d4mlq2GW8TsA4Tc8Kdma2JTAAJ5hrKWUQzkR/Esn2fjsqiVRYaQg==}
+
+ '@octokit/plugin-paginate-graphql@5.2.2':
+ resolution: {integrity: sha512-7znSVvlNAOJisCqAnjN1FtEziweOHSjPGAuc5W58NeGNAr/ZB57yCsjQbXDlWsVryA7hHQaEQPcBbJYFawlkyg==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/plugin-paginate-rest@11.3.3':
+ resolution: {integrity: sha512-o4WRoOJZlKqEEgj+i9CpcmnByvtzoUYC6I8PD2SA95M+BJ2x8h7oLcVOg9qcowWXBOdcTRsMZiwvM3EyLm9AfA==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/plugin-rest-endpoint-methods@13.2.4':
+ resolution: {integrity: sha512-gusyAVgTrPiuXOdfqOySMDztQHv6928PQ3E4dqVGEtOvRXAKRbJR4b1zQyniIT9waqaWk/UDaoJ2dyPr7Bk7Iw==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/plugin-retry@7.1.1':
+ resolution: {integrity: sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/plugin-throttling@9.3.1':
+ resolution: {integrity: sha512-Qd91H4liUBhwLB2h6jZ99bsxoQdhgPk6TdwnClPyTBSDAdviGPceViEgUwj+pcQDmB/rfAXAXK7MTochpHM3yQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@octokit/core': ^6.0.0
+
+ '@octokit/request-error@6.1.4':
+ resolution: {integrity: sha512-VpAhIUxwhWZQImo/dWAN/NpPqqojR6PSLgLYAituLM6U+ddx9hCioFGwBr5Mi+oi5CLeJkcAs3gJ0PYYzU6wUg==}
+ engines: {node: '>= 18'}
+
+ '@octokit/request@9.1.3':
+ resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==}
+ engines: {node: '>= 18'}
+
+ '@octokit/types@13.5.0':
+ resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==}
+
+ '@octokit/webhooks-methods@5.1.0':
+ resolution: {integrity: sha512-yFZa3UH11VIxYnnoOYCVoJ3q4ChuSOk2IVBBQ0O3xtKX4x9bmKb/1t+Mxixv2iUhzMdOl1qeWJqEhouXXzB3rQ==}
+ engines: {node: '>= 18'}
+
+ '@octokit/webhooks@13.3.0':
+ resolution: {integrity: sha512-TUkJLtI163Bz5+JK0O+zDkQpn4gKwN+BovclUvCj6pI/6RXrFqQvUMRS2M+Rt8Rv0qR3wjoMoOPmpJKeOh0nBg==}
+ engines: {node: '>= 18'}
+
'@parcel/watcher-android-arm64@2.4.1':
resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==}
engines: {node: '>= 10.0.0'}
@@ -1708,6 +1833,9 @@ packages:
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
+ '@types/aws-lambda@8.10.145':
+ resolution: {integrity: sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==}
+
'@types/eslint-scope@3.7.6':
resolution: {integrity: sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==}
@@ -1915,6 +2043,9 @@ packages:
peerDependencies:
webpack: ^4 || ^5
+ '@vee-validate/nuxt@4.13.2':
+ resolution: {integrity: sha512-rpYYO2isCrgHRdJnKRXGPn8aqhyZvCPUJgNubftPum1txbngkO/LNiFsZdFDO7auGprDAQf7axpszRfeKoCGVg==}
+
'@vercel/nft@0.26.5':
resolution: {integrity: sha512-NHxohEqad6Ra/r4lGknO52uc/GrWILXAMs1BB4401GTqww0fw1bAqzpG1XHuDO+dprg4GvsD9ZLLSsdo78p9hQ==}
engines: {node: '>=16'}
@@ -2272,6 +2403,9 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ before-after-hook@3.0.2:
+ resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==}
+
binary-extensions@2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
@@ -2288,6 +2422,9 @@ packages:
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ bottleneck@2.19.5:
+ resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==}
+
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
@@ -3594,9 +3731,6 @@ packages:
engines: {node: '>=6'}
hasBin: true
- jsonc-parser@3.2.0:
- resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
-
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
@@ -3855,9 +3989,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
- mlly@1.4.2:
- resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
-
mlly@1.7.1:
resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
@@ -4031,6 +4162,10 @@ packages:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
+ octokit@4.0.2:
+ resolution: {integrity: sha512-wbqF4uc1YbcldtiBFfkSnquHtECEIpYD78YUXI6ri1Im5OO2NLo6ZVpRdbJpdnpZ05zMrVPssNiEo6JQtea+Qg==}
+ engines: {node: '>= 18'}
+
ofetch@1.3.3:
resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==}
@@ -4205,9 +4340,6 @@ packages:
typescript:
optional: true
- pkg-types@1.0.3:
- resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
-
pkg-types@1.2.0:
resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==}
@@ -4431,6 +4563,9 @@ packages:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
+ property-expr@2.0.6:
+ resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==}
+
protocols@2.0.1:
resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
@@ -4920,6 +5055,9 @@ packages:
text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ tiny-case@1.0.3:
+ resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==}
+
tiny-invariant@1.3.1:
resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
@@ -4957,6 +5095,9 @@ packages:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
+ toposort@2.0.2:
+ resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==}
+
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
@@ -5001,10 +5142,18 @@ packages:
resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
engines: {node: '>=8'}
+ type-fest@2.19.0:
+ resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+ engines: {node: '>=12.20'}
+
type-fest@3.13.1:
resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
engines: {node: '>=14.16'}
+ type-fest@4.26.1:
+ resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==}
+ engines: {node: '>=16'}
+
typescript@5.5.4:
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
engines: {node: '>=14.17'}
@@ -5059,6 +5208,12 @@ packages:
resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ universal-github-app-jwt@2.2.0:
+ resolution: {integrity: sha512-G5o6f95b5BggDGuUfKDApKaCgNYy2x7OdHY0zSMF081O0EJobw+1130VONhrA7ezGSV2FNOGyM+KQpQZAr9bIQ==}
+
+ universal-user-agent@7.0.2:
+ resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==}
+
universalify@2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
@@ -5221,6 +5376,11 @@ packages:
resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ vee-validate@4.13.2:
+ resolution: {integrity: sha512-HlpR/6MJ92TW9f135umMZKUqdd/tFQTxLNSf2ImbU4Y/MlLVAUpF1l64VdjTOhbClAqPjCb5p/SqHDxLpUHXrw==}
+ peerDependencies:
+ vue: ^3.4.26
+
vite-hot-client@0.2.3:
resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==}
peerDependencies:
@@ -5523,8 +5683,8 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- yaml@2.5.0:
- resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==}
+ yaml@2.5.1:
+ resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==}
engines: {node: '>= 14'}
hasBin: true
@@ -5544,6 +5704,9 @@ packages:
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
engines: {node: '>=12.20'}
+ yup@1.4.0:
+ resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==}
+
zhead@2.2.4:
resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==}
@@ -6466,6 +6629,10 @@ snapshots:
dependencies:
'@iconify/types': 2.0.0
+ '@iconify-json/eos-icons@1.2.0':
+ dependencies:
+ '@iconify/types': 2.0.0
+
'@iconify-json/heroicons-outline@1.2.0':
dependencies:
'@iconify/types': 2.0.0
@@ -6478,7 +6645,7 @@ snapshots:
dependencies:
'@iconify/types': 2.0.0
- '@iconify-json/iconoir@1.2.0':
+ '@iconify-json/iconoir@1.2.1':
dependencies:
'@iconify/types': 2.0.0
@@ -6490,7 +6657,7 @@ snapshots:
dependencies:
'@iconify/types': 2.0.0
- '@iconify-json/simple-icons@1.2.2':
+ '@iconify-json/simple-icons@1.2.3':
dependencies:
'@iconify/types': 2.0.0
@@ -6832,9 +6999,9 @@ snapshots:
ignore: 5.2.4
jiti: 1.20.0
knitwork: 1.0.0
- mlly: 1.4.2
+ mlly: 1.7.1
pathe: 1.1.1
- pkg-types: 1.0.3
+ pkg-types: 1.2.0
scule: 1.0.0
semver: 7.5.4
ufo: 1.3.1
@@ -6870,7 +7037,7 @@ snapshots:
defu: 6.1.2
hookable: 5.5.3
pathe: 1.1.1
- pkg-types: 1.0.3
+ pkg-types: 1.2.0
postcss-import-resolver: 2.0.0
std-env: 3.4.3
ufo: 1.3.1
@@ -7013,6 +7180,152 @@ snapshots:
- rollup
- supports-color
+ '@octokit/app@15.1.0':
+ dependencies:
+ '@octokit/auth-app': 7.1.1
+ '@octokit/auth-unauthenticated': 6.1.0
+ '@octokit/core': 6.1.2
+ '@octokit/oauth-app': 7.1.3
+ '@octokit/plugin-paginate-rest': 11.3.3(@octokit/core@6.1.2)
+ '@octokit/types': 13.5.0
+ '@octokit/webhooks': 13.3.0
+
+ '@octokit/auth-app@7.1.1':
+ dependencies:
+ '@octokit/auth-oauth-app': 8.1.1
+ '@octokit/auth-oauth-user': 5.1.1
+ '@octokit/request': 9.1.3
+ '@octokit/request-error': 6.1.4
+ '@octokit/types': 13.5.0
+ lru-cache: 10.4.3
+ universal-github-app-jwt: 2.2.0
+ universal-user-agent: 7.0.2
+
+ '@octokit/auth-oauth-app@8.1.1':
+ dependencies:
+ '@octokit/auth-oauth-device': 7.1.1
+ '@octokit/auth-oauth-user': 5.1.1
+ '@octokit/request': 9.1.3
+ '@octokit/types': 13.5.0
+ universal-user-agent: 7.0.2
+
+ '@octokit/auth-oauth-device@7.1.1':
+ dependencies:
+ '@octokit/oauth-methods': 5.1.2
+ '@octokit/request': 9.1.3
+ '@octokit/types': 13.5.0
+ universal-user-agent: 7.0.2
+
+ '@octokit/auth-oauth-user@5.1.1':
+ dependencies:
+ '@octokit/auth-oauth-device': 7.1.1
+ '@octokit/oauth-methods': 5.1.2
+ '@octokit/request': 9.1.3
+ '@octokit/types': 13.5.0
+ universal-user-agent: 7.0.2
+
+ '@octokit/auth-token@5.1.1': {}
+
+ '@octokit/auth-unauthenticated@6.1.0':
+ dependencies:
+ '@octokit/request-error': 6.1.4
+ '@octokit/types': 13.5.0
+
+ '@octokit/core@6.1.2':
+ dependencies:
+ '@octokit/auth-token': 5.1.1
+ '@octokit/graphql': 8.1.1
+ '@octokit/request': 9.1.3
+ '@octokit/request-error': 6.1.4
+ '@octokit/types': 13.5.0
+ before-after-hook: 3.0.2
+ universal-user-agent: 7.0.2
+
+ '@octokit/endpoint@10.1.1':
+ dependencies:
+ '@octokit/types': 13.5.0
+ universal-user-agent: 7.0.2
+
+ '@octokit/graphql@8.1.1':
+ dependencies:
+ '@octokit/request': 9.1.3
+ '@octokit/types': 13.5.0
+ universal-user-agent: 7.0.2
+
+ '@octokit/oauth-app@7.1.3':
+ dependencies:
+ '@octokit/auth-oauth-app': 8.1.1
+ '@octokit/auth-oauth-user': 5.1.1
+ '@octokit/auth-unauthenticated': 6.1.0
+ '@octokit/core': 6.1.2
+ '@octokit/oauth-authorization-url': 7.1.1
+ '@octokit/oauth-methods': 5.1.2
+ '@types/aws-lambda': 8.10.145
+ universal-user-agent: 7.0.2
+
+ '@octokit/oauth-authorization-url@7.1.1': {}
+
+ '@octokit/oauth-methods@5.1.2':
+ dependencies:
+ '@octokit/oauth-authorization-url': 7.1.1
+ '@octokit/request': 9.1.3
+ '@octokit/request-error': 6.1.4
+ '@octokit/types': 13.5.0
+
+ '@octokit/openapi-types@22.2.0': {}
+
+ '@octokit/openapi-webhooks-types@8.3.0': {}
+
+ '@octokit/plugin-paginate-graphql@5.2.2(@octokit/core@6.1.2)':
+ dependencies:
+ '@octokit/core': 6.1.2
+
+ '@octokit/plugin-paginate-rest@11.3.3(@octokit/core@6.1.2)':
+ dependencies:
+ '@octokit/core': 6.1.2
+ '@octokit/types': 13.5.0
+
+ '@octokit/plugin-rest-endpoint-methods@13.2.4(@octokit/core@6.1.2)':
+ dependencies:
+ '@octokit/core': 6.1.2
+ '@octokit/types': 13.5.0
+
+ '@octokit/plugin-retry@7.1.1(@octokit/core@6.1.2)':
+ dependencies:
+ '@octokit/core': 6.1.2
+ '@octokit/request-error': 6.1.4
+ '@octokit/types': 13.5.0
+ bottleneck: 2.19.5
+
+ '@octokit/plugin-throttling@9.3.1(@octokit/core@6.1.2)':
+ dependencies:
+ '@octokit/core': 6.1.2
+ '@octokit/types': 13.5.0
+ bottleneck: 2.19.5
+
+ '@octokit/request-error@6.1.4':
+ dependencies:
+ '@octokit/types': 13.5.0
+
+ '@octokit/request@9.1.3':
+ dependencies:
+ '@octokit/endpoint': 10.1.1
+ '@octokit/request-error': 6.1.4
+ '@octokit/types': 13.5.0
+ universal-user-agent: 7.0.2
+
+ '@octokit/types@13.5.0':
+ dependencies:
+ '@octokit/openapi-types': 22.2.0
+
+ '@octokit/webhooks-methods@5.1.0': {}
+
+ '@octokit/webhooks@13.3.0':
+ dependencies:
+ '@octokit/openapi-webhooks-types': 8.3.0
+ '@octokit/request-error': 6.1.4
+ '@octokit/webhooks-methods': 5.1.0
+
'@parcel/watcher-android-arm64@2.4.1':
optional: true
@@ -7282,6 +7595,8 @@ snapshots:
'@trysound/sax@0.2.0': {}
+ '@types/aws-lambda@8.10.145': {}
+
'@types/eslint-scope@3.7.6':
dependencies:
'@types/eslint': 9.6.1
@@ -7628,6 +7943,17 @@ snapshots:
- rollup
- supports-color
+ '@vee-validate/nuxt@4.13.2(magicast@0.3.5)(rollup@4.21.2)(vue@3.4.38(typescript@5.5.4))':
+ dependencies:
+ '@nuxt/kit': 3.13.0(magicast@0.3.5)(rollup@4.21.2)
+ local-pkg: 0.5.0
+ vee-validate: 4.13.2(vue@3.4.38(typescript@5.5.4))
+ transitivePeerDependencies:
+ - magicast
+ - rollup
+ - supports-color
+ - vue
+
'@vercel/nft@0.26.5(encoding@0.1.13)':
dependencies:
'@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13)
@@ -8141,6 +8467,8 @@ snapshots:
base64-js@1.5.1: {}
+ before-after-hook@3.0.2: {}
+
binary-extensions@2.2.0: {}
bindings@1.5.0:
@@ -8158,6 +8486,8 @@ snapshots:
boolbase@1.0.0: {}
+ bottleneck@2.19.5: {}
+
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
@@ -8251,11 +8581,11 @@ snapshots:
dotenv: 16.3.1
giget: 1.1.3
jiti: 1.20.0
- mlly: 1.4.2
+ mlly: 1.7.1
ohash: 1.1.3
pathe: 1.1.1
perfect-debounce: 1.0.0
- pkg-types: 1.0.3
+ pkg-types: 1.2.0
rc9: 2.1.1
transitivePeerDependencies:
- supports-color
@@ -9649,8 +9979,6 @@ snapshots:
json5@2.2.3: {}
- jsonc-parser@3.2.0: {}
-
jsonfile@6.1.0:
dependencies:
universalify: 2.0.0
@@ -9722,7 +10050,7 @@ snapshots:
local-pkg@0.5.0:
dependencies:
- mlly: 1.4.2
+ mlly: 1.7.1
pkg-types: 1.2.0
locate-path@5.0.0:
@@ -9905,13 +10233,6 @@ snapshots:
mkdirp@1.0.4: {}
- mlly@1.4.2:
- dependencies:
- acorn: 8.10.0
- pathe: 1.1.1
- pkg-types: 1.0.3
- ufo: 1.3.1
-
mlly@1.7.1:
dependencies:
acorn: 8.12.1
@@ -10261,6 +10582,19 @@ snapshots:
object-assign@4.1.1: {}
+ octokit@4.0.2:
+ dependencies:
+ '@octokit/app': 15.1.0
+ '@octokit/core': 6.1.2
+ '@octokit/oauth-app': 7.1.3
+ '@octokit/plugin-paginate-graphql': 5.2.2(@octokit/core@6.1.2)
+ '@octokit/plugin-paginate-rest': 11.3.3(@octokit/core@6.1.2)
+ '@octokit/plugin-rest-endpoint-methods': 13.2.4(@octokit/core@6.1.2)
+ '@octokit/plugin-retry': 7.1.1(@octokit/core@6.1.2)
+ '@octokit/plugin-throttling': 9.3.1(@octokit/core@6.1.2)
+ '@octokit/request-error': 6.1.4
+ '@octokit/types': 13.5.0
+
ofetch@1.3.3:
dependencies:
destr: 2.0.2
@@ -10429,12 +10763,6 @@ snapshots:
optionalDependencies:
typescript: 5.5.4
- pkg-types@1.0.3:
- dependencies:
- jsonc-parser: 3.2.0
- mlly: 1.4.2
- pathe: 1.1.1
-
pkg-types@1.2.0:
dependencies:
confbox: 0.1.7
@@ -10653,6 +10981,8 @@ snapshots:
kleur: 3.0.3
sisteransi: 1.0.5
+ property-expr@2.0.6: {}
+
protocols@2.0.1: {}
prr@1.0.1: {}
@@ -11215,6 +11545,8 @@ snapshots:
text-table@0.2.0: {}
+ tiny-case@1.0.3: {}
+
tiny-invariant@1.3.1: {}
tinybench@2.9.0: {}
@@ -11240,6 +11572,8 @@ snapshots:
toidentifier@1.0.1: {}
+ toposort@2.0.2: {}
+
totalist@3.0.1: {}
tr46@0.0.3: {}
@@ -11274,8 +11608,12 @@ snapshots:
type-fest@0.8.1: {}
+ type-fest@2.19.0: {}
+
type-fest@3.13.1: {}
+ type-fest@4.26.1: {}
+
typescript@5.5.4: {}
ufo@1.3.1: {}
@@ -11349,9 +11687,9 @@ snapshots:
fast-glob: 3.3.1
local-pkg: 0.4.3
magic-string: 0.30.5
- mlly: 1.4.2
+ mlly: 1.7.1
pathe: 1.1.1
- pkg-types: 1.0.3
+ pkg-types: 1.2.0
scule: 1.0.0
strip-literal: 1.3.0
unplugin: 1.5.0
@@ -11366,6 +11704,10 @@ snapshots:
dependencies:
imurmurhash: 0.1.4
+ universal-github-app-jwt@2.2.0: {}
+
+ universal-user-agent@7.0.2: {}
+
universalify@2.0.0: {}
unocss@0.62.3(@unocss/webpack@0.62.3(rollup@4.21.2)(webpack@5.89.0(esbuild@0.23.1)))(postcss@8.4.44)(rollup@4.21.2)(vite@5.4.2(@types/node@20.8.7)(terser@5.22.0)):
@@ -11413,7 +11755,7 @@ snapshots:
pathe: 1.1.2
scule: 1.3.0
unplugin: 1.12.3
- yaml: 2.5.0
+ yaml: 2.5.1
optionalDependencies:
vue-router: 4.4.3(vue@3.4.38(typescript@5.5.4))
transitivePeerDependencies:
@@ -11544,6 +11886,12 @@ snapshots:
dependencies:
builtins: 5.0.1
+ vee-validate@4.13.2(vue@3.4.38(typescript@5.5.4)):
+ dependencies:
+ '@vue/devtools-api': 6.6.3
+ type-fest: 4.26.1
+ vue: 3.4.38(typescript@5.5.4)
+
vite-hot-client@0.2.3(vite@5.4.2(@types/node@20.8.7)(terser@5.22.0)):
dependencies:
vite: 5.4.2(@types/node@20.8.7)(terser@5.22.0)
@@ -11860,7 +12208,7 @@ snapshots:
yallist@4.0.0: {}
- yaml@2.5.0: {}
+ yaml@2.5.1: {}
yargs-parser@21.1.1: {}
@@ -11878,6 +12226,13 @@ snapshots:
yocto-queue@1.0.0: {}
+ yup@1.4.0:
+ dependencies:
+ property-expr: 2.0.6
+ tiny-case: 1.0.3
+ toposort: 2.0.2
+ type-fest: 2.19.0
+
zhead@2.2.4: {}
zip-stream@6.0.1:
diff --git a/server/api/data.post.ts b/server/api/data.post.ts
new file mode 100644
index 0000000..80b0b17
--- /dev/null
+++ b/server/api/data.post.ts
@@ -0,0 +1,135 @@
+import { App } from 'octokit'
+import yaml from 'yaml'
+import type { Project } from '~/types'
+
+export default defineEventHandler(async (event) => {
+ const body = await readBody<{ project: Project, image?: { type: string, data: string } }>(event)
+ const yamlProject = yaml.stringify(body.project)
+ const { appId, privateKey, installationId } = useAppConfig().github
+
+ const id = body.project.id || body.project.name.toLowerCase().replace(/\s+/g, '-')
+
+ const app = new App({
+ appId,
+ privateKey,
+ })
+ await app.octokit.rest.apps.getAuthenticated()
+ const octokit = await app.getInstallationOctokit(installationId)
+
+ const owner = 'develit-io'
+ const repo = 'test-repo'
+ const baseBranch = 'main'
+ const newBranchName = `${id}-project-update-${Date.now()}`
+ const commitMessage = `${body.project.id ? `Updating the project: ${body.project.name}` : `Initiating the creation of project: ${body.project.name}`}`
+
+ const files = [
+ {
+ path: `src/projects/${id}/index.yaml`,
+ content: yamlProject,
+ encoding: 'utf-8',
+ },
+ ]
+
+ if (body.image?.data && body.image?.type) {
+ files.push(
+ {
+ path: `src/projects/${id}/logo.${body.image.type.split('/')[1]}`,
+ content: body.image.data,
+ encoding: 'base64',
+ },
+ )
+ }
+
+ async function createBranch(owner: string, repo: string, newBranchName: string, baseBranch: string) {
+ const { data: baseBranchData } = await octokit.rest.git.getRef({
+ owner,
+ repo,
+ ref: `heads/${baseBranch}`,
+ })
+
+ await octokit.rest.git.createRef({
+ owner,
+ repo,
+ ref: `refs/heads/${newBranchName}`,
+ sha: baseBranchData.object.sha,
+ })
+ }
+
+ async function commitChangesToNewBranch(owner: string, repo: string, newBranch: string, message: string, files: { path: string, content: string, encoding: string }[]) {
+ const { data: latestCommit } = await octokit.rest.repos.getCommit({
+ owner,
+ repo,
+ ref: newBranch,
+ })
+
+ const { data: baseTree } = await octokit.rest.git.getTree({
+ owner,
+ repo,
+ tree_sha: latestCommit.commit.tree.sha,
+ })
+
+ const blobs = await Promise.all(files.map(async (file) => {
+ const { data: blob } = await octokit.rest.git.createBlob({
+ owner,
+ repo,
+ content: file.content,
+ encoding: file.encoding,
+ })
+ return {
+ path: file.path,
+ mode: '100644' as const,
+ type: 'blob' as const,
+ sha: blob.sha,
+ }
+ }))
+
+ const { data: newTree } = await octokit.rest.git.createTree({
+ owner,
+ repo,
+ base_tree: baseTree.sha,
+ tree: blobs,
+ })
+
+ const { data: newCommit } = await octokit.rest.git.createCommit({
+ owner,
+ repo,
+ message,
+ tree: newTree.sha,
+ parents: [latestCommit.sha],
+ })
+
+ await octokit.rest.git.updateRef({
+ owner,
+ repo,
+ ref: `heads/${newBranch}`,
+ sha: newCommit.sha,
+ })
+ }
+
+ async function createPullRequest(owner: string, repo: string, head: string, base: string, title: string, body: string) {
+ const { data: pullRequest } = await octokit.rest.pulls.create({
+ owner,
+ repo,
+ title,
+ head,
+ base,
+ body,
+ })
+
+ return pullRequest
+ }
+
+ try {
+ await createBranch(owner, repo, newBranchName, baseBranch)
+ console.log(`Branch ${newBranchName} created successfully!`)
+
+ await commitChangesToNewBranch(owner, repo, newBranchName, commitMessage, files)
+ console.log(`Changes committed to branch ${newBranchName} successfully!`)
+
+ const pullRequestData = await createPullRequest(owner, repo, newBranchName, baseBranch, `${body.project.id ? `Update project: ${body.project.name}` : `Create project: ${body.project.name}`}`, `${body.project.id ? `Updating the project: ${body.project.name}` : `Initiating the creation of project: ${body.project.name}`}`)
+ console.log('Pull request created:', pullRequestData)
+ }
+ catch (error) {
+ console.error('Error during GitHub operations:', error)
+ }
+})
diff --git a/server/assets/data.json b/server/assets/data.json
index d42097e..286fbed 100644
--- a/server/assets/data.json
+++ b/server/assets/data.json
@@ -16084,6 +16084,48 @@
"name": "Other"
}
],
+ "project_phase": [
+ {
+ "id": "mainnet",
+ "name": "Mainnet"
+ },
+ {
+ "id": "testnet",
+ "name": "Testnet"
+ },
+ {
+ "id": "alpha",
+ "name": "Alpha"
+ },
+ {
+ "id": "beta",
+ "name": "Beta"
+ },
+ {
+ "id": "mvp",
+ "name": "MVP"
+ }
+ ],
+ "asset_custody_type": [
+ {
+ "id": "non-custody",
+ "name": "Non-custody"
+ }
+ ],
+ "sign_in_type_requirments": [
+ {
+ "id": "wallet",
+ "name": "Wallet"
+ },
+ {
+ "id": "email",
+ "name": "Email"
+ },
+ {
+ "id": "seed",
+ "name": "Seed"
+ }
+ ],
"assets": [
{
"id": "eth",
diff --git a/types/category.ts b/types/category.ts
index 2528b8b..9351a6f 100644
--- a/types/category.ts
+++ b/types/category.ts
@@ -1,6 +1,6 @@
export interface Category {
id: string
name: string
+ usecases: string[]
projectsCount: number
- usecases?: string[]
}
diff --git a/types/components.ts b/types/components.ts
index 283767f..89a52ae 100644
--- a/types/components.ts
+++ b/types/components.ts
@@ -1,5 +1,5 @@
export interface InputOption {
label: string
- value: string
+ value: string | number
count?: number
}
diff --git a/types/member.ts b/types/member.ts
index 77d69d0..d25aabb 100644
--- a/types/member.ts
+++ b/types/member.ts
@@ -9,7 +9,7 @@ export interface Member {
role?: string
link?: string
[k: string]: unknown
- }
+ }[]
company?: {
name?: string
link?: string
diff --git a/types/project.ts b/types/project.ts
index dd1fc0c..628c996 100644
--- a/types/project.ts
+++ b/types/project.ts
@@ -1,4 +1,4 @@
-import type { Member } from './member'
+import type { Team } from './team'
import type { Fund } from './fund'
import type { ClientDiversability } from './clientDiversability'
import type { Audit } from './audit'
@@ -16,15 +16,17 @@ export interface Project {
assets_used?: string[]
tokens?: {
name?: string
- symbol: string
+ symbol?: string
network?: string
contract_address?: string
- link?: string
+ token_link?: string
[k: string]: unknown
}[]
description?: string
project_type?: string
product_launch_day?: string
+ project_phase?: string
+ sunset: boolean
technology?: {
type: string
name?: string
@@ -65,17 +67,17 @@ export interface Project {
}
[k: string]: unknown
opensource: boolean
- viewing_key: boolean
- dissapearing_tx: boolean
- frontend_anonymity: string
- identity_integration: null
- connected_tx: boolean
- revealed_recipient: boolean
- revealed_sender: boolean
- revealed_ammount: boolean
- reversability_condition: string
- data_masking: string
- asset_custody_type: string
+ viewing_key?: boolean
+ dissapearing_tx?: boolean
+ frontend_anonymity?: string
+ identity_integration?: null
+ connected_tx?: boolean
+ revealed_recipient?: boolean
+ revealed_sender?: boolean
+ revealed_ammount?: boolean
+ reversability_condition?: string
+ data_masking?: string
+ asset_custody_type?: string
}
licences?: string
privacy_policy?: {
@@ -84,7 +86,7 @@ export interface Project {
data_usage?: string
[k: string]: unknown
}
- team?: Member[]
+ team?: Team
storage?: {
decentralized?: boolean
[k: string]: unknown
@@ -92,7 +94,7 @@ export interface Project {
tracebility?: {
tracked_data?: string
kyc?: boolean
- sign_in_type_requirments?: string
+ sign_in_type_requirments?: string[]
[k: string]: unknown
}
third_party_dependency?: string
@@ -107,7 +109,7 @@ export interface Project {
time?: string
link?: string
[k: string]: unknown
- }
+ }[]
client_diversability?: ClientDiversability[]
default_privacy?: boolean
funding?: Fund[]
@@ -133,23 +135,23 @@ export interface ProjectShallow {
title1: string
description: string
percentage: number
+ forum?: string
+ github?: string
+ website?: string
+ twitter?: string
+ coingecko?: string
+ explorer?: string
+ newsletter?: string
+ readyness?: string
+ team?: Team
+ docs?: string
+ audits?: Audit[]
+ support?: number
+ anonymity?: boolean
categories: string[]
usecases?: string[]
ecosystem?: string[]
assets_used?: string []
- forum?: string | undefined
- github?: string | undefined
- website?: string | undefined
- twitter?: string | undefined
- coingecko?: string | undefined
- explorer?: string | undefined
- newsletter?: string | undefined
- readyness?: string | undefined
- team: Member[] | undefined
- docs: string | undefined
- audits?: Audit[] | undefined
- support?: number | undefined
- anonymity?: boolean | undefined
ratings?: ProjectRating[]
}
diff --git a/types/team.ts b/types/team.ts
new file mode 100644
index 0000000..11d54b9
--- /dev/null
+++ b/types/team.ts
@@ -0,0 +1,19 @@
+export interface Team {
+ name?: string
+ role?: string
+ link?: string
+ avatar?: string
+ anonymous?: boolean
+ teammembers?: {
+ name?: string
+ role?: string
+ link?: string
+ [k: string]: unknown
+ }[]
+ company?: {
+ name?: string
+ link?: string
+ contacts?: string
+ [k: string]: unknown
+ }
+}
diff --git a/unocss.config.ts b/unocss.config.ts
index 283af91..aea79c1 100644
--- a/unocss.config.ts
+++ b/unocss.config.ts
@@ -47,6 +47,7 @@ export default defineConfig({
black: '#000',
green: '#B5E26B',
red: '#FF5252',
+ danger: '#FF0000',
bg: {
grey: '#ffffff33',
dark_grey: '#161616',