Skip to content

Commit

Permalink
feat: add vanilla ts example
Browse files Browse the repository at this point in the history
  • Loading branch information
MartianGreed committed Jan 24, 2025
1 parent c842833 commit 8347522
Show file tree
Hide file tree
Showing 8 changed files with 386 additions and 20 deletions.
24 changes: 24 additions & 0 deletions examples/example-vite-vanilla-ts/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
19 changes: 19 additions & 0 deletions examples/example-vite-vanilla-ts/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "example-vite-vanilla-ts",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "node --experimental-transform-types --experimental-modules src/main.ts",
"build": "tsc"
},
"dependencies": {
"@dojoengine/core": "workspace:",
"@dojoengine/sdk": "workspace:",
"@dojoengine/torii-client": "workspace:",
"starknet": "catalog:"
},
"devDependencies": {
"typescript": "~5.6.2"
}
}
7 changes: 7 additions & 0 deletions examples/example-vite-vanilla-ts/src/dojoConfig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { createDojoConfig } from "@dojoengine/core";

import manifest from "../../../worlds/dojo-starter/manifest_dev.json" with { type: "json" };

export const dojoConfig = createDojoConfig({
manifest,
});
33 changes: 33 additions & 0 deletions examples/example-vite-vanilla-ts/src/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Step 1. Import dojoConfig. This pulls data out of manifest and makes it reusable throughout your entire application.
import { dojoConfig } from "./dojoConfig.ts";

import { init } from "@dojoengine/sdk/experimental";
import { schema, SchemaType } from "./typescript/models.gen.ts";
import { ClauseBuilder, ToriiQueryBuilder } from "@dojoengine/sdk";

async function main() {
// Step 2. Instanciate sdk. It's considered a good practice to instanciate it once and then use this handle.
const sdk = await init<SchemaType>({
client: {
rpcUrl: dojoConfig.rpcUrl,
toriiUrl: dojoConfig.toriiUrl,
relayUrl: dojoConfig.relayUrl,
worldAddress: dojoConfig.manifest.world.address,
},
domain: {
name: "WORLD_NAME",
version: "1.0",
chainId: "KATANA",
revision: "1",
},
});

const events = await sdk.getEvents(
new ToriiQueryBuilder()
.withClause(new ClauseBuilder().keys([], [undefined]).build())
.build()
);
console.log(events);
}

main().catch(console.error);
68 changes: 68 additions & 0 deletions examples/example-vite-vanilla-ts/src/typescript/contracts.gen.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { DojoProvider, DojoCall } from "@dojoengine/core";
import {
Account,
AccountInterface,
BigNumberish,
CairoOption,
CairoCustomEnum,
ByteArray,
} from "starknet";
import * as models from "./models.gen";

export function setupWorld(provider: DojoProvider) {
const build_actions_move_calldata = (
direction: CairoCustomEnum
): DojoCall => {
return {
contractName: "actions",
entrypoint: "move",
calldata: [direction],
};
};

const actions_move = async (
snAccount: Account | AccountInterface,
direction: CairoCustomEnum
) => {
try {
return await provider.execute(
snAccount,
build_actions_move_calldata(direction),
"dojo_starter"
);
} catch (error) {
console.error(error);
throw error;
}
};

const build_actions_spawn_calldata = (): DojoCall => {
return {
contractName: "actions",
entrypoint: "spawn",
calldata: [],
};
};

const actions_spawn = async (snAccount: Account | AccountInterface) => {
try {
return await provider.execute(
snAccount,
build_actions_spawn_calldata(),
"dojo_starter"
);
} catch (error) {
console.error(error);
throw error;
}
};

return {
actions: {
move: actions_move,
buildMoveCalldata: build_actions_move_calldata,
spawn: actions_spawn,
buildSpawnCalldata: build_actions_spawn_calldata,
},
};
}
172 changes: 172 additions & 0 deletions examples/example-vite-vanilla-ts/src/typescript/models.gen.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
import type { SchemaType as ISchemaType } from "@dojoengine/sdk";

import {
CairoCustomEnum,
CairoOption,
CairoOptionVariant,
BigNumberish,
} from "starknet";

type WithFieldOrder<T> = T & { fieldOrder: string[] };

// Type definition for `dojo_starter::models::DirectionsAvailable` struct
export interface DirectionsAvailable {
player: string;
directions: Array<DirectionEnum>;
}

