This commit is contained in:
Patrick Alvin Alcala 2025-11-20 13:03:40 +08:00
parent 4184942584
commit afb5f3a287
66 changed files with 550 additions and 57 deletions

View file

@ -1,6 +0,0 @@
WEBSITE_NAME="Dasig Solid"
WEBSITE_DESCRIPTION="A template for next level speed (Solid Version)"
AUTHOR="Patrick Alvin Alcala"
FONT="inter"

View file

@ -1,6 +0,0 @@
semi: false
singleQuote: true
trailingComma: 'es5'
bracketSpacing: true
printWidth: 500
proseWrap: 'preserve'

View file

@ -1,3 +0,0 @@
import { defineConfig } from "@solidjs/start/config";
export default defineConfig({});

View file

11
frontend/app.config.ts Normal file
View file

@ -0,0 +1,11 @@
import { defineConfig } from '@solidjs/start/config'
export default defineConfig({
ssr: false,
server: {
static: true,
prerender: {
crawlLinks: true,
},
},
})

42
frontend/biome.json Normal file
View file

@ -0,0 +1,42 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.6/schema.json",
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
"files": { "ignoreUnknown": false },
"formatter": {
"enabled": true,
"formatWithErrors": false,
"indentStyle": "space",
"indentWidth": 2,
"lineEnding": "lf",
"lineWidth": 320,
"attributePosition": "auto",
"bracketSameLine": false,
"bracketSpacing": true,
"expand": "auto",
"useEditorconfig": true
},
"linter": { "enabled": true, "rules": { "recommended": true } },
"javascript": {
"formatter": {
"jsxQuoteStyle": "double",
"quoteProperties": "asNeeded",
"trailingCommas": "es5",
"semicolons": "asNeeded",
"arrowParentheses": "always",
"bracketSameLine": false,
"quoteStyle": "single",
"attributePosition": "auto",
"bracketSpacing": true
}
},
"html": {
"formatter": {
"indentScriptAndStyle": false,
"selfCloseVoidElements": "always"
}
},
"assist": {
"enabled": true,
"actions": { "source": { "organizeImports": "on" } }
}
}

View file

@ -0,0 +1,3 @@
import { atom } from 'nanostores'
export const $backendUrl = atom('http://localhost:8080')

View file

@ -0,0 +1,20 @@
import { atom } from 'nanostores'
export const $tokenName = atom<string>('dasig') // output: dasig-token
export const $tokenEncryption = atom<'rsa'>('rsa')
export const $tokenExpiration = atom<number>(9) // expires in 9 seconds
export const $rsaPublicKey = atom<string>(`-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9Aw5Zasdanf2biS69qoQ
/YZbyIM+LS7LOLNN3ot6nZH1FiTqTNy61ffUA2Y/s3hGz9L0+k6gRu7uGBza6XPU
+iuGdXxZd2mc3lrnPfR6SSllMwGlAVkYpQhmkB19igd8aLUbFiJ3pPKkNocv/yQa
ERQ2tXtSxAoEQ9hg4wPgXkuW5PF+yEk9/+eN6tB36lHu9Im44GG18xKkU+VcdsXc
DJVgEpcr1FtJL6uLI+VXc4peZmOdsBN7/MS3Rjb2Ib9TrOADE5qodSc+T8D6GoGH
MOWQGKY6dmfo9cnY3tJ23FfKy9jFOIIrTIdz2ncRaOfxX1oIiTVy4pGG+GxZn5aQ
z+IW8hmSj/oOcrGKr6T6lmKxxxYqBWgvQWef0O0anGfa2y5CTpqdPQ8KEoF2zxPD
EnvcIQiCUmXwML4x18XItY/d60nEn/pxn7a9J9hb3Lxjy94ZXuOgHvqL3XRC9xg+
HvEuAHzUBr+GJM9w4/LF1mQSsmblB8q5S7qNaminYAw6wm35lRy7ZlIbJQlj/EyL
lCKWBbUEHkjzRFCoun9VVUc0guQTsTbchPD7Rgzg3SBK3Gws39n12WQPc7jKto0H
N39sJnNzllXw41gKRy9b2uYuaVYaQ0sjrFJ8ITuyO9NDDaEdeBqBBTtbRp2i0O4K
tvT2kItEEnVzjNutUatVOWcCAwEAAQ==
-----END PUBLIC KEY-----`)

View file

