* feat: Start work on package api * feat: Browser Context Controller * feat: Add packages to cluster metadata feat: Change structure of Package * 🐛 fix: format * 🔨 feat: Add more functions wrapping around Modrinth * 🔨 feat: Start working on browser frontend * feat: BrowserPackage work + markdown support * 🐛 fix: fmt Signed-off-by: Pauline <git@ethanlibs.co> * 🚧 wip: h Signed-off-by: Pauline <git@ethanlibs.co> * feat: Download button for packages for suitable clusters + tweaks * 🚧 wip: markdown and stuff Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: some patches Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: remove react bloat Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore(pkg/infer): try to reduce reused code Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: bump deps Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: markdown innerhtml Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: h Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: tweak Signed-off-by: Pauline <git@ethanlibs.co> * 🚧 wip: idk Signed-off-by: Pauline <git@ethanlibs.co> * fix: Gamemode compile error chore: Add missing and remove unused libraries feat: usePreventLeave hook feat: ClusterOverview edit mode continues with navigation (assuming there was a navigation attempt) after pressing Yes or No for save * feat: Add reload clusters button on home page * feat: More information provided to BrowserPackage * fix: Minor fixes (Navbar isActive, Markdown click prevention, Markdown list styling) * 🐛 fix: h Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: highlighting Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: forge modern Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: bump deps Signed-off-by: Pauline <git@ethanlibs.co> * fix: Markdown-it issue + Added promptOpener hook for Markdown links * feat: Made BrowserPackage sidebar sticky * refactor: Package system (not yet in a working state) * 🚧 wip: bump deps temp Signed-off-by: Pauline <git@ethanlibs.co> * feat: Added a package manager * ✨ feature: start prisma work, but it doesnt break anything so we can keep it until its done. also fix some stuff Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: pushing Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: linting Signed-off-by: Pauline <git@ethanlibs.co> * ✨ feature: start ingress integration Signed-off-by: Pauline <git@ethanlibs.co> * feat: Package Manager should work now 👍 * fix: Package manager tracing spam * feat: Added tauri commands for cluster packages format: Auto formatted frontend + backend * 🐛 fix: tmp Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: format Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: specta extension Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: github actions Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: alias Signed-off-by: Pauline <git@ethanlibs.co> * chore: Some tweaks and fixes * chore: Rebase + gitignore bindings.ts * chore: Remove bindings.ts * 🐛 fix: migrate Signed-off-by: Pauline <git@ethanlibs.co> * 🚧 wip: not sure Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: finalize prisma init schema Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: format Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: bump deps Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: system deps Signed-off-by: Pauline <git@ethanlibs.co> * fix: solid-router navigation issue * feat: Added new BrowserMain page * feat: Tweaks + new package list view * 🐛 fix: bump + format (todo: tauri2, etc) Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: devx (fixes #126) Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: migrate to consola Signed-off-by: Pauline <git@ethanlibs.co> --------- Signed-off-by: Pauline <git@ethanlibs.co> Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
79 lines
1.9 KiB
TypeScript
79 lines
1.9 KiB
TypeScript
import process from 'node:process';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { setTimeout } from 'node:timers/promises';
|
|
|
|
import { type } from 'node:os';
|
|
import fs from 'node:fs/promises';
|
|
import { dirname, join, resolve } from 'pathe';
|
|
import { execa } from 'execa';
|
|
import { consola } from 'consola';
|
|
|
|
export type CheckedEnvironment = ReturnType<typeof checkEnvironment>;
|
|
|
|
export function checkEnvironment(meta: ImportMeta) {
|
|
if (/^(?:msys|mingw|cygwin)$/i.test(process.env.OSTYPE ?? '')) {
|
|
consola.error('bash for windows is not supported. please use Powershell or cmd');
|
|
process.exit(255);
|
|
}
|
|
|
|
process.umask(0o026);
|
|
|
|
const __filename = fileURLToPath(meta.url);
|
|
const __dirname = dirname(__filename);
|
|
const __debug = process.env.NODE_ENV === 'debug';
|
|
const __root = resolve(join(__dirname, '..', '..'));
|
|
const __deps = resolve(join(__root, '.deps'));
|
|
const __exit = process.exit;
|
|
|
|
return { __filename, __dirname, __debug, __root, __deps, __exit };
|
|
}
|
|
|
|
async function where(cmd: string): Promise<boolean> {
|
|
if (/\\/.test(cmd))
|
|
return false;
|
|
|
|
try {
|
|
await execa(cmd);
|
|
}
|
|
catch {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
export async function which(cmd: TemplateStringsArray): Promise<boolean> {
|
|
return type() === 'Windows_NT'
|
|
? where(cmd[0]!)
|
|
: Promise.any(
|
|
Array.from(new Set(process.env.PATH?.split(':')))
|
|
.map(p => fs.access(join(p, cmd[0]!), fs.constants.X_OK)),
|
|
).then(_ => true, _ => false);
|
|
}
|
|
|
|
export async function awaitLock(file: string): Promise<void> {
|
|
if (!(await which`flock`))
|
|
throw new Error('flock is not installed!');
|
|
|
|
const store = { locked: false };
|
|
while (!store.locked)
|
|
try {
|
|
await execa`flock -ns "${file}" -c true`;
|
|
await setTimeout(100);
|
|
}
|
|
catch {
|
|
store.locked = true;
|
|
}
|
|
|
|
while (store.locked) {
|
|
try {
|
|
await execa`flock -ns "${file}" -c true`;
|
|
}
|
|
catch {
|
|
await setTimeout(100);
|
|
continue;
|
|
}
|
|
|
|
store.locked = false;
|
|
}
|
|
}
|