🚧 wip: wip because i wanna work on kotlin stuf

This commit is contained in:
Pauline 2024-05-12 21:16:42 +02:00
parent 3aa9fcd1b5
commit 9e941d8a6b
No known key found for this signature in database
GPG key ID: 722BB181973296AE
16 changed files with 648 additions and 19 deletions

View file

@ -0,0 +1 @@
export * from './constants';

163
pnpm-lock.yaml generated
View file

@ -151,6 +151,31 @@ importers:
specifier: ^4.3.2
version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))
scripts:
dependencies:
'@flowr/utils':
specifier: ^3.2.1
version: 3.2.1
'@iarna/toml':
specifier: ^2.2.5
version: 2.2.5
execa:
specifier: ^9.0.2
version: 9.0.2
semver:
specifier: ^7.6.2
version: 7.6.2
undici:
specifier: ^6.16.1
version: 6.16.1
devDependencies:
'@types/iarna__toml':
specifier: ^2.0.5
version: 2.0.5
'@types/semver':
specifier: ^7.5.8
version: 7.5.8
packages:
'@adobe/css-tools@4.3.3':
@ -609,6 +634,9 @@ packages:
'@humanwhocodes/object-schema@2.0.3':
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
'@iarna/toml@2.2.5':
resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
'@iconify-json/logos@1.1.42':
resolution: {integrity: sha512-/f+frtPm3m3Z30oy8Pk+QqRDkbmAiIaWGPl5CmsCXm15MVfvw9a/V/gD7WzdyuSGAZcFuQaqbHXj92y/n+2ifg==}
@ -763,9 +791,16 @@ packages:
peerDependencies:
'@tauri-apps/api': ^1.2.0
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
'@sindresorhus/merge-streams@4.0.0':
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
'@solid-primitives/deep@0.2.8':
resolution: {integrity: sha512-r+enqrL2oiDkJt7lYUYMVvKzcqVDAd4G/1OkLnXEibk5nIA635qNIuOxIAaCCP3GDAHKznaW3yc/vMG68lo8bQ==}
peerDependencies:
@ -984,6 +1019,9 @@ packages:
'@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
'@types/iarna__toml@2.0.5':
resolution: {integrity: sha512-I55y+SxI0ayM4MBU6yfGJGmi4wRll6wtSeKiFYAZj+Z5Q1DVbMgBSVDYY+xQZbjIlLs/pN4fidnvR8faDrmxPg==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@ -1822,6 +1860,10 @@ packages:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
execa@9.0.2:
resolution: {integrity: sha512-oO281GF7ksH/Ogv1xyDf1prvFta/6/XkGKxRUvA3IB2MU1rCJGlFs86HRZhdooow1ISkR0Np0rOxUCIJVw36Rg==}
engines: {node: '>=18'}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@ -1845,6 +1887,10 @@ packages:
fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
figures@6.1.0:
resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
engines: {node: '>=18'}
file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
@ -1916,6 +1962,10 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
get-stream@9.0.1:
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
engines: {node: '>=18'}
get-tsconfig@4.7.5:
resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==}
@ -2030,6 +2080,10 @@ packages:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
human-signals@7.0.0:
resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==}
engines: {node: '>=18.18.0'}
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
@ -2143,6 +2197,10 @@ packages:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@ -2166,6 +2224,10 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
is-stream@4.0.1:
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
engines: {node: '>=18'}
is-string@1.0.7:
resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
engines: {node: '>= 0.4'}
@ -2174,6 +2236,10 @@ packages:
resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
engines: {node: '>= 0.4'}
is-unicode-supported@2.0.0:
resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==}
engines: {node: '>=18'}
is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
@ -2301,10 +2367,6 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
luxon@3.4.4:
resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==}
engines: {node: '>=12'}
@ -2541,6 +2603,10 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
parse-ms@4.0.0:
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
parse5@7.1.2:
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
@ -2626,6 +2692,10 @@ packages:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
pretty-ms@9.0.0:
resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==}
engines: {node: '>=18'}
prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
@ -2734,10 +2804,7 @@ packages:
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
semver@7.6.0:
resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
engines: {node: '>=10'}
hasBin: true
semver@7.6.2:
resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
@ -2858,6 +2925,10 @@ packages:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
strip-final-newline@4.0.0:
resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
engines: {node: '>=18'}
strip-indent@3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
@ -3016,6 +3087,10 @@ packages:
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
undici@6.16.1:
resolution: {integrity: sha512-NeNiTT7ixpeiL1qOIU/xTVpHpVP0svmI6PwoCKaMGaI5AsHOaRdwqU/f7Fi9eyU4u03nd5U/BC8wmRMnS9nqoA==}
engines: {node: '>=18.17'}
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
@ -3253,6 +3328,10 @@ packages:
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
engines: {node: '>=12.20'}
yoctocolors@2.0.0:
resolution: {integrity: sha512-esbDnt0Z1zI1KgvOZU90hJbL6BkoUbrP9yy7ArNZ6TmxBxydMJTYMf9FZjmwwcA8ZgEQzriQ3hwZ0NYXhlFo8Q==}
engines: {node: '>=18'}
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
@ -3762,6 +3841,8 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
'@iarna/toml@2.2.5': {}
'@iconify-json/logos@1.1.42':
dependencies:
'@iconify/types': 2.0.0
@ -3893,8 +3974,12 @@ snapshots:
'@rspc/client': 0.2.0
'@tauri-apps/api': 2.0.0-beta.8
'@sec-ant/readable-stream@0.4.1': {}
'@sinclair/typebox@0.27.8': {}
'@sindresorhus/merge-streams@4.0.0': {}
'@solid-primitives/deep@0.2.8(solid-js@1.8.17)':
dependencies:
'@solid-primitives/memo': 1.3.8(solid-js@1.8.17)
@ -4103,6 +4188,10 @@ snapshots:
'@types/estree@1.0.5': {}
'@types/iarna__toml@2.0.5':
dependencies:
'@types/node': 20.12.11
'@types/json-schema@7.0.15': {}
'@types/mdast@3.0.15':
@ -4188,7 +4277,7 @@ snapshots:
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
semver: 7.6.0
semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
@ -4219,7 +4308,7 @@ snapshots:
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
eslint: 8.57.0
semver: 7.6.0
semver: 7.6.2
transitivePeerDependencies:
- supports-color
- typescript
@ -4619,7 +4708,7 @@ snapshots:
fast-glob: 3.3.2
js-yaml: 4.1.0
prompts: 2.4.2
semver: 7.6.0
semver: 7.6.2
c12@1.10.0:
dependencies:
@ -5236,6 +5325,21 @@ snapshots:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
execa@9.0.2:
dependencies:
'@sindresorhus/merge-streams': 4.0.0
cross-spawn: 7.0.3
figures: 6.1.0
get-stream: 9.0.1
human-signals: 7.0.0
is-plain-obj: 4.1.0
is-stream: 4.0.1
npm-run-path: 5.3.0
pretty-ms: 9.0.0
signal-exit: 4.1.0
strip-final-newline: 4.0.0
yoctocolors: 2.0.0
fast-deep-equal@3.1.3: {}
fast-equals@5.0.1: {}
@ -5258,6 +5362,10 @@ snapshots:
fflate@0.8.2: {}
figures@6.1.0:
dependencies:
is-unicode-supported: 2.0.0
file-entry-cache@6.0.1:
dependencies:
flat-cache: 3.2.0
@ -5329,6 +5437,11 @@ snapshots:
get-stream@8.0.1: {}
get-stream@9.0.1:
dependencies:
'@sec-ant/readable-stream': 0.4.1
is-stream: 4.0.1
get-tsconfig@4.7.5:
dependencies:
resolve-pkg-maps: 1.0.0
@ -5444,6 +5557,8 @@ snapshots:
human-signals@5.0.0: {}
human-signals@7.0.0: {}
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
@ -5546,6 +5661,8 @@ snapshots:
is-path-inside@3.0.3: {}
is-plain-obj@4.1.0: {}
is-potential-custom-element-name@1.0.1: {}
is-regex@1.1.4:
@ -5563,6 +5680,8 @@ snapshots:
is-stream@3.0.0: {}
is-stream@4.0.1: {}
is-string@1.0.7:
dependencies:
has-tostringtag: 1.0.2
@ -5571,6 +5690,8 @@ snapshots:
dependencies:
has-symbols: 1.0.3
is-unicode-supported@2.0.0: {}
is-weakmap@2.0.2: {}
is-weakset@2.0.3:
@ -5695,10 +5816,6 @@ snapshots:
dependencies:
yallist: 3.1.1
lru-cache@6.0.0:
dependencies:
yallist: 4.0.0
luxon@3.4.4: {}
lz-string@1.5.0: {}
@ -5941,6 +6058,8 @@ snapshots:
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
parse-ms@4.0.0: {}
parse5@7.1.2:
dependencies:
entities: 4.5.0
@ -6008,6 +6127,10 @@ snapshots:
ansi-styles: 5.2.0
react-is: 18.3.1
pretty-ms@9.0.0:
dependencies:
parse-ms: 4.0.0
prompts@2.4.2:
dependencies:
kleur: 3.0.3
@ -6129,10 +6252,6 @@ snapshots:
semver@6.3.1: {}
semver@7.6.0:
dependencies:
lru-cache: 6.0.0
semver@7.6.2: {}
serialize-error@11.0.3:
@ -6248,6 +6367,8 @@ snapshots:
strip-final-newline@3.0.0: {}
strip-final-newline@4.0.0: {}
strip-indent@3.0.0:
dependencies:
min-indent: 1.0.1
@ -6387,6 +6508,8 @@ snapshots:
undici-types@5.26.5: {}
undici@6.16.1: {}
unicorn-magic@0.1.0: {}
unist-util-stringify-position@2.0.3:
@ -6636,4 +6759,6 @@ snapshots:
yocto-queue@1.0.0: {}
yoctocolors@2.0.0: {}
zod@3.23.8: {}