@ -0,0 +1,8 @@
import { atom } from 'nanostores'
export const $websiteName = atom<string>('Dasig Solid')
export const $websiteDescription = atom<string>('A template for next level speed (Solid Version)')
export const $font = atom<string>('inter')
export const $yourName = atom<string>('Pat Alcala')
export const $copyRightYear = atom<number>(2025)

View file

@ -1,5 +1,5 @@
{ {
"name": "example-basic", "name": "dasig-solid",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vinxi dev", "dev": "vinxi dev",
@ -8,10 +8,16 @@
"version": "vinxi version" "version": "vinxi version"
}, },
"dependencies": { "dependencies": {
"@dotenvx/dotenvx": "^1.51.1",
"@solidjs/meta": "^0.29.4", "@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.15.0", "@solidjs/router": "^0.15.0",
"@solidjs/start": "^1.1.0", "@solidjs/start": "^1.1.0",
"dayjs": "^1.11.19",
"dotenv": "^17.2.3", "dotenv": "^17.2.3",
"eciesjs": "^0.4.16",
"jsencrypt": "^3.5.4",
"nanostores": "^1.1.0",
"ofetch": "^1.5.1",
"solid-icons": "^1.1.0", "solid-icons": "^1.1.0",
"solid-js": "^1.9.5", "solid-js": "^1.9.5",
"vinxi": "^0.5.7" "vinxi": "^0.5.7"

View file

@ -8,6 +8,9 @@ importers:
.: .:
dependencies: dependencies:
'@dotenvx/dotenvx':
specifier: ^1.51.1
version: 1.51.1
'@solidjs/meta': '@solidjs/meta':
specifier: ^0.29.4 specifier: ^0.29.4
version: 0.29.4(solid-js@1.9.9) version: 0.29.4(solid-js@1.9.9)
@ -17,9 +20,24 @@ importers:
'@solidjs/start': '@solidjs/start':
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.2.0(solid-js@1.9.9)(vinxi@0.5.8(@types/node@24.7.2)(db0@0.3.4)(ioredis@5.8.1)(jiti@2.6.1)(sass-embedded@1.93.2)(sass@1.93.2)(terser@5.44.0))(vite@6.4.0(@types/node@24.7.2)(jiti@2.6.1)(sass-embedded@1.93.2)(sass@1.93.2)(terser@5.44.0)) version: 1.2.0(solid-js@1.9.9)(vinxi@0.5.8(@types/node@24.7.2)(db0@0.3.4)(ioredis@5.8.1)(jiti@2.6.1)(sass-embedded@1.93.2)(sass@1.93.2)(terser@5.44.0))(vite@6.4.0(@types/node@24.7.2)(jiti@2.6.1)(sass-embedded@1.93.2)(sass@1.93.2)(terser@5.44.0))
dayjs:
specifier: ^1.11.19
version: 1.11.19
dotenv: dotenv:
specifier: ^17.2.3 specifier: ^17.2.3
version: 17.2.3 version: 17.2.3
eciesjs:
specifier: ^0.4.16
version: 0.4.16
jsencrypt:
specifier: ^3.5.4
version: 3.5.4
nanostores:
specifier: ^1.1.0
version: 1.1.0
ofetch:
specifier: ^1.5.1
version: 1.5.1
solid-icons: solid-icons:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.1.0(solid-js@1.9.9) version: 1.1.0(solid-js@1.9.9)
@ -189,6 +207,16 @@ packages:
'@deno/shim-deno@0.19.2': '@deno/shim-deno@0.19.2':
resolution: {integrity: sha512-q3VTHl44ad8T2Tw2SpeAvghdGOjlnLPDNO2cpOxwMrBE/PVas6geWpbpIgrM+czOCH0yejp0yi8OaTuB+NU40Q==} resolution: {integrity: sha512-q3VTHl44ad8T2Tw2SpeAvghdGOjlnLPDNO2cpOxwMrBE/PVas6geWpbpIgrM+czOCH0yejp0yi8OaTuB+NU40Q==}
'@dotenvx/dotenvx@1.51.1':
resolution: {integrity: sha512-fqcQxcxC4LOaUlW8IkyWw8x0yirlLUkbxohz9OnWvVWjf73J5yyw7jxWnkOJaUKXZotcGEScDox9MU6rSkcDgg==}
hasBin: true
'@ecies/ciphers@0.2.5':
resolution: {integrity: sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==}
engines: {bun: '>=1', deno: '>=2', node: '>=16'}
peerDependencies:
'@noble/ciphers': ^1.0.0
'@esbuild/aix-ppc64@0.25.11': '@esbuild/aix-ppc64@0.25.11':
resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -380,6 +408,18 @@ packages:
engines: {node: '>=18'} engines: {node: '>=18'}
hasBin: true hasBin: true
'@noble/ciphers@1.3.0':
resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==}
engines: {node: ^14.21.3 || >=16}
'@noble/curves@1.9.7':
resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
engines: {node: ^14.21.3 || >=16}
'@noble/hashes@1.8.0':
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
@ -1028,6 +1068,10 @@ packages:
comma-separated-tokens@2.0.3: comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
commander@2.20.3: commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@ -1093,6 +1137,9 @@ packages:
dax-sh@0.43.2: dax-sh@0.43.2:
resolution: {integrity: sha512-uULa1sSIHgXKGCqJ/pA0zsnzbHlVnuq7g8O2fkHokWFNwEGIhh5lAJlxZa1POG5En5ba7AU4KcBAvGQWMMf8rg==} resolution: {integrity: sha512-uULa1sSIHgXKGCqJ/pA0zsnzbHlVnuq7g8O2fkHokWFNwEGIhh5lAJlxZa1POG5En5ba7AU4KcBAvGQWMMf8rg==}
dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
db0@0.3.4: db0@0.3.4:
resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==} resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==}
peerDependencies: peerDependencies:
@ -1193,6 +1240,10 @@ packages:
eastasianwidth@0.2.0: eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
eciesjs@0.4.16:
resolution: {integrity: sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==}
engines: {bun: '>=1', deno: '>=2', node: '>=16'}
ee-first@1.1.1: ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@ -1277,6 +1328,10 @@ packages:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'} engines: {node: '>=0.8.x'}
execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
execa@8.0.1: execa@8.0.1:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'} engines: {node: '>=16.17'}
@ -1354,6 +1409,10 @@ packages:
get-port-please@3.2.0: get-port-please@3.2.0:
resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==}
get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
get-stream@8.0.1: get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'} engines: {node: '>=16'}
@ -1432,6 +1491,10 @@ packages:
httpxy@0.1.7: httpxy@0.1.7:
resolution: {integrity: sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==} resolution: {integrity: sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==}
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
human-signals@5.0.0: human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'} engines: {node: '>=16.17.0'}
@ -1439,6 +1502,10 @@ packages:
ieee754@1.2.1: ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
ignore@7.0.5: ignore@7.0.5:
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
@ -1548,6 +1615,9 @@ packages:
js-tokens@9.0.1: js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
jsencrypt@3.5.4:
resolution: {integrity: sha512-kNjfYEMNASxrDGsmcSQh/rUTmcoRfSUkxnAz+MMywM8jtGu+fFEZ3nJjHM58zscVnwR0fYmG9sGkTDjqUdpiwA==}
jsesc@3.1.0: jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -1661,6 +1731,10 @@ packages:
engines: {node: '>=16'} engines: {node: '>=16'}
hasBin: true hasBin: true
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
mimic-fn@4.0.0: mimic-fn@4.0.0:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -1695,6 +1769,10 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true hasBin: true
nanostores@1.1.0:
resolution: {integrity: sha512-yJBmDJr18xy47dbNVlHcgdPrulSn1nhSE6Ns9vTG+Nx9VPT6iV1MD6aQFp/t52zpf82FhLLTXAXr30NuCnxvwA==}
engines: {node: ^20.0.0 || >=22.0.0}
nitropack@2.12.7: nitropack@2.12.7:
resolution: {integrity: sha512-HWyzMBj2d8b14J6Cfnxv97ztnuHIgXNcrGiWCruLfb2ZfKsp6OCbZYJm5T9sv/ZKl8LedhatrMKG66HWJux9Rg==} resolution: {integrity: sha512-HWyzMBj2d8b14J6Cfnxv97ztnuHIgXNcrGiWCruLfb2ZfKsp6OCbZYJm5T9sv/ZKl8LedhatrMKG66HWJux9Rg==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
@ -1743,6 +1821,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
npm-run-path@5.3.0: npm-run-path@5.3.0:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@ -1752,8 +1834,12 @@ packages:
engines: {node: ^14.16.0 || >=16.10.0} engines: {node: ^14.16.0 || >=16.10.0}
hasBin: true hasBin: true
ofetch@1.4.1: object-treeify@1.1.33:
resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==}
engines: {node: '>= 10'}
ofetch@1.5.1:
resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
ohash@2.0.11: ohash@2.0.11:
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
@ -1762,6 +1848,10 @@ packages:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
onetime@6.0.0: onetime@6.0.0:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -2125,6 +2215,9 @@ packages:
shiki@1.29.2: shiki@1.29.2:
resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==}
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
signal-exit@4.1.0: signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'} engines: {node: '>=14'}
@ -2222,6 +2315,10 @@ packages:
resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'} engines: {node: '>=12'}
strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
strip-final-newline@3.0.0: strip-final-newline@3.0.0:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -2808,6 +2905,22 @@ snapshots:
'@deno/shim-deno-test': 0.5.0 '@deno/shim-deno-test': 0.5.0
which: 4.0.0 which: 4.0.0
'@dotenvx/dotenvx@1.51.1':
dependencies:
commander: 11.1.0
dotenv: 17.2.3
eciesjs: 0.4.16
execa: 5.1.1
fdir: 6.5.0(picomatch@4.0.3)
ignore: 5.3.2
object-treeify: 1.1.33
picomatch: 4.0.3
which: 4.0.0
'@ecies/ciphers@0.2.5(@noble/ciphers@1.3.0)':
dependencies:
'@noble/ciphers': 1.3.0
'@esbuild/aix-ppc64@0.25.11': '@esbuild/aix-ppc64@0.25.11':
optional: true optional: true
@ -2938,6 +3051,14 @@ snapshots:
- encoding - encoding
- supports-color - supports-color
'@noble/ciphers@1.3.0': {}
'@noble/curves@1.9.7':
dependencies:
'@noble/hashes': 1.8.0
'@noble/hashes@1.8.0': {}
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
dependencies: dependencies:
'@nodelib/fs.stat': 2.0.5 '@nodelib/fs.stat': 2.0.5
@ -3612,6 +3733,8 @@ snapshots:
comma-separated-tokens@2.0.3: {} comma-separated-tokens@2.0.3: {}
commander@11.1.0: {}
commander@2.20.3: {} commander@2.20.3: {}
commondir@1.0.1: {} commondir@1.0.1: {}
@ -3668,6 +3791,8 @@ snapshots:
'@deno/shim-deno': 0.19.2 '@deno/shim-deno': 0.19.2
undici-types: 5.28.4 undici-types: 5.28.4
dayjs@1.11.19: {}
db0@0.3.4: {} db0@0.3.4: {}
debug@2.6.9: debug@2.6.9:
@ -3714,6 +3839,13 @@ snapshots:
eastasianwidth@0.2.0: {} eastasianwidth@0.2.0: {}
eciesjs@0.4.16:
dependencies:
'@ecies/ciphers': 0.2.5(@noble/ciphers@1.3.0)
'@noble/ciphers': 1.3.0
'@noble/curves': 1.9.7
'@noble/hashes': 1.8.0
ee-first@1.1.1: {} ee-first@1.1.1: {}
electron-to-chromium@1.5.237: {} electron-to-chromium@1.5.237: {}
@ -3797,6 +3929,18 @@ snapshots:
events@3.3.0: {} events@3.3.0: {}
execa@5.1.1:
dependencies:
cross-spawn: 7.0.6
get-stream: 6.0.1
human-signals: 2.1.0
is-stream: 2.0.1
merge-stream: 2.0.0
npm-run-path: 4.0.1
onetime: 5.1.2
signal-exit: 3.0.7
strip-final-newline: 2.0.0
execa@8.0.1: execa@8.0.1:
dependencies: dependencies:
cross-spawn: 7.0.6 cross-spawn: 7.0.6
@ -3859,6 +4003,8 @@ snapshots:
get-port-please@3.2.0: {} get-port-please@3.2.0: {}
get-stream@6.0.1: {}
get-stream@8.0.1: {} get-stream@8.0.1: {}
giget@2.0.0: giget@2.0.0:
@ -3981,10 +4127,14 @@ snapshots:
httpxy@0.1.7: {} httpxy@0.1.7: {}
human-signals@2.1.0: {}
human-signals@5.0.0: {} human-signals@5.0.0: {}
ieee754@1.2.1: {} ieee754@1.2.1: {}
ignore@5.3.2: {}
ignore@7.0.5: {} ignore@7.0.5: {}
immutable@5.1.4: {} immutable@5.1.4: {}
@ -4073,6 +4223,8 @@ snapshots:
js-tokens@9.0.1: {} js-tokens@9.0.1: {}
jsencrypt@3.5.4: {}
jsesc@3.1.0: {} jsesc@3.1.0: {}
json5@2.2.3: {} json5@2.2.3: {}
@ -4196,6 +4348,8 @@ snapshots:
mime@4.1.0: {} mime@4.1.0: {}
mimic-fn@2.1.0: {}
mimic-fn@4.0.0: {} mimic-fn@4.0.0: {}
minimatch@5.1.6: minimatch@5.1.6:
@ -4225,6 +4379,8 @@ snapshots:
nanoid@3.3.11: {} nanoid@3.3.11: {}
nanostores@1.1.0: {}
nitropack@2.12.7: nitropack@2.12.7:
dependencies: dependencies:
'@cloudflare/kv-asset-handler': 0.4.0 '@cloudflare/kv-asset-handler': 0.4.0
@ -4270,7 +4426,7 @@ snapshots:
mlly: 1.8.0 mlly: 1.8.0
node-fetch-native: 1.6.7 node-fetch-native: 1.6.7
node-mock-http: 1.0.3 node-mock-http: 1.0.3
ofetch: 1.4.1 ofetch: 1.5.1
ohash: 2.0.11 ohash: 2.0.11
pathe: 2.0.3 pathe: 2.0.3
perfect-debounce: 2.0.0 perfect-debounce: 2.0.0
@ -4349,6 +4505,10 @@ snapshots:
normalize-path@3.0.0: {} normalize-path@3.0.0: {}
npm-run-path@4.0.1:
dependencies:
path-key: 3.1.1
npm-run-path@5.3.0: npm-run-path@5.3.0:
dependencies: dependencies:
path-key: 4.0.0 path-key: 4.0.0
@ -4361,7 +4521,9 @@ snapshots:
pkg-types: 2.3.0 pkg-types: 2.3.0
tinyexec: 1.0.1 tinyexec: 1.0.1
ofetch@1.4.1: object-treeify@1.1.33: {}
ofetch@1.5.1:
dependencies: dependencies:
destr: 2.0.5 destr: 2.0.5
node-fetch-native: 1.6.7 node-fetch-native: 1.6.7
@ -4373,6 +4535,10 @@ snapshots:
dependencies: dependencies:
ee-first: 1.1.1 ee-first: 1.1.1
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
onetime@6.0.0: onetime@6.0.0:
dependencies: dependencies:
mimic-fn: 4.0.0 mimic-fn: 4.0.0
@ -4767,6 +4933,8 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2 '@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4 '@types/hast': 3.0.4
signal-exit@3.0.7: {}
signal-exit@4.1.0: {} signal-exit@4.1.0: {}
slash@5.1.0: {} slash@5.1.0: {}
@ -4867,6 +5035,8 @@ snapshots:
dependencies: dependencies:
ansi-regex: 6.2.2 ansi-regex: 6.2.2
strip-final-newline@2.0.0: {}
strip-final-newline@3.0.0: {} strip-final-newline@3.0.0: {}
strip-literal@3.1.0: strip-literal@3.1.0:
@ -5048,7 +5218,7 @@ snapshots:
h3: 1.15.4 h3: 1.15.4
lru-cache: 10.4.3 lru-cache: 10.4.3
node-fetch-native: 1.6.7 node-fetch-native: 1.6.7
ofetch: 1.4.1 ofetch: 1.5.1
ufo: 1.6.1 ufo: 1.6.1
optionalDependencies: optionalDependencies:
db0: 0.3.4 db0: 0.3.4

