create-spud 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{example → examples/minimal}/index.html +0 -2
- package/{example → examples/minimal}/package.json +4 -4
- package/examples/minimal/public/favicon.svg +1 -0
- package/{example → examples/minimal}/readme.md +3 -3
- package/examples/minimal/src/gameplay.ts +16 -0
- package/examples/pong/index.html +31 -0
- package/examples/pong/package.json +21 -0
- package/examples/pong/public/favicon.svg +1 -0
- package/examples/pong/readme.md +50 -0
- package/examples/pong/src/assets/audio/goal.wav +0 -0
- package/examples/pong/src/assets/audio/paddle-hit.wav +0 -0
- package/examples/pong/src/assets/audio/wall-hit.wav +0 -0
- package/examples/pong/src/audio.ts +20 -0
- package/examples/pong/src/camera.ts +50 -0
- package/examples/pong/src/canvas.ts +36 -0
- package/examples/pong/src/gameLoop.ts +46 -0
- package/examples/pong/src/gameplay.ts +165 -0
- package/examples/pong/src/main.ts +23 -0
- package/examples/pong/src/state.ts +38 -0
- package/examples/pong/tsconfig.json +37 -0
- package/examples/pong/vite.config.ts +15 -0
- package/index.js +153 -0
- package/package.json +10 -10
- package/readme.md +19 -18
- package/example/bun.lock +0 -212
- package/example/public/favicon.svg +0 -1
- package/example/public/poster.webp +0 -0
- package/example/src/assets/audio/menu-music.mp3 +0 -0
- package/example/src/assets/audio/shoot.wav +0 -0
- package/example/src/assets/images/sprite.png +0 -0
- package/example/src/audio.ts +0 -31
- package/example/src/gameplay.ts +0 -53
- package/example/src/sprite.ts +0 -53
- package/index.ts +0 -199
- /package/{example → examples/minimal}/src/canvas.ts +0 -0
- /package/{example → examples/minimal}/src/gameLoop.ts +0 -0
- /package/{example → examples/minimal}/src/main.ts +0 -0
- /package/{example → examples/minimal}/src/state.ts +0 -0
- /package/{example → examples/minimal}/tsconfig.json +0 -0
- /package/{example → examples/minimal}/vite.config.ts +0 -0
- /package/{example → examples/pong}/src/assets/fonts/atari.ttf +0 -0
package/index.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
':' //; case "${npm_config_user_agent%%/*}" in bun) exec bun "$0" "$@";; deno) exec deno run -A "$0" "$@";; *) exec node "$0" "$@";; esac
|
|
3
|
+
|
|
4
|
+
// index.ts
|
|
5
|
+
import { spawn } from "node:child_process";
|
|
6
|
+
import { once } from "node:events";
|
|
7
|
+
import { copyFile, mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { intro, note, cancel, text, confirm, tasks, group, select } from "@clack/prompts";
|
|
11
|
+
import kebabcase from "lodash.kebabcase";
|
|
12
|
+
intro("It's spud time.");
|
|
13
|
+
var Template = {
|
|
14
|
+
Minimal: "minimal",
|
|
15
|
+
Pong: "pong"
|
|
16
|
+
};
|
|
17
|
+
var PackageManager = {
|
|
18
|
+
Bun: "bun",
|
|
19
|
+
Npm: "npm",
|
|
20
|
+
Pnpm: "pnpm",
|
|
21
|
+
Deno: "deno"
|
|
22
|
+
};
|
|
23
|
+
var devCommand = {
|
|
24
|
+
[PackageManager.Bun]: "bun dev",
|
|
25
|
+
[PackageManager.Npm]: "npm run dev",
|
|
26
|
+
[PackageManager.Pnpm]: "pnpm dev",
|
|
27
|
+
[PackageManager.Deno]: "deno task dev"
|
|
28
|
+
};
|
|
29
|
+
var installCommand = {
|
|
30
|
+
[PackageManager.Bun]: "bun i",
|
|
31
|
+
[PackageManager.Npm]: "npm install",
|
|
32
|
+
[PackageManager.Pnpm]: "pnpm install",
|
|
33
|
+
[PackageManager.Deno]: "deno install"
|
|
34
|
+
};
|
|
35
|
+
var buildCommand = {
|
|
36
|
+
[PackageManager.Bun]: "bun run build",
|
|
37
|
+
[PackageManager.Npm]: "npm run build",
|
|
38
|
+
[PackageManager.Pnpm]: "pnpm build",
|
|
39
|
+
[PackageManager.Deno]: "deno task build"
|
|
40
|
+
};
|
|
41
|
+
var packageManager = detectPackageManager();
|
|
42
|
+
var { rawGameName, template, shouldContinue } = await group({
|
|
43
|
+
rawGameName: () => text({
|
|
44
|
+
message: "Game name",
|
|
45
|
+
placeholder: "e.g. Space Invaders",
|
|
46
|
+
validate(value) {
|
|
47
|
+
const trimmed = value?.trim();
|
|
48
|
+
if (!trimmed)
|
|
49
|
+
return "Game name is required. Esc to cancel.";
|
|
50
|
+
if (!kebabcase(trimmed))
|
|
51
|
+
return "Game name must include letters or numbers.";
|
|
52
|
+
}
|
|
53
|
+
}),
|
|
54
|
+
template: () => select({
|
|
55
|
+
message: "Template",
|
|
56
|
+
options: [
|
|
57
|
+
{ label: "minimal", value: Template.Minimal },
|
|
58
|
+
{ label: "pong", value: Template.Pong }
|
|
59
|
+
]
|
|
60
|
+
}),
|
|
61
|
+
shouldContinue: ({ results }) => confirm({
|
|
62
|
+
message: `Ready to write the files to "./${kebabcase((results.rawGameName ?? "").trim())}". Continue?`
|
|
63
|
+
})
|
|
64
|
+
}, {
|
|
65
|
+
onCancel() {
|
|
66
|
+
cancel("Cancelled.");
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
if (!shouldContinue) {
|
|
71
|
+
cancel("Cancelled.");
|
|
72
|
+
process.exit(0);
|
|
73
|
+
}
|
|
74
|
+
var gameName = rawGameName.trim();
|
|
75
|
+
var slug = kebabcase(gameName);
|
|
76
|
+
var targetDir = path.resolve(process.cwd(), slug);
|
|
77
|
+
var templateDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "examples", template);
|
|
78
|
+
await tasks([
|
|
79
|
+
{
|
|
80
|
+
title: `Scaffolding project in ./${slug}/`,
|
|
81
|
+
async task() {
|
|
82
|
+
await mkdir(targetDir, { recursive: true });
|
|
83
|
+
await copyDir(templateDir, targetDir, {
|
|
84
|
+
gameName,
|
|
85
|
+
slug,
|
|
86
|
+
packageManager
|
|
87
|
+
});
|
|
88
|
+
return `Initialized project from the ${template} template`;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
title: `Installing dependencies with ${packageManager}`,
|
|
93
|
+
async task() {
|
|
94
|
+
const proc = spawn(packageManager, ["install"], {
|
|
95
|
+
cwd: targetDir,
|
|
96
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
97
|
+
});
|
|
98
|
+
let output = "";
|
|
99
|
+
proc.stdout?.on("data", (chunk) => {
|
|
100
|
+
output += chunk.toString();
|
|
101
|
+
});
|
|
102
|
+
proc.stderr?.on("data", (chunk) => {
|
|
103
|
+
output += chunk.toString();
|
|
104
|
+
});
|
|
105
|
+
const [exitCode] = await once(proc, "close");
|
|
106
|
+
if (exitCode !== 0) {
|
|
107
|
+
throw new Error(`${packageManager} install failed with exit code ${exitCode}
|
|
108
|
+
${output.trim()}`);
|
|
109
|
+
}
|
|
110
|
+
return `Installed via ${packageManager}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
]);
|
|
114
|
+
note(`cd ${slug}
|
|
115
|
+
${devCommand[packageManager]}`, "Next steps");
|
|
116
|
+
function detectPackageManager() {
|
|
117
|
+
const packageManager2 = process.env["npm_config_user_agent"]?.split(" ")[0]?.split("/")[0];
|
|
118
|
+
switch (packageManager2) {
|
|
119
|
+
case PackageManager.Bun:
|
|
120
|
+
case PackageManager.Npm:
|
|
121
|
+
case PackageManager.Pnpm:
|
|
122
|
+
case PackageManager.Deno:
|
|
123
|
+
return packageManager2;
|
|
124
|
+
default:
|
|
125
|
+
return PackageManager.Npm;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function copyDir(sourceDir, destDir, replacements) {
|
|
129
|
+
await mkdir(destDir, { recursive: true });
|
|
130
|
+
const entries = await readdir(sourceDir, { withFileTypes: true });
|
|
131
|
+
for (const entry of entries) {
|
|
132
|
+
const sourcePath = path.join(sourceDir, entry.name);
|
|
133
|
+
const outputName = entry.name === "_gitignore" ? ".gitignore" : entry.name;
|
|
134
|
+
const destPath = path.join(destDir, outputName);
|
|
135
|
+
if (entry.isDirectory()) {
|
|
136
|
+
if (entry.name === "node_modules" || entry.name === "dist")
|
|
137
|
+
continue;
|
|
138
|
+
await copyDir(sourcePath, destPath, replacements);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (!entry.isFile())
|
|
142
|
+
continue;
|
|
143
|
+
const ext = path.extname(entry.name);
|
|
144
|
+
const extensionsThatMayContainTemplateVariables = [".html", ".json", ".md", ".ts"];
|
|
145
|
+
if (!extensionsThatMayContainTemplateVariables.includes(ext)) {
|
|
146
|
+
await copyFile(sourcePath, destPath);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const text2 = await readFile(sourcePath, "utf8");
|
|
150
|
+
const replaced = text2.replaceAll("game_name", replacements.gameName).replaceAll("game_slug", replacements.slug).replaceAll("dev_command", replacements.packageManager === PackageManager.Bun ? "bunx --bun vite" : "vite").replaceAll("install_command", installCommand[replacements.packageManager]).replaceAll("dev_command_readme", devCommand[replacements.packageManager]).replaceAll("build_command", buildCommand[replacements.packageManager]);
|
|
151
|
+
await writeFile(destPath, replaced);
|
|
152
|
+
}
|
|
153
|
+
}
|
package/package.json
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-spud",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"bin": {
|
|
5
|
-
"create-spud": "./index.
|
|
5
|
+
"create-spud": "./index.js"
|
|
6
6
|
},
|
|
7
7
|
"files": [
|
|
8
|
-
"index.
|
|
9
|
-
"
|
|
8
|
+
"index.js",
|
|
9
|
+
"examples"
|
|
10
10
|
],
|
|
11
11
|
"type": "module",
|
|
12
|
-
"module": "index.ts",
|
|
13
12
|
"dependencies": {
|
|
14
|
-
"@clack/prompts": "
|
|
13
|
+
"@clack/prompts": "1.6.0",
|
|
15
14
|
"lodash.kebabcase": "4.1.1"
|
|
16
15
|
},
|
|
17
16
|
"devDependencies": {
|
|
18
|
-
"@types/bun": "
|
|
19
|
-
"@types/lodash.kebabcase": "4.1.9"
|
|
17
|
+
"@types/bun": "1.3.14",
|
|
18
|
+
"@types/lodash.kebabcase": "4.1.9",
|
|
19
|
+
"@types/node": "26.0.0"
|
|
20
20
|
},
|
|
21
|
-
"
|
|
22
|
-
"
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "bun scripts/build.ts"
|
|
23
23
|
}
|
|
24
24
|
}
|
package/readme.md
CHANGED
|
@@ -8,45 +8,46 @@ The quickest way to set up and scaffold a [spud](https://spud.gg) game.
|
|
|
8
8
|
bun create spud
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Also supported:
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
```bash
|
|
14
|
+
npm create spud
|
|
15
|
+
pnpm create spud
|
|
16
|
+
deno create npm:spud
|
|
17
|
+
```
|
|
17
18
|
|
|
18
19
|
## Automatically set up for you
|
|
19
20
|
|
|
20
|
-
- A working [Vite](https://vite.dev) + [TypeScript](https://www.typescriptlang.org) project with [hot module replacement](https://vite.dev/guide/features#hot-module-replacement)
|
|
21
|
+
- A working [Vite](https://vite.dev) + [TypeScript](https://www.typescriptlang.org) project with [hot module replacement](https://vite.dev/guide/features#hot-module-replacement)
|
|
21
22
|
- Canvas setup with [DPI-aware scaling](https://web.dev/articles/canvas-hidipi)
|
|
22
|
-
- Fixed‑timestep update loop + variable-rate render loop
|
|
23
|
+
- Fixed‑timestep update loop + variable-rate render loop
|
|
23
24
|
- Static asset import handling through [Vite](https://vite.dev/guide/assets#importing-asset-as-url) and [image optimization](https://github.com/FatehAK/vite-plugin-image-optimizer)
|
|
24
25
|
- Gamepad integration with the [spud API (npm)](https://www.npmjs.com/package/@spud.gg/api)
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
26
|
+
- Starter templates:
|
|
27
|
+
- `minimal`: no gameplay or assets included
|
|
28
|
+
- `pong`: a one-player Pong with gamepad and keyboard input support, audio assets, and in-game camera
|
|
28
29
|
|
|
29
30
|
## Requirements
|
|
30
31
|
|
|
31
|
-
- [Bun](https://bun.com/)
|
|
32
|
+
- [Bun](https://bun.com/) for `bun create spud`
|
|
33
|
+
- [Node.js](https://nodejs.org/) 22+ for `npm create spud` or `pnpm create spud`
|
|
34
|
+
- [Deno](https://deno.com/) for `deno create npm:spud`
|
|
35
|
+
|
|
36
|
+
Dependencies are installed with the same tool you use to create the project.
|
|
32
37
|
|
|
33
38
|
<details>
|
|
34
|
-
<summary><strong>
|
|
39
|
+
<summary><strong>Bun installation guide</strong></summary>
|
|
35
40
|
|
|
36
|
-
|
|
41
|
+
Install Bun ([docs](https://bun.com/docs/installation)):
|
|
37
42
|
|
|
38
43
|
```bash
|
|
39
44
|
curl -fsSL https://bun.sh/install | bash
|
|
40
45
|
```
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
Then restart your terminal so `bun` is on your `$PATH`.
|
|
43
48
|
|
|
44
49
|
</details>
|
|
45
50
|
|
|
46
|
-
## Notes
|
|
47
|
-
|
|
48
|
-
- This CLI is Bun-only. If you try to run it with Node (`npx create spud`, for example), that won't work.
|
|
49
|
-
|
|
50
51
|
<!--
|
|
51
52
|
TODO
|
|
52
53
|
- add hmr hints for Vite to cleanup / reinit the raf loops and keep game state reloadable.
|
package/example/bun.lock
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"lockfileVersion": 1,
|
|
3
|
-
"configVersion": 1,
|
|
4
|
-
"workspaces": {
|
|
5
|
-
"": {
|
|
6
|
-
"name": "spud-game-template",
|
|
7
|
-
"dependencies": {
|
|
8
|
-
"@spud.gg/api": "0.0.28",
|
|
9
|
-
},
|
|
10
|
-
"devDependencies": {
|
|
11
|
-
"sharp": "0.34.5",
|
|
12
|
-
"svgo": "4.0.1",
|
|
13
|
-
"typescript": "^5",
|
|
14
|
-
"vite": "8.0.13",
|
|
15
|
-
"vite-plugin-image-optimizer": "2.0.3",
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
"packages": {
|
|
20
|
-
"@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
|
|
21
|
-
|
|
22
|
-
"@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="],
|
|
23
|
-
|
|
24
|
-
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
|
|
25
|
-
|
|
26
|
-
"@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="],
|
|
27
|
-
|
|
28
|
-
"@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="],
|
|
29
|
-
|
|
30
|
-
"@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="],
|
|
31
|
-
|
|
32
|
-
"@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="],
|
|
33
|
-
|
|
34
|
-
"@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="],
|
|
35
|
-
|
|
36
|
-
"@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="],
|
|
37
|
-
|
|
38
|
-
"@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="],
|
|
39
|
-
|
|
40
|
-
"@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="],
|
|
41
|
-
|
|
42
|
-
"@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="],
|
|
43
|
-
|
|
44
|
-
"@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="],
|
|
45
|
-
|
|
46
|
-
"@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="],
|
|
47
|
-
|
|
48
|
-
"@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="],
|
|
49
|
-
|
|
50
|
-
"@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="],
|
|
51
|
-
|
|
52
|
-
"@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="],
|
|
53
|
-
|
|
54
|
-
"@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="],
|
|
55
|
-
|
|
56
|
-
"@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="],
|
|
57
|
-
|
|
58
|
-
"@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="],
|
|
59
|
-
|
|
60
|
-
"@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="],
|
|
61
|
-
|
|
62
|
-
"@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="],
|
|
63
|
-
|
|
64
|
-
"@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="],
|
|
65
|
-
|
|
66
|
-
"@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="],
|
|
67
|
-
|
|
68
|
-
"@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="],
|
|
69
|
-
|
|
70
|
-
"@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="],
|
|
71
|
-
|
|
72
|
-
"@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="],
|
|
73
|
-
|
|
74
|
-
"@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="],
|
|
75
|
-
|
|
76
|
-
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="],
|
|
77
|
-
|
|
78
|
-
"@oxc-project/types": ["@oxc-project/types@0.130.0", "", {}, "sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q=="],
|
|
79
|
-
|
|
80
|
-
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg=="],
|
|
81
|
-
|
|
82
|
-
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg=="],
|
|
83
|
-
|
|
84
|
-
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg=="],
|
|
85
|
-
|
|
86
|
-
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw=="],
|
|
87
|
-
|
|
88
|
-
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ=="],
|
|
89
|
-
|
|
90
|
-
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A=="],
|
|
91
|
-
|
|
92
|
-
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg=="],
|
|
93
|
-
|
|
94
|
-
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg=="],
|
|
95
|
-
|
|
96
|
-
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ=="],
|
|
97
|
-
|
|
98
|
-
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw=="],
|
|
99
|
-
|
|
100
|
-
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ=="],
|
|
101
|
-
|
|
102
|
-
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.1", "", { "os": "none", "cpu": "arm64" }, "sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ=="],
|
|
103
|
-
|
|
104
|
-
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.1", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ=="],
|
|
105
|
-
|
|
106
|
-
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw=="],
|
|
107
|
-
|
|
108
|
-
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.1", "", { "os": "win32", "cpu": "x64" }, "sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ=="],
|
|
109
|
-
|
|
110
|
-
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="],
|
|
111
|
-
|
|
112
|
-
"@spud.gg/api": ["@spud.gg/api@0.0.28", "", {}, "sha512-5062yi0qBL1kKpkv3Izq1DATeIanc0TQD3VBWAbgdpCT9o2/M0xsgpMgM6KxikuUzxd4RHDd6FrmaxdZ1Y3N5g=="],
|
|
113
|
-
|
|
114
|
-
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
|
|
115
|
-
|
|
116
|
-
"ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="],
|
|
117
|
-
|
|
118
|
-
"boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="],
|
|
119
|
-
|
|
120
|
-
"commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="],
|
|
121
|
-
|
|
122
|
-
"css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="],
|
|
123
|
-
|
|
124
|
-
"css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="],
|
|
125
|
-
|
|
126
|
-
"css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="],
|
|
127
|
-
|
|
128
|
-
"csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="],
|
|
129
|
-
|
|
130
|
-
"detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
|
|
131
|
-
|
|
132
|
-
"dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="],
|
|
133
|
-
|
|
134
|
-
"domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="],
|
|
135
|
-
|
|
136
|
-
"domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="],
|
|
137
|
-
|
|
138
|
-
"domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="],
|
|
139
|
-
|
|
140
|
-
"entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
|
|
141
|
-
|
|
142
|
-
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
|
|
143
|
-
|
|
144
|
-
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
|
|
145
|
-
|
|
146
|
-
"lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
|
|
147
|
-
|
|
148
|
-
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
|
|
149
|
-
|
|
150
|
-
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="],
|
|
151
|
-
|
|
152
|
-
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="],
|
|
153
|
-
|
|
154
|
-
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="],
|
|
155
|
-
|
|
156
|
-
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="],
|
|
157
|
-
|
|
158
|
-
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="],
|
|
159
|
-
|
|
160
|
-
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="],
|
|
161
|
-
|
|
162
|
-
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="],
|
|
163
|
-
|
|
164
|
-
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="],
|
|
165
|
-
|
|
166
|
-
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="],
|
|
167
|
-
|
|
168
|
-
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="],
|
|
169
|
-
|
|
170
|
-
"mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="],
|
|
171
|
-
|
|
172
|
-
"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
|
|
173
|
-
|
|
174
|
-
"nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="],
|
|
175
|
-
|
|
176
|
-
"pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
|
177
|
-
|
|
178
|
-
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
|
|
179
|
-
|
|
180
|
-
"picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
|
|
181
|
-
|
|
182
|
-
"postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="],
|
|
183
|
-
|
|
184
|
-
"rolldown": ["rolldown@1.0.1", "", { "dependencies": { "@oxc-project/types": "=0.130.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.1", "@rolldown/binding-darwin-arm64": "1.0.1", "@rolldown/binding-darwin-x64": "1.0.1", "@rolldown/binding-freebsd-x64": "1.0.1", "@rolldown/binding-linux-arm-gnueabihf": "1.0.1", "@rolldown/binding-linux-arm64-gnu": "1.0.1", "@rolldown/binding-linux-arm64-musl": "1.0.1", "@rolldown/binding-linux-ppc64-gnu": "1.0.1", "@rolldown/binding-linux-s390x-gnu": "1.0.1", "@rolldown/binding-linux-x64-gnu": "1.0.1", "@rolldown/binding-linux-x64-musl": "1.0.1", "@rolldown/binding-openharmony-arm64": "1.0.1", "@rolldown/binding-wasm32-wasi": "1.0.1", "@rolldown/binding-win32-arm64-msvc": "1.0.1", "@rolldown/binding-win32-x64-msvc": "1.0.1" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ=="],
|
|
185
|
-
|
|
186
|
-
"sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="],
|
|
187
|
-
|
|
188
|
-
"semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
|
|
189
|
-
|
|
190
|
-
"sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
|
|
191
|
-
|
|
192
|
-
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
|
|
193
|
-
|
|
194
|
-
"svgo": ["svgo@4.0.1", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="],
|
|
195
|
-
|
|
196
|
-
"tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="],
|
|
197
|
-
|
|
198
|
-
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
|
199
|
-
|
|
200
|
-
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
201
|
-
|
|
202
|
-
"vite": ["vite@8.0.13", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.14", "rolldown": "1.0.1", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw=="],
|
|
203
|
-
|
|
204
|
-
"vite-plugin-image-optimizer": ["vite-plugin-image-optimizer@2.0.3", "", { "dependencies": { "ansi-colors": "^4.1.3", "pathe": "^2.0.3" }, "peerDependencies": { "sharp": ">=0.34.0", "svgo": ">=4", "vite": ">=5" }, "optionalPeers": ["sharp", "svgo"] }, "sha512-1vrFOTcpSvv6DCY7h8UXab4wqMAjTJB/ndOzG/Kmj1oDOuPF6mbjkNQoGzzCEYeWGe7qU93jc8oQqvoJ57al3A=="],
|
|
205
|
-
|
|
206
|
-
"@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="],
|
|
207
|
-
|
|
208
|
-
"csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="],
|
|
209
|
-
|
|
210
|
-
"csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="],
|
|
211
|
-
}
|
|
212
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><defs><style>.cls-1{fill:#2f0007;}.cls-2{fill:#fff;}</style></defs><title>102565_VECTOR_DT_R_01</title><rect class="cls-1" y="7.8" width="32" height="16.36" rx="8.2"/><rect class="cls-2" x="1.7" y="9.5" width="28.6" height="13.03" rx="6.5"/><path class="cls-1" d="M7.4,11.6h0A1.4,1.4,0,0,1,8.8,13v5.7a1.4,1.4,0,0,1-1.4,1.4h0a1.3,1.3,0,0,1-1.3-1.4V13A1.3,1.3,0,0,1,7.4,11.6Z"/><path class="cls-1" d="M11.8,15.8h0a1.4,1.4,0,0,1-1.4,1.4H4.7a1.4,1.4,0,0,1-1.4-1.4h0a1.3,1.3,0,0,1,1.4-1.3h5.7A1.3,1.3,0,0,1,11.8,15.8Z"/><circle class="cls-1" cx="20.7" cy="16" r="1.7"/><circle class="cls-1" cx="23.8" cy="12.8" r="1.7"/><circle class="cls-1" cx="23.8" cy="19.2" r="1.7"/><circle class="cls-1" cx="27.1" cy="16" r="1.7"/><ellipse class="cls-1" cx="14" cy="17.9" rx="1" ry="0.9"/><ellipse class="cls-1" cx="17" cy="17.9" rx="1" ry="0.9"/></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/example/src/audio.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { audio } from "@spud.gg/api";
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
when you import binary assets using vite, you'll get a url string.
|
|
5
|
-
read more at https://vite.dev/guide/assets#importing-asset-as-url
|
|
6
|
-
*/
|
|
7
|
-
import shootAudioUrl from "./assets/audio/shoot.wav";
|
|
8
|
-
import menuMusicUrl from "./assets/audio/menu-music.mp3";
|
|
9
|
-
|
|
10
|
-
/*
|
|
11
|
-
use createSounds for short, snappy SFX that you want pre-buffered
|
|
12
|
-
for low-latency playback. we recommend creating your own effects
|
|
13
|
-
using a tool like https://pro.sfxr.me/
|
|
14
|
-
*/
|
|
15
|
-
export const sfx = audio.createSounds({
|
|
16
|
-
shoot: {
|
|
17
|
-
url: shootAudioUrl,
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
/*
|
|
22
|
-
createMusic is for longer tracks that can stream and don't need
|
|
23
|
-
frame-perfect timing.
|
|
24
|
-
*/
|
|
25
|
-
export const menuMusic = audio.createMusic({
|
|
26
|
-
url: menuMusicUrl,
|
|
27
|
-
loop: true,
|
|
28
|
-
volume: 0.4,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
menuMusic.play();
|
package/example/src/gameplay.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Button, gamepads, keyboard } from "@spud.gg/api";
|
|
2
|
-
import type { State } from "./state";
|
|
3
|
-
/* moon_sprite_import */
|
|
4
|
-
/* audio_import */
|
|
5
|
-
|
|
6
|
-
function justFired() {
|
|
7
|
-
const pressedTrigger = gamepads.anyPlayer.justPressed(Button.RightTrigger);
|
|
8
|
-
return pressedTrigger || keyboard.justPressed("Enter");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function fixedUpdate(state: State, dt: number) {
|
|
12
|
-
// handle inputs and update state here
|
|
13
|
-
state.elapsedSeconds += dt;
|
|
14
|
-
|
|
15
|
-
if (justFired()) {
|
|
16
|
-
/* audio_shoot_sfx */
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// handle any post-update cleanup below
|
|
20
|
-
gamepads.clearInputs();
|
|
21
|
-
keyboard.clearInputs();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function render(state: State, ctx: CanvasRenderingContext2D) {
|
|
25
|
-
const { width, height, centerX, centerY } = state.bounds;
|
|
26
|
-
|
|
27
|
-
/* pixel_art_image_smoothing */
|
|
28
|
-
|
|
29
|
-
// clear out the background
|
|
30
|
-
ctx.fillStyle = "#0b0d1a";
|
|
31
|
-
ctx.fillRect(0, 0, width, height);
|
|
32
|
-
ctx.fillStyle = "white";
|
|
33
|
-
|
|
34
|
-
// draw an orbiting circle
|
|
35
|
-
const moon = {
|
|
36
|
-
radius: 30,
|
|
37
|
-
orbitRadius: 100,
|
|
38
|
-
get x() {
|
|
39
|
-
return centerX + Math.cos(state.elapsedSeconds) * moon.orbitRadius;
|
|
40
|
-
},
|
|
41
|
-
get y() {
|
|
42
|
-
return centerY + Math.sin(state.elapsedSeconds) * moon.orbitRadius;
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/* moon_sprite_draw */
|
|
47
|
-
|
|
48
|
-
// write some text
|
|
49
|
-
ctx.textAlign = "center";
|
|
50
|
-
ctx.textBaseline = "middle";
|
|
51
|
-
/* fonts_ctx_font */
|
|
52
|
-
ctx.fillText("hello, gamer", centerX, centerY);
|
|
53
|
-
}
|