View file

@ -1,3 +1,4 @@
packages:
- desktop
- client
- scripts

30
scripts/package.json Normal file
View file

@ -0,0 +1,30 @@
{
"name": "@onelauncher/scripts",
"type": "module",
"version": "1.0.0",
"private": true,
"description": "Scripts for developing OneLauncher",
"license": "GPL-3.0-only",
"repository": {
"type": "git",
"url": "git@github.com:polyfrost/onelauncher",
"directory": "client"
},
"sideEffects": false,
"main": "./src/index.ts",
"types": "./src/index.ts",
"scripts": {
"tauri": "tsx tauri.ts"
},
"dependencies": {
"@flowr/utils": "^3.2.1",
"@iarna/toml": "^2.2.5",
"execa": "^9.0.2",
"semver": "^7.6.2",
"undici": "^6.16.1"
},
"devDependencies": {
"@types/iarna__toml": "^2.0.5",
"@types/semver": "^7.5.8"
}
}

0
scripts/prepare.ts Normal file
View file

231
scripts/setup.ps1 Normal file
View file

@ -0,0 +1,231 @@
# Set default value of 0 for external command exit code
$LASTEXITCODE = 0
# Enables strict mode, which causes PowerShell to treat uninitialized variables, undefined functions, and other common errors as terminating errors.
$ErrorActionPreference = if ($env:CI) { 'Stop' } else { 'Inquire' }
Set-StrictMode -Version Latest
function Reset-Path {
$env:Path = [System.Environment]::ExpandEnvironmentVariables(
[System.Environment]::GetEnvironmentVariable('Path', 'Machine') +
[IO.Path]::PathSeparator +
[System.Environment]::GetEnvironmentVariable('Path', 'User')
)
}
# Verify if environment is Windows 64-bit and if the user is an administrator
if ((-not [string]::IsNullOrEmpty($env:PROCESSOR_ARCHITEW6432)) -or (
"$env:PROCESSOR_ARCHITECTURE" -eq 'ARM64'
) -or (
-not [System.Environment]::Is64BitOperatingSystem
# Powershell >= 6 is cross-platform, check if running on Windows
) -or (($PSVersionTable.PSVersion.Major -ge 6) -and (-not $IsWindows))
) {
$ErrorActionPreference = 'Continue'
Write-Host
if (Test-Path "$($env:WINDIR)\SysNative\WindowsPowerShell\v1.0\powershell.exe" -PathType Leaf) {
throw 'You are using PowerShell (32-bit), please re-run in PowerShell (64-bit)'
} else {
throw 'This script is only supported on Windows 64-bit'
}
Exit 1
} elseif (
-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
) {
# Start a new PowerShell process with administrator privileges and set the working directory to the directory where the script is located
$proc = Start-Process -PassThru -Wait -FilePath 'PowerShell.exe' -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$($MyInvocation.MyCommand.Definition)`"" -WorkingDirectory "$PSScriptRoot"
# Reset path so the user doesn't have to restart the shell to use the tools installed by this script
Reset-Path
Exit $proc.ExitCode
}
function Exit-WithError($err, $help = $null) {
if ($null -ne $help) {
Write-Host
Write-Host $help -ForegroundColor DarkRed
}
throw $err
Exit 1
}
function Add-DirectoryToPath($directory) {
Reset-Path
if ($env:Path.Split([IO.Path]::PathSeparator) -notcontains $directory) {
[System.Environment]::SetEnvironmentVariable(
'Path',
[System.Environment]::GetEnvironmentVariable('Path', 'User') + [IO.Path]::PathSeparator + $directory,
'User'
)
if ($env:CI) {
# If running in CI, we need to use GITHUB_PATH instead of the normal PATH env variables
Add-Content $env:GITHUB_PATH "$directory`n"
}
}
Reset-Path
}
# Reset PATH to ensure the script doesn't have stale Path entries
Reset-Path
# Get project dir (get grandparent dir from script location: <PROJECT_ROOT>\scripts\setup.ps1)
$projectRoot = Split-Path -Path $PSScriptRoot -Parent
$packageJson = Get-Content -Raw -Path "$projectRoot\package.json" | ConvertFrom-Json
# Valid winget exit status
$wingetValidExit = 0, -1978335189, -1978335153, -1978335135
Write-Host 'OneLauncher Development Environment Setup' -ForegroundColor Magenta
Write-Host @"
To set up your machine for OneLauncher development, this script will do the following:
1) Install Windows C++ build tools
2) Install Edge Webview 2
3) Install Rust and Cargo
4) Install Rust tools
5) Install Node.js, npm and pnpm
"@
# Install System dependencies (GitHub Actions already has all of those installed)
if (-not $env:CI) {
if (-not (Get-Command winget -ea 0)) {
Exit-WithError 'winget not available' @'
Follow the instructions here to install winget:
https://learn.microsoft.com/windows/package-manager/winget/
'@
}
# Check system winget version is greater or equal to v1.4.10052
$wingetVersion = [Version]((winget --version) -replace '.*?(\d+)\.(\d+)\.(\d+).*', '$1.$2.$3')
$requiredVersion = [Version]'1.4.10052'
if ($wingetVersion.CompareTo($requiredVersion) -lt 0) {
$errorMessage = "You need to update your winget to version $requiredVersion or higher."
Exit-WithError $errorMessage
}
# Check connectivity to GitHub
$ProgressPreference = 'SilentlyContinue'
if (-not ((Test-NetConnection -ComputerName 'github.com' -Port 80).TcpTestSucceeded)) {
Exit-WithError "Can't connect to github, check your internet connection and run this script again"
}
$ProgressPreference = 'Continue'
Write-Host
Read-Host 'Press Enter to continue'
# TODO: Force update Visual Studio build tools
Write-Host
Write-Host 'Installing Visual Studio Build Tools...' -ForegroundColor Yellow
Write-Host 'This will take some time as it involves downloading several gigabytes of data....' -ForegroundColor Cyan
winget install -e --accept-source-agreements --force --disable-interactivity --id Microsoft.VisualStudio.2022.BuildTools `
--override 'updateall --quiet --wait'
# Force install because BuildTools is itself a package manager, so let it decide if something needs to be installed or not
winget install -e --accept-source-agreements --force --disable-interactivity --id Microsoft.VisualStudio.2022.BuildTools `
--override '--wait --quiet --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended'
if (-not ($wingetValidExit -contains $LASTEXITCODE)) {
Exit-WithError 'Failed to install Visual Studio Build Tools'
} else {
$LASTEXITCODE = 0
}
Write-Host
Write-Host 'Installing Edge Webview 2...' -ForegroundColor Yellow
# This is normally already available, but on some early Windows 10 versions it isn't
winget install -e --accept-source-agreements --disable-interactivity --id Microsoft.EdgeWebView2Runtime
if (-not ($wingetValidExit -contains $LASTEXITCODE)) {
Exit-WithError 'Failed to install Edge Webview 2'
} else {
$LASTEXITCODE = 0
}
Write-Host
Write-Host 'Installing Rust and Cargo...' -ForegroundColor Yellow
winget install -e --accept-source-agreements --disable-interactivity --id Rustlang.Rustup
if (-not ($wingetValidExit -contains $LASTEXITCODE)) {
Exit-WithError 'Failed to install Rust and Cargo'
} else {
$LASTEXITCODE = 0
}
Write-Host
Write-Host 'Installing Nasm...' -ForegroundColor Yellow
winget install -e --accept-source-agreements --disable-interactivity --id NASM.NASM
if (-not ($wingetValidExit -contains $LASTEXITCODE)) {
Exit-WithError 'Failed to install Nasm'
} else {
$LASTEXITCODE = 0
}
Write-Host
Write-Host 'Installing NodeJS...' -ForegroundColor Yellow
# Check if Node.JS is already installed and if it's compatible with the project
$currentNode = Get-Command node -ea 0
$currentNodeVersion = if (-not $currentNode) { $null } elseif ($currentNode.Version) { $currentNode.Version } elseif ((node --version) -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null }
$enginesNodeVersion = if ($packageJson.engines.node -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null }
if ($currentNodeVersion -and $enginesNodeVersion -and $currentNodeVersion.CompareTo($enginesNodeVersion) -lt 0) {
Exit-WithError "Current Node.JS version: $currentNodeVersion (required: $enginesNodeVersion)" `
'Uninstall the current version of Node.JS and run this script again'
}
# Install Node.JS
winget install -e --accept-source-agreements --disable-interactivity --id OpenJS.NodeJS
if (-not ($wingetValidExit -contains $LASTEXITCODE)) {
Exit-WithError 'Failed to install NodeJS'
} else {
$LASTEXITCODE = 0
}
# Add NodeJS to the PATH
Add-DirectoryToPath "$env:SystemDrive\Program Files\nodejs"
# Reset Path to ensure that executable installed above are available to rest of the script
Reset-Path
Write-Host
Write-Host 'Installing Rust MSVC Toolchain...' -ForegroundColor Yellow
rustup toolchain install stable-msvc
if ($LASTEXITCODE -ne 0) {
Exit-WithError 'Failed to install Rust MSVC Toolchain'
}
Write-Host
Write-Host 'Installing Rust tools...' -ForegroundColor Yellow
cargo install cargo-watch
if ($LASTEXITCODE -ne 0) {
Exit-WithError 'Failed to install Rust tools'
}
Write-Host
Write-Host 'Installing for pnpm...' -ForegroundColor Yellow
# Check if pnpm is already installed and if it's compatible with the project
$currentPnpmVersion = if (-not (Get-Command pnpm -ea 0)) { $null } elseif ((pnpm --version) -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null }
$enginesPnpmVersion = if ($packageJson.engines.pnpm -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null }
if (-not $currentPnpmVersion) {
# Remove possible remaining envvars from old pnpm installation
[System.Environment]::SetEnvironmentVariable('PNPM_HOME', $null, [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('PNPM_HOME', $null, [System.EnvironmentVariableTarget]::User)
# Install pnpm
npm install -g "pnpm@latest-$($enginesPnpmVersion.Major)"
if ($LASTEXITCODE -ne 0) {
Exit-WithError 'Failed to install pnpm'
}
# Add NPM global modules to the PATH
if (Test-Path "$env:APPDATA\npm" -PathType Container) {
Add-DirectoryToPath "$env:APPDATA\npm"
}
} elseif ($currentPnpmVersion -and $enginesPnpmVersion -and $currentPnpmVersion.CompareTo($enginesPnpmVersion) -lt 0) {
Exit-WithError "Current pnpm version: $currentPnpmVersion (required: $enginesPnpmVersion)" `
'Uninstall the current version of pnpm and run this script again'
}
}
if ($LASTEXITCODE -ne 0) {
Exit-WithError "Something went wrong, exit code: $LASTEXITCODE"
}
if (-not $env:CI) {
Write-Host
Write-Host 'Your machine has been setup for OneLauncher development!' -ForegroundColor Green
Write-Host
Read-Host 'Press Enter to continue'
}