View file

Before

Width:  |  Height:  |  Size: 664 B

After

Width:  |  Height:  |  Size: 664 B

Before After
Before After

View file

@ -0,0 +1,23 @@
import { ofetch } from 'ofetch'
import { $backendUrl } from '../../../../configs/config.api'
const URL = $backendUrl.get()
export default async (api: string, value?: any, value2?: any) => {
try {
let fetch
if (!value2) {
if (!value) {
fetch = await ofetch(URL + api, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] })
} else {
fetch = await ofetch(URL + `${api}/${value}/fetch-data`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] })
}
} else {
fetch = await ofetch(URL + `${api}/${value}/${value2}/fetch-data`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] })
}
const result = fetch
return [result, null]
} catch (error) {
return [[], error]
}
}

View file

@ -0,0 +1,35 @@
import { ofetch } from 'ofetch'
import { $backendUrl } from '../../../../configs/config.api'
import { $tokenName, $tokenExpiration } from '../../../../configs/config.security'
import dayjs from 'dayjs'
import encryptRsa from '../../scripts/functions/encryptRsa'
const URL = $backendUrl.get()
const TOKEN_NAME = $tokenName.get()
const TOKEN_EXPIRATION = $tokenExpiration.get()
export default async (api: string, body: Object) => {
const today = new Date()
const todayUnix = dayjs(today).unix()
const expiration = todayUnix + TOKEN_EXPIRATION
const aes = await encryptRsa(`${api.toString()}-${todayUnix.toString()}-${expiration.toString()}`)
const hash = `${TOKEN_NAME}=${aes}token`
try {
await ofetch(URL + api, {
headers: {
Accept: 'application/json',
'Cache-Control': 'no-cache',
'Dasig-Token': hash,
},
retry: 3,
retryDelay: 500,
retryStatusCodes: [400, 404, 405, 500, 502],
method: 'POST',
body: body,
})
return true
} catch {
return false
}
}

