Stage 1 (framework-agnostic):
types.ts — OpenAPI interfaces
contexts/<name>.ts — fetchXxxContext(params) using mizanFetch
mutations/<name>.ts — callXxx(args) using mizanCall
functions/<name>.ts — callXxx(args) using mizanCall
index.ts — re-exports
Stage 2 (per framework):
react.tsx — hooks + context providers + SSR hydration
vue.ts — composables with provide/inject + ref/computed
svelte.ts — writable/derived store factories
New packages:
mizan-runtime — the kernel (~200 lines, zero framework deps)
configure(), initSession(), registerContext(), invalidate(),
mizanFetch(), mizanCall(), MizanError
mizan-vue — Vue adapter (package.json, codegen template)
mizan-svelte — Svelte adapter (package.json, codegen template)
CLI: mizan-generate --target react,vue,svelte
Config: target: 'react' (default) in django.config.mjs
Verified: codegen produces 33 functions across 2 contexts,
14 plain functions, 0 mutations, generating all three Stage 2
outputs from one schema fetch.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
338 lines
8.9 KiB
TypeScript
338 lines
8.9 KiB
TypeScript
// AUTO-GENERATED by mizan - do not edit manually
|
|
// Regenerate with: npm run schemas
|
|
|
|
// ============================================================================
|
|
// OpenAPI Types (generated by openapi-typescript)
|
|
// ============================================================================
|
|
|
|
export interface paths {
|
|
"/channels/chat/params": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/** Chat channel params */
|
|
post: operations["chatParams"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/channels/chat/react": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/** Chat React→Django message */
|
|
post: operations["chatReactMessage"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/channels/chat/django": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/** Chat Django→React message */
|
|
post: operations["chatDjangoMessage"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/channels/notifications/django": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/** Notifications Django→React message */
|
|
post: operations["notificationsDjangoMessage"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/channels/presence/django": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/** Presence Django→React message */
|
|
post: operations["presenceDjangoMessage"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
"/channels/private/django": {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
get?: never;
|
|
put?: never;
|
|
/** Private Django→React message */
|
|
post: operations["privateDjangoMessage"];
|
|
delete?: never;
|
|
options?: never;
|
|
head?: never;
|
|
patch?: never;
|
|
trace?: never;
|
|
};
|
|
}
|
|
export type webhooks = Record<string, never>;
|
|
export interface components {
|
|
schemas: {
|
|
/** BaseModel */
|
|
BaseModel: Record<string, never>;
|
|
/** ChatParams */
|
|
ChatParams: {
|
|
/** Room */
|
|
room: string;
|
|
};
|
|
/** ChatReactMessage */
|
|
ChatReactMessage: {
|
|
/** Text */
|
|
text: string;
|
|
};
|
|
/** ChatDjangoMessage */
|
|
ChatDjangoMessage: {
|
|
/** Text */
|
|
text: string;
|
|
};
|
|
/** NotificationsDjangoMessage */
|
|
NotificationsDjangoMessage: {
|
|
/** Text */
|
|
text: string;
|
|
};
|
|
/** PresenceDjangoMessage */
|
|
PresenceDjangoMessage: {
|
|
/** Value */
|
|
value: number;
|
|
};
|
|
/** PrivateDjangoMessage */
|
|
PrivateDjangoMessage: {
|
|
/** Text */
|
|
text: string;
|
|
};
|
|
};
|
|
responses: never;
|
|
parameters: never;
|
|
requestBodies: never;
|
|
headers: never;
|
|
pathItems: never;
|
|
}
|
|
export type $defs = Record<string, never>;
|
|
export interface operations {
|
|
chatParams: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["ChatParams"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description OK */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["BaseModel"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
chatReactMessage: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody: {
|
|
content: {
|
|
"application/json": components["schemas"]["ChatReactMessage"];
|
|
};
|
|
};
|
|
responses: {
|
|
/** @description OK */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["BaseModel"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
chatDjangoMessage: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description OK */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["ChatDjangoMessage"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
notificationsDjangoMessage: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description OK */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["NotificationsDjangoMessage"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
presenceDjangoMessage: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description OK */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["PresenceDjangoMessage"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
privateDjangoMessage: {
|
|
parameters: {
|
|
query?: never;
|
|
header?: never;
|
|
path?: never;
|
|
cookie?: never;
|
|
};
|
|
requestBody?: never;
|
|
responses: {
|
|
/** @description OK */
|
|
200: {
|
|
headers: {
|
|
[name: string]: unknown;
|
|
};
|
|
content: {
|
|
"application/json": components["schemas"]["PrivateDjangoMessage"];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|
|
|
|
|
|
// ============================================================================
|
|
// Convenience Type Exports
|
|
// ============================================================================
|
|
|
|
export type ChatParams = components["schemas"]["ChatParams"]
|
|
export type ChatReactMessage = components["schemas"]["ChatReactMessage"]
|
|
export type ChatDjangoMessage = components["schemas"]["ChatDjangoMessage"]
|
|
export type NotificationsDjangoMessage = components["schemas"]["NotificationsDjangoMessage"]
|
|
export type PresenceDjangoMessage = components["schemas"]["PresenceDjangoMessage"]
|
|
export type PrivateDjangoMessage = components["schemas"]["PrivateDjangoMessage"]
|
|
|
|
// ============================================================================
|
|
// Channel Registry
|
|
// ============================================================================
|
|
|
|
export const CHANNELS = {
|
|
chat: {
|
|
name: 'chat',
|
|
pascalName: 'Chat',
|
|
hasParams: true,
|
|
hasReactMessage: true,
|
|
hasDjangoMessage: true,
|
|
paramsType: 'ChatParams',
|
|
reactMessageType: 'ChatReactMessage',
|
|
djangoMessageType: 'ChatDjangoMessage',
|
|
},
|
|
notifications: {
|
|
name: 'notifications',
|
|
pascalName: 'Notifications',
|
|
hasParams: false,
|
|
hasReactMessage: false,
|
|
hasDjangoMessage: true,
|
|
djangoMessageType: 'NotificationsDjangoMessage',
|
|
},
|
|
presence: {
|
|
name: 'presence',
|
|
pascalName: 'Presence',
|
|
hasParams: false,
|
|
hasReactMessage: false,
|
|
hasDjangoMessage: true,
|
|
djangoMessageType: 'PresenceDjangoMessage',
|
|
},
|
|
private: {
|
|
name: 'private',
|
|
pascalName: 'Private',
|
|
hasParams: false,
|
|
hasReactMessage: false,
|
|
hasDjangoMessage: true,
|
|
djangoMessageType: 'PrivateDjangoMessage',
|
|
},
|
|
} as const
|