// Type definition for `dojo_starter::models::DirectionsAvailableValue` struct
export interface DirectionsAvailableValue {
directions: Array<DirectionEnum>;
}

// Type definition for `dojo_starter::models::Moves` struct
export interface Moves {
player: string;
remaining: BigNumberish;
last_direction: CairoOption<DirectionEnum>;
can_move: boolean;
}

// Type definition for `dojo_starter::models::MovesValue` struct
export interface MovesValue {
remaining: BigNumberish;
last_direction: CairoOption<DirectionEnum>;
can_move: boolean;
}

// Type definition for `dojo_starter::models::Position` struct
export interface Position {
player: string;
vec: Vec2;
}

// Type definition for `dojo_starter::models::PositionValue` struct
export interface PositionValue {
vec: Vec2;
}

// Type definition for `dojo_starter::models::Vec2` struct
export interface Vec2 {
x: BigNumberish;
y: BigNumberish;
}

// Type definition for `dojo_starter::systems::actions::actions::Moved` struct
export interface Moved {
player: string;
direction: DirectionEnum;
}

// Type definition for `dojo_starter::systems::actions::actions::MovedValue` struct
export interface MovedValue {
direction: DirectionEnum;
}

// Type definition for `dojo_starter::models::Direction` enum
export type Direction = {
Left: string;
Right: string;
Up: string;
Down: string;
};
export type DirectionEnum = CairoCustomEnum;

export interface SchemaType extends ISchemaType {
dojo_starter: {
DirectionsAvailable: WithFieldOrder<DirectionsAvailable>;
DirectionsAvailableValue: WithFieldOrder<DirectionsAvailableValue>;
Moves: WithFieldOrder<Moves>;
MovesValue: WithFieldOrder<MovesValue>;
Position: WithFieldOrder<Position>;
PositionValue: WithFieldOrder<PositionValue>;
Vec2: WithFieldOrder<Vec2>;
Moved: WithFieldOrder<Moved>;
MovedValue: WithFieldOrder<MovedValue>;
};
}
export const schema: SchemaType = {
dojo_starter: {
DirectionsAvailable: {
fieldOrder: ["player", "directions"],
player: "",
directions: [
new CairoCustomEnum({
Left: "",
Right: undefined,
Up: undefined,
Down: undefined,
}),
],
},
DirectionsAvailableValue: {
fieldOrder: ["directions"],
directions: [
new CairoCustomEnum({
Left: "",
Right: undefined,
Up: undefined,
Down: undefined,
}),
],
},
Moves: {
fieldOrder: ["player", "remaining", "last_direction", "can_move"],
player: "",
remaining: 0,
last_direction: new CairoOption(CairoOptionVariant.None),
can_move: false,
},
MovesValue: {
fieldOrder: ["remaining", "last_direction", "can_move"],
remaining: 0,
last_direction: new CairoOption(CairoOptionVariant.None),
can_move: false,
},
Position: {
fieldOrder: ["player", "vec"],
player: "",
vec: { x: 0, y: 0 },
},
PositionValue: {
fieldOrder: ["vec"],
vec: { x: 0, y: 0 },
},
Vec2: {
fieldOrder: ["x", "y"],
x: 0,
y: 0,
},
Moved: {
fieldOrder: ["player", "direction"],
player: "",
direction: new CairoCustomEnum({
Left: "",
Right: undefined,
Up: undefined,
Down: undefined,
}),
},
MovedValue: {
fieldOrder: ["direction"],
direction: new CairoCustomEnum({
Left: "",
Right: undefined,
Up: undefined,
Down: undefined,
}),
},
},
};
export enum ModelsMapping {
Direction = "dojo_starter-Direction",
DirectionsAvailable = "dojo_starter-DirectionsAvailable",
DirectionsAvailableValue = "dojo_starter-DirectionsAvailableValue",
Moves = "dojo_starter-Moves",
MovesValue = "dojo_starter-MovesValue",
Position = "dojo_starter-Position",
PositionValue = "dojo_starter-PositionValue",
Vec2 = "dojo_starter-Vec2",
Moved = "dojo_starter-Moved",
MovedValue = "dojo_starter-MovedValue",
}
24 changes: 24 additions & 0 deletions examples/example-vite-vanilla-ts/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,

/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,

/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},
"include": ["src"]
}
Loading

0 comments on commit 8347522

Please sign in to comment.