Skip to content

Commit 8347522

Browse files
committed
feat: add vanilla ts example
1 parent c842833 commit 8347522

File tree

8 files changed

+386
-20
lines changed

8 files changed

+386
-20
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"name": "example-vite-vanilla-ts",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "module",
6+
"scripts": {
7+
"dev": "node --experimental-transform-types --experimental-modules src/main.ts",
8+
"build": "tsc"
9+
},
10+
"dependencies": {
11+
"@dojoengine/core": "workspace:",
12+
"@dojoengine/sdk": "workspace:",
13+
"@dojoengine/torii-client": "workspace:",
14+
"starknet": "catalog:"
15+
},
16+
"devDependencies": {
17+
"typescript": "~5.6.2"
18+
}
19+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { createDojoConfig } from "@dojoengine/core";
2+
3+
import manifest from "../../../worlds/dojo-starter/manifest_dev.json" with { type: "json" };
4+
5+
export const dojoConfig = createDojoConfig({
6+
manifest,
7+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Step 1. Import dojoConfig. This pulls data out of manifest and makes it reusable throughout your entire application.
2+
import { dojoConfig } from "./dojoConfig.ts";
3+
4+
import { init } from "@dojoengine/sdk/experimental";
5+
import { schema, SchemaType } from "./typescript/models.gen.ts";
6+
import { ClauseBuilder, ToriiQueryBuilder } from "@dojoengine/sdk";
7+
8+
async function main() {
9+
// Step 2. Instanciate sdk. It's considered a good practice to instanciate it once and then use this handle.
10+
const sdk = await init<SchemaType>({
11+
client: {
12+
rpcUrl: dojoConfig.rpcUrl,
13+
toriiUrl: dojoConfig.toriiUrl,
14+
relayUrl: dojoConfig.relayUrl,
15+
worldAddress: dojoConfig.manifest.world.address,
16+
},
17+
domain: {
18+
name: "WORLD_NAME",
19+
version: "1.0",
20+
chainId: "KATANA",
21+
revision: "1",
22+
},
23+
});
24+
25+
const events = await sdk.getEvents(
26+
new ToriiQueryBuilder()
27+
.withClause(new ClauseBuilder().keys([], [undefined]).build())
28+
.build()
29+
);
30+
console.log(events);
31+
}
32+
33+
main().catch(console.error);
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { DojoProvider, DojoCall } from "@dojoengine/core";
2+
import {
3+
Account,
4+
AccountInterface,
5+
BigNumberish,
6+
CairoOption,
7+
CairoCustomEnum,
8+
ByteArray,
9+
} from "starknet";
10+
import * as models from "./models.gen";
11+
12+
export function setupWorld(provider: DojoProvider) {
13+
const build_actions_move_calldata = (
14+
direction: CairoCustomEnum
15+
): DojoCall => {
16+
return {
17+
contractName: "actions",
18+
entrypoint: "move",
19+
calldata: [direction],
20+
};
21+
};
22+
23+
const actions_move = async (
24+
snAccount: Account | AccountInterface,
25+
direction: CairoCustomEnum
26+
) => {
27+
try {
28+
return await provider.execute(
29+
snAccount,
30+
build_actions_move_calldata(direction),
31+
"dojo_starter"
32+
);
33+
} catch (error) {
34+
console.error(error);
35+
throw error;
36+
}
37+
};
38+
39+
const build_actions_spawn_calldata = (): DojoCall => {
40+
return {
41+
contractName: "actions",
42+
entrypoint: "spawn",
43+
calldata: [],
44+
};
45+
};
46+
47+
const actions_spawn = async (snAccount: Account | AccountInterface) => {
48+
try {
49+
return await provider.execute(
50+
snAccount,
51+
build_actions_spawn_calldata(),
52+
"dojo_starter"
53+
);
54+
} catch (error) {
55+
console.error(error);
56+
throw error;
57+
}
58+
};
59+
60+
return {
61+
actions: {
62+
move: actions_move,
63+
buildMoveCalldata: build_actions_move_calldata,
64+
spawn: actions_spawn,
65+
buildSpawnCalldata: build_actions_spawn_calldata,
66+
},
67+
};
68+
}
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
import type { SchemaType as ISchemaType } from "@dojoengine/sdk";
2+
3+
import {
4+
CairoCustomEnum,
5+
CairoOption,
6+
CairoOptionVariant,
7+
BigNumberish,
8+
} from "starknet";
9+
10+
type WithFieldOrder<T> = T & { fieldOrder: string[] };
11+
12+
// Type definition for `dojo_starter::models::DirectionsAvailable` struct
13+
export interface DirectionsAvailable {
14+
player: string;
15+
directions: Array<DirectionEnum>;
16+
}
17+
18+
// Type definition for `dojo_starter::models::DirectionsAvailableValue` struct
19+
export interface DirectionsAvailableValue {
20+
directions: Array<DirectionEnum>;
21+
}
22+
23+
// Type definition for `dojo_starter::models::Moves` struct
24+
export interface Moves {
25+
player: string;
26+
remaining: BigNumberish;
27+
last_direction: CairoOption<DirectionEnum>;
28+
can_move: boolean;
29+
}
30+
31+
// Type definition for `dojo_starter::models::MovesValue` struct
32+
export interface MovesValue {
33+
remaining: BigNumberish;
34+
last_direction: CairoOption<DirectionEnum>;
35+
can_move: boolean;
36+
}
37+
38+
// Type definition for `dojo_starter::models::Position` struct
39+
export interface Position {
40+
player: string;
41+
vec: Vec2;
42+
}
43+
44+
// Type definition for `dojo_starter::models::PositionValue` struct
45+
export interface PositionValue {
46+
vec: Vec2;
47+
}
48+
49+
// Type definition for `dojo_starter::models::Vec2` struct
50+
export interface Vec2 {
51+
x: BigNumberish;
52+
y: BigNumberish;
53+
}
54+
55+
// Type definition for `dojo_starter::systems::actions::actions::Moved` struct
56+
export interface Moved {
57+
player: string;
58+
direction: DirectionEnum;
59+
}
60+
61+
// Type definition for `dojo_starter::systems::actions::actions::MovedValue` struct
62+
export interface MovedValue {
63+
direction: DirectionEnum;
64+
}
65+
66+
// Type definition for `dojo_starter::models::Direction` enum
67+
export type Direction = {
68+
Left: string;
69+
Right: string;
70+
Up: string;
71+
Down: string;
72+
};
73+
export type DirectionEnum = CairoCustomEnum;
74+
75+
export interface SchemaType extends ISchemaType {
76+
dojo_starter: {
77+
DirectionsAvailable: WithFieldOrder<DirectionsAvailable>;
78+
DirectionsAvailableValue: WithFieldOrder<DirectionsAvailableValue>;
79+
Moves: WithFieldOrder<Moves>;
80+
MovesValue: WithFieldOrder<MovesValue>;
81+
Position: WithFieldOrder<Position>;
82+
PositionValue: WithFieldOrder<PositionValue>;
83+
Vec2: WithFieldOrder<Vec2>;
84+
Moved: WithFieldOrder<Moved>;
85+
MovedValue: WithFieldOrder<MovedValue>;
86+
};
87+
}
88+
export const schema: SchemaType = {
89+
dojo_starter: {
90+
DirectionsAvailable: {
91+
fieldOrder: ["player", "directions"],
92+
player: "",
93+
directions: [
94+
new CairoCustomEnum({
95+
Left: "",
96+
Right: undefined,
97+
Up: undefined,
98+
Down: undefined,
99+
}),
100+
],
101+
},
102+
DirectionsAvailableValue: {
103+
fieldOrder: ["directions"],
104+
directions: [
105+
new CairoCustomEnum({
106+
Left: "",
107+
Right: undefined,
108+
Up: undefined,
109+
Down: undefined,
110+
}),
111+
],
112+
},
113+
Moves: {
114+
fieldOrder: ["player", "remaining", "last_direction", "can_move"],
115+
player: "",
116+
remaining: 0,
117+
last_direction: new CairoOption(CairoOptionVariant.None),
118+
can_move: false,
119+
},
120+
MovesValue: {
121+
fieldOrder: ["remaining", "last_direction", "can_move"],
122+
remaining: 0,
123+
last_direction: new CairoOption(CairoOptionVariant.None),
124+
can_move: false,
125+
},
126+
Position: {
127+
fieldOrder: ["player", "vec"],
128+
player: "",
129+
vec: { x: 0, y: 0 },
130+
},
131+
PositionValue: {
132+
fieldOrder: ["vec"],
133+
vec: { x: 0, y: 0 },
134+
},
135+
Vec2: {
136+
fieldOrder: ["x", "y"],
137+
x: 0,
138+
y: 0,
139+
},
140+
Moved: {
141+
fieldOrder: ["player", "direction"],
142+
player: "",
143+
direction: new CairoCustomEnum({
144+
Left: "",
145+
Right: undefined,
146+
Up: undefined,
147+
Down: undefined,
148+
}),
149+
},
150+
MovedValue: {
151+
fieldOrder: ["direction"],
152+
direction: new CairoCustomEnum({
153+
Left: "",
154+
Right: undefined,
155+
Up: undefined,
156+
Down: undefined,
157+
}),
158+
},
159+
},
160+
};
161+
export enum ModelsMapping {
162+
Direction = "dojo_starter-Direction",
163+
DirectionsAvailable = "dojo_starter-DirectionsAvailable",
164+
DirectionsAvailableValue = "dojo_starter-DirectionsAvailableValue",
165+
Moves = "dojo_starter-Moves",
166+
MovesValue = "dojo_starter-MovesValue",
167+
Position = "dojo_starter-Position",
168+
PositionValue = "dojo_starter-PositionValue",
169+
Vec2 = "dojo_starter-Vec2",
170+
Moved = "dojo_starter-Moved",
171+
MovedValue = "dojo_starter-MovedValue",
172+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"compilerOptions": {
3+
"target": "ES2020",
4+
"useDefineForClassFields": true,
5+
"module": "ESNext",
6+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
7+
"skipLibCheck": true,
8+
9+
/* Bundler mode */
10+
"moduleResolution": "bundler",
11+
"allowImportingTsExtensions": true,
12+
"isolatedModules": true,
13+
"moduleDetection": "force",
14+
"noEmit": true,
15+
16+
/* Linting */
17+
"strict": true,
18+
"noUnusedLocals": true,
19+
"noUnusedParameters": true,
20+
"noFallthroughCasesInSwitch": true,
21+
"noUncheckedSideEffectImports": true
22+
},
23+
"include": ["src"]
24+
}

0 commit comments

Comments
 (0)