165
scripts/setup.sh Executable file
View file

@ -0,0 +1,165 @@
#!/usr/bin/env bash
set -euo pipefail
if [ "${CI:-}" = "true" ]; then
set -x
fi
err() {
for _line in "$@"; do
echo "$_line" >&2
done
exit 1
}
has() {
for prog in "$@"; do
if ! command -v "$prog" 1>/dev/null 2>&1; then
return 1
fi
done
}
sudo() {
if [ "$(id -u)" -eq 0 ]; then
"$@"
else
env sudo "$@"
fi
}
script_failure() {
if [ -n "${1:-}" ]; then
_line="on line $1"
else
_line="(unknown)"
fi
err "An error occurred $_line." "Setup failed."
}
trap 'script_failure ${LINENO:-}' ERR
case "${OSTYPE:-}" in
'msys' | 'mingw' | 'cygwin')
err 'Bash for Windows is not supported, please use Powershell or CMD'
;;
esac
if [ "${CI:-}" != "true" ]; then
echo 'OneLauncher Development Environment Setup'
echo 'To set up your machine for OneLauncher development, this script will install some required dependencies with your system package manager'
echo
echo 'Press Enter to continue'
read -r
if ! has pnpm; then
err 'pnpm was not found.' \
"Ensure the 'pnpm' command is in your \$PATH." \
'You must use pnpm for this project; yarn and npm are not allowed.' \
'https://pnpm.io/installation'
fi
if ! has rustc cargo; then
err 'Rust was not found.' \
"Ensure the 'rustc' and 'cargo' binaries are in your \$PATH." \
'https://rustup.rs'
fi
echo
fi
# Install system deps
case "$(uname)" in
"Darwin")
if [ "$(uname -m)" = 'x86_64' ] && ! [ "${CI:-}" = "true" ]; then
brew install nasm
fi
;;
"Linux")
# https://v2.tauri.app/start/prerequisites/
if has apt-get; then
echo "Detected apt!"
echo "Installing dependencies with apt..."
# Tauri dependencies
set -- build-essential curl wget file libssl-dev libgtk-3-dev librsvg2-dev \
libwebkit2gtk-4.1-dev libayatana-appindicator3-dev libxdo-dev libvips42
sudo apt-get -y update
sudo apt-get -y install "$@"
elif has pacman; then
echo "Detected pacman!"
echo "Installing dependencies with pacman..."
# Tauri dependencies
set -- appmenu-gtk-module libappindicator-gtk3 base-devel curl wget file openssl gtk3 librsvg webkit2gtk-4.1 libayatana-appindicator xdotool libvips
sudo pacman -Sy --needed "$@"
elif has dnf; then
echo "Detected dnf!"
echo "Installing dependencies with dnf..."
# For Enterprise Linux, you also need "Development Tools" instead of "C Development Tools and Libraries"
if ! { sudo dnf group install "C Development Tools and Libraries" || sudo dnf group install "Development Tools"; }; then
err 'We were unable to install the "C Development Tools and Libraries"/"Development Tools" package.' \
'Please open an issue if you feel that this is incorrect.'
fi
# Tauri dependencies
set -- openssl webkit2gtk4.1-devel openssl-devel curl wget file libappindicator-gtk3-devel librsvg2-devel libxdo-devel vips
sudo dnf install "$@"
elif has apk; then
echo "Detected apk!"
echo "Installing dependencies with apk..."
echo "Alpine suport is experimental" >&2
# Tauri dependencies
set -- build-base curl wget file openssl-dev gtk+3.0-dev librsvg-dev \
webkit2gtk-4.1-dev libayatana-indicator-dev xdotool vips
sudo apk add "$@"
elif has emerge; then
echo "Detected emerge!"
echo "Installing dependencies with emerge..."
echo "Gentoo support is experiemntal" >&2
# Tauri Dependencies
set -- net-libs/webkit-gtk:4.1 dev-libs/libappindicator net-misc/curl net-misc/wget sys-apps/file
sudo emerge --ask "$@"
elif has zypper; then
echo "Detected zypper!"
echo "Installing dependencies with zypper..."
echo "openSUSE support is experimental" >&2
set -- libopenssl-devel webkit2gtk3-devel curl wget file libappindicator3-1 librsvg-devel
sudo zypper in "$@"
sudo zypper in -t pattern devel_basis
else
if has lsb_release; then
_distro="'$(lsb_release -s -d)' "
fi
err "Your Linux distro ${_distro:-}is not supported by this script." \
'We would welcome a PR or some help adding your OS to this script:' \
'https://github.com/polyfrost/onelauncher/issues'
fi
;;
*)
err "Your OS ($(uname)) is not supported by this script." \
'We would welcome a PR or some help adding your OS to this script.' \
'https://github.com/polyfrost/onelauncher/issues'
;;
esac
if [ "${CI:-}" != "true" ]; then
echo "Installing Rust tools..."
_tools="cargo-watch"
echo "$_tools" | xargs cargo install
fi
echo 'Your machine has been setup for OneLauncher development!'