View file

@ -0,0 +1,2 @@
export { default as getApi } from './functions/getApi'
export { default as postApi } from './functions/postApi'

View file

@ -0,0 +1,50 @@
// import '../styles/Background.sass'
// import { Show, createSignal } from 'solid-js'
// import fs from 'fs'
// import webpPath from '../images/background.webp'
// import avifPath from '../images/background.avif'
// import noBackground from '../images/no-background.webp'
// interface Props {
// image?: boolean
// color?: string
// }
// let [imageLoaded, setImageLoaded] = createSignal(false)
// const checkBackground = () => {
// if (!fs.existsSync(avifPath.src) && !fs.existsSync(webpPath.src)) {
// setImageLoaded(true)
// } else {
// setImageLoaded(false)
// }
// }
// export default (props: Props) => {
// checkBackground()
// return (
// <>
// <Show when={props.image}>
// <Show when={imageLoaded()}>
// <picture class="fullscreen">
// <source srcset={avifPath.src} type="image/avif" />
// <source srcset={webpPath.src} type="image/webp" />
// <source srcset={noBackground.src} type="image/webp" />
// <img width="1920" height="auto" decoding="async" loading="lazy" alt="An image background" />
// </picture>
// </Show>
// <Show when={!imageLoaded()}>
// <picture class="fullscreen">
// <source srcset={noBackground.src} type="image/webp" />
// <img width="1920" height="auto" decoding="async" loading="lazy" alt="An alternative background if found no image background" />
// </picture>
// </Show>
// </Show>
// <Show when={!props.image}>
// <div style={{ background: props.color }} class="fullscreen" />
// </Show>
// </>
// )
// }

