@selfage/generator_cli
Version:
Code generation for message, service, and database.
229 lines (228 loc) • 6.2 kB
TypeScript
export interface EnumValue {
name: string;
value: number;
}
export interface EnumDefinition {
kind: "Enum";
name: string;
values: Array<EnumValue>;
}
export interface MessageFieldDefinition {
name: string;
type: string;
index: number;
isArray?: true;
import?: string;
deprecated?: true;
}
export interface DatastoreFilterTemplate {
fieldName: string;
operator: string;
}
export interface DatastoreOrdering {
fieldName: string;
descending: boolean;
}
export interface DatastoreQueryTemplate {
name: string;
filters?: Array<DatastoreFilterTemplate>;
orderings?: Array<DatastoreOrdering>;
}
export interface DatastoreDefinition {
output: string;
key: string;
queries?: Array<DatastoreQueryTemplate>;
}
export interface MessageDefinition {
kind: "Message";
name: string;
fields: Array<MessageFieldDefinition>;
}
export interface ServiceDefinition {
kind: "Service";
name: string;
path: string;
}
export interface KeyValueParamDefinition {
key: string;
type: string;
import?: string;
}
export interface RemoteCallDefinition {
name: string;
path: string;
body: string;
importBody?: string;
authKey?: string;
metadata?: KeyValueParamDefinition;
response: string;
importResponse?: string;
}
export interface RemoteCallsGroupDefinition {
kind: "RemoteCallsGroup";
name: string;
service: string;
importService?: string;
path?: string;
calls: Array<RemoteCallDefinition>;
outputClient: string;
outputHandler: string;
}
export interface SpannerTableColumnType {
type: string;
import?: string;
isArray?: true;
nullable?: true;
}
export interface SpannerTableColumnDefinition extends SpannerTableColumnType {
name: string;
}
export interface SpannerTableColumnGroupDefinition {
name: string;
columns: Array<string>;
}
export interface SpannerTableSearchColumnDefinition {
name: string;
columnRefs: Array<string>;
}
export interface SpannerIndexColumnDefinition {
name: string;
desc: boolean;
}
export interface SpannerTablePrimaryKeyDefinition {
name: string;
desc: boolean;
}
export interface SpannerTableInterleaveDefinition {
parentTable: string;
cascadeOnDelete?: true;
}
export interface SpannerIndexDefinition {
name: string;
columns: Array<string | SpannerIndexColumnDefinition>;
unique?: true;
nullFiltered?: true;
}
export interface SpannerSearchIndexOrderByDefinition {
name: string;
desc: boolean;
}
export interface SpannerSearchIndexDefinition {
name: string;
columns: Array<string>;
partitionByColumns?: Array<string>;
orderByColumns?: Array<string | SpannerSearchIndexOrderByDefinition>;
}
export interface SpannerTableDefinition {
kind: "Table";
name: string;
columns: Array<SpannerTableColumnDefinition>;
columnGroups?: Array<SpannerTableColumnGroupDefinition>;
searchColumns?: Array<SpannerTableSearchColumnDefinition>;
primaryKeys: Array<string | SpannerTablePrimaryKeyDefinition>;
interleave?: SpannerTableInterleaveDefinition;
indexes?: Array<SpannerIndexDefinition>;
searchIndexes?: Array<SpannerSearchIndexDefinition>;
insert?: string;
delete?: string;
get?: string;
update?: string;
}
export interface SpannerTaskTableDefinition {
kind: "TaskTable";
name: string;
columns: Array<SpannerTableColumnDefinition>;
retryCountColumn: string;
executionTimeColumn: string;
createdTimeColumn: string;
primaryKeys: Array<string | SpannerTablePrimaryKeyDefinition>;
indexes?: Array<SpannerIndexDefinition>;
executionTimeIndex: string;
insert: string;
delete: string;
get: string;
listPendingTasks: string;
getMetadata: string;
updateMetadata: string;
}
export interface SpannerJoinOnLeaf {
lColumn?: string;
lTable?: string;
lVar?: string;
op: ">" | "<" | ">=" | "<=" | "!=" | "=";
rColumn: string;
}
export interface SpannerJoinOnConcat {
op: "AND" | "OR";
exprs: Array<SpannerJoinOnConcat | SpannerJoinOnLeaf>;
}
export interface SpannerJoin {
type: "INNER" | "CROSS" | "FULL" | "LEFT" | "RIGHT";
with: string;
as?: string;
on?: SpannerJoinOnConcat | SpannerJoinOnLeaf;
}
export interface SpannerWhereLeaf {
lColumn: string;
lTable?: string;
func?: "SCORE";
op: ">" | "<" | ">=" | "<=" | "!=" | "=" | "IS NULL" | "IS NOT NULL" | "SEARCH" | "IN";
rVar?: string;
}
export interface SpannerWhereConcat {
op: "AND" | "OR";
exprs: Array<SpannerWhereConcat | SpannerWhereLeaf>;
}
export interface SpannerOrderByExpr {
column: string;
table?: string;
func?: "SCORE";
desc?: true;
}
export interface SpannerGetColumnExpr {
column?: string;
func?: "SCORE";
all?: true;
columnGroup?: string;
table?: string;
}
export interface SpannerSelectDefinition {
name: string;
from: string;
as?: string;
join?: Array<SpannerJoin>;
where?: SpannerWhereConcat | SpannerWhereLeaf;
orderBy?: Array<string | SpannerOrderByExpr>;
withLimit?: boolean;
withOffset?: boolean;
get: Array<string | SpannerGetColumnExpr>;
}
export interface SpannerInsertDefinition {
name: string;
table: string;
set: Array<string>;
onConflict?: "IGNORE" | "UPDATE";
}
export interface SpannerUpdateDefinition {
name: string;
table: string;
set: Array<string>;
where: SpannerWhereConcat | SpannerWhereLeaf;
}
export interface SpannerDeleteDefinition {
name: string;
table: string;
where: SpannerWhereConcat | SpannerWhereLeaf;
}
export interface SpannerDatabaseDefinition {
kind: "SpannerDatabase";
name: string;
tables?: Array<SpannerTableDefinition | SpannerTaskTableDefinition>;
selects?: Array<SpannerSelectDefinition>;
inserts?: Array<SpannerInsertDefinition>;
updates?: Array<SpannerUpdateDefinition>;
deletes?: Array<SpannerDeleteDefinition>;
outputDdl: string;
outputSql: string;
}
export type Definition = EnumDefinition | MessageDefinition | ServiceDefinition | RemoteCallsGroupDefinition | SpannerDatabaseDefinition;