0
scripts/tauri.ts Normal file
View file

4
scripts/tsconfig.json Normal file
View file

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.base.json",
"include": ["./**/*.ts"]
}

6
scripts/utils/fetch.ts Normal file
View file

@ -0,0 +1,6 @@
import type { Agent } from 'undici';
const agentOptions: Agent.Options = {
allowH2: true,
connect: { timeout: CONNECT_TIMEOUT },
};

0
scripts/utils/flock.ts Normal file
View file

0
scripts/utils/patch.ts Normal file
View file

0
scripts/utils/shared.ts Normal file
View file

66
scripts/utils/triple.ts Normal file
View file

@ -0,0 +1,66 @@
import { env } from 'node:process';
import * as os from 'node:os';
import { execaCommand } from 'execa';
const state: { __debug: boolean; libc: 'musl' | 'glibc' } = {
__debug: env.NODE_ENV === 'debug',
libc: 'glibc',
};
if (os.type() === 'Linux') {
try {
const lldResult = await execaCommand('ldd /bin/ls');
if (lldResult.stdout.includes('msl'))
state.libc = 'musl';
}
catch (error) {
if (state.__debug) {
console.warn('failed to check libs type');
console.error(error);
}
}
}
const OS_TYPE: Record<string, string> = {
darwin: 'Darwin',
windows: 'Windows_NT',
linux: 'Linux',
};
type TripleID = ['Darwin' | 'Windows_NT', 'x86_64' | 'aarch64'] | ['Linux', 'x86_64' | 'aarch64', 'musl' | 'glibc'];
export function getTriple(): TripleID {
const tripleState: {
_libc: typeof state.libc;
_os: string;
_arch: string;
} = {
_libc: state.libc,
_os: '',
_arch: '',
};
if (env.TARGET_TRIPLE) {
const target = env.TARGET_TRIPLE.split('-');
tripleState._os = OS_TYPE[target[2] ?? ''] as string;
tripleState._arch = target[0] as string;
if (tripleState._os === 'Linux')
tripleState._libc = target[3]?.includes('musl') ? 'musl' : 'glibc';
}
else {
tripleState._os = os.type();
tripleState._arch = os.machine();
if (tripleState._arch === 'arm64')
tripleState._arch = 'aarch64';
}
if (tripleState._arch !== 'x86_64' && tripleState._arch !== 'aarch64')
throw new Error(`Unsuported architecture`);
if (tripleState._os === 'Linux')
return [tripleState._os, tripleState._arch, tripleState._libc];
else if (tripleState._os !== 'Darwin' && tripleState._os !== 'Windows_NT')
throw new Error(`Unsuported OS`);
return [tripleState._os, tripleState._arch];
}

0
scripts/utils/which.ts Normal file
View file