View file

@ -0,0 +1,19 @@
import '../styles/Box.sass'
import { type JSXElement, createMemo } from 'solid-js'
interface Props {
thickness: number
color?: string
children: JSXElement
curved?: boolean
}
export default (props: Props) => {
const boxClass = createMemo(() => (props.curved ? 'curvedbox' : 'box'))
return (
<section class={boxClass()} style={{ border: `${props.thickness}px solid ${props.color || 'white'}` }}>
{props.children}
</section>
)
}

View file

@ -0,0 +1,83 @@
import '../styles/Button.sass'
import { Show, Switch, Match } from 'solid-js'
interface Props {
label?: string
to?: string
onClick?: () => void
edges?: 'curved' | 'rounded' | 'flat'
design?: 'bu-primary' | 'bu-link' | 'bu-info' | 'bu-success' | 'bu-warning' | 'bu-danger' | 'bu-dark' | 'bu-light' | 'bu-text' | 'bu-ghost' | 'bo-primary' | 'bo-secondary' | 'bo-success' | 'bo-danger' | 'bo-warning' | 'bo-info' | 'bo-light' | 'bo-dark' | 'bo-link'
submit?: boolean
newtab?: boolean
}
const getBorderRadius = (edge: Props['edges']) => {
switch (edge) {
case 'curved':
return 'border-radius: 6px'
case 'rounded':
return 'border-radius: 32px'
case 'flat':
return 'border-radius: 0'
default:
return 'border-radius: 0'
}
}
export default (props: Props) => {
const borderRadius = getBorderRadius(props.edges)
return (
<>
<Show when={props.to}>
<Switch>
<Match when={props.design}>
<a href={props.to} aria-label={props.label} rel="noopener" target={props.newtab ? '_blank' : '_self'} data-astro-prefetch>
<button class={props.design} style={borderRadius}>
{props.label || 'Click Me!'}
</button>
</a>
</Match>
<Match when={!props.design}>
<a href={props.to} aria-label={props.label} rel="noopener" target={props.newtab ? '_blank' : '_self'} data-astro-prefetch>
<button class="button" style={borderRadius}>
{props.label || 'Click Me!'}
</button>
</a>
</Match>
</Switch>
</Show>
<Show when={!props.to}>
<Switch>
<Match when={props.design}>
<Show when={props.submit}>
<button class={props.design} type="submit" style={borderRadius}>
{props.label || 'Click Me!'}
</button>
</Show>
<Show when={!props.submit}>
<button class={props.design} onClick={props.onClick} style={borderRadius}>
{props.label || 'Click Me!'}
</button>
</Show>
</Match>
<Match when={!props.design}>
<Show when={props.submit}>
<button class="button" type="submit" style={borderRadius}>
{props.label || 'Click Me!'}
</button>
</Show>
<Show when={!props.submit}>
<button class="button" onClick={props.onClick} style={borderRadius}>
{props.label || 'Click Me!'}
</button>
</Show>
</Match>
</Switch>
</Show>
</>
)
}

View file

@ -26,10 +26,10 @@ export default (props: Props) => {
<meta name="description" content={props.description} /> <meta name="description" content={props.description} />
<meta name="title" property="og:title" content={props.name} /> <meta name="title" property="og:title" content={props.name} />
<meta name="keywords" content="HTML, CSS, JavaScript" /> <meta name="keywords" content="HTML, CSS, JavaScript" />
<meta name="author" content={props.author} /> <meta name="developer" content={props.author} />
<meta property="og:description" content={props.description} /> <meta property="og:description" content={props.description} />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<link rel="icon" type="image/svg+xml" href="/favicon.png" /> <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
<Show when={props.font}> <Show when={props.font}>
<link rel="preconnect" href="https://cdn.jsdelivr.net" /> <link rel="preconnect" href="https://cdn.jsdelivr.net" />
</Show> </Show>
@ -41,7 +41,9 @@ export default (props: Props) => {
</head> </head>
<body> <body>
<div class={props.font} id="app">{props.children}</div> <div class={props.font} id="app">
{props.children}
</div>
{props.scripts} {props.scripts}
</body> </body>
</html> </html>

View file

@ -1,19 +1,21 @@
import '../styles/Page.sass' import '../styles/Page.sass'
import { Show } from 'solid-js' import { Show } from 'solid-js'
import { Title } from '@solidjs/meta'
interface Props { interface Props {
children?: any children?: any
alignment?: 'row' | 'column' alignment?: 'row' | 'column'
title: string
} }
export default (props: Props) => { export default (props: Props) => {
return ( return (
<> <>
<Show when={props.alignment}> <Show when={props.alignment}>
<main class={props.alignment}>{props.children}</main> <main class={props.alignment}><Title>{props.title}</Title>{props.children}</main>
</Show> </Show>
<Show when={!props.alignment}> <Show when={!props.alignment}>
<main class="page">{props.children}</main> <main class="page"><Title>{props.title}</Title>{props.children}</main>
</Show> </Show>
</> </>
) )

View file

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before After
Before After

View file

@ -0,0 +1,13 @@
import { JSEncrypt } from 'jsencrypt'
import { $rsaPublicKey } from '../../../../configs/config.security'
const enc = new JSEncrypt()
const PUBLIC_KEY = $rsaPublicKey.get()
export default async (message: string) => {
enc.setPublicKey(PUBLIC_KEY)
const encrypted = enc.encrypt(message).toString()
const fixedEncrypted = encrypted.replace(/\//g, '~')
return fixedEncrypted
}

View file

@ -0,0 +1 @@
export { default as encryptRsa } from './functions/encryptRsa'

View file

@ -1,15 +1,16 @@
import { MetaProvider, Title } from "@solidjs/meta"; import { MetaProvider, Title } from '@solidjs/meta'
import { Router } from "@solidjs/router"; import { Router } from '@solidjs/router'
import { FileRoutes } from "@solidjs/start/router"; import { FileRoutes } from '@solidjs/start/router'
import { Suspense } from "solid-js"; import { Suspense } from 'solid-js'
import "./app.sass"; import './styles/app.sass'
export default function App() { export default () => {
return ( return (
<Router <Router
root={props => ( root={(props) => (
<MetaProvider> <MetaProvider>
<Title>Dasig - Solid</Title> <Title>Dasig - Solid</Title>
{/* <a href="/">Index</a> {/* <a href="/">Index</a>
<a href="/about">About</a> */} <a href="/about">About</a> */}
<Suspense>{props.children}</Suspense> <Suspense>{props.children}</Suspense>
@ -18,5 +19,5 @@ export default function App() {
> >
<FileRoutes /> <FileRoutes />
</Router> </Router>
); )
} }

View file

@ -0,0 +1,23 @@
// // src/entry-server.tsx
// import { createHandler, StartServer } from '@solidjs/start/server'
// import dotenv from 'dotenv'
// dotenv.config({ path: 'env/.env.site' })
// import { HTML } from './_dasig'
// const websiteName = process.env.WEBSITE_NAME || 'Dasig - Solid'
// const websiteDescription = process.env.WEBSITE_DESCRIPTION || 'A template for fast development (Solid Version)'
// const author = process.env.AUTHOR || 'Patrick Alvin Alcala'
// const font = process.env.FONT
// export default createHandler(() => <StartServer document={({ assets, children, scripts }) => <HTML name={websiteName} description={websiteDescription} author={author} children={children} assets={assets} scripts={scripts} font={font} />} />)
import { createHandler, StartServer } from '@solidjs/start/server'
import { $websiteName, $websiteDescription, $yourName, $font } from '../configs/config.site'
import { HTML } from '~/@dasig'
const websiteName = $websiteName.get() || 'Dasig - Solid'
const websiteDescription = $websiteDescription.get() || 'A template for fast development (Solid Version)'
const author = $yourName.get() || 'Patrick Alvin Alcala'
const font = $font.get()
export default createHandler(() => <StartServer document={({ assets, children, scripts }) => <HTML name={websiteName} description={websiteDescription} author={author} children={children} assets={assets} scripts={scripts} font={font} />} />)

View file

@ -0,0 +1,4 @@
@use '../styles/variables' as vars
.h1
color: vars.$accentColor

View file

@ -1,12 +1,11 @@
import { Title } from '@solidjs/meta' import './index.sass'
import Counter from '~/components/Counter/Counter' import Counter from '~/components/Counter/Counter'
import { Page, Column } from '~/_dasig' import { Page, Column } from '~/@dasig'
export default function Home() { export default () => {
return ( return (
<Page> <Page title="Dasig - Index">
<Column> <Column>
<Title>Dasig - Index</Title>
<h1>DASIG</h1> <h1>DASIG</h1>
<h4>A next level development for pure speed</h4> <h4>A next level development for pure speed</h4>
<Counter /> <Counter />

View file

@ -1,5 +1,8 @@
@use './styles/classes' @use './global'
@use './styles/variables' @use './variables'
:root
background-color: variables.$background
a a
margin-right: 1rem margin-right: 1rem

View file

@ -1,4 +1,4 @@
$mobile: 375px $mobile: 575.98px
$tablet: 768px $tablet: 768px
$desktop: 1440px $desktop: 1440px
@ -20,7 +20,7 @@ $desktop: 1440px
display: none display: none
.on-mobile-only .on-mobile-only
@media only screen and (min-width: $mobile) @media only screen and (max-width: $mobile)
display: block display: block
@media only screen and (min-width: $tablet) @media only screen and (min-width: $tablet)

View file

@ -1,4 +1,4 @@
.fullscreen .background
position: absolute position: absolute
top: 0 top: 0
left: 0 left: 0

View file

@ -1,6 +1,6 @@
@use 'sass:color' @use 'sass:color'
$background: #0c1b31 $background: #09111f
$textColor: #f0f8ff $textColor: #f0f8ff
$fontSize: 1rem $fontSize: 1rem

View file

@ -1,12 +0,0 @@
// src/entry-server.tsx
import { createHandler, StartServer } from '@solidjs/start/server'
import dotenv from 'dotenv'
dotenv.config({ path: '.env.dev' })
import { HTML } from './_dasig'
const websiteName = process.env.WEBSITE_NAME || 'Dasig - Solid'
const websiteDescription = process.env.WEBSITE_DESCRIPTION || 'A template for fast development (Solid Version)'
const author = process.env.AUTHOR || 'Patrick Alvin Alcala'
const font = process.env.FONT
export default createHandler(() => <StartServer document={({ assets, children, scripts }) => <HTML name={websiteName} description={websiteDescription} author={author} children={children} assets={assets} scripts={scripts} font={font} />} />)