speckl/compiler/dist/parser.d.ts
Scott Scoble adc5b75bff feat(protobuf): honor speck.protoPackage and speck.goPackage overrides
The .proto backend previously emitted:
  package speckl.<name>.v1;
  option go_package = "github.com/sscoble/<name>/proto/.../v1;...v1";
hard-coded. Both fields are now overridable via the SpeckNode's
protoPackage / goPackage fields (populated by top-of-file metadata in
the .speckdl; see upcoming cycle 57 for the related oneof syntax which
will also be reading from the same SpeckNode).

For federated-meetup the overrides are:
  proto_package: "federated_meetup.v1"
  go_package:    "github.com/sscoble/federated-meetup/proto/...;federated_meetupv1"

The consumer Go code (internal/types/types.go, internal/group/) imports
"federated_meetup/v1" — without this override, the generated proto
would emit package "speckl.federated_meetup.v1" and the bindings
would not match the imports, breaking the consuming project's build.

Picks up a half-applied change left in the working tree from the
v0.6 review-v2 session. dist/ is gitignored; tsc build was clean
and all 39 baseline parser tests pass.
2026-06-28 21:49:19 -07:00

214 lines
No EOL
4.5 KiB
TypeScript

export interface SpeckNode {
type: 'speck';
name: string;
members: MemberNode[];
version?: string;
author?: string;
license?: string;
protoPackage?: string;
goPackage?: string;
}
export interface ImportNode {
type: 'import';
path: string;
alias?: string;
version?: string;
hash?: string;
}
export interface InputNode {
type: 'input';
typeExpr: TypeExpr;
}
export interface OutputNode {
type: 'output';
typeExpr: TypeExpr;
}
export interface ConstraintNode {
type: 'constraint';
name?: string;
expr: string;
}
export interface VerifyNode {
type: 'verify';
name: string;
temporalExpr: string;
depth?: number;
}
export interface InterfaceField {
name: string;
type: TypeExpr;
}
export interface RpcMethod {
name: string;
requestType: string;
responseType: string;
clientStreaming?: boolean;
serverStreaming?: boolean;
}
export interface ServiceNode {
type: 'service';
name: string;
rpcs: RpcMethod[];
}
export interface InterfaceNode {
type: 'interface';
name: string;
kind: 'enum' | 'record' | 'service' | 'mixed';
methods: MethodSignature[];
fields: InterfaceField[];
}
export interface MethodSignature {
name: string;
params: {
name: string;
type: TypeExpr;
}[];
returnType: TypeExpr;
}
export interface EventNode {
type: 'event';
name: string;
fields: {
name: string;
type: TypeExpr;
}[];
}
export interface OneofNode {
type: 'oneof';
name: string;
variants: OneofVariant[];
}
export interface OneofVariant {
fieldName: string;
typeName: string;
}
export interface ProvenanceNode {
type: 'provenance';
clauses: ProvenanceClause[];
}
export interface ProvenanceClause {
type: 'regulation' | 'design_decision' | 'parent_spec' | 'external_doc';
value: string;
location?: string;
}
export interface ReviewNode {
type: 'review';
kind: 'manual' | 'auto' | 'hybrid';
}
export interface DerivesNode {
type: 'derives';
from: string;
via?: string;
}
export interface SatisfiesNode {
type: 'satisfies';
requirement: string;
clause?: string;
}
export interface AuthorNode {
type: 'author';
name: string;
email?: string;
}
export interface SourceNode {
type: 'source';
kind: 'conversation' | 'meeting' | 'document' | 'regulation' | 'architecture_review' | 'threat_model' | 'compliance_audit';
ref?: string;
}
export interface BOMNode {
type: 'bom';
compiler?: {
name: string;
version?: string;
};
solver?: {
name: string;
version?: string;
};
runtime?: {
name: string;
version?: string;
};
license?: string;
hash?: string;
}
export interface StateNode {
type: 'state';
variables: StateVar[];
}
export interface StateVar {
name: string;
typeExpr: TypeExpr;
defaultInit?: string;
}
export interface InitNode {
type: 'init';
assignments: {
name: string;
expr: string;
}[];
}
export interface ActionNode {
type: 'action';
name: string;
params: {
name: string;
type: TypeExpr;
}[];
statements: ActionStatement[];
}
export type ActionStatement = {
type: 'assign';
target: string;
expr: string;
} | {
type: 'let';
name: string;
expr: string;
} | {
type: 'require';
expr: string;
} | {
type: 'precondition';
expr: string;
} | {
type: 'postcondition';
expr: string;
} | {
type: 'emit';
event: string;
fields: {
name: string;
value: string;
}[];
} | {
type: 'return';
expr: string;
} | {
type: 'ifblock';
raw: string;
};
export type MemberNode = ImportNode | InputNode | OutputNode | ConstraintNode | VerifyNode | InterfaceNode | EventNode | OneofNode | ProvenanceNode | ReviewNode | DerivesNode | SatisfiesNode | AuthorNode | SourceNode | BOMNode | StateNode | InitNode | ActionNode | ServiceNode;
export interface TypeExpr {
type: 'primitive' | 'record' | 'list' | 'set' | 'map' | 'ident';
name?: string;
fields?: {
name: string;
type: TypeExpr;
}[];
elementType?: TypeExpr;
keyType?: TypeExpr;
valueType?: TypeExpr;
}
export interface AST {
specks: SpeckNode[];
}
/**
* Parse a .speck file and return the AST
*/
export declare function parseSpeckFile(filePath: string): AST;
/**
* Parse SpeckDL content and return the AST
*/
export declare function parseSpeckContent(content: string, filePath?: string): AST;
//# sourceMappingURL=parser.d.ts.map