Introduce repository-backed capability workspaces

- define and validate the capability and resource-lock languages
- provision workspace source repositories through Central Gitea
- build package runtimes from pinned standalone sources
- replace legacy schema compilation with workspace persistence plans
- add stable optimistic registers and Automerge CRDT documents
- modernize TypeScript/Nix package builds and runtime activation readiness
This commit is contained in:
2026-09-03 15:46:52 -07:00
parent 3c2e4a7e85
commit f4987093f6
57 changed files with 14878 additions and 2788 deletions
+95
View File
@@ -0,0 +1,95 @@
#!/usr/bin/env node
import { readFile } from "node:fs/promises";
import process from "node:process";
import { compileCapabilitySource } from "./parser.js";
import { capabilityId } from "../capability-model/types.js";
import { compileWorkspaceRevision } from "../capability-model/validation.js";
const usage = `usage: quixos-capability-compile [--check]
[--workspace-id ID] [--workspace-revision-id ID]
[--source-root-commit GIT_REV] <workspace.qx | ->
Parses, lowers, and validates a Quixos capability workspace. By default the
checked semantic workspace revision is written as JSON. --check emits no JSON.
The identity overrides instantiate a checked built-in/template assembly for one
real workspace; both must be supplied together.`;
const parseArgs = (args: string[]) => {
let checkOnly = false;
let workspaceId: string | undefined;
let workspaceRevisionId: string | undefined;
let sourceRootCommit: string | undefined;
const positional: string[] = [];
for (let index = 0; index < args.length; index += 1) {
const argument = args[index]!;
if (argument === "--check") checkOnly = true;
else if (argument === "--workspace-id") workspaceId = args[++index];
else if (argument === "--workspace-revision-id") workspaceRevisionId = args[++index];
else if (argument === "--source-root-commit") sourceRootCommit = args[++index];
else if (argument === "-") positional.push(argument);
else if (argument.startsWith("-")) throw new Error(usage);
else positional.push(argument);
}
if (positional.length !== 1 || Boolean(workspaceId) !== Boolean(workspaceRevisionId)) {
throw new Error(usage);
}
return { checkOnly, workspaceId, workspaceRevisionId, sourceRootCommit, fileName: positional[0]! };
};
const main = async () => {
const args = process.argv.slice(2);
if (args.includes("--help") || args.includes("-h")) {
process.stdout.write(`${usage}\n`);
return;
}
const {
checkOnly,
workspaceId,
workspaceRevisionId,
sourceRootCommit,
fileName,
} = parseArgs(args);
const source =
fileName === "-"
? await new Promise<string>((resolve, reject) => {
const chunks: Buffer[] = [];
process.stdin.on("data", (chunk: Buffer) => chunks.push(chunk));
process.stdin.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
process.stdin.on("error", reject);
})
: await readFile(fileName, "utf8");
const result = compileCapabilitySource(source, fileName);
if (!result.ok) {
for (const diagnostic of result.diagnostics) {
const location = diagnostic.line
? `${diagnostic.fileName}:${diagnostic.line}:${diagnostic.column + 1}`
: `${diagnostic.fileName}${diagnostic.path ? `:${diagnostic.path}` : ""}`;
process.stderr.write(
`${location}: ${diagnostic.phase} ${diagnostic.code}: ${diagnostic.message}\n`,
);
}
process.exitCode = 1;
return;
}
const workspace = workspaceId && workspaceRevisionId
? {
...result.workspace,
workspaceId: capabilityId.workspace(workspaceId),
id: capabilityId.workspaceRevision(workspaceRevisionId),
...(sourceRootCommit ? { sourceRootCommit } : {}),
}
: { ...result.workspace, ...(sourceRootCommit ? { sourceRootCommit } : {}) };
const instantiated = compileWorkspaceRevision(workspace);
if (!instantiated.ok) {
throw new Error(instantiated.issues.map((issue) => `${issue.path}: ${issue.message}`).join("\n"));
}
if (!checkOnly) {
process.stdout.write(`${JSON.stringify(workspace, null, 2)}\n`);
}
};
main().catch((error: unknown) => {
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
process.exitCode = 1;
});
File diff suppressed because one or more lines are too long
@@ -0,0 +1,183 @@
WORKSPACE=1
ATOM=2
INTERFACE=3
INTERFACES=4
PACKAGE=5
VALUE=6
RELATION=7
OPERATION=8
FUNCTION=9
CONSTRUCTOR=10
CONSTRUCTS=11
CONFORM=12
AS=13
BIND=14
TO=15
PRIVATE=16
SHARED=17
STATE=18
EDGE=19
PROJECTION=20
WITH=21
ON=22
POLICY=23
DEFAULT=24
SOURCE=25
REPOSITORY=26
COMMIT=27
REVISION=28
ID=29
DOC=30
MODE=31
EMITS=32
RECEIVER=33
REQUIRES=34
ANY=35
GET=36
SET=37
WATCH=38
START=39
STOP=40
READ=41
WRITE=42
RESOLVE=43
CONNECT=44
DISCONNECT=45
CALL=46
WATCH_START=47
WATCH_STOP=48
SUBSCRIBE=49
UNSUBSCRIBE=50
OPTIMISTIC_REGISTER=51
CRDT=52
OPTIONAL_ONE=53
EXACTLY_ONE=54
MANY_UNIQUE=55
MANY=56
ORDERED=57
UNIT=58
WATCH_HANDLE=59
MESSAGE=60
ATOM_REF=61
INTERFACE_REF=62
OPTIONAL=63
LIST=64
BOOL=65
BYTES=66
DOUBLE=67
INT32=68
INT64=69
STRING=70
UINT32=71
UINT64=72
TRUE=73
FALSE=74
NULL=75
ARROW=76
COLON=77
SEMI=78
COMMA=79
DOT=80
LBRACE=81
RBRACE=82
LBRACK=83
RBRACK=84
LPAREN=85
RPAREN=86
LT=87
GT=88
INTEGER=89
JSON_NUMBER=90
IDENTIFIER=91
STRING_LITERAL=92
LINE_COMMENT=93
BLOCK_COMMENT=94
WS=95
'workspace'=1
'atom'=2
'interface'=3
'interfaces'=4
'package'=5
'value'=6
'relation'=7
'operation'=8
'function'=9
'constructor'=10
'constructs'=11
'conform'=12
'as'=13
'bind'=14
'to'=15
'private'=16
'shared'=17
'state'=18
'edge'=19
'projection'=20
'with'=21
'on'=22
'policy'=23
'default'=24
'source'=25
'repository'=26
'commit'=27
'revision'=28
'id'=29
'doc'=30
'mode'=31
'emits'=32
'receiver'=33
'requires'=34
'any'=35
'get'=36
'set'=37
'watch'=38
'start'=39
'stop'=40
'read'=41
'write'=42
'resolve'=43
'connect'=44
'disconnect'=45
'call'=46
'watch-start'=47
'watch-stop'=48
'subscribe'=49
'unsubscribe'=50
'optimistic-register'=51
'crdt'=52
'optional-one'=53
'exactly-one'=54
'many-unique'=55
'many'=56
'ordered'=57
'unit'=58
'watch-handle'=59
'message'=60
'atom-ref'=61
'interface-ref'=62
'optional'=63
'list'=64
'bool'=65
'bytes'=66
'double'=67
'int32'=68
'int64'=69
'string'=70
'uint32'=71
'uint64'=72
'true'=73
'false'=74
'null'=75
'->'=76
':'=77
';'=78
','=79
'.'=80
'{'=81
'}'=82
'['=83
']'=84
'('=85
')'=86
'<'=87
'>'=88
File diff suppressed because one or more lines are too long
@@ -0,0 +1,183 @@
WORKSPACE=1
ATOM=2
INTERFACE=3
INTERFACES=4
PACKAGE=5
VALUE=6
RELATION=7
OPERATION=8
FUNCTION=9
CONSTRUCTOR=10
CONSTRUCTS=11
CONFORM=12
AS=13
BIND=14
TO=15
PRIVATE=16
SHARED=17
STATE=18
EDGE=19
PROJECTION=20
WITH=21
ON=22
POLICY=23
DEFAULT=24
SOURCE=25
REPOSITORY=26
COMMIT=27
REVISION=28
ID=29
DOC=30
MODE=31
EMITS=32
RECEIVER=33
REQUIRES=34
ANY=35
GET=36
SET=37
WATCH=38
START=39
STOP=40
READ=41
WRITE=42
RESOLVE=43
CONNECT=44
DISCONNECT=45
CALL=46
WATCH_START=47
WATCH_STOP=48
SUBSCRIBE=49
UNSUBSCRIBE=50
OPTIMISTIC_REGISTER=51
CRDT=52
OPTIONAL_ONE=53
EXACTLY_ONE=54
MANY_UNIQUE=55
MANY=56
ORDERED=57
UNIT=58
WATCH_HANDLE=59
MESSAGE=60
ATOM_REF=61
INTERFACE_REF=62
OPTIONAL=63
LIST=64
BOOL=65
BYTES=66
DOUBLE=67
INT32=68
INT64=69
STRING=70
UINT32=71
UINT64=72
TRUE=73
FALSE=74
NULL=75
ARROW=76
COLON=77
SEMI=78
COMMA=79
DOT=80
LBRACE=81
RBRACE=82
LBRACK=83
RBRACK=84
LPAREN=85
RPAREN=86
LT=87
GT=88
INTEGER=89
JSON_NUMBER=90
IDENTIFIER=91
STRING_LITERAL=92
LINE_COMMENT=93
BLOCK_COMMENT=94
WS=95
'workspace'=1
'atom'=2
'interface'=3
'interfaces'=4
'package'=5
'value'=6
'relation'=7
'operation'=8
'function'=9
'constructor'=10
'constructs'=11
'conform'=12
'as'=13
'bind'=14
'to'=15
'private'=16
'shared'=17
'state'=18
'edge'=19
'projection'=20
'with'=21
'on'=22
'policy'=23
'default'=24
'source'=25
'repository'=26
'commit'=27
'revision'=28
'id'=29
'doc'=30
'mode'=31
'emits'=32
'receiver'=33
'requires'=34
'any'=35
'get'=36
'set'=37
'watch'=38
'start'=39
'stop'=40
'read'=41
'write'=42
'resolve'=43
'connect'=44
'disconnect'=45
'call'=46
'watch-start'=47
'watch-stop'=48
'subscribe'=49
'unsubscribe'=50
'optimistic-register'=51
'crdt'=52
'optional-one'=53
'exactly-one'=54
'many-unique'=55
'many'=56
'ordered'=57
'unit'=58
'watch-handle'=59
'message'=60
'atom-ref'=61
'interface-ref'=62
'optional'=63
'list'=64
'bool'=65
'bytes'=66
'double'=67
'int32'=68
'int64'=69
'string'=70
'uint32'=71
'uint64'=72
'true'=73
'false'=74
'null'=75
'->'=76
':'=77
';'=78
','=79
'.'=80
'{'=81
'}'=82
'['=83
']'=84
'('=85
')'=86
'<'=87
'>'=88
@@ -0,0 +1,523 @@
import * as antlr from "antlr4ng";
import { Token } from "antlr4ng";
export class QuixosCapabilityLexer extends antlr.Lexer {
public static readonly WORKSPACE = 1;
public static readonly ATOM = 2;
public static readonly INTERFACE = 3;
public static readonly INTERFACES = 4;
public static readonly PACKAGE = 5;
public static readonly VALUE = 6;
public static readonly RELATION = 7;
public static readonly OPERATION = 8;
public static readonly FUNCTION = 9;
public static readonly CONSTRUCTOR = 10;
public static readonly CONSTRUCTS = 11;
public static readonly CONFORM = 12;
public static readonly AS = 13;
public static readonly BIND = 14;
public static readonly TO = 15;
public static readonly PRIVATE = 16;
public static readonly SHARED = 17;
public static readonly STATE = 18;
public static readonly EDGE = 19;
public static readonly PROJECTION = 20;
public static readonly WITH = 21;
public static readonly ON = 22;
public static readonly POLICY = 23;
public static readonly DEFAULT = 24;
public static readonly SOURCE = 25;
public static readonly REPOSITORY = 26;
public static readonly COMMIT = 27;
public static readonly REVISION = 28;
public static readonly ID = 29;
public static readonly DOC = 30;
public static readonly MODE = 31;
public static readonly EMITS = 32;
public static readonly RECEIVER = 33;
public static readonly REQUIRES = 34;
public static readonly ANY = 35;
public static readonly GET = 36;
public static readonly SET = 37;
public static readonly WATCH = 38;
public static readonly START = 39;
public static readonly STOP = 40;
public static readonly READ = 41;
public static readonly WRITE = 42;
public static readonly RESOLVE = 43;
public static readonly CONNECT = 44;
public static readonly DISCONNECT = 45;
public static readonly CALL = 46;
public static readonly WATCH_START = 47;
public static readonly WATCH_STOP = 48;
public static readonly SUBSCRIBE = 49;
public static readonly UNSUBSCRIBE = 50;
public static readonly OPTIMISTIC_REGISTER = 51;
public static readonly CRDT = 52;
public static readonly OPTIONAL_ONE = 53;
public static readonly EXACTLY_ONE = 54;
public static readonly MANY_UNIQUE = 55;
public static readonly MANY = 56;
public static readonly ORDERED = 57;
public static readonly UNIT = 58;
public static readonly WATCH_HANDLE = 59;
public static readonly MESSAGE = 60;
public static readonly ATOM_REF = 61;
public static readonly INTERFACE_REF = 62;
public static readonly OPTIONAL = 63;
public static readonly LIST = 64;
public static readonly BOOL = 65;
public static readonly BYTES = 66;
public static readonly DOUBLE = 67;
public static readonly INT32 = 68;
public static readonly INT64 = 69;
public static readonly STRING = 70;
public static readonly UINT32 = 71;
public static readonly UINT64 = 72;
public static readonly TRUE = 73;
public static readonly FALSE = 74;
public static readonly NULL = 75;
public static readonly ARROW = 76;
public static readonly COLON = 77;
public static readonly SEMI = 78;
public static readonly COMMA = 79;
public static readonly DOT = 80;
public static readonly LBRACE = 81;
public static readonly RBRACE = 82;
public static readonly LBRACK = 83;
public static readonly RBRACK = 84;
public static readonly LPAREN = 85;
public static readonly RPAREN = 86;
public static readonly LT = 87;
public static readonly GT = 88;
public static readonly INTEGER = 89;
public static readonly JSON_NUMBER = 90;
public static readonly IDENTIFIER = 91;
public static readonly STRING_LITERAL = 92;
public static readonly LINE_COMMENT = 93;
public static readonly BLOCK_COMMENT = 94;
public static readonly WS = 95;
public static readonly channelNames = [
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
];
public static readonly literalNames = [
null, "'workspace'", "'atom'", "'interface'", "'interfaces'", "'package'",
"'value'", "'relation'", "'operation'", "'function'", "'constructor'",
"'constructs'", "'conform'", "'as'", "'bind'", "'to'", "'private'",
"'shared'", "'state'", "'edge'", "'projection'", "'with'", "'on'",
"'policy'", "'default'", "'source'", "'repository'", "'commit'",
"'revision'", "'id'", "'doc'", "'mode'", "'emits'", "'receiver'",
"'requires'", "'any'", "'get'", "'set'", "'watch'", "'start'", "'stop'",
"'read'", "'write'", "'resolve'", "'connect'", "'disconnect'", "'call'",
"'watch-start'", "'watch-stop'", "'subscribe'", "'unsubscribe'",
"'optimistic-register'", "'crdt'", "'optional-one'", "'exactly-one'",
"'many-unique'", "'many'", "'ordered'", "'unit'", "'watch-handle'",
"'message'", "'atom-ref'", "'interface-ref'", "'optional'", "'list'",
"'bool'", "'bytes'", "'double'", "'int32'", "'int64'", "'string'",
"'uint32'", "'uint64'", "'true'", "'false'", "'null'", "'->'", "':'",
"';'", "','", "'.'", "'{'", "'}'", "'['", "']'", "'('", "')'", "'<'",
"'>'"
];
public static readonly symbolicNames = [
null, "WORKSPACE", "ATOM", "INTERFACE", "INTERFACES", "PACKAGE",
"VALUE", "RELATION", "OPERATION", "FUNCTION", "CONSTRUCTOR", "CONSTRUCTS",
"CONFORM", "AS", "BIND", "TO", "PRIVATE", "SHARED", "STATE", "EDGE",
"PROJECTION", "WITH", "ON", "POLICY", "DEFAULT", "SOURCE", "REPOSITORY",
"COMMIT", "REVISION", "ID", "DOC", "MODE", "EMITS", "RECEIVER",
"REQUIRES", "ANY", "GET", "SET", "WATCH", "START", "STOP", "READ",
"WRITE", "RESOLVE", "CONNECT", "DISCONNECT", "CALL", "WATCH_START",
"WATCH_STOP", "SUBSCRIBE", "UNSUBSCRIBE", "OPTIMISTIC_REGISTER",
"CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", "MANY_UNIQUE", "MANY", "ORDERED",
"UNIT", "WATCH_HANDLE", "MESSAGE", "ATOM_REF", "INTERFACE_REF",
"OPTIONAL", "LIST", "BOOL", "BYTES", "DOUBLE", "INT32", "INT64",
"STRING", "UINT32", "UINT64", "TRUE", "FALSE", "NULL", "ARROW",
"COLON", "SEMI", "COMMA", "DOT", "LBRACE", "RBRACE", "LBRACK", "RBRACK",
"LPAREN", "RPAREN", "LT", "GT", "INTEGER", "JSON_NUMBER", "IDENTIFIER",
"STRING_LITERAL", "LINE_COMMENT", "BLOCK_COMMENT", "WS"
];
public static readonly modeNames = [
"DEFAULT_MODE",
];
public static readonly ruleNames = [
"WORKSPACE", "ATOM", "INTERFACE", "INTERFACES", "PACKAGE", "VALUE",
"RELATION", "OPERATION", "FUNCTION", "CONSTRUCTOR", "CONSTRUCTS",
"CONFORM", "AS", "BIND", "TO", "PRIVATE", "SHARED", "STATE", "EDGE",
"PROJECTION", "WITH", "ON", "POLICY", "DEFAULT", "SOURCE", "REPOSITORY",
"COMMIT", "REVISION", "ID", "DOC", "MODE", "EMITS", "RECEIVER",
"REQUIRES", "ANY", "GET", "SET", "WATCH", "START", "STOP", "READ",
"WRITE", "RESOLVE", "CONNECT", "DISCONNECT", "CALL", "WATCH_START",
"WATCH_STOP", "SUBSCRIBE", "UNSUBSCRIBE", "OPTIMISTIC_REGISTER",
"CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", "MANY_UNIQUE", "MANY", "ORDERED",
"UNIT", "WATCH_HANDLE", "MESSAGE", "ATOM_REF", "INTERFACE_REF",
"OPTIONAL", "LIST", "BOOL", "BYTES", "DOUBLE", "INT32", "INT64",
"STRING", "UINT32", "UINT64", "TRUE", "FALSE", "NULL", "ARROW",
"COLON", "SEMI", "COMMA", "DOT", "LBRACE", "RBRACE", "LBRACK", "RBRACK",
"LPAREN", "RPAREN", "LT", "GT", "INTEGER", "JSON_NUMBER", "IDENTIFIER",
"STRING_LITERAL", "ESC", "HEX", "LINE_COMMENT", "BLOCK_COMMENT",
"WS",
];
public constructor(input: antlr.CharStream) {
super(input);
this.interpreter = new antlr.LexerATNSimulator(this, QuixosCapabilityLexer._ATN, QuixosCapabilityLexer.decisionsToDFA, new antlr.PredictionContextCache());
}
public get grammarFileName(): string { return "QuixosCapability.g4"; }
public get literalNames(): (string | null)[] { return QuixosCapabilityLexer.literalNames; }
public get symbolicNames(): (string | null)[] { return QuixosCapabilityLexer.symbolicNames; }
public get ruleNames(): string[] { return QuixosCapabilityLexer.ruleNames; }
public get serializedATN(): number[] { return QuixosCapabilityLexer._serializedATN; }
public get channelNames(): string[] { return QuixosCapabilityLexer.channelNames; }
public get modeNames(): string[] { return QuixosCapabilityLexer.modeNames; }
public static readonly _serializedATN: number[] = [
4,0,95,895,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,
2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,
13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,
19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,
26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,
32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,
39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,
45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,
52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,
58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,
65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,
71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,
78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,
84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,
91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,1,0,1,
0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,
2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,
5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,
7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,
9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,
1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,
1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,15,1,15,
1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,
1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,19,1,19,
1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,
1,20,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,
1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,
1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,
1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,
1,27,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,
1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,
1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,
1,34,1,34,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37,1,37,1,37,
1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,
1,39,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,42,
1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,
1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,
1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,
1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,
1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,
1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,
1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,
1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,
1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,
1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,
1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,
1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,
1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,
1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,
1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,
1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,
1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,65,1,65,
1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,
1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69,
1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,
1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,
1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,76,1,76,
1,77,1,77,1,78,1,78,1,79,1,79,1,80,1,80,1,81,1,81,1,82,1,82,1,83,
1,83,1,84,1,84,1,85,1,85,1,86,1,86,1,87,1,87,1,88,3,88,796,8,88,
1,88,4,88,799,8,88,11,88,12,88,800,1,89,3,89,804,8,89,1,89,1,89,
1,89,5,89,809,8,89,10,89,12,89,812,9,89,3,89,814,8,89,1,89,1,89,
4,89,818,8,89,11,89,12,89,819,3,89,822,8,89,1,89,1,89,3,89,826,8,
89,1,89,4,89,829,8,89,11,89,12,89,830,3,89,833,8,89,1,90,1,90,5,
90,837,8,90,10,90,12,90,840,9,90,1,91,1,91,1,91,5,91,845,8,91,10,
91,12,91,848,9,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,
92,3,92,860,8,92,1,93,1,93,1,94,1,94,1,94,1,94,5,94,868,8,94,10,
94,12,94,871,9,94,1,94,1,94,1,95,1,95,1,95,1,95,5,95,879,8,95,10,
95,12,95,882,9,95,1,95,1,95,1,95,1,95,1,95,1,96,4,96,890,8,96,11,
96,12,96,891,1,96,1,96,1,880,0,97,1,1,3,2,5,3,7,4,9,5,11,6,13,7,
15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,
37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,
59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,
81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,
51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,
121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,
70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,
159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,
89,179,90,181,91,183,92,185,0,187,0,189,93,191,94,193,95,1,0,11,
1,0,48,57,1,0,49,57,2,0,69,69,101,101,2,0,43,43,45,45,3,0,65,90,
95,95,97,122,4,0,48,57,65,90,95,95,97,122,4,0,10,10,13,13,34,34,
92,92,8,0,34,34,47,47,92,92,98,98,102,102,110,110,114,114,116,116,
3,0,48,57,65,70,97,102,2,0,10,10,13,13,3,0,9,10,13,13,32,32,909,
0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,
1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,
1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,
1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,
1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,
1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,
1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,
1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,
1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,
1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,
1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,
0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,
0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,
129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,
0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,
1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,
0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,
0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,
175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,
0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,1,195,1,0,0,0,3,205,
1,0,0,0,5,210,1,0,0,0,7,220,1,0,0,0,9,231,1,0,0,0,11,239,1,0,0,0,
13,245,1,0,0,0,15,254,1,0,0,0,17,264,1,0,0,0,19,273,1,0,0,0,21,285,
1,0,0,0,23,296,1,0,0,0,25,304,1,0,0,0,27,307,1,0,0,0,29,312,1,0,
0,0,31,315,1,0,0,0,33,323,1,0,0,0,35,330,1,0,0,0,37,336,1,0,0,0,
39,341,1,0,0,0,41,352,1,0,0,0,43,357,1,0,0,0,45,360,1,0,0,0,47,367,
1,0,0,0,49,375,1,0,0,0,51,382,1,0,0,0,53,393,1,0,0,0,55,400,1,0,
0,0,57,409,1,0,0,0,59,412,1,0,0,0,61,416,1,0,0,0,63,421,1,0,0,0,
65,427,1,0,0,0,67,436,1,0,0,0,69,445,1,0,0,0,71,449,1,0,0,0,73,453,
1,0,0,0,75,457,1,0,0,0,77,463,1,0,0,0,79,469,1,0,0,0,81,474,1,0,
0,0,83,479,1,0,0,0,85,485,1,0,0,0,87,493,1,0,0,0,89,501,1,0,0,0,
91,512,1,0,0,0,93,517,1,0,0,0,95,529,1,0,0,0,97,540,1,0,0,0,99,550,
1,0,0,0,101,562,1,0,0,0,103,582,1,0,0,0,105,587,1,0,0,0,107,600,
1,0,0,0,109,612,1,0,0,0,111,624,1,0,0,0,113,629,1,0,0,0,115,637,
1,0,0,0,117,642,1,0,0,0,119,655,1,0,0,0,121,663,1,0,0,0,123,672,
1,0,0,0,125,686,1,0,0,0,127,695,1,0,0,0,129,700,1,0,0,0,131,705,
1,0,0,0,133,711,1,0,0,0,135,718,1,0,0,0,137,724,1,0,0,0,139,730,
1,0,0,0,141,737,1,0,0,0,143,744,1,0,0,0,145,751,1,0,0,0,147,756,
1,0,0,0,149,762,1,0,0,0,151,767,1,0,0,0,153,770,1,0,0,0,155,772,
1,0,0,0,157,774,1,0,0,0,159,776,1,0,0,0,161,778,1,0,0,0,163,780,
1,0,0,0,165,782,1,0,0,0,167,784,1,0,0,0,169,786,1,0,0,0,171,788,
1,0,0,0,173,790,1,0,0,0,175,792,1,0,0,0,177,795,1,0,0,0,179,803,
1,0,0,0,181,834,1,0,0,0,183,841,1,0,0,0,185,851,1,0,0,0,187,861,
1,0,0,0,189,863,1,0,0,0,191,874,1,0,0,0,193,889,1,0,0,0,195,196,
5,119,0,0,196,197,5,111,0,0,197,198,5,114,0,0,198,199,5,107,0,0,
199,200,5,115,0,0,200,201,5,112,0,0,201,202,5,97,0,0,202,203,5,99,
0,0,203,204,5,101,0,0,204,2,1,0,0,0,205,206,5,97,0,0,206,207,5,116,
0,0,207,208,5,111,0,0,208,209,5,109,0,0,209,4,1,0,0,0,210,211,5,
105,0,0,211,212,5,110,0,0,212,213,5,116,0,0,213,214,5,101,0,0,214,
215,5,114,0,0,215,216,5,102,0,0,216,217,5,97,0,0,217,218,5,99,0,
0,218,219,5,101,0,0,219,6,1,0,0,0,220,221,5,105,0,0,221,222,5,110,
0,0,222,223,5,116,0,0,223,224,5,101,0,0,224,225,5,114,0,0,225,226,
5,102,0,0,226,227,5,97,0,0,227,228,5,99,0,0,228,229,5,101,0,0,229,
230,5,115,0,0,230,8,1,0,0,0,231,232,5,112,0,0,232,233,5,97,0,0,233,
234,5,99,0,0,234,235,5,107,0,0,235,236,5,97,0,0,236,237,5,103,0,
0,237,238,5,101,0,0,238,10,1,0,0,0,239,240,5,118,0,0,240,241,5,97,
0,0,241,242,5,108,0,0,242,243,5,117,0,0,243,244,5,101,0,0,244,12,
1,0,0,0,245,246,5,114,0,0,246,247,5,101,0,0,247,248,5,108,0,0,248,
249,5,97,0,0,249,250,5,116,0,0,250,251,5,105,0,0,251,252,5,111,0,
0,252,253,5,110,0,0,253,14,1,0,0,0,254,255,5,111,0,0,255,256,5,112,
0,0,256,257,5,101,0,0,257,258,5,114,0,0,258,259,5,97,0,0,259,260,
5,116,0,0,260,261,5,105,0,0,261,262,5,111,0,0,262,263,5,110,0,0,
263,16,1,0,0,0,264,265,5,102,0,0,265,266,5,117,0,0,266,267,5,110,
0,0,267,268,5,99,0,0,268,269,5,116,0,0,269,270,5,105,0,0,270,271,
5,111,0,0,271,272,5,110,0,0,272,18,1,0,0,0,273,274,5,99,0,0,274,
275,5,111,0,0,275,276,5,110,0,0,276,277,5,115,0,0,277,278,5,116,
0,0,278,279,5,114,0,0,279,280,5,117,0,0,280,281,5,99,0,0,281,282,
5,116,0,0,282,283,5,111,0,0,283,284,5,114,0,0,284,20,1,0,0,0,285,
286,5,99,0,0,286,287,5,111,0,0,287,288,5,110,0,0,288,289,5,115,0,
0,289,290,5,116,0,0,290,291,5,114,0,0,291,292,5,117,0,0,292,293,
5,99,0,0,293,294,5,116,0,0,294,295,5,115,0,0,295,22,1,0,0,0,296,
297,5,99,0,0,297,298,5,111,0,0,298,299,5,110,0,0,299,300,5,102,0,
0,300,301,5,111,0,0,301,302,5,114,0,0,302,303,5,109,0,0,303,24,1,
0,0,0,304,305,5,97,0,0,305,306,5,115,0,0,306,26,1,0,0,0,307,308,
5,98,0,0,308,309,5,105,0,0,309,310,5,110,0,0,310,311,5,100,0,0,311,
28,1,0,0,0,312,313,5,116,0,0,313,314,5,111,0,0,314,30,1,0,0,0,315,
316,5,112,0,0,316,317,5,114,0,0,317,318,5,105,0,0,318,319,5,118,
0,0,319,320,5,97,0,0,320,321,5,116,0,0,321,322,5,101,0,0,322,32,
1,0,0,0,323,324,5,115,0,0,324,325,5,104,0,0,325,326,5,97,0,0,326,
327,5,114,0,0,327,328,5,101,0,0,328,329,5,100,0,0,329,34,1,0,0,0,
330,331,5,115,0,0,331,332,5,116,0,0,332,333,5,97,0,0,333,334,5,116,
0,0,334,335,5,101,0,0,335,36,1,0,0,0,336,337,5,101,0,0,337,338,5,
100,0,0,338,339,5,103,0,0,339,340,5,101,0,0,340,38,1,0,0,0,341,342,
5,112,0,0,342,343,5,114,0,0,343,344,5,111,0,0,344,345,5,106,0,0,
345,346,5,101,0,0,346,347,5,99,0,0,347,348,5,116,0,0,348,349,5,105,
0,0,349,350,5,111,0,0,350,351,5,110,0,0,351,40,1,0,0,0,352,353,5,
119,0,0,353,354,5,105,0,0,354,355,5,116,0,0,355,356,5,104,0,0,356,
42,1,0,0,0,357,358,5,111,0,0,358,359,5,110,0,0,359,44,1,0,0,0,360,
361,5,112,0,0,361,362,5,111,0,0,362,363,5,108,0,0,363,364,5,105,
0,0,364,365,5,99,0,0,365,366,5,121,0,0,366,46,1,0,0,0,367,368,5,
100,0,0,368,369,5,101,0,0,369,370,5,102,0,0,370,371,5,97,0,0,371,
372,5,117,0,0,372,373,5,108,0,0,373,374,5,116,0,0,374,48,1,0,0,0,
375,376,5,115,0,0,376,377,5,111,0,0,377,378,5,117,0,0,378,379,5,
114,0,0,379,380,5,99,0,0,380,381,5,101,0,0,381,50,1,0,0,0,382,383,
5,114,0,0,383,384,5,101,0,0,384,385,5,112,0,0,385,386,5,111,0,0,
386,387,5,115,0,0,387,388,5,105,0,0,388,389,5,116,0,0,389,390,5,
111,0,0,390,391,5,114,0,0,391,392,5,121,0,0,392,52,1,0,0,0,393,394,
5,99,0,0,394,395,5,111,0,0,395,396,5,109,0,0,396,397,5,109,0,0,397,
398,5,105,0,0,398,399,5,116,0,0,399,54,1,0,0,0,400,401,5,114,0,0,
401,402,5,101,0,0,402,403,5,118,0,0,403,404,5,105,0,0,404,405,5,
115,0,0,405,406,5,105,0,0,406,407,5,111,0,0,407,408,5,110,0,0,408,
56,1,0,0,0,409,410,5,105,0,0,410,411,5,100,0,0,411,58,1,0,0,0,412,
413,5,100,0,0,413,414,5,111,0,0,414,415,5,99,0,0,415,60,1,0,0,0,
416,417,5,109,0,0,417,418,5,111,0,0,418,419,5,100,0,0,419,420,5,
101,0,0,420,62,1,0,0,0,421,422,5,101,0,0,422,423,5,109,0,0,423,424,
5,105,0,0,424,425,5,116,0,0,425,426,5,115,0,0,426,64,1,0,0,0,427,
428,5,114,0,0,428,429,5,101,0,0,429,430,5,99,0,0,430,431,5,101,0,
0,431,432,5,105,0,0,432,433,5,118,0,0,433,434,5,101,0,0,434,435,
5,114,0,0,435,66,1,0,0,0,436,437,5,114,0,0,437,438,5,101,0,0,438,
439,5,113,0,0,439,440,5,117,0,0,440,441,5,105,0,0,441,442,5,114,
0,0,442,443,5,101,0,0,443,444,5,115,0,0,444,68,1,0,0,0,445,446,5,
97,0,0,446,447,5,110,0,0,447,448,5,121,0,0,448,70,1,0,0,0,449,450,
5,103,0,0,450,451,5,101,0,0,451,452,5,116,0,0,452,72,1,0,0,0,453,
454,5,115,0,0,454,455,5,101,0,0,455,456,5,116,0,0,456,74,1,0,0,0,
457,458,5,119,0,0,458,459,5,97,0,0,459,460,5,116,0,0,460,461,5,99,
0,0,461,462,5,104,0,0,462,76,1,0,0,0,463,464,5,115,0,0,464,465,5,
116,0,0,465,466,5,97,0,0,466,467,5,114,0,0,467,468,5,116,0,0,468,
78,1,0,0,0,469,470,5,115,0,0,470,471,5,116,0,0,471,472,5,111,0,0,
472,473,5,112,0,0,473,80,1,0,0,0,474,475,5,114,0,0,475,476,5,101,
0,0,476,477,5,97,0,0,477,478,5,100,0,0,478,82,1,0,0,0,479,480,5,
119,0,0,480,481,5,114,0,0,481,482,5,105,0,0,482,483,5,116,0,0,483,
484,5,101,0,0,484,84,1,0,0,0,485,486,5,114,0,0,486,487,5,101,0,0,
487,488,5,115,0,0,488,489,5,111,0,0,489,490,5,108,0,0,490,491,5,
118,0,0,491,492,5,101,0,0,492,86,1,0,0,0,493,494,5,99,0,0,494,495,
5,111,0,0,495,496,5,110,0,0,496,497,5,110,0,0,497,498,5,101,0,0,
498,499,5,99,0,0,499,500,5,116,0,0,500,88,1,0,0,0,501,502,5,100,
0,0,502,503,5,105,0,0,503,504,5,115,0,0,504,505,5,99,0,0,505,506,
5,111,0,0,506,507,5,110,0,0,507,508,5,110,0,0,508,509,5,101,0,0,
509,510,5,99,0,0,510,511,5,116,0,0,511,90,1,0,0,0,512,513,5,99,0,
0,513,514,5,97,0,0,514,515,5,108,0,0,515,516,5,108,0,0,516,92,1,
0,0,0,517,518,5,119,0,0,518,519,5,97,0,0,519,520,5,116,0,0,520,521,
5,99,0,0,521,522,5,104,0,0,522,523,5,45,0,0,523,524,5,115,0,0,524,
525,5,116,0,0,525,526,5,97,0,0,526,527,5,114,0,0,527,528,5,116,0,
0,528,94,1,0,0,0,529,530,5,119,0,0,530,531,5,97,0,0,531,532,5,116,
0,0,532,533,5,99,0,0,533,534,5,104,0,0,534,535,5,45,0,0,535,536,
5,115,0,0,536,537,5,116,0,0,537,538,5,111,0,0,538,539,5,112,0,0,
539,96,1,0,0,0,540,541,5,115,0,0,541,542,5,117,0,0,542,543,5,98,
0,0,543,544,5,115,0,0,544,545,5,99,0,0,545,546,5,114,0,0,546,547,
5,105,0,0,547,548,5,98,0,0,548,549,5,101,0,0,549,98,1,0,0,0,550,
551,5,117,0,0,551,552,5,110,0,0,552,553,5,115,0,0,553,554,5,117,
0,0,554,555,5,98,0,0,555,556,5,115,0,0,556,557,5,99,0,0,557,558,
5,114,0,0,558,559,5,105,0,0,559,560,5,98,0,0,560,561,5,101,0,0,561,
100,1,0,0,0,562,563,5,111,0,0,563,564,5,112,0,0,564,565,5,116,0,
0,565,566,5,105,0,0,566,567,5,109,0,0,567,568,5,105,0,0,568,569,
5,115,0,0,569,570,5,116,0,0,570,571,5,105,0,0,571,572,5,99,0,0,572,
573,5,45,0,0,573,574,5,114,0,0,574,575,5,101,0,0,575,576,5,103,0,
0,576,577,5,105,0,0,577,578,5,115,0,0,578,579,5,116,0,0,579,580,
5,101,0,0,580,581,5,114,0,0,581,102,1,0,0,0,582,583,5,99,0,0,583,
584,5,114,0,0,584,585,5,100,0,0,585,586,5,116,0,0,586,104,1,0,0,
0,587,588,5,111,0,0,588,589,5,112,0,0,589,590,5,116,0,0,590,591,
5,105,0,0,591,592,5,111,0,0,592,593,5,110,0,0,593,594,5,97,0,0,594,
595,5,108,0,0,595,596,5,45,0,0,596,597,5,111,0,0,597,598,5,110,0,
0,598,599,5,101,0,0,599,106,1,0,0,0,600,601,5,101,0,0,601,602,5,
120,0,0,602,603,5,97,0,0,603,604,5,99,0,0,604,605,5,116,0,0,605,
606,5,108,0,0,606,607,5,121,0,0,607,608,5,45,0,0,608,609,5,111,0,
0,609,610,5,110,0,0,610,611,5,101,0,0,611,108,1,0,0,0,612,613,5,
109,0,0,613,614,5,97,0,0,614,615,5,110,0,0,615,616,5,121,0,0,616,
617,5,45,0,0,617,618,5,117,0,0,618,619,5,110,0,0,619,620,5,105,0,
0,620,621,5,113,0,0,621,622,5,117,0,0,622,623,5,101,0,0,623,110,
1,0,0,0,624,625,5,109,0,0,625,626,5,97,0,0,626,627,5,110,0,0,627,
628,5,121,0,0,628,112,1,0,0,0,629,630,5,111,0,0,630,631,5,114,0,
0,631,632,5,100,0,0,632,633,5,101,0,0,633,634,5,114,0,0,634,635,
5,101,0,0,635,636,5,100,0,0,636,114,1,0,0,0,637,638,5,117,0,0,638,
639,5,110,0,0,639,640,5,105,0,0,640,641,5,116,0,0,641,116,1,0,0,
0,642,643,5,119,0,0,643,644,5,97,0,0,644,645,5,116,0,0,645,646,5,
99,0,0,646,647,5,104,0,0,647,648,5,45,0,0,648,649,5,104,0,0,649,
650,5,97,0,0,650,651,5,110,0,0,651,652,5,100,0,0,652,653,5,108,0,
0,653,654,5,101,0,0,654,118,1,0,0,0,655,656,5,109,0,0,656,657,5,
101,0,0,657,658,5,115,0,0,658,659,5,115,0,0,659,660,5,97,0,0,660,
661,5,103,0,0,661,662,5,101,0,0,662,120,1,0,0,0,663,664,5,97,0,0,
664,665,5,116,0,0,665,666,5,111,0,0,666,667,5,109,0,0,667,668,5,
45,0,0,668,669,5,114,0,0,669,670,5,101,0,0,670,671,5,102,0,0,671,
122,1,0,0,0,672,673,5,105,0,0,673,674,5,110,0,0,674,675,5,116,0,
0,675,676,5,101,0,0,676,677,5,114,0,0,677,678,5,102,0,0,678,679,
5,97,0,0,679,680,5,99,0,0,680,681,5,101,0,0,681,682,5,45,0,0,682,
683,5,114,0,0,683,684,5,101,0,0,684,685,5,102,0,0,685,124,1,0,0,
0,686,687,5,111,0,0,687,688,5,112,0,0,688,689,5,116,0,0,689,690,
5,105,0,0,690,691,5,111,0,0,691,692,5,110,0,0,692,693,5,97,0,0,693,
694,5,108,0,0,694,126,1,0,0,0,695,696,5,108,0,0,696,697,5,105,0,
0,697,698,5,115,0,0,698,699,5,116,0,0,699,128,1,0,0,0,700,701,5,
98,0,0,701,702,5,111,0,0,702,703,5,111,0,0,703,704,5,108,0,0,704,
130,1,0,0,0,705,706,5,98,0,0,706,707,5,121,0,0,707,708,5,116,0,0,
708,709,5,101,0,0,709,710,5,115,0,0,710,132,1,0,0,0,711,712,5,100,
0,0,712,713,5,111,0,0,713,714,5,117,0,0,714,715,5,98,0,0,715,716,
5,108,0,0,716,717,5,101,0,0,717,134,1,0,0,0,718,719,5,105,0,0,719,
720,5,110,0,0,720,721,5,116,0,0,721,722,5,51,0,0,722,723,5,50,0,
0,723,136,1,0,0,0,724,725,5,105,0,0,725,726,5,110,0,0,726,727,5,
116,0,0,727,728,5,54,0,0,728,729,5,52,0,0,729,138,1,0,0,0,730,731,
5,115,0,0,731,732,5,116,0,0,732,733,5,114,0,0,733,734,5,105,0,0,
734,735,5,110,0,0,735,736,5,103,0,0,736,140,1,0,0,0,737,738,5,117,
0,0,738,739,5,105,0,0,739,740,5,110,0,0,740,741,5,116,0,0,741,742,
5,51,0,0,742,743,5,50,0,0,743,142,1,0,0,0,744,745,5,117,0,0,745,
746,5,105,0,0,746,747,5,110,0,0,747,748,5,116,0,0,748,749,5,54,0,
0,749,750,5,52,0,0,750,144,1,0,0,0,751,752,5,116,0,0,752,753,5,114,
0,0,753,754,5,117,0,0,754,755,5,101,0,0,755,146,1,0,0,0,756,757,
5,102,0,0,757,758,5,97,0,0,758,759,5,108,0,0,759,760,5,115,0,0,760,
761,5,101,0,0,761,148,1,0,0,0,762,763,5,110,0,0,763,764,5,117,0,
0,764,765,5,108,0,0,765,766,5,108,0,0,766,150,1,0,0,0,767,768,5,
45,0,0,768,769,5,62,0,0,769,152,1,0,0,0,770,771,5,58,0,0,771,154,
1,0,0,0,772,773,5,59,0,0,773,156,1,0,0,0,774,775,5,44,0,0,775,158,
1,0,0,0,776,777,5,46,0,0,777,160,1,0,0,0,778,779,5,123,0,0,779,162,
1,0,0,0,780,781,5,125,0,0,781,164,1,0,0,0,782,783,5,91,0,0,783,166,
1,0,0,0,784,785,5,93,0,0,785,168,1,0,0,0,786,787,5,40,0,0,787,170,
1,0,0,0,788,789,5,41,0,0,789,172,1,0,0,0,790,791,5,60,0,0,791,174,
1,0,0,0,792,793,5,62,0,0,793,176,1,0,0,0,794,796,5,45,0,0,795,794,
1,0,0,0,795,796,1,0,0,0,796,798,1,0,0,0,797,799,7,0,0,0,798,797,
1,0,0,0,799,800,1,0,0,0,800,798,1,0,0,0,800,801,1,0,0,0,801,178,
1,0,0,0,802,804,5,45,0,0,803,802,1,0,0,0,803,804,1,0,0,0,804,813,
1,0,0,0,805,814,5,48,0,0,806,810,7,1,0,0,807,809,7,0,0,0,808,807,
1,0,0,0,809,812,1,0,0,0,810,808,1,0,0,0,810,811,1,0,0,0,811,814,
1,0,0,0,812,810,1,0,0,0,813,805,1,0,0,0,813,806,1,0,0,0,814,821,
1,0,0,0,815,817,5,46,0,0,816,818,7,0,0,0,817,816,1,0,0,0,818,819,
1,0,0,0,819,817,1,0,0,0,819,820,1,0,0,0,820,822,1,0,0,0,821,815,
1,0,0,0,821,822,1,0,0,0,822,832,1,0,0,0,823,825,7,2,0,0,824,826,
7,3,0,0,825,824,1,0,0,0,825,826,1,0,0,0,826,828,1,0,0,0,827,829,
7,0,0,0,828,827,1,0,0,0,829,830,1,0,0,0,830,828,1,0,0,0,830,831,
1,0,0,0,831,833,1,0,0,0,832,823,1,0,0,0,832,833,1,0,0,0,833,180,
1,0,0,0,834,838,7,4,0,0,835,837,7,5,0,0,836,835,1,0,0,0,837,840,
1,0,0,0,838,836,1,0,0,0,838,839,1,0,0,0,839,182,1,0,0,0,840,838,
1,0,0,0,841,846,5,34,0,0,842,845,3,185,92,0,843,845,8,6,0,0,844,
842,1,0,0,0,844,843,1,0,0,0,845,848,1,0,0,0,846,844,1,0,0,0,846,
847,1,0,0,0,847,849,1,0,0,0,848,846,1,0,0,0,849,850,5,34,0,0,850,
184,1,0,0,0,851,859,5,92,0,0,852,860,7,7,0,0,853,854,5,117,0,0,854,
855,3,187,93,0,855,856,3,187,93,0,856,857,3,187,93,0,857,858,3,187,
93,0,858,860,1,0,0,0,859,852,1,0,0,0,859,853,1,0,0,0,860,186,1,0,
0,0,861,862,7,8,0,0,862,188,1,0,0,0,863,864,5,47,0,0,864,865,5,47,
0,0,865,869,1,0,0,0,866,868,8,9,0,0,867,866,1,0,0,0,868,871,1,0,
0,0,869,867,1,0,0,0,869,870,1,0,0,0,870,872,1,0,0,0,871,869,1,0,
0,0,872,873,6,94,0,0,873,190,1,0,0,0,874,875,5,47,0,0,875,876,5,
42,0,0,876,880,1,0,0,0,877,879,9,0,0,0,878,877,1,0,0,0,879,882,1,
0,0,0,880,881,1,0,0,0,880,878,1,0,0,0,881,883,1,0,0,0,882,880,1,
0,0,0,883,884,5,42,0,0,884,885,5,47,0,0,885,886,1,0,0,0,886,887,
6,95,0,0,887,192,1,0,0,0,888,890,7,10,0,0,889,888,1,0,0,0,890,891,
1,0,0,0,891,889,1,0,0,0,891,892,1,0,0,0,892,893,1,0,0,0,893,894,
6,96,0,0,894,194,1,0,0,0,18,0,795,800,803,810,813,819,821,825,830,
832,838,844,846,859,869,880,891,1,6,0,0
];
private static __ATN: antlr.ATN;
public static get _ATN(): antlr.ATN {
if (!QuixosCapabilityLexer.__ATN) {
QuixosCapabilityLexer.__ATN = new antlr.ATNDeserializer().deserialize(QuixosCapabilityLexer._serializedATN);
}
return QuixosCapabilityLexer.__ATN;
}
private static readonly vocabulary = new antlr.Vocabulary(QuixosCapabilityLexer.literalNames, QuixosCapabilityLexer.symbolicNames, []);
public override get vocabulary(): antlr.Vocabulary {
return QuixosCapabilityLexer.vocabulary;
}
private static readonly decisionsToDFA = QuixosCapabilityLexer._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) );
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,380 @@
import { AbstractParseTreeVisitor } from "antlr4ng";
import { DocumentContext } from "./QuixosCapabilityParser.js";
import { WorkspaceDeclContext } from "./QuixosCapabilityParser.js";
import { WorkspaceItemContext } from "./QuixosCapabilityParser.js";
import { AtomDeclContext } from "./QuixosCapabilityParser.js";
import { InterfaceDeclContext } from "./QuixosCapabilityParser.js";
import { SourceBlockContext } from "./QuixosCapabilityParser.js";
import { InterfaceMemberContext } from "./QuixosCapabilityParser.js";
import { OperationMemberContext } from "./QuixosCapabilityParser.js";
import { ValueMemberContext } from "./QuixosCapabilityParser.js";
import { ValueMemberOperationContext } from "./QuixosCapabilityParser.js";
import { RelationshipMemberContext } from "./QuixosCapabilityParser.js";
import { RelationshipOperationContext } from "./QuixosCapabilityParser.js";
import { TargetConstraintContext } from "./QuixosCapabilityParser.js";
import { PackageDeclContext } from "./QuixosCapabilityParser.js";
import { PackageExportContext } from "./QuixosCapabilityParser.js";
import { PackageOperationExportContext } from "./QuixosCapabilityParser.js";
import { PackageFunctionExportContext } from "./QuixosCapabilityParser.js";
import { PackageConstructorExportContext } from "./QuixosCapabilityParser.js";
import { EventClauseContext } from "./QuixosCapabilityParser.js";
import { OperationModeContext } from "./QuixosCapabilityParser.js";
import { ReceiverRequirementContext } from "./QuixosCapabilityParser.js";
import { IdentifierListContext } from "./QuixosCapabilityParser.js";
import { DependencyBlockContext } from "./QuixosCapabilityParser.js";
import { DependencyPortContext } from "./QuixosCapabilityParser.js";
import { PrimitiveListContext } from "./QuixosCapabilityParser.js";
import { PrimitiveContext } from "./QuixosCapabilityParser.js";
import { SharedAttachmentDeclContext } from "./QuixosCapabilityParser.js";
import { AttachmentDeclContext } from "./QuixosCapabilityParser.js";
import { StateDeclContext } from "./QuixosCapabilityParser.js";
import { StoragePolicyContext } from "./QuixosCapabilityParser.js";
import { EdgeDeclContext } from "./QuixosCapabilityParser.js";
import { EdgeEndpointContext } from "./QuixosCapabilityParser.js";
import { ConformanceDeclContext } from "./QuixosCapabilityParser.js";
import { ConformanceItemContext } from "./QuixosCapabilityParser.js";
import { OperationBindingDeclContext } from "./QuixosCapabilityParser.js";
import { MemberOperationRefContext } from "./QuixosCapabilityParser.js";
import { OperationNameContext } from "./QuixosCapabilityParser.js";
import { OperationProviderContext } from "./QuixosCapabilityParser.js";
import { StatePrimitiveContext } from "./QuixosCapabilityParser.js";
import { EdgePrimitiveContext } from "./QuixosCapabilityParser.js";
import { DependencyBindingBlockContext } from "./QuixosCapabilityParser.js";
import { DependencyBindingContext } from "./QuixosCapabilityParser.js";
import { ConstructorBindingDeclContext } from "./QuixosCapabilityParser.js";
import { ValueTypeContext } from "./QuixosCapabilityParser.js";
import { ScalarTypeContext } from "./QuixosCapabilityParser.js";
import { CardinalityContext } from "./QuixosCapabilityParser.js";
import { JsonLiteralContext } from "./QuixosCapabilityParser.js";
import { JsonObjectContext } from "./QuixosCapabilityParser.js";
import { JsonMemberContext } from "./QuixosCapabilityParser.js";
import { JsonArrayContext } from "./QuixosCapabilityParser.js";
import { IdentifierContext } from "./QuixosCapabilityParser.js";
import { StringLiteralContext } from "./QuixosCapabilityParser.js";
/**
* This interface defines a complete generic visitor for a parse tree produced
* by `QuixosCapabilityParser`.
*
* @param <Result> The return type of the visit operation. Use `void` for
* operations with no return type.
*/
export class QuixosCapabilityVisitor<Result> extends AbstractParseTreeVisitor<Result> {
/**
* Visit a parse tree produced by `QuixosCapabilityParser.document`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDocument?: (ctx: DocumentContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.workspaceDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitWorkspaceDecl?: (ctx: WorkspaceDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.workspaceItem`.
* @param ctx the parse tree
* @return the visitor result
*/
visitWorkspaceItem?: (ctx: WorkspaceItemContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.atomDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitAtomDecl?: (ctx: AtomDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.interfaceDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitInterfaceDecl?: (ctx: InterfaceDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.sourceBlock`.
* @param ctx the parse tree
* @return the visitor result
*/
visitSourceBlock?: (ctx: SourceBlockContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.interfaceMember`.
* @param ctx the parse tree
* @return the visitor result
*/
visitInterfaceMember?: (ctx: InterfaceMemberContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.operationMember`.
* @param ctx the parse tree
* @return the visitor result
*/
visitOperationMember?: (ctx: OperationMemberContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.valueMember`.
* @param ctx the parse tree
* @return the visitor result
*/
visitValueMember?: (ctx: ValueMemberContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.valueMemberOperation`.
* @param ctx the parse tree
* @return the visitor result
*/
visitValueMemberOperation?: (ctx: ValueMemberOperationContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.relationshipMember`.
* @param ctx the parse tree
* @return the visitor result
*/
visitRelationshipMember?: (ctx: RelationshipMemberContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.relationshipOperation`.
* @param ctx the parse tree
* @return the visitor result
*/
visitRelationshipOperation?: (ctx: RelationshipOperationContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.targetConstraint`.
* @param ctx the parse tree
* @return the visitor result
*/
visitTargetConstraint?: (ctx: TargetConstraintContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.packageDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitPackageDecl?: (ctx: PackageDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.packageExport`.
* @param ctx the parse tree
* @return the visitor result
*/
visitPackageExport?: (ctx: PackageExportContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.packageOperationExport`.
* @param ctx the parse tree
* @return the visitor result
*/
visitPackageOperationExport?: (ctx: PackageOperationExportContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.packageFunctionExport`.
* @param ctx the parse tree
* @return the visitor result
*/
visitPackageFunctionExport?: (ctx: PackageFunctionExportContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.packageConstructorExport`.
* @param ctx the parse tree
* @return the visitor result
*/
visitPackageConstructorExport?: (ctx: PackageConstructorExportContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.eventClause`.
* @param ctx the parse tree
* @return the visitor result
*/
visitEventClause?: (ctx: EventClauseContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.operationMode`.
* @param ctx the parse tree
* @return the visitor result
*/
visitOperationMode?: (ctx: OperationModeContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.receiverRequirement`.
* @param ctx the parse tree
* @return the visitor result
*/
visitReceiverRequirement?: (ctx: ReceiverRequirementContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.identifierList`.
* @param ctx the parse tree
* @return the visitor result
*/
visitIdentifierList?: (ctx: IdentifierListContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.dependencyBlock`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDependencyBlock?: (ctx: DependencyBlockContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.dependencyPort`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDependencyPort?: (ctx: DependencyPortContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.primitiveList`.
* @param ctx the parse tree
* @return the visitor result
*/
visitPrimitiveList?: (ctx: PrimitiveListContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.primitive`.
* @param ctx the parse tree
* @return the visitor result
*/
visitPrimitive?: (ctx: PrimitiveContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.sharedAttachmentDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitSharedAttachmentDecl?: (ctx: SharedAttachmentDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.attachmentDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitAttachmentDecl?: (ctx: AttachmentDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.stateDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitStateDecl?: (ctx: StateDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.storagePolicy`.
* @param ctx the parse tree
* @return the visitor result
*/
visitStoragePolicy?: (ctx: StoragePolicyContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.edgeDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitEdgeDecl?: (ctx: EdgeDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.edgeEndpoint`.
* @param ctx the parse tree
* @return the visitor result
*/
visitEdgeEndpoint?: (ctx: EdgeEndpointContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.conformanceDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitConformanceDecl?: (ctx: ConformanceDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.conformanceItem`.
* @param ctx the parse tree
* @return the visitor result
*/
visitConformanceItem?: (ctx: ConformanceItemContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.operationBindingDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitOperationBindingDecl?: (ctx: OperationBindingDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.memberOperationRef`.
* @param ctx the parse tree
* @return the visitor result
*/
visitMemberOperationRef?: (ctx: MemberOperationRefContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.operationName`.
* @param ctx the parse tree
* @return the visitor result
*/
visitOperationName?: (ctx: OperationNameContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.operationProvider`.
* @param ctx the parse tree
* @return the visitor result
*/
visitOperationProvider?: (ctx: OperationProviderContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.statePrimitive`.
* @param ctx the parse tree
* @return the visitor result
*/
visitStatePrimitive?: (ctx: StatePrimitiveContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.edgePrimitive`.
* @param ctx the parse tree
* @return the visitor result
*/
visitEdgePrimitive?: (ctx: EdgePrimitiveContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.dependencyBindingBlock`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDependencyBindingBlock?: (ctx: DependencyBindingBlockContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.dependencyBinding`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDependencyBinding?: (ctx: DependencyBindingContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.constructorBindingDecl`.
* @param ctx the parse tree
* @return the visitor result
*/
visitConstructorBindingDecl?: (ctx: ConstructorBindingDeclContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.valueType`.
* @param ctx the parse tree
* @return the visitor result
*/
visitValueType?: (ctx: ValueTypeContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.scalarType`.
* @param ctx the parse tree
* @return the visitor result
*/
visitScalarType?: (ctx: ScalarTypeContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.cardinality`.
* @param ctx the parse tree
* @return the visitor result
*/
visitCardinality?: (ctx: CardinalityContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.jsonLiteral`.
* @param ctx the parse tree
* @return the visitor result
*/
visitJsonLiteral?: (ctx: JsonLiteralContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.jsonObject`.
* @param ctx the parse tree
* @return the visitor result
*/
visitJsonObject?: (ctx: JsonObjectContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.jsonMember`.
* @param ctx the parse tree
* @return the visitor result
*/
visitJsonMember?: (ctx: JsonMemberContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.jsonArray`.
* @param ctx the parse tree
* @return the visitor result
*/
visitJsonArray?: (ctx: JsonArrayContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.identifier`.
* @param ctx the parse tree
* @return the visitor result
*/
visitIdentifier?: (ctx: IdentifierContext) => Result;
/**
* Visit a parse tree produced by `QuixosCapabilityParser.stringLiteral`.
* @param ctx the parse tree
* @return the visitor result
*/
visitStringLiteral?: (ctx: StringLiteralContext) => Result;
}
+1
View File
@@ -0,0 +1 @@
export * from "./parser.js";
File diff suppressed because it is too large Load Diff
+2
View File
@@ -0,0 +1,2 @@
export * from "./types.js";
export * from "./validation.js";
+373
View File
@@ -0,0 +1,373 @@
declare const opaqueIdBrand: unique symbol;
type OpaqueId<Kind extends string> = string & {
readonly [opaqueIdBrand]: Kind;
};
export type WorkspaceId = OpaqueId<"WorkspaceId">;
export type WorkspaceRevisionId = OpaqueId<"WorkspaceRevisionId">;
export type AtomId = OpaqueId<"AtomId">;
export type InterfaceId = OpaqueId<"InterfaceId">;
export type InterfaceRevisionId = OpaqueId<"InterfaceRevisionId">;
export type MemberId = OpaqueId<"MemberId">;
export type OperationId = OpaqueId<"OperationId">;
export type SlotId = OpaqueId<"SlotId">;
export type EdgeTypeId = OpaqueId<"EdgeTypeId">;
export type EdgeProjectionId = OpaqueId<"EdgeProjectionId">;
export type PackageId = OpaqueId<"PackageId">;
export type PackageRevisionId = OpaqueId<"PackageRevisionId">;
export type PackageExportId = OpaqueId<"PackageExportId">;
export type DependencyPortId = OpaqueId<"DependencyPortId">;
export type ObjectId = OpaqueId<"ObjectId">;
const opaque = <Kind extends string>(value: string) => value as OpaqueId<Kind>;
/**
* Textual IDs remain opaque to the semantic model. Authoring tools may mint
* UUID-backed values later without changing the checked IR.
*/
export const capabilityId = {
workspace: (value: string) => opaque<"WorkspaceId">(value),
workspaceRevision: (value: string) =>
opaque<"WorkspaceRevisionId">(value),
atom: (value: string) => opaque<"AtomId">(value),
interface: (value: string) => opaque<"InterfaceId">(value),
interfaceRevision: (value: string) =>
opaque<"InterfaceRevisionId">(value),
member: (value: string) => opaque<"MemberId">(value),
operation: (value: string) => opaque<"OperationId">(value),
slot: (value: string) => opaque<"SlotId">(value),
edgeType: (value: string) => opaque<"EdgeTypeId">(value),
edgeProjection: (value: string) => opaque<"EdgeProjectionId">(value),
package: (value: string) => opaque<"PackageId">(value),
packageRevision: (value: string) => opaque<"PackageRevisionId">(value),
packageExport: (value: string) => opaque<"PackageExportId">(value),
dependencyPort: (value: string) => opaque<"DependencyPortId">(value),
object: (value: string) => opaque<"ObjectId">(value),
} as const;
export interface SourceRevision {
repository: string;
commit: string;
}
export type ScalarValueTypeName =
| "bool"
| "bytes"
| "double"
| "int32"
| "int64"
| "string"
| "uint32"
| "uint64";
export type ObjectExpectation =
| { kind: "atom"; atomId: AtomId }
| {
kind: "interface";
interfaceRevisionId: InterfaceRevisionId;
};
export type ValueType =
| { kind: "builtin"; name: "unit" | "watch-handle" }
| { kind: "scalar"; name: ScalarValueTypeName }
| { kind: "message"; descriptorId: string }
| { kind: "object-ref"; expectation: ObjectExpectation }
| { kind: "optional"; value: ValueType }
| { kind: "list"; value: ValueType };
export const valueType = {
unit: { kind: "builtin", name: "unit" } as const,
watchHandle: { kind: "builtin", name: "watch-handle" } as const,
bool: { kind: "scalar", name: "bool" } as const,
bytes: { kind: "scalar", name: "bytes" } as const,
double: { kind: "scalar", name: "double" } as const,
int32: { kind: "scalar", name: "int32" } as const,
int64: { kind: "scalar", name: "int64" } as const,
string: { kind: "scalar", name: "string" } as const,
uint32: { kind: "scalar", name: "uint32" } as const,
uint64: { kind: "scalar", name: "uint64" } as const,
message: (descriptorId: string): ValueType => ({
kind: "message",
descriptorId,
}),
atomRef: (atomId: AtomId): ValueType => ({
kind: "object-ref",
expectation: { kind: "atom", atomId },
}),
interfaceRef: (interfaceRevisionId: InterfaceRevisionId): ValueType => ({
kind: "object-ref",
expectation: { kind: "interface", interfaceRevisionId },
}),
optional: (value: ValueType): ValueType => ({ kind: "optional", value }),
list: (value: ValueType): ValueType => ({ kind: "list", value }),
} as const;
export interface AtomDefinition {
id: AtomId;
displayName: string;
documentation?: string;
}
export type InterfaceOperationMode =
| "call"
| "watch-start"
| "watch-stop"
| "subscribe"
| "unsubscribe";
export interface InterfaceOperation {
id: OperationId;
displayName: string;
inputType: ValueType;
outputType: ValueType;
mode: InterfaceOperationMode;
/** Required for watch-start/subscribe and absent for other modes. */
eventType?: ValueType;
}
interface InterfaceMemberBase {
id: MemberId;
displayName: string;
operations: InterfaceOperation[];
}
export interface ValueInterfaceMember extends InterfaceMemberBase {
kind: "value";
valueType: ValueType;
}
export type EdgeCardinality =
| "optional-one"
| "exactly-one"
| "many"
| "many-unique";
export type EdgeEndpointConstraint =
| { kind: "atom"; atomId: AtomId }
| {
kind: "interface";
interfaceRevisionId: InterfaceRevisionId;
};
export interface RelationshipInterfaceMember extends InterfaceMemberBase {
kind: "relationship";
target: EdgeEndpointConstraint;
cardinality: EdgeCardinality;
ordered: boolean;
}
/** A named callable capability that is not value or relationship sugar. */
export interface OperationInterfaceMember extends InterfaceMemberBase {
kind: "operation";
inputType: ValueType;
outputType: ValueType;
}
export type InterfaceMember =
| ValueInterfaceMember
| RelationshipInterfaceMember
| OperationInterfaceMember;
export interface InterfaceRevision {
interfaceId: InterfaceId;
revisionId: InterfaceRevisionId;
displayName: string;
source: SourceRevision;
members: InterfaceMember[];
}
export type StoragePolicy =
| { kind: "optimistic-register" }
| { kind: "crdt-document"; updateType: ValueType };
export interface StateSlotDefinition {
kind: "state";
id: SlotId;
attachedTo: AtomId;
displayName: string;
valueType: ValueType;
storagePolicy: StoragePolicy;
defaultValue?: unknown;
}
export interface EdgeEndpoint {
projectionId: EdgeProjectionId;
displayName: string;
constraint: EdgeEndpointConstraint;
cardinality: EdgeCardinality;
ordered: boolean;
}
export interface EdgeDefinition {
kind: "edge";
id: EdgeTypeId;
displayName: string;
endpoints: [EdgeEndpoint, EdgeEndpoint];
}
export type PersistentAttachment = StateSlotDefinition | EdgeDefinition;
export type StatePrimitive =
| "read"
| "write"
| "watch-start"
| "watch-stop";
export type EdgePrimitive =
| "resolve"
| "connect"
| "disconnect"
| "watch-start"
| "watch-stop";
export type PackageReceiverRequirement =
| { kind: "any-object" }
| { kind: "exact-atom"; atomId: AtomId }
| {
kind: "all-interfaces";
interfaceRevisionIds: InterfaceRevisionId[];
};
export type DependencyPortRequirement =
| {
kind: "state";
valueType: ValueType;
primitives: StatePrimitive[];
}
| {
kind: "edge";
target: EdgeEndpointConstraint;
cardinality: EdgeCardinality;
primitives: EdgePrimitive[];
}
| {
kind: "receiver-interface";
interfaceRevisionId: InterfaceRevisionId;
}
| { kind: "constructor"; atomId: AtomId };
export interface DependencyPort {
id: DependencyPortId;
displayName: string;
requirement: DependencyPortRequirement;
}
interface PackageExportBase {
id: PackageExportId;
displayName: string;
inputType: ValueType;
outputType: ValueType;
dependencyPorts: DependencyPort[];
}
export interface PackageOperationExport extends PackageExportBase {
kind: "operation";
mode: InterfaceOperationMode;
eventType?: ValueType;
receiverRequirement: PackageReceiverRequirement;
}
export interface PackageFunctionExport extends PackageExportBase {
kind: "function";
}
export interface PackageConstructorExport extends PackageExportBase {
kind: "constructor";
constructsAtom: AtomId;
}
export type PackageExport =
| PackageOperationExport
| PackageFunctionExport
| PackageConstructorExport;
export interface PackageRevision {
packageId: PackageId;
revisionId: PackageRevisionId;
displayName: string;
source: SourceRevision;
exports: PackageExport[];
}
export type DependencyBinding =
| { kind: "state"; slotId: SlotId }
| {
kind: "edge";
edgeTypeId: EdgeTypeId;
projectionId: EdgeProjectionId;
}
| {
kind: "receiver-interface";
interfaceRevisionId: InterfaceRevisionId;
}
| { kind: "constructor"; atomId: AtomId };
export interface BoundDependency {
portId: DependencyPortId;
binding: DependencyBinding;
}
export type Binding =
| {
kind: "state";
slotId: SlotId;
primitive: StatePrimitive;
}
| {
kind: "edge";
edgeTypeId: EdgeTypeId;
projectionId: EdgeProjectionId;
primitive: EdgePrimitive;
}
| {
kind: "package";
packageRevisionId: PackageRevisionId;
exportId: PackageExportId;
dependencies: BoundDependency[];
};
export interface OperationBinding {
operationId: OperationId;
binding: Binding;
}
export interface Conformance {
atomId: AtomId;
interfaceRevisionId: InterfaceRevisionId;
privateAttachments: PersistentAttachment[];
operationBindings: OperationBinding[];
}
export interface AtomConstructorBinding {
atomId: AtomId;
packageRevisionId: PackageRevisionId;
exportId: PackageExportId;
dependencies: BoundDependency[];
}
export interface WorkspaceRevision {
id: WorkspaceRevisionId;
workspaceId: WorkspaceId;
parentRevisionIds: WorkspaceRevisionId[];
sourceRootCommit: string;
atoms: AtomDefinition[];
sharedAttachments: PersistentAttachment[];
interfaceImports: InterfaceRevision[];
packageImports: PackageRevision[];
conformances: Conformance[];
constructors: AtomConstructorBinding[];
}
export type AttachmentOwner =
| { kind: "workspace" }
| {
kind: "conformance";
atomId: AtomId;
interfaceRevisionId: InterfaceRevisionId;
};
export interface OwnedAttachment {
attachment: PersistentAttachment;
owner: AttachmentOwner;
}
File diff suppressed because it is too large Load Diff
+15 -93
View File
@@ -3,23 +3,7 @@ import fs from "node:fs";
import path from "node:path";
import { fromBinary, toJsonString } from "@bufbuild/protobuf";
import type { PackageDescriptor } from "./gen/quixos/package_pb.js";
import {
FunctionCapabilityKind,
PackageDescriptorSchema,
} from "./gen/quixos/package_pb.js";
const functionKey = (value: {
packageNamespace: string;
packageName: string;
symbol: string;
versionRef: string;
}) =>
[
value.packageNamespace,
value.packageName,
value.symbol,
value.versionRef,
].join(":");
import { PackageDescriptorSchema } from "./gen/quixos/package_pb.js";
const protoPaths = () => {
const candidates = [
@@ -76,87 +60,25 @@ export const validatePackageDescriptor = (
descriptor: PackageDescriptor,
): string[] => {
const errors: string[] = [];
if (!descriptor.packageNamespace) {
errors.push("packageNamespace is required");
if (!descriptor.packageId) {
errors.push("packageId is required");
}
if (!descriptor.packageName) {
errors.push("packageName is required");
if (!descriptor.packageRevisionId) {
errors.push("packageRevisionId is required");
}
if (descriptor.descriptorVersion === 0) {
errors.push("descriptorVersion must be greater than zero");
if (!descriptor.runtimeProtocolVersion) {
errors.push("runtimeProtocolVersion is required");
}
if (
descriptor.interfaceCompatibleBackTo !== 0 &&
descriptor.interfaceCompatibleBackTo > descriptor.descriptorVersion
) {
errors.push("interfaceCompatibleBackTo must not exceed descriptorVersion");
}
if (
descriptor.runnerCompatibleBackTo !== 0 &&
descriptor.runnerCompatibleBackTo > descriptor.descriptorVersion
) {
errors.push("runnerCompatibleBackTo must not exceed descriptorVersion");
}
const seenFunctions = new Set<string>();
for (const [index, entry] of descriptor.functionExports.entries()) {
const fn = entry.function;
if (!fn) {
errors.push(`functionExports[${index}].function is required`);
continue;
const seenExports = new Set<string>();
for (const [index, entry] of descriptor.exports.entries()) {
if (!entry.exportId) errors.push(`exports[${index}].exportId is required`);
if (!entry.runtimeSymbol) {
errors.push(`exports[${index}].runtimeSymbol is required`);
}
if (!fn.packageNamespace) {
fn.packageNamespace = descriptor.packageNamespace;
}
if (!fn.packageName) {
fn.packageName = descriptor.packageName;
}
if (
fn.packageNamespace !== descriptor.packageNamespace ||
fn.packageName !== descriptor.packageName
) {
errors.push(
`functionExports[${index}] must export from this package (${descriptor.packageNamespace}/${descriptor.packageName})`,
);
}
if (!fn.symbol) {
errors.push(`functionExports[${index}].function.symbol is required`);
}
if (entry.interfaceVersion === 0) {
errors.push(`functionExports[${index}].interfaceVersion is required`);
}
if (entry.capabilityKind === FunctionCapabilityKind.FUNCTION_CAPABILITY_KIND_UNSPECIFIED) {
errors.push(`functionExports[${index}].capabilityKind is required`);
}
if (
entry.interfaceCompatibleBackTo !== 0 &&
entry.interfaceCompatibleBackTo > entry.interfaceVersion
) {
errors.push(
`functionExports[${index}].interfaceCompatibleBackTo must not exceed interfaceVersion`,
);
}
const key = functionKey(fn);
if (seenFunctions.has(key)) {
errors.push(`duplicate function export: ${key}`);
}
seenFunctions.add(key);
}
for (const [index, entry] of descriptor.dependencies.entries()) {
if (!entry.package) {
errors.push(`dependencies[${index}].package is required`);
continue;
}
if (!entry.package.packageNamespace) {
errors.push(`dependencies[${index}].package.packageNamespace is required`);
}
if (!entry.package.packageName) {
errors.push(`dependencies[${index}].package.packageName is required`);
}
if (entry.package.descriptorVersion === 0) {
errors.push(`dependencies[${index}].package.descriptorVersion is required`);
if (seenExports.has(entry.exportId)) {
errors.push(`duplicate export: ${entry.exportId}`);
}
seenExports.add(entry.exportId);
}
return errors;
+274 -346
View File
File diff suppressed because one or more lines are too long
-374
View File
@@ -1,374 +0,0 @@
// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js"
// @generated from file camino/options.proto (package camino, syntax proto3)
/* eslint-disable */
import type { GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { FieldOptions, FileOptions, MessageOptions, MethodOptions as MethodOptions$1 } from "@bufbuild/protobuf/wkt";
import { file_google_protobuf_descriptor } from "@bufbuild/protobuf/wkt";
import type { Cardinality, ConflictStrategy, FieldOps, FieldStorage, InterfaceFieldContract, SymbolRef, TypeBinding } from "./schema_pb.js";
import { file_camino_schema } from "./schema_pb.js";
import type { FunctionRef } from "../quixos/refs_pb.js";
import { file_quixos_refs } from "../quixos/refs_pb.js";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file camino/options.proto.
*/
export const file_camino_options: GenFile = /*@__PURE__*/
fileDesc("ChRjYW1pbm8vb3B0aW9ucy5wcm90bxIGY2FtaW5vIj4KDENsYXNzT3B0aW9ucxIPCgd2ZXJzaW9uGAEgASgNEh0KAmlkGAIgASgLMhEuY2FtaW5vLlN5bWJvbFJlZiJaChBJbnRlcmZhY2VPcHRpb25zEg8KB3ZlcnNpb24YASABKA0SHQoCaWQYAiABKAsyES5jYW1pbm8uU3ltYm9sUmVmEhYKDnR5cGVfcGFyYW1ldGVyGAMgAygJImQKEUltcGxlbWVudHNPcHRpb25zEiQKCWludGVyZmFjZRgBIAEoCzIRLmNhbWluby5TeW1ib2xSZWYSKQoMdHlwZV9iaW5kaW5nGAIgAygLMhMuY2FtaW5vLlR5cGVCaW5kaW5nIjsKEkNvbnN0cnVjdG9yT3B0aW9ucxIlCghmdW5jdGlvbhgBIAEoCzITLnF1aXhvcy5GdW5jdGlvblJlZiLOAgoLRWRnZU9wdGlvbnMSHQoCaWQYASABKAsyES5jYW1pbm8uU3ltYm9sUmVmEiEKBnRhcmdldBgCIAEoCzIRLmNhbWluby5TeW1ib2xSZWYSKAoLY2FyZGluYWxpdHkYAyABKA4yEy5jYW1pbm8uQ2FyZGluYWxpdHkSDwoHaW52ZXJzZRgEIAEoCRIyCg10aGlzX2VuZHBvaW50GAUgASgLMhsuY2FtaW5vLkVkZ2VFbmRwb2ludE9wdGlvbnMSMwoOb3RoZXJfZW5kcG9pbnQYBiABKAsyGy5jYW1pbm8uRWRnZUVuZHBvaW50T3B0aW9ucxIeCgN0YWcYByADKAsyES5jYW1pbm8uU3ltYm9sUmVmEiUKCmltcGxlbWVudHMYCCADKAsyES5jYW1pbm8uU3ltYm9sUmVmEhIKCnVuZGlyZWN0ZWQYCSABKAgi5QEKE0VkZ2VFbmRwb2ludE9wdGlvbnMSIAoFY2xhc3MYASABKAsyES5jYW1pbm8uU3ltYm9sUmVmEiQKCWludGVyZmFjZRgCIAEoCzIRLmNhbWluby5TeW1ib2xSZWYSEgoKcHJvamVjdGlvbhgDIAEoCRIoCgtjYXJkaW5hbGl0eRgEIAEoDjITLmNhbWluby5DYXJkaW5hbGl0eRIPCgdpbmRleGVkGAUgASgIEjcKC21hdGVyaWFsaXplGAYgASgLMiIuY2FtaW5vLkVkZ2VNYXRlcmlhbGl6YXRpb25PcHRpb25zIloKGkVkZ2VNYXRlcmlhbGl6YXRpb25PcHRpb25zEiAKBWNsYXNzGAEgASgLMhEuY2FtaW5vLlN5bWJvbFJlZhIaChJjb25uZWN0X3Byb2plY3Rpb24YAiABKAkiRAoNTWV0aG9kT3B0aW9ucxIMCgRuYW1lGAEgASgJEiUKCGZ1bmN0aW9uGAIgASgLMhMucXVpeG9zLkZ1bmN0aW9uUmVmImMKEE1pZ3JhdGlvbk9wdGlvbnMSFAoMZnJvbV92ZXJzaW9uGAEgASgNEhIKCnRvX3ZlcnNpb24YAiABKA0SJQoIZnVuY3Rpb24YAyABKAsyEy5xdWl4b3MuRnVuY3Rpb25SZWY6SQoQc2NoZW1hX25hbWVzcGFjZRIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxi4jgMgASgJUg9zY2hlbWFOYW1lc3BhY2U6RQoOc2NoZW1hX3ZlcnNpb24SHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYuY4DIAEoCVINc2NoZW1hVmVyc2lvbjpNCgVjbGFzcxIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjCjgMgASgLMhQuY2FtaW5vLkNsYXNzT3B0aW9uc1IFY2xhc3M6UAoGbWV0aG9kEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGMOOAyADKAsyFS5jYW1pbm8uTWV0aG9kT3B0aW9uc1IGbWV0aG9kOlkKCW1pZ3JhdGlvbhIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjEjgMgAygLMhguY2FtaW5vLk1pZ3JhdGlvbk9wdGlvbnNSCW1pZ3JhdGlvbjpZCglpbnRlcmZhY2USHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYxY4DIAEoCzIYLmNhbWluby5JbnRlcmZhY2VPcHRpb25zUglpbnRlcmZhY2U6XAoKaW1wbGVtZW50cxIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjGjgMgAygLMhkuY2FtaW5vLkltcGxlbWVudHNPcHRpb25zUgppbXBsZW1lbnRzOl8KC2NvbnN0cnVjdG9yEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGMeOAyABKAsyGi5jYW1pbm8uQ29uc3RydWN0b3JPcHRpb25zUgtjb25zdHJ1Y3RvcjpVCghjb25mbGljdBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYzI4DIAEoDjIYLmNhbWluby5Db25mbGljdFN0cmF0ZWd5Ughjb25mbGljdDpICgRlZGdlEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjNjgMgASgLMhMuY2FtaW5vLkVkZ2VPcHRpb25zUgRlZGdlOloKDWZpZWxkX3N0b3JhZ2USHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGM6OAyABKAsyFC5jYW1pbm8uRmllbGRTdG9yYWdlUgxmaWVsZFN0b3JhZ2U6TgoJZmllbGRfb3BzEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjPjgMgASgLMhAuY2FtaW5vLkZpZWxkT3BzUghmaWVsZE9wczpoCg9pbnRlcmZhY2VfZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGNCOAyABKAsyHi5jYW1pbm8uSW50ZXJmYWNlRmllbGRDb250cmFjdFIOaW50ZXJmYWNlRmllbGQ6RAoNZGlzcGxheV9sYWJlbBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY0Y4DIAEoCFIMZGlzcGxheUxhYmVsOkkKBGltcGwSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxjWjgMgASgLMhMucXVpeG9zLkZ1bmN0aW9uUmVmUgRpbXBsYgZwcm90bzM", [file_google_protobuf_descriptor, file_camino_schema, file_quixos_refs]);
/**
* @generated from message camino.ClassOptions
*/
export type ClassOptions = Message<"camino.ClassOptions"> & {
/**
* @generated from field: uint32 version = 1;
*/
version: number;
/**
* @generated from field: camino.SymbolRef id = 2;
*/
id?: SymbolRef | undefined;
};
/**
* Describes the message camino.ClassOptions.
* Use `create(ClassOptionsSchema)` to create a new message.
*/
export const ClassOptionsSchema: GenMessage<ClassOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 0);
/**
* @generated from message camino.InterfaceOptions
*/
export type InterfaceOptions = Message<"camino.InterfaceOptions"> & {
/**
* @generated from field: uint32 version = 1;
*/
version: number;
/**
* @generated from field: camino.SymbolRef id = 2;
*/
id?: SymbolRef | undefined;
/**
* @generated from field: repeated string type_parameter = 3;
*/
typeParameter: string[];
};
/**
* Describes the message camino.InterfaceOptions.
* Use `create(InterfaceOptionsSchema)` to create a new message.
*/
export const InterfaceOptionsSchema: GenMessage<InterfaceOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 1);
/**
* @generated from message camino.ImplementsOptions
*/
export type ImplementsOptions = Message<"camino.ImplementsOptions"> & {
/**
* @generated from field: camino.SymbolRef interface = 1;
*/
interface?: SymbolRef | undefined;
/**
* @generated from field: repeated camino.TypeBinding type_binding = 2;
*/
typeBinding: TypeBinding[];
};
/**
* Describes the message camino.ImplementsOptions.
* Use `create(ImplementsOptionsSchema)` to create a new message.
*/
export const ImplementsOptionsSchema: GenMessage<ImplementsOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 2);
/**
* @generated from message camino.ConstructorOptions
*/
export type ConstructorOptions = Message<"camino.ConstructorOptions"> & {
/**
* @generated from field: quixos.FunctionRef function = 1;
*/
function?: FunctionRef | undefined;
};
/**
* Describes the message camino.ConstructorOptions.
* Use `create(ConstructorOptionsSchema)` to create a new message.
*/
export const ConstructorOptionsSchema: GenMessage<ConstructorOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 3);
/**
* @generated from message camino.EdgeOptions
*/
export type EdgeOptions = Message<"camino.EdgeOptions"> & {
/**
* @generated from field: camino.SymbolRef id = 1;
*/
id?: SymbolRef | undefined;
/**
* Shorthand for other_endpoint.class.
*
* @generated from field: camino.SymbolRef target = 2;
*/
target?: SymbolRef | undefined;
/**
* Shorthand for this_endpoint.cardinality.
*
* @generated from field: camino.Cardinality cardinality = 3;
*/
cardinality: Cardinality;
/**
* Shorthand for other_endpoint.projection.
*
* @generated from field: string inverse = 4;
*/
inverse: string;
/**
* @generated from field: camino.EdgeEndpointOptions this_endpoint = 5;
*/
thisEndpoint?: EdgeEndpointOptions | undefined;
/**
* @generated from field: camino.EdgeEndpointOptions other_endpoint = 6;
*/
otherEndpoint?: EdgeEndpointOptions | undefined;
/**
* @generated from field: repeated camino.SymbolRef tag = 7;
*/
tag: SymbolRef[];
/**
* @generated from field: repeated camino.SymbolRef implements = 8;
*/
implements: SymbolRef[];
/**
* @generated from field: bool undirected = 9;
*/
undirected: boolean;
};
/**
* Describes the message camino.EdgeOptions.
* Use `create(EdgeOptionsSchema)` to create a new message.
*/
export const EdgeOptionsSchema: GenMessage<EdgeOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 4);
/**
* @generated from message camino.EdgeEndpointOptions
*/
export type EdgeEndpointOptions = Message<"camino.EdgeEndpointOptions"> & {
/**
* @generated from field: camino.SymbolRef class = 1;
*/
class?: SymbolRef | undefined;
/**
* @generated from field: camino.SymbolRef interface = 2;
*/
interface?: SymbolRef | undefined;
/**
* @generated from field: string projection = 3;
*/
projection: string;
/**
* @generated from field: camino.Cardinality cardinality = 4;
*/
cardinality: Cardinality;
/**
* @generated from field: bool indexed = 5;
*/
indexed: boolean;
/**
* @generated from field: camino.EdgeMaterializationOptions materialize = 6;
*/
materialize?: EdgeMaterializationOptions | undefined;
};
/**
* Describes the message camino.EdgeEndpointOptions.
* Use `create(EdgeEndpointOptionsSchema)` to create a new message.
*/
export const EdgeEndpointOptionsSchema: GenMessage<EdgeEndpointOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 5);
/**
* @generated from message camino.EdgeMaterializationOptions
*/
export type EdgeMaterializationOptions = Message<"camino.EdgeMaterializationOptions"> & {
/**
* @generated from field: camino.SymbolRef class = 1;
*/
class?: SymbolRef | undefined;
/**
* @generated from field: string connect_projection = 2;
*/
connectProjection: string;
};
/**
* Describes the message camino.EdgeMaterializationOptions.
* Use `create(EdgeMaterializationOptionsSchema)` to create a new message.
*/
export const EdgeMaterializationOptionsSchema: GenMessage<EdgeMaterializationOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 6);
/**
* @generated from message camino.MethodOptions
*/
export type MethodOptions = Message<"camino.MethodOptions"> & {
/**
* @generated from field: string name = 1;
*/
name: string;
/**
* @generated from field: quixos.FunctionRef function = 2;
*/
function?: FunctionRef | undefined;
};
/**
* Describes the message camino.MethodOptions.
* Use `create(MethodOptionsSchema)` to create a new message.
*/
export const MethodOptionsSchema: GenMessage<MethodOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 7);
/**
* @generated from message camino.MigrationOptions
*/
export type MigrationOptions = Message<"camino.MigrationOptions"> & {
/**
* @generated from field: uint32 from_version = 1;
*/
fromVersion: number;
/**
* @generated from field: uint32 to_version = 2;
*/
toVersion: number;
/**
* @generated from field: quixos.FunctionRef function = 3;
*/
function?: FunctionRef | undefined;
};
/**
* Describes the message camino.MigrationOptions.
* Use `create(MigrationOptionsSchema)` to create a new message.
*/
export const MigrationOptionsSchema: GenMessage<MigrationOptions> = /*@__PURE__*/
messageDesc(file_camino_options, 8);
/**
* @generated from extension: string schema_namespace = 51000;
*/
export const schema_namespace: GenExtension<FileOptions, string> = /*@__PURE__*/
extDesc(file_camino_options, 0);
/**
* @generated from extension: string schema_version = 51001;
*/
export const schema_version: GenExtension<FileOptions, string> = /*@__PURE__*/
extDesc(file_camino_options, 1);
/**
* @generated from extension: camino.ClassOptions class = 51010;
*/
export const class$: GenExtension<MessageOptions, ClassOptions> = /*@__PURE__*/
extDesc(file_camino_options, 2);
/**
* @generated from extension: repeated camino.MethodOptions method = 51011;
*/
export const method: GenExtension<MessageOptions, MethodOptions[]> = /*@__PURE__*/
extDesc(file_camino_options, 3);
/**
* @generated from extension: repeated camino.MigrationOptions migration = 51012;
*/
export const migration: GenExtension<MessageOptions, MigrationOptions[]> = /*@__PURE__*/
extDesc(file_camino_options, 4);
/**
* @generated from extension: camino.InterfaceOptions interface = 51013;
*/
export const interface$: GenExtension<MessageOptions, InterfaceOptions> = /*@__PURE__*/
extDesc(file_camino_options, 5);
/**
* @generated from extension: repeated camino.ImplementsOptions implements = 51014;
*/
export const implements$: GenExtension<MessageOptions, ImplementsOptions[]> = /*@__PURE__*/
extDesc(file_camino_options, 6);
/**
* @generated from extension: camino.ConstructorOptions constructor = 51015;
*/
export const constructor: GenExtension<MessageOptions, ConstructorOptions> = /*@__PURE__*/
extDesc(file_camino_options, 7);
/**
* @generated from extension: camino.ConflictStrategy conflict = 51020;
*/
export const conflict: GenExtension<FieldOptions, ConflictStrategy> = /*@__PURE__*/
extDesc(file_camino_options, 8);
/**
* @generated from extension: camino.EdgeOptions edge = 51021;
*/
export const edge: GenExtension<FieldOptions, EdgeOptions> = /*@__PURE__*/
extDesc(file_camino_options, 9);
/**
* @generated from extension: camino.FieldStorage field_storage = 51022;
*/
export const field_storage: GenExtension<FieldOptions, FieldStorage> = /*@__PURE__*/
extDesc(file_camino_options, 10);
/**
* @generated from extension: camino.FieldOps field_ops = 51023;
*/
export const field_ops: GenExtension<FieldOptions, FieldOps> = /*@__PURE__*/
extDesc(file_camino_options, 11);
/**
* @generated from extension: camino.InterfaceFieldContract interface_field = 51024;
*/
export const interface_field: GenExtension<FieldOptions, InterfaceFieldContract> = /*@__PURE__*/
extDesc(file_camino_options, 12);
/**
* @generated from extension: bool display_label = 51025;
*/
export const display_label: GenExtension<FieldOptions, boolean> = /*@__PURE__*/
extDesc(file_camino_options, 13);
/**
* @generated from extension: quixos.FunctionRef impl = 51030;
*/
export const impl: GenExtension<MethodOptions$1, FunctionRef> = /*@__PURE__*/
extDesc(file_camino_options, 14);
File diff suppressed because one or more lines are too long
+163 -78
View File
@@ -1,14 +1,14 @@
// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js"
// @generated by protoc-gen-es v2.14.1 with parameter "target=ts,import_extension=js"
// @generated from file quixos/orch.proto (package quixos.orch, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
import type { Value } from "../camino/api_pb.js";
import type { CaminoObject, Value } from "../camino/api_pb.js";
import { file_camino_api } from "../camino/api_pb.js";
import type { PackageDescriptor } from "./package_pb.js";
import { file_quixos_package } from "./package_pb.js";
import type { FunctionRef } from "./refs_pb.js";
import type { CapabilityRef, PackageExportRef } from "./refs_pb.js";
import { file_quixos_refs } from "./refs_pb.js";
import type { DerivedDependency } from "./runtime_pb.js";
import { file_quixos_runtime } from "./runtime_pb.js";
@@ -18,16 +18,55 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file quixos/orch.proto.
*/
export const file_quixos_orch: GenFile = /*@__PURE__*/
fileDesc("ChFxdWl4b3Mvb3JjaC5wcm90bxILcXVpeG9zLm9yY2gizAEKFUludm9rZUZ1bmN0aW9uUmVxdWVzdBIlCghmdW5jdGlvbhgBIAEoCzITLnF1aXhvcy5GdW5jdGlvblJlZhIRCglvYmplY3RfaWQYAiABKAkSPAoFaW5wdXQYAyADKAsyLS5xdWl4b3Mub3JjaC5JbnZva2VGdW5jdGlvblJlcXVlc3QuSW5wdXRFbnRyeRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEilgEKFkludm9rZUZ1bmN0aW9uUmVzcG9uc2USFQoNaW52b2NhdGlvbl9pZBgBIAEoCRIrCgphY3RpdmF0aW9uGAIgASgLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbhIKCgJvaxgDIAEoCBIdCgZyZXN1bHQYBCABKAsyDS5jYW1pbm8uVmFsdWUSDQoFZXJyb3IYBSABKAkiygEKFFdhdGNoRnVuY3Rpb25SZXF1ZXN0EiUKCGZ1bmN0aW9uGAEgASgLMhMucXVpeG9zLkZ1bmN0aW9uUmVmEhEKCW9iamVjdF9pZBgCIAEoCRI7CgVpbnB1dBgDIAMoCzIsLnF1aXhvcy5vcmNoLldhdGNoRnVuY3Rpb25SZXF1ZXN0LklucHV0RW50cnkaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIuEBChJXYXRjaEZ1bmN0aW9uRXZlbnQSFQoNaW52b2NhdGlvbl9pZBgBIAEoCRIrCgphY3RpdmF0aW9uGAIgASgLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbhIQCgh3YXRjaF9pZBgDIAEoCRIcCgV2YWx1ZRgEIAEoCzINLmNhbWluby5WYWx1ZRI3CgxkZXBlbmRlbmNpZXMYBSADKAsyIS5xdWl4b3MucnVudGltZS5EZXJpdmVkRGVwZW5kZW5jeRINCgVlcnJvchgGIAEoCRIPCgdpbml0aWFsGAcgASgIIhgKFkxpc3RBY3RpdmF0aW9uc1JlcXVlc3QiHwodTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1JlcXVlc3QiUAoeTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1Jlc3BvbnNlEi4KC2Rlc2NyaXB0b3JzGAEgAygLMhkucXVpeG9zLlBhY2thZ2VEZXNjcmlwdG9yIhwKGkxpc3RQYWNrYWdlUnVudGltZXNSZXF1ZXN0IlIKG0xpc3RQYWNrYWdlUnVudGltZXNSZXNwb25zZRIzCghydW50aW1lcxgBIAMoCzIhLnF1aXhvcy5vcmNoLlBhY2thZ2VSdW50aW1lU3RhdHVzIkcKF0xpc3RBY3RpdmF0aW9uc1Jlc3BvbnNlEiwKC2FjdGl2YXRpb25zGAEgAygLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbiI/ChZDbG9zZUFjdGl2YXRpb25SZXF1ZXN0EhUKDWFjdGl2YXRpb25faWQYASABKAkSDgoGcmVhc29uGAIgASgJIkYKF0Nsb3NlQWN0aXZhdGlvblJlc3BvbnNlEisKCmFjdGl2YXRpb24YASABKAsyFy5xdWl4b3Mub3JjaC5BY3RpdmF0aW9uIugBCgpBY3RpdmF0aW9uEhUKDWFjdGl2YXRpb25faWQYASABKAkSJQoIZnVuY3Rpb24YAiABKAsyEy5xdWl4b3MuRnVuY3Rpb25SZWYSEQoJb2JqZWN0X2lkGAMgASgJEg0KBXN0YXRlGAQgASgJEg4KBmRlbWFuZBgFIAEoDRIRCglvcGVuZWRfYXQYBiABKAkSFAoMbGFzdF91c2VkX2F0GAcgASgJEhgKEGlkbGVfZGVhZGxpbmVfYXQYCCABKAkSEQoJY2xvc2VkX2F0GAkgASgJEhQKDGNsb3NlX3JlYXNvbhgKIAEoCSLjAgoUUGFja2FnZVJ1bnRpbWVTdGF0dXMSEwoLcnVudGltZV9rZXkYASABKAkSGQoRcGFja2FnZV9uYW1lc3BhY2UYAiABKAkSFAoMcGFja2FnZV9uYW1lGAMgASgJEhoKEmRlc2NyaXB0b3JfdmVyc2lvbhgEIAEoDRITCgtzb3VyY2VfcmVwbxgFIAEoCRIaChJzZXJ2ZXJfaW5zdGFsbGFibGUYBiABKAkSEwoLc291cmNlX3BhdGgYByABKAkSEwoLc2VydmVyX3BhdGgYCCABKAkSCwoDcGlkGAkgASgNEg0KBXN0YXRlGAogASgJEhIKCnN0YXJ0ZWRfYXQYCyABKAkSGQoRbGFzdF9oYW5kc2hha2VfYXQYDCABKAkSIAoYcnVudGltZV9wcm90b2NvbF92ZXJzaW9uGA0gASgJEiEKGWFkdmVydGlzZWRfZnVuY3Rpb25fY291bnQYDiABKA0y4AQKE09yY2hlc3RyYXRvclJ1bnRpbWUSWQoOSW52b2tlRnVuY3Rpb24SIi5xdWl4b3Mub3JjaC5JbnZva2VGdW5jdGlvblJlcXVlc3QaIy5xdWl4b3Mub3JjaC5JbnZva2VGdW5jdGlvblJlc3BvbnNlElUKDVdhdGNoRnVuY3Rpb24SIS5xdWl4b3Mub3JjaC5XYXRjaEZ1bmN0aW9uUmVxdWVzdBofLnF1aXhvcy5vcmNoLldhdGNoRnVuY3Rpb25FdmVudDABEnEKFkxpc3RQYWNrYWdlRGVzY3JpcHRvcnMSKi5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZURlc2NyaXB0b3JzUmVxdWVzdBorLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXNwb25zZRJoChNMaXN0UGFja2FnZVJ1bnRpbWVzEicucXVpeG9zLm9yY2guTGlzdFBhY2thZ2VSdW50aW1lc1JlcXVlc3QaKC5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZVJ1bnRpbWVzUmVzcG9uc2USXAoPTGlzdEFjdGl2YXRpb25zEiMucXVpeG9zLm9yY2guTGlzdEFjdGl2YXRpb25zUmVxdWVzdBokLnF1aXhvcy5vcmNoLkxpc3RBY3RpdmF0aW9uc1Jlc3BvbnNlElwKD0Nsb3NlQWN0aXZhdGlvbhIjLnF1aXhvcy5vcmNoLkNsb3NlQWN0aXZhdGlvblJlcXVlc3QaJC5xdWl4b3Mub3JjaC5DbG9zZUFjdGl2YXRpb25SZXNwb25zZWIGcHJvdG8z", [file_camino_api, file_quixos_package, file_quixos_refs, file_quixos_runtime]);
fileDesc("ChFxdWl4b3Mvb3JjaC5wcm90bxILcXVpeG9zLm9yY2gipQEKFkNvbnN0cnVjdE9iamVjdFJlcXVlc3QSDwoHYXRvbV9pZBgBIAEoCRI9CgVpbnB1dBgCIAMoCzIuLnF1aXhvcy5vcmNoLkNvbnN0cnVjdE9iamVjdFJlcXVlc3QuSW5wdXRFbnRyeRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEiPwoXQ29uc3RydWN0T2JqZWN0UmVzcG9uc2USJAoGb2JqZWN0GAEgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdCLUAQoXSW52b2tlQ2FwYWJpbGl0eVJlcXVlc3QSKQoKY2FwYWJpbGl0eRgBIAEoCzIVLnF1aXhvcy5DYXBhYmlsaXR5UmVmEhEKCW9iamVjdF9pZBgCIAEoCRI+CgVpbnB1dBgDIAMoCzIvLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXF1ZXN0LklucHV0RW50cnkaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIpgBChhJbnZva2VDYXBhYmlsaXR5UmVzcG9uc2USFQoNaW52b2NhdGlvbl9pZBgBIAEoCRIrCgphY3RpdmF0aW9uGAIgASgLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbhIKCgJvaxgDIAEoCBIdCgZyZXN1bHQYBCABKAsyDS5jYW1pbm8uVmFsdWUSDQoFZXJyb3IYBSABKAki0gEKFldhdGNoQ2FwYWJpbGl0eVJlcXVlc3QSKQoKY2FwYWJpbGl0eRgBIAEoCzIVLnF1aXhvcy5DYXBhYmlsaXR5UmVmEhEKCW9iamVjdF9pZBgCIAEoCRI9CgVpbnB1dBgDIAMoCzIuLnF1aXhvcy5vcmNoLldhdGNoQ2FwYWJpbGl0eVJlcXVlc3QuSW5wdXRFbnRyeRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEi4wEKFFdhdGNoQ2FwYWJpbGl0eUV2ZW50EhUKDWludm9jYXRpb25faWQYASABKAkSKwoKYWN0aXZhdGlvbhgCIAEoCzIXLnF1aXhvcy5vcmNoLkFjdGl2YXRpb24SEAoId2F0Y2hfaWQYAyABKAkSHAoFdmFsdWUYBCABKAsyDS5jYW1pbm8uVmFsdWUSNwoMZGVwZW5kZW5jaWVzGAUgAygLMiEucXVpeG9zLnJ1bnRpbWUuRGVyaXZlZERlcGVuZGVuY3kSDQoFZXJyb3IYBiABKAkSDwoHaW5pdGlhbBgHIAEoCCIVChNHZXRXb3Jrc3BhY2VSZXF1ZXN0ImcKFEdldFdvcmtzcGFjZVJlc3BvbnNlEhQKDHdvcmtzcGFjZV9pZBgBIAEoCRIdChV3b3Jrc3BhY2VfcmV2aXNpb25faWQYAiABKAkSGgoSc291cmNlX3Jvb3RfY29tbWl0GAMgASgJIhgKFkxpc3RBY3RpdmF0aW9uc1JlcXVlc3QiHwodTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1JlcXVlc3QiUAoeTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1Jlc3BvbnNlEi4KC2Rlc2NyaXB0b3JzGAEgAygLMhkucXVpeG9zLlBhY2thZ2VEZXNjcmlwdG9yIhwKGkxpc3RQYWNrYWdlUnVudGltZXNSZXF1ZXN0IlIKG0xpc3RQYWNrYWdlUnVudGltZXNSZXNwb25zZRIzCghydW50aW1lcxgBIAMoCzIhLnF1aXhvcy5vcmNoLlBhY2thZ2VSdW50aW1lU3RhdHVzIkcKF0xpc3RBY3RpdmF0aW9uc1Jlc3BvbnNlEiwKC2FjdGl2YXRpb25zGAEgAygLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbiI/ChZDbG9zZUFjdGl2YXRpb25SZXF1ZXN0EhUKDWFjdGl2YXRpb25faWQYASABKAkSDgoGcmVhc29uGAIgASgJIkYKF0Nsb3NlQWN0aXZhdGlvblJlc3BvbnNlEisKCmFjdGl2YXRpb24YASABKAsyFy5xdWl4b3Mub3JjaC5BY3RpdmF0aW9uIusBCgpBY3RpdmF0aW9uEhUKDWFjdGl2YXRpb25faWQYASABKAkSKAoGZXhwb3J0GAIgASgLMhgucXVpeG9zLlBhY2thZ2VFeHBvcnRSZWYSEQoJb2JqZWN0X2lkGAMgASgJEg0KBXN0YXRlGAQgASgJEg4KBmRlbWFuZBgFIAEoDRIRCglvcGVuZWRfYXQYBiABKAkSFAoMbGFzdF91c2VkX2F0GAcgASgJEhgKEGlkbGVfZGVhZGxpbmVfYXQYCCABKAkSEQoJY2xvc2VkX2F0GAkgASgJEhQKDGNsb3NlX3JlYXNvbhgKIAEoCSKzAgoUUGFja2FnZVJ1bnRpbWVTdGF0dXMSEwoLcnVudGltZV9rZXkYASABKAkSGwoTcGFja2FnZV9yZXZpc2lvbl9pZBgCIAEoCRIZChFzb3VyY2VfcmVwb3NpdG9yeRgDIAEoCRIVCg1zb3VyY2VfY29tbWl0GAQgASgJEhQKDGJ1aWxkX3RhcmdldBgFIAEoCRITCgtzZXJ2ZXJfcGF0aBgGIAEoCRILCgNwaWQYByABKA0SDQoFc3RhdGUYCCABKAkSEgoKc3RhcnRlZF9hdBgJIAEoCRIZChFsYXN0X2hhbmRzaGFrZV9hdBgKIAEoCRIgChhydW50aW1lX3Byb3RvY29sX3ZlcnNpb24YCyABKAkSHwoXYWR2ZXJ0aXNlZF9leHBvcnRfY291bnQYDCABKA0ynwYKE09yY2hlc3RyYXRvclJ1bnRpbWUSXwoQSW52b2tlQ2FwYWJpbGl0eRIkLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXF1ZXN0GiUucXVpeG9zLm9yY2guSW52b2tlQ2FwYWJpbGl0eVJlc3BvbnNlElsKD1dhdGNoQ2FwYWJpbGl0eRIjLnF1aXhvcy5vcmNoLldhdGNoQ2FwYWJpbGl0eVJlcXVlc3QaIS5xdWl4b3Mub3JjaC5XYXRjaENhcGFiaWxpdHlFdmVudDABElwKD0NvbnN0cnVjdE9iamVjdBIjLnF1aXhvcy5vcmNoLkNvbnN0cnVjdE9iamVjdFJlcXVlc3QaJC5xdWl4b3Mub3JjaC5Db25zdHJ1Y3RPYmplY3RSZXNwb25zZRJTCgxHZXRXb3Jrc3BhY2USIC5xdWl4b3Mub3JjaC5HZXRXb3Jrc3BhY2VSZXF1ZXN0GiEucXVpeG9zLm9yY2guR2V0V29ya3NwYWNlUmVzcG9uc2UScQoWTGlzdFBhY2thZ2VEZXNjcmlwdG9ycxIqLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXF1ZXN0GisucXVpeG9zLm9yY2guTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1Jlc3BvbnNlEmgKE0xpc3RQYWNrYWdlUnVudGltZXMSJy5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZVJ1bnRpbWVzUmVxdWVzdBooLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlUnVudGltZXNSZXNwb25zZRJcCg9MaXN0QWN0aXZhdGlvbnMSIy5xdWl4b3Mub3JjaC5MaXN0QWN0aXZhdGlvbnNSZXF1ZXN0GiQucXVpeG9zLm9yY2guTGlzdEFjdGl2YXRpb25zUmVzcG9uc2USXAoPQ2xvc2VBY3RpdmF0aW9uEiMucXVpeG9zLm9yY2guQ2xvc2VBY3RpdmF0aW9uUmVxdWVzdBokLnF1aXhvcy5vcmNoLkNsb3NlQWN0aXZhdGlvblJlc3BvbnNlYgZwcm90bzM", [file_camino_api, file_quixos_package, file_quixos_refs, file_quixos_runtime]);
/**
* @generated from message quixos.orch.InvokeFunctionRequest
* @generated from message quixos.orch.ConstructObjectRequest
*/
export type InvokeFunctionRequest = Message<"quixos.orch.InvokeFunctionRequest"> & {
export type ConstructObjectRequest = Message<"quixos.orch.ConstructObjectRequest"> & {
/**
* @generated from field: quixos.FunctionRef function = 1;
* @generated from field: string atom_id = 1;
*/
function?: FunctionRef | undefined;
atomId: string;
/**
* @generated from field: map<string, camino.Value> input = 2;
*/
input: { [key: string]: Value };
};
/**
* Describes the message quixos.orch.ConstructObjectRequest.
* Use `create(ConstructObjectRequestSchema)` to create a new message.
*/
export const ConstructObjectRequestSchema: GenMessage<ConstructObjectRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 0);
/**
* @generated from message quixos.orch.ConstructObjectResponse
*/
export type ConstructObjectResponse = Message<"quixos.orch.ConstructObjectResponse"> & {
/**
* @generated from field: camino.CaminoObject object = 1;
*/
object?: CaminoObject | undefined;
};
/**
* Describes the message quixos.orch.ConstructObjectResponse.
* Use `create(ConstructObjectResponseSchema)` to create a new message.
*/
export const ConstructObjectResponseSchema: GenMessage<ConstructObjectResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 1);
/**
* @generated from message quixos.orch.InvokeCapabilityRequest
*/
export type InvokeCapabilityRequest = Message<"quixos.orch.InvokeCapabilityRequest"> & {
/**
* @generated from field: quixos.CapabilityRef capability = 1;
*/
capability?: CapabilityRef | undefined;
/**
* @generated from field: string object_id = 2;
@@ -41,16 +80,16 @@ export type InvokeFunctionRequest = Message<"quixos.orch.InvokeFunctionRequest">
};
/**
* Describes the message quixos.orch.InvokeFunctionRequest.
* Use `create(InvokeFunctionRequestSchema)` to create a new message.
* Describes the message quixos.orch.InvokeCapabilityRequest.
* Use `create(InvokeCapabilityRequestSchema)` to create a new message.
*/
export const InvokeFunctionRequestSchema: GenMessage<InvokeFunctionRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 0);
export const InvokeCapabilityRequestSchema: GenMessage<InvokeCapabilityRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 2);
/**
* @generated from message quixos.orch.InvokeFunctionResponse
* @generated from message quixos.orch.InvokeCapabilityResponse
*/
export type InvokeFunctionResponse = Message<"quixos.orch.InvokeFunctionResponse"> & {
export type InvokeCapabilityResponse = Message<"quixos.orch.InvokeCapabilityResponse"> & {
/**
* @generated from field: string invocation_id = 1;
*/
@@ -78,20 +117,20 @@ export type InvokeFunctionResponse = Message<"quixos.orch.InvokeFunctionResponse
};
/**
* Describes the message quixos.orch.InvokeFunctionResponse.
* Use `create(InvokeFunctionResponseSchema)` to create a new message.
* Describes the message quixos.orch.InvokeCapabilityResponse.
* Use `create(InvokeCapabilityResponseSchema)` to create a new message.
*/
export const InvokeFunctionResponseSchema: GenMessage<InvokeFunctionResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 1);
export const InvokeCapabilityResponseSchema: GenMessage<InvokeCapabilityResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 3);
/**
* @generated from message quixos.orch.WatchFunctionRequest
* @generated from message quixos.orch.WatchCapabilityRequest
*/
export type WatchFunctionRequest = Message<"quixos.orch.WatchFunctionRequest"> & {
export type WatchCapabilityRequest = Message<"quixos.orch.WatchCapabilityRequest"> & {
/**
* @generated from field: quixos.FunctionRef function = 1;
* @generated from field: quixos.CapabilityRef capability = 1;
*/
function?: FunctionRef | undefined;
capability?: CapabilityRef | undefined;
/**
* @generated from field: string object_id = 2;
@@ -105,16 +144,16 @@ export type WatchFunctionRequest = Message<"quixos.orch.WatchFunctionRequest"> &
};
/**
* Describes the message quixos.orch.WatchFunctionRequest.
* Use `create(WatchFunctionRequestSchema)` to create a new message.
* Describes the message quixos.orch.WatchCapabilityRequest.
* Use `create(WatchCapabilityRequestSchema)` to create a new message.
*/
export const WatchFunctionRequestSchema: GenMessage<WatchFunctionRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 2);
export const WatchCapabilityRequestSchema: GenMessage<WatchCapabilityRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 4);
/**
* @generated from message quixos.orch.WatchFunctionEvent
* @generated from message quixos.orch.WatchCapabilityEvent
*/
export type WatchFunctionEvent = Message<"quixos.orch.WatchFunctionEvent"> & {
export type WatchCapabilityEvent = Message<"quixos.orch.WatchCapabilityEvent"> & {
/**
* @generated from field: string invocation_id = 1;
*/
@@ -152,11 +191,51 @@ export type WatchFunctionEvent = Message<"quixos.orch.WatchFunctionEvent"> & {
};
/**
* Describes the message quixos.orch.WatchFunctionEvent.
* Use `create(WatchFunctionEventSchema)` to create a new message.
* Describes the message quixos.orch.WatchCapabilityEvent.
* Use `create(WatchCapabilityEventSchema)` to create a new message.
*/
export const WatchFunctionEventSchema: GenMessage<WatchFunctionEvent> = /*@__PURE__*/
messageDesc(file_quixos_orch, 3);
export const WatchCapabilityEventSchema: GenMessage<WatchCapabilityEvent> = /*@__PURE__*/
messageDesc(file_quixos_orch, 5);
/**
* @generated from message quixos.orch.GetWorkspaceRequest
*/
export type GetWorkspaceRequest = Message<"quixos.orch.GetWorkspaceRequest"> & {
};
/**
* Describes the message quixos.orch.GetWorkspaceRequest.
* Use `create(GetWorkspaceRequestSchema)` to create a new message.
*/
export const GetWorkspaceRequestSchema: GenMessage<GetWorkspaceRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 6);
/**
* @generated from message quixos.orch.GetWorkspaceResponse
*/
export type GetWorkspaceResponse = Message<"quixos.orch.GetWorkspaceResponse"> & {
/**
* @generated from field: string workspace_id = 1;
*/
workspaceId: string;
/**
* @generated from field: string workspace_revision_id = 2;
*/
workspaceRevisionId: string;
/**
* @generated from field: string source_root_commit = 3;
*/
sourceRootCommit: string;
};
/**
* Describes the message quixos.orch.GetWorkspaceResponse.
* Use `create(GetWorkspaceResponseSchema)` to create a new message.
*/
export const GetWorkspaceResponseSchema: GenMessage<GetWorkspaceResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 7);
/**
* @generated from message quixos.orch.ListActivationsRequest
@@ -169,7 +248,7 @@ export type ListActivationsRequest = Message<"quixos.orch.ListActivationsRequest
* Use `create(ListActivationsRequestSchema)` to create a new message.
*/
export const ListActivationsRequestSchema: GenMessage<ListActivationsRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 4);
messageDesc(file_quixos_orch, 8);
/**
* @generated from message quixos.orch.ListPackageDescriptorsRequest
@@ -182,7 +261,7 @@ export type ListPackageDescriptorsRequest = Message<"quixos.orch.ListPackageDesc
* Use `create(ListPackageDescriptorsRequestSchema)` to create a new message.
*/
export const ListPackageDescriptorsRequestSchema: GenMessage<ListPackageDescriptorsRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 5);
messageDesc(file_quixos_orch, 9);
/**
* @generated from message quixos.orch.ListPackageDescriptorsResponse
@@ -199,7 +278,7 @@ export type ListPackageDescriptorsResponse = Message<"quixos.orch.ListPackageDes
* Use `create(ListPackageDescriptorsResponseSchema)` to create a new message.
*/
export const ListPackageDescriptorsResponseSchema: GenMessage<ListPackageDescriptorsResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 6);
messageDesc(file_quixos_orch, 10);
/**
* @generated from message quixos.orch.ListPackageRuntimesRequest
@@ -212,7 +291,7 @@ export type ListPackageRuntimesRequest = Message<"quixos.orch.ListPackageRuntime
* Use `create(ListPackageRuntimesRequestSchema)` to create a new message.
*/
export const ListPackageRuntimesRequestSchema: GenMessage<ListPackageRuntimesRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 7);
messageDesc(file_quixos_orch, 11);
/**
* @generated from message quixos.orch.ListPackageRuntimesResponse
@@ -229,7 +308,7 @@ export type ListPackageRuntimesResponse = Message<"quixos.orch.ListPackageRuntim
* Use `create(ListPackageRuntimesResponseSchema)` to create a new message.
*/
export const ListPackageRuntimesResponseSchema: GenMessage<ListPackageRuntimesResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 8);
messageDesc(file_quixos_orch, 12);
/**
* @generated from message quixos.orch.ListActivationsResponse
@@ -246,7 +325,7 @@ export type ListActivationsResponse = Message<"quixos.orch.ListActivationsRespon
* Use `create(ListActivationsResponseSchema)` to create a new message.
*/
export const ListActivationsResponseSchema: GenMessage<ListActivationsResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 9);
messageDesc(file_quixos_orch, 13);
/**
* @generated from message quixos.orch.CloseActivationRequest
@@ -268,7 +347,7 @@ export type CloseActivationRequest = Message<"quixos.orch.CloseActivationRequest
* Use `create(CloseActivationRequestSchema)` to create a new message.
*/
export const CloseActivationRequestSchema: GenMessage<CloseActivationRequest> = /*@__PURE__*/
messageDesc(file_quixos_orch, 10);
messageDesc(file_quixos_orch, 14);
/**
* @generated from message quixos.orch.CloseActivationResponse
@@ -285,7 +364,7 @@ export type CloseActivationResponse = Message<"quixos.orch.CloseActivationRespon
* Use `create(CloseActivationResponseSchema)` to create a new message.
*/
export const CloseActivationResponseSchema: GenMessage<CloseActivationResponse> = /*@__PURE__*/
messageDesc(file_quixos_orch, 11);
messageDesc(file_quixos_orch, 15);
/**
* @generated from message quixos.orch.Activation
@@ -297,9 +376,9 @@ export type Activation = Message<"quixos.orch.Activation"> & {
activationId: string;
/**
* @generated from field: quixos.FunctionRef function = 2;
* @generated from field: quixos.PackageExportRef export = 2;
*/
function?: FunctionRef | undefined;
export?: PackageExportRef | undefined;
/**
* @generated from field: string object_id = 3;
@@ -347,7 +426,7 @@ export type Activation = Message<"quixos.orch.Activation"> & {
* Use `create(ActivationSchema)` to create a new message.
*/
export const ActivationSchema: GenMessage<Activation> = /*@__PURE__*/
messageDesc(file_quixos_orch, 12);
messageDesc(file_quixos_orch, 16);
/**
* @generated from message quixos.orch.PackageRuntimeStatus
@@ -359,69 +438,59 @@ export type PackageRuntimeStatus = Message<"quixos.orch.PackageRuntimeStatus"> &
runtimeKey: string;
/**
* @generated from field: string package_namespace = 2;
* @generated from field: string package_revision_id = 2;
*/
packageNamespace: string;
packageRevisionId: string;
/**
* @generated from field: string package_name = 3;
* @generated from field: string source_repository = 3;
*/
packageName: string;
sourceRepository: string;
/**
* @generated from field: uint32 descriptor_version = 4;
* @generated from field: string source_commit = 4;
*/
descriptorVersion: number;
sourceCommit: string;
/**
* @generated from field: string source_repo = 5;
* @generated from field: string build_target = 5;
*/
sourceRepo: string;
buildTarget: string;
/**
* @generated from field: string server_installable = 6;
*/
serverInstallable: string;
/**
* @generated from field: string source_path = 7;
*/
sourcePath: string;
/**
* @generated from field: string server_path = 8;
* @generated from field: string server_path = 6;
*/
serverPath: string;
/**
* @generated from field: uint32 pid = 9;
* @generated from field: uint32 pid = 7;
*/
pid: number;
/**
* @generated from field: string state = 10;
* @generated from field: string state = 8;
*/
state: string;
/**
* @generated from field: string started_at = 11;
* @generated from field: string started_at = 9;
*/
startedAt: string;
/**
* @generated from field: string last_handshake_at = 12;
* @generated from field: string last_handshake_at = 10;
*/
lastHandshakeAt: string;
/**
* @generated from field: string runtime_protocol_version = 13;
* @generated from field: string runtime_protocol_version = 11;
*/
runtimeProtocolVersion: string;
/**
* @generated from field: uint32 advertised_function_count = 14;
* @generated from field: uint32 advertised_export_count = 12;
*/
advertisedFunctionCount: number;
advertisedExportCount: number;
};
/**
@@ -429,27 +498,43 @@ export type PackageRuntimeStatus = Message<"quixos.orch.PackageRuntimeStatus"> &
* Use `create(PackageRuntimeStatusSchema)` to create a new message.
*/
export const PackageRuntimeStatusSchema: GenMessage<PackageRuntimeStatus> = /*@__PURE__*/
messageDesc(file_quixos_orch, 13);
messageDesc(file_quixos_orch, 17);
/**
* @generated from service quixos.orch.OrchestratorRuntime
*/
export const OrchestratorRuntime: GenService<{
/**
* @generated from rpc quixos.orch.OrchestratorRuntime.InvokeFunction
* @generated from rpc quixos.orch.OrchestratorRuntime.InvokeCapability
*/
invokeFunction: {
invokeCapability: {
methodKind: "unary";
input: typeof InvokeFunctionRequestSchema;
output: typeof InvokeFunctionResponseSchema;
input: typeof InvokeCapabilityRequestSchema;
output: typeof InvokeCapabilityResponseSchema;
},
/**
* @generated from rpc quixos.orch.OrchestratorRuntime.WatchFunction
* @generated from rpc quixos.orch.OrchestratorRuntime.WatchCapability
*/
watchFunction: {
watchCapability: {
methodKind: "server_streaming";
input: typeof WatchFunctionRequestSchema;
output: typeof WatchFunctionEventSchema;
input: typeof WatchCapabilityRequestSchema;
output: typeof WatchCapabilityEventSchema;
},
/**
* @generated from rpc quixos.orch.OrchestratorRuntime.ConstructObject
*/
constructObject: {
methodKind: "unary";
input: typeof ConstructObjectRequestSchema;
output: typeof ConstructObjectResponseSchema;
},
/**
* @generated from rpc quixos.orch.OrchestratorRuntime.GetWorkspace
*/
getWorkspace: {
methodKind: "unary";
input: typeof GetWorkspaceRequestSchema;
output: typeof GetWorkspaceResponseSchema;
},
/**
* @generated from rpc quixos.orch.OrchestratorRuntime.ListPackageDescriptors
+33 -283
View File
@@ -1,131 +1,40 @@
// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js"
// @generated by protoc-gen-es v2.14.1 with parameter "target=ts,import_extension=js"
// @generated from file quixos/package.proto (package quixos, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { SymbolRef } from "../camino/schema_pb.js";
import { file_camino_schema } from "../camino/schema_pb.js";
import type { FunctionRef } from "./refs_pb.js";
import { file_quixos_refs } from "./refs_pb.js";
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file quixos/package.proto.
*/
export const file_quixos_package: GenFile = /*@__PURE__*/
fileDesc("ChRxdWl4b3MvcGFja2FnZS5wcm90bxIGcXVpeG9zIm4KClBhY2thZ2VSZWYSGQoRcGFja2FnZV9uYW1lc3BhY2UYASABKAkSFAoMcGFja2FnZV9uYW1lGAIgASgJEhoKEmRlc2NyaXB0b3JfdmVyc2lvbhgDIAEoDRITCgt2ZXJzaW9uX3JlZhgEIAEoCSKgBAoRUGFja2FnZURlc2NyaXB0b3ISGQoRcGFja2FnZV9uYW1lc3BhY2UYASABKAkSFAoMcGFja2FnZV9uYW1lGAIgASgJEhoKEmRlc2NyaXB0b3JfdmVyc2lvbhgDIAEoDRIkChxpbnRlcmZhY2VfY29tcGF0aWJsZV9iYWNrX3RvGAQgASgNEiEKGXJ1bm5lcl9jb21wYXRpYmxlX2JhY2tfdG8YBSABKA0SEwoLc291cmNlX3JlcG8YBiABKAkSEgoKc291cmNlX3JlZhgHIAEoCRIbChNyZXNvbHZlZF9zb3VyY2VfcmVmGAggASgJEhoKEnNlcnZlcl9pbnN0YWxsYWJsZRgJIAEoCRIgChhydW50aW1lX3Byb3RvY29sX3ZlcnNpb24YCiABKAkSKgoNY2xhc3NfZXhwb3J0cxgLIAMoCzITLnF1aXhvcy5DbGFzc0V4cG9ydBIwChBmdW5jdGlvbl9leHBvcnRzGAwgAygLMhYucXVpeG9zLkZ1bmN0aW9uRXhwb3J0EjIKEWNvbXBvbmVudF9leHBvcnRzGA0gAygLMhcucXVpeG9zLkNvbXBvbmVudEV4cG9ydBIuCg9zaWRlY2FyX2V4cG9ydHMYDiADKAsyFS5xdWl4b3MuU2lkZWNhckV4cG9ydBIvCgxkZXBlbmRlbmNpZXMYDyADKAsyGS5xdWl4b3MuUGFja2FnZURlcGVuZGVuY3kiRwoLQ2xhc3NFeHBvcnQSIwoIY2xhc3NfaWQYASABKAsyES5jYW1pbm8uU3ltYm9sUmVmEhMKC3NvdXJjZV9maWxlGAIgASgJItoBCg5GdW5jdGlvbkV4cG9ydBIlCghmdW5jdGlvbhgBIAEoCzITLnF1aXhvcy5GdW5jdGlvblJlZhISCgppbnB1dF90eXBlGAIgASgJEhMKC291dHB1dF90eXBlGAMgASgJEhkKEWludGVyZmFjZV92ZXJzaW9uGAQgASgNEiQKHGludGVyZmFjZV9jb21wYXRpYmxlX2JhY2tfdG8YBSABKA0SNwoPY2FwYWJpbGl0eV9raW5kGAYgASgOMh4ucXVpeG9zLkZ1bmN0aW9uQ2FwYWJpbGl0eUtpbmQiYwoPQ29tcG9uZW50RXhwb3J0Eg4KBnN5bWJvbBgBIAEoCRISCgpwcm9wc190eXBlGAIgASgJEiwKEXN1cHBvcnRlZF9jbGFzc2VzGAMgAygLMhEuY2FtaW5vLlN5bWJvbFJlZiI5Cg1TaWRlY2FyRXhwb3J0Eg4KBnN5bWJvbBgBIAEoCRIYChBzaWRlX2VmZmVjdF9tb2RlGAIgASgJIpUBChFQYWNrYWdlRGVwZW5kZW5jeRIjCgdwYWNrYWdlGAEgASgLMhIucXVpeG9zLlBhY2thZ2VSZWYSJAocaW50ZXJmYWNlX2NvbXBhdGlibGVfYmFja190bxgCIAEoDRIZChFyZWZhY3Rvcl9yZXF1aXJlZBgDIAEoCBIaChJjb21wYXRpYmlsaXR5X25vdGUYBCABKAkqggEKFkZ1bmN0aW9uQ2FwYWJpbGl0eUtpbmQSKAokRlVOQ1RJT05fQ0FQQUJJTElUWV9LSU5EX1VOU1BFQ0lGSUVEEAASCgoGTUVUSE9EEAESEgoORklFTERfUkVTT0xWRVIQAhINCglNSUdSQVRJT04QAxIPCgtDT05TVFJVQ1RPUhAEYgZwcm90bzM", [file_camino_schema, file_quixos_refs]);
/**
* @generated from message quixos.PackageRef
*/
export type PackageRef = Message<"quixos.PackageRef"> & {
/**
* @generated from field: string package_namespace = 1;
*/
packageNamespace: string;
/**
* @generated from field: string package_name = 2;
*/
packageName: string;
/**
* @generated from field: uint32 descriptor_version = 3;
*/
descriptorVersion: number;
/**
* @generated from field: string version_ref = 4;
*/
versionRef: string;
};
/**
* Describes the message quixos.PackageRef.
* Use `create(PackageRefSchema)` to create a new message.
*/
export const PackageRefSchema: GenMessage<PackageRef> = /*@__PURE__*/
messageDesc(file_quixos_package, 0);
fileDesc("ChRxdWl4b3MvcGFja2FnZS5wcm90bxIGcXVpeG9zIo4BChFQYWNrYWdlRGVzY3JpcHRvchISCgpwYWNrYWdlX2lkGAEgASgJEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYAiABKAkSIAoYcnVudGltZV9wcm90b2NvbF92ZXJzaW9uGAMgASgJEiYKB2V4cG9ydHMYBCADKAsyFS5xdWl4b3MuUnVudGltZUV4cG9ydCI6Cg1SdW50aW1lRXhwb3J0EhEKCWV4cG9ydF9pZBgBIAEoCRIWCg5ydW50aW1lX3N5bWJvbBgCIAEoCWIGcHJvdG8z");
/**
* @generated from message quixos.PackageDescriptor
*/
export type PackageDescriptor = Message<"quixos.PackageDescriptor"> & {
/**
* @generated from field: string package_namespace = 1;
* @generated from field: string package_id = 1;
*/
packageNamespace: string;
packageId: string;
/**
* @generated from field: string package_name = 2;
* @generated from field: string package_revision_id = 2;
*/
packageName: string;
packageRevisionId: string;
/**
* @generated from field: uint32 descriptor_version = 3;
*/
descriptorVersion: number;
/**
* @generated from field: uint32 interface_compatible_back_to = 4;
*/
interfaceCompatibleBackTo: number;
/**
* @generated from field: uint32 runner_compatible_back_to = 5;
*/
runnerCompatibleBackTo: number;
/**
* @generated from field: string source_repo = 6;
*/
sourceRepo: string;
/**
* @generated from field: string source_ref = 7;
*/
sourceRef: string;
/**
* @generated from field: string resolved_source_ref = 8;
*/
resolvedSourceRef: string;
/**
* @generated from field: string server_installable = 9;
*/
serverInstallable: string;
/**
* @generated from field: string runtime_protocol_version = 10;
* @generated from field: string runtime_protocol_version = 3;
*/
runtimeProtocolVersion: string;
/**
* @generated from field: repeated quixos.ClassExport class_exports = 11;
* @generated from field: repeated quixos.RuntimeExport exports = 4;
*/
classExports: ClassExport[];
/**
* @generated from field: repeated quixos.FunctionExport function_exports = 12;
*/
functionExports: FunctionExport[];
/**
* @generated from field: repeated quixos.ComponentExport component_exports = 13;
*/
componentExports: ComponentExport[];
/**
* @generated from field: repeated quixos.SidecarExport sidecar_exports = 14;
*/
sidecarExports: SidecarExport[];
/**
* @generated from field: repeated quixos.PackageDependency dependencies = 15;
*/
dependencies: PackageDependency[];
exports: RuntimeExport[];
};
/**
@@ -133,186 +42,27 @@ export type PackageDescriptor = Message<"quixos.PackageDescriptor"> & {
* Use `create(PackageDescriptorSchema)` to create a new message.
*/
export const PackageDescriptorSchema: GenMessage<PackageDescriptor> = /*@__PURE__*/
messageDesc(file_quixos_package, 0);
/**
* @generated from message quixos.RuntimeExport
*/
export type RuntimeExport = Message<"quixos.RuntimeExport"> & {
/**
* @generated from field: string export_id = 1;
*/
exportId: string;
/**
* @generated from field: string runtime_symbol = 2;
*/
runtimeSymbol: string;
};
/**
* Describes the message quixos.RuntimeExport.
* Use `create(RuntimeExportSchema)` to create a new message.
*/
export const RuntimeExportSchema: GenMessage<RuntimeExport> = /*@__PURE__*/
messageDesc(file_quixos_package, 1);
/**
* @generated from message quixos.ClassExport
*/
export type ClassExport = Message<"quixos.ClassExport"> & {
/**
* @generated from field: camino.SymbolRef class_id = 1;
*/
classId?: SymbolRef | undefined;
/**
* @generated from field: string source_file = 2;
*/
sourceFile: string;
};
/**
* Describes the message quixos.ClassExport.
* Use `create(ClassExportSchema)` to create a new message.
*/
export const ClassExportSchema: GenMessage<ClassExport> = /*@__PURE__*/
messageDesc(file_quixos_package, 2);
/**
* @generated from message quixos.FunctionExport
*/
export type FunctionExport = Message<"quixos.FunctionExport"> & {
/**
* @generated from field: quixos.FunctionRef function = 1;
*/
function?: FunctionRef | undefined;
/**
* @generated from field: string input_type = 2;
*/
inputType: string;
/**
* @generated from field: string output_type = 3;
*/
outputType: string;
/**
* @generated from field: uint32 interface_version = 4;
*/
interfaceVersion: number;
/**
* @generated from field: uint32 interface_compatible_back_to = 5;
*/
interfaceCompatibleBackTo: number;
/**
* @generated from field: quixos.FunctionCapabilityKind capability_kind = 6;
*/
capabilityKind: FunctionCapabilityKind;
};
/**
* Describes the message quixos.FunctionExport.
* Use `create(FunctionExportSchema)` to create a new message.
*/
export const FunctionExportSchema: GenMessage<FunctionExport> = /*@__PURE__*/
messageDesc(file_quixos_package, 3);
/**
* @generated from message quixos.ComponentExport
*/
export type ComponentExport = Message<"quixos.ComponentExport"> & {
/**
* @generated from field: string symbol = 1;
*/
symbol: string;
/**
* @generated from field: string props_type = 2;
*/
propsType: string;
/**
* @generated from field: repeated camino.SymbolRef supported_classes = 3;
*/
supportedClasses: SymbolRef[];
};
/**
* Describes the message quixos.ComponentExport.
* Use `create(ComponentExportSchema)` to create a new message.
*/
export const ComponentExportSchema: GenMessage<ComponentExport> = /*@__PURE__*/
messageDesc(file_quixos_package, 4);
/**
* @generated from message quixos.SidecarExport
*/
export type SidecarExport = Message<"quixos.SidecarExport"> & {
/**
* @generated from field: string symbol = 1;
*/
symbol: string;
/**
* @generated from field: string side_effect_mode = 2;
*/
sideEffectMode: string;
};
/**
* Describes the message quixos.SidecarExport.
* Use `create(SidecarExportSchema)` to create a new message.
*/
export const SidecarExportSchema: GenMessage<SidecarExport> = /*@__PURE__*/
messageDesc(file_quixos_package, 5);
/**
* @generated from message quixos.PackageDependency
*/
export type PackageDependency = Message<"quixos.PackageDependency"> & {
/**
* @generated from field: quixos.PackageRef package = 1;
*/
package?: PackageRef | undefined;
/**
* @generated from field: uint32 interface_compatible_back_to = 2;
*/
interfaceCompatibleBackTo: number;
/**
* @generated from field: bool refactor_required = 3;
*/
refactorRequired: boolean;
/**
* @generated from field: string compatibility_note = 4;
*/
compatibilityNote: string;
};
/**
* Describes the message quixos.PackageDependency.
* Use `create(PackageDependencySchema)` to create a new message.
*/
export const PackageDependencySchema: GenMessage<PackageDependency> = /*@__PURE__*/
messageDesc(file_quixos_package, 6);
/**
* @generated from enum quixos.FunctionCapabilityKind
*/
export enum FunctionCapabilityKind {
/**
* @generated from enum value: FUNCTION_CAPABILITY_KIND_UNSPECIFIED = 0;
*/
FUNCTION_CAPABILITY_KIND_UNSPECIFIED = 0,
/**
* @generated from enum value: METHOD = 1;
*/
METHOD = 1,
/**
* @generated from enum value: FIELD_RESOLVER = 2;
*/
FIELD_RESOLVER = 2,
/**
* @generated from enum value: MIGRATION = 3;
*/
MIGRATION = 3,
/**
* @generated from enum value: CONSTRUCTOR = 4;
*/
CONSTRUCTOR = 4,
}
/**
* Describes the enum quixos.FunctionCapabilityKind.
*/
export const FunctionCapabilityKindSchema: GenEnum<FunctionCapabilityKind> = /*@__PURE__*/
enumDesc(file_quixos_package, 0);
+101 -26
View File
@@ -1,4 +1,4 @@
// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js"
// @generated by protoc-gen-es v2.14.1 with parameter "target=ts,import_extension=js"
// @generated from file quixos/refs.proto (package quixos, syntax proto3)
/* eslint-disable */
@@ -10,42 +10,117 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file quixos/refs.proto.
*/
export const file_quixos_refs: GenFile = /*@__PURE__*/
fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInYKC0Z1bmN0aW9uUmVmEhkKEXBhY2thZ2VfbmFtZXNwYWNlGAEgASgJEhQKDHBhY2thZ2VfbmFtZRgCIAEoCRIOCgZzeW1ib2wYAyABKAkSEwoLdmVyc2lvbl9yZWYYBCABKAkSEQoJb3BlcmF0aW9uGAUgASgJYgZwcm90bzM");
fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zIkQKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIroBChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEigKHnJlY2VpdmVyX2ludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIAEIJCgdiaW5kaW5nIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM");
/**
* @generated from message quixos.FunctionRef
* @generated from message quixos.CapabilityRef
*/
export type FunctionRef = Message<"quixos.FunctionRef"> & {
export type CapabilityRef = Message<"quixos.CapabilityRef"> & {
/**
* @generated from field: string package_namespace = 1;
* @generated from field: string interface_revision_id = 1;
*/
packageNamespace: string;
interfaceRevisionId: string;
/**
* @generated from field: string package_name = 2;
* @generated from field: string operation_id = 2;
*/
packageName: string;
/**
* @generated from field: string symbol = 3;
*/
symbol: string;
/**
* @generated from field: string version_ref = 4;
*/
versionRef: string;
/**
* @generated from field: string operation = 5;
*/
operation: string;
operationId: string;
};
/**
* Describes the message quixos.FunctionRef.
* Use `create(FunctionRefSchema)` to create a new message.
* Describes the message quixos.CapabilityRef.
* Use `create(CapabilityRefSchema)` to create a new message.
*/
export const FunctionRefSchema: GenMessage<FunctionRef> = /*@__PURE__*/
export const CapabilityRefSchema: GenMessage<CapabilityRef> = /*@__PURE__*/
messageDesc(file_quixos_refs, 0);
/**
* @generated from message quixos.PackageExportRef
*/
export type PackageExportRef = Message<"quixos.PackageExportRef"> & {
/**
* @generated from field: string package_revision_id = 1;
*/
packageRevisionId: string;
/**
* @generated from field: string export_id = 2;
*/
exportId: string;
};
/**
* Describes the message quixos.PackageExportRef.
* Use `create(PackageExportRefSchema)` to create a new message.
*/
export const PackageExportRefSchema: GenMessage<PackageExportRef> = /*@__PURE__*/
messageDesc(file_quixos_refs, 1);
/**
* @generated from message quixos.InjectedDependency
*/
export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
/**
* @generated from field: string port_id = 1;
*/
portId: string;
/**
* @generated from oneof quixos.InjectedDependency.binding
*/
binding: {
/**
* @generated from field: string state_slot_id = 2;
*/
value: string;
case: "stateSlotId";
} | {
/**
* @generated from field: quixos.EdgeDependency edge = 3;
*/
value: EdgeDependency;
case: "edge";
} | {
/**
* @generated from field: string receiver_interface_revision_id = 4;
*/
value: string;
case: "receiverInterfaceRevisionId";
} | {
/**
* @generated from field: string constructor_atom_id = 5;
*/
value: string;
case: "constructorAtomId";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message quixos.InjectedDependency.
* Use `create(InjectedDependencySchema)` to create a new message.
*/
export const InjectedDependencySchema: GenMessage<InjectedDependency> = /*@__PURE__*/
messageDesc(file_quixos_refs, 2);
/**
* @generated from message quixos.EdgeDependency
*/
export type EdgeDependency = Message<"quixos.EdgeDependency"> & {
/**
* @generated from field: string edge_type_id = 1;
*/
edgeTypeId: string;
/**
* @generated from field: string projection_id = 2;
*/
projectionId: string;
};
/**
* Describes the message quixos.EdgeDependency.
* Use `create(EdgeDependencySchema)` to create a new message.
*/
export const EdgeDependencySchema: GenMessage<EdgeDependency> = /*@__PURE__*/
messageDesc(file_quixos_refs, 3);
+26 -21
View File
@@ -1,4 +1,4 @@
// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js"
// @generated by protoc-gen-es v2.14.1 with parameter "target=ts,import_extension=js"
// @generated from file quixos/runtime.proto (package quixos.runtime, syntax proto3)
/* eslint-disable */
@@ -6,7 +6,7 @@ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegen
import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
import type { Value } from "../camino/api_pb.js";
import { file_camino_api } from "../camino/api_pb.js";
import type { FunctionRef } from "./refs_pb.js";
import type { InjectedDependency, PackageExportRef } from "./refs_pb.js";
import { file_quixos_refs } from "./refs_pb.js";
import type { Message } from "@bufbuild/protobuf";
@@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file quixos/runtime.proto.
*/
export const file_quixos_runtime: GenFile = /*@__PURE__*/
fileDesc("ChRxdWl4b3MvcnVudGltZS5wcm90bxIOcXVpeG9zLnJ1bnRpbWUiMQoQSGFuZHNoYWtlUmVxdWVzdBIdChVvcmNoX3Byb3RvY29sX3ZlcnNpb24YASABKAkijgEKEUhhbmRzaGFrZVJlc3BvbnNlEhkKEXBhY2thZ2VfbmFtZXNwYWNlGAEgASgJEhQKDHBhY2thZ2VfbmFtZRgCIAEoCRIgChhydW50aW1lX3Byb3RvY29sX3ZlcnNpb24YAyABKAkSJgoJZnVuY3Rpb25zGAQgAygLMhMucXVpeG9zLkZ1bmN0aW9uUmVmItYBCg1JbnZva2VSZXF1ZXN0EhUKDWludm9jYXRpb25faWQYASABKAkSJQoIZnVuY3Rpb24YAiABKAsyEy5xdWl4b3MuRnVuY3Rpb25SZWYSEQoJb2JqZWN0X2lkGAMgASgJEjcKBWlucHV0GAQgAygLMigucXVpeG9zLnJ1bnRpbWUuSW52b2tlUmVxdWVzdC5JbnB1dEVudHJ5GjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASJKCg5JbnZva2VSZXNwb25zZRIKCgJvaxgBIAEoCBIdCgZyZXN1bHQYAiABKAsyDS5jYW1pbm8uVmFsdWUSDQoFZXJyb3IYAyABKAki1AEKDFdhdGNoUmVxdWVzdBIVCg1pbnZvY2F0aW9uX2lkGAEgASgJEiUKCGZ1bmN0aW9uGAIgASgLMhMucXVpeG9zLkZ1bmN0aW9uUmVmEhEKCW9iamVjdF9pZBgDIAEoCRI2CgVpbnB1dBgEIAMoCzInLnF1aXhvcy5ydW50aW1lLldhdGNoUmVxdWVzdC5JbnB1dEVudHJ5GjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASJeChFEZXJpdmVkRGVwZW5kZW5jeRIMCgRraW5kGAEgASgJEhEKCW9iamVjdF9pZBgCIAEoCRISCgpmaWVsZF9uYW1lGAMgASgJEhQKDHNvdXJjZV9maWVsZBgEIAEoCSKVAQoKV2F0Y2hFdmVudBIQCgh3YXRjaF9pZBgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZRI3CgxkZXBlbmRlbmNpZXMYAyADKAsyIS5xdWl4b3MucnVudGltZS5EZXJpdmVkRGVwZW5kZW5jeRINCgVlcnJvchgEIAEoCRIPCgdpbml0aWFsGAUgASgIMvABCg5QYWNrYWdlUnVudGltZRJQCglIYW5kc2hha2USIC5xdWl4b3MucnVudGltZS5IYW5kc2hha2VSZXF1ZXN0GiEucXVpeG9zLnJ1bnRpbWUuSGFuZHNoYWtlUmVzcG9uc2USRwoGSW52b2tlEh0ucXVpeG9zLnJ1bnRpbWUuSW52b2tlUmVxdWVzdBoeLnF1aXhvcy5ydW50aW1lLkludm9rZVJlc3BvbnNlEkMKBVdhdGNoEhwucXVpeG9zLnJ1bnRpbWUuV2F0Y2hSZXF1ZXN0GhoucXVpeG9zLnJ1bnRpbWUuV2F0Y2hFdmVudDABYgZwcm90bzM", [file_camino_api, file_quixos_refs]);
fileDesc("ChRxdWl4b3MvcnVudGltZS5wcm90bxIOcXVpeG9zLnJ1bnRpbWUiMQoQSGFuZHNoYWtlUmVxdWVzdBIdChVvcmNoX3Byb3RvY29sX3ZlcnNpb24YASABKAkiZgoRSGFuZHNoYWtlUmVzcG9uc2USGwoTcGFja2FnZV9yZXZpc2lvbl9pZBgBIAEoCRIgChhydW50aW1lX3Byb3RvY29sX3ZlcnNpb24YAiABKAkSEgoKZXhwb3J0X2lkcxgDIAMoCSKLAgoNSW52b2tlUmVxdWVzdBIVCg1pbnZvY2F0aW9uX2lkGAEgASgJEigKBmV4cG9ydBgCIAEoCzIYLnF1aXhvcy5QYWNrYWdlRXhwb3J0UmVmEhEKCW9iamVjdF9pZBgDIAEoCRI3CgVpbnB1dBgEIAMoCzIoLnF1aXhvcy5ydW50aW1lLkludm9rZVJlcXVlc3QuSW5wdXRFbnRyeRIwCgxkZXBlbmRlbmNpZXMYBSADKAsyGi5xdWl4b3MuSW5qZWN0ZWREZXBlbmRlbmN5GjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASJKCg5JbnZva2VSZXNwb25zZRIKCgJvaxgBIAEoCBIdCgZyZXN1bHQYAiABKAsyDS5jYW1pbm8uVmFsdWUSDQoFZXJyb3IYAyABKAkiiQIKDFdhdGNoUmVxdWVzdBIVCg1pbnZvY2F0aW9uX2lkGAEgASgJEigKBmV4cG9ydBgCIAEoCzIYLnF1aXhvcy5QYWNrYWdlRXhwb3J0UmVmEhEKCW9iamVjdF9pZBgDIAEoCRI2CgVpbnB1dBgEIAMoCzInLnF1aXhvcy5ydW50aW1lLldhdGNoUmVxdWVzdC5JbnB1dEVudHJ5EjAKDGRlcGVuZGVuY2llcxgFIAMoCzIaLnF1aXhvcy5JbmplY3RlZERlcGVuZGVuY3kaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBImIKEURlcml2ZWREZXBlbmRlbmN5EgwKBGtpbmQYASABKAkSEQoJb2JqZWN0X2lkGAIgASgJEhUKDWF0dGFjaG1lbnRfaWQYAyABKAkSFQoNcHJvamVjdGlvbl9pZBgEIAEoCSKVAQoKV2F0Y2hFdmVudBIQCgh3YXRjaF9pZBgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZRI3CgxkZXBlbmRlbmNpZXMYAyADKAsyIS5xdWl4b3MucnVudGltZS5EZXJpdmVkRGVwZW5kZW5jeRINCgVlcnJvchgEIAEoCRIPCgdpbml0aWFsGAUgASgIMvABCg5QYWNrYWdlUnVudGltZRJQCglIYW5kc2hha2USIC5xdWl4b3MucnVudGltZS5IYW5kc2hha2VSZXF1ZXN0GiEucXVpeG9zLnJ1bnRpbWUuSGFuZHNoYWtlUmVzcG9uc2USRwoGSW52b2tlEh0ucXVpeG9zLnJ1bnRpbWUuSW52b2tlUmVxdWVzdBoeLnF1aXhvcy5ydW50aW1lLkludm9rZVJlc3BvbnNlEkMKBVdhdGNoEhwucXVpeG9zLnJ1bnRpbWUuV2F0Y2hSZXF1ZXN0GhoucXVpeG9zLnJ1bnRpbWUuV2F0Y2hFdmVudDABYgZwcm90bzM", [file_camino_api, file_quixos_refs]);
/**
* @generated from message quixos.runtime.HandshakeRequest
@@ -38,24 +38,19 @@ export const HandshakeRequestSchema: GenMessage<HandshakeRequest> = /*@__PURE__*
*/
export type HandshakeResponse = Message<"quixos.runtime.HandshakeResponse"> & {
/**
* @generated from field: string package_namespace = 1;
* @generated from field: string package_revision_id = 1;
*/
packageNamespace: string;
packageRevisionId: string;
/**
* @generated from field: string package_name = 2;
*/
packageName: string;
/**
* @generated from field: string runtime_protocol_version = 3;
* @generated from field: string runtime_protocol_version = 2;
*/
runtimeProtocolVersion: string;
/**
* @generated from field: repeated quixos.FunctionRef functions = 4;
* @generated from field: repeated string export_ids = 3;
*/
functions: FunctionRef[];
exportIds: string[];
};
/**
@@ -75,9 +70,9 @@ export type InvokeRequest = Message<"quixos.runtime.InvokeRequest"> & {
invocationId: string;
/**
* @generated from field: quixos.FunctionRef function = 2;
* @generated from field: quixos.PackageExportRef export = 2;
*/
function?: FunctionRef | undefined;
export?: PackageExportRef | undefined;
/**
* @generated from field: string object_id = 3;
@@ -88,6 +83,11 @@ export type InvokeRequest = Message<"quixos.runtime.InvokeRequest"> & {
* @generated from field: map<string, camino.Value> input = 4;
*/
input: { [key: string]: Value };
/**
* @generated from field: repeated quixos.InjectedDependency dependencies = 5;
*/
dependencies: InjectedDependency[];
};
/**
@@ -134,9 +134,9 @@ export type WatchRequest = Message<"quixos.runtime.WatchRequest"> & {
invocationId: string;
/**
* @generated from field: quixos.FunctionRef function = 2;
* @generated from field: quixos.PackageExportRef export = 2;
*/
function?: FunctionRef | undefined;
export?: PackageExportRef | undefined;
/**
* @generated from field: string object_id = 3;
@@ -147,6 +147,11 @@ export type WatchRequest = Message<"quixos.runtime.WatchRequest"> & {
* @generated from field: map<string, camino.Value> input = 4;
*/
input: { [key: string]: Value };
/**
* @generated from field: repeated quixos.InjectedDependency dependencies = 5;
*/
dependencies: InjectedDependency[];
};
/**
@@ -171,14 +176,14 @@ export type DerivedDependency = Message<"quixos.runtime.DerivedDependency"> & {
objectId: string;
/**
* @generated from field: string field_name = 3;
* @generated from field: string attachment_id = 3;
*/
fieldName: string;
attachmentId: string;
/**
* @generated from field: string source_field = 4;
* @generated from field: string projection_id = 4;
*/
sourceField: string;
projectionId: string;
};
/**
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env node
import { readFile } from "node:fs/promises";
import { parseQuixosLock } from "./parser.js";
const fileName = process.argv[2];
if (!fileName || process.argv.length !== 3) {
console.error("Usage: quixos-lock-check <quixos.lock>");
process.exit(2);
}
const result = parseQuixosLock(await readFile(fileName, "utf8"), fileName);
if (!result.ok) {
for (const diagnostic of result.diagnostics) {
console.error(
`${diagnostic.fileName}:${diagnostic.line}:${diagnostic.column + 1}: ${diagnostic.phase}/${diagnostic.code}: ${diagnostic.message}`,
);
}
process.exit(1);
}
console.log(JSON.stringify(result.lock, null, 2));
@@ -0,0 +1,52 @@
token literal names:
null
'quixos-lock'
'version'
'quixos'
'source'
'interface'
'package'
'repository'
'commit'
'{'
'}'
';'
null
null
null
null
null
null
token symbolic names:
null
QUIXOS_LOCK
VERSION
QUIXOS
SOURCE
INTERFACE
PACKAGE
REPOSITORY
COMMIT
LBRACE
RBRACE
SEMI
INTEGER
IDENTIFIER
STRING_LITERAL
LINE_COMMENT
BLOCK_COMMENT
WS
rule names:
document
quixosEntry
resourceEntry
resourceKind
sourceBlock
identifier
stringLiteral
atn:
[4, 1, 17, 53, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 21, 8, 0, 10, 0, 12, 0, 24, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 0, 0, 7, 0, 2, 4, 6, 8, 10, 12, 0, 1, 1, 0, 5, 6, 46, 0, 14, 1, 0, 0, 0, 2, 28, 1, 0, 0, 0, 4, 32, 1, 0, 0, 0, 6, 37, 1, 0, 0, 0, 8, 39, 1, 0, 0, 0, 10, 48, 1, 0, 0, 0, 12, 50, 1, 0, 0, 0, 14, 15, 5, 1, 0, 0, 15, 16, 5, 2, 0, 0, 16, 17, 5, 12, 0, 0, 17, 18, 5, 9, 0, 0, 18, 22, 3, 2, 1, 0, 19, 21, 3, 4, 2, 0, 20, 19, 1, 0, 0, 0, 21, 24, 1, 0, 0, 0, 22, 20, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 25, 1, 0, 0, 0, 24, 22, 1, 0, 0, 0, 25, 26, 5, 10, 0, 0, 26, 27, 5, 0, 0, 1, 27, 1, 1, 0, 0, 0, 28, 29, 5, 3, 0, 0, 29, 30, 5, 4, 0, 0, 30, 31, 3, 8, 4, 0, 31, 3, 1, 0, 0, 0, 32, 33, 3, 6, 3, 0, 33, 34, 3, 10, 5, 0, 34, 35, 5, 4, 0, 0, 35, 36, 3, 8, 4, 0, 36, 5, 1, 0, 0, 0, 37, 38, 7, 0, 0, 0, 38, 7, 1, 0, 0, 0, 39, 40, 5, 9, 0, 0, 40, 41, 5, 7, 0, 0, 41, 42, 3, 12, 6, 0, 42, 43, 5, 11, 0, 0, 43, 44, 5, 8, 0, 0, 44, 45, 3, 12, 6, 0, 45, 46, 5, 11, 0, 0, 46, 47, 5, 10, 0, 0, 47, 9, 1, 0, 0, 0, 48, 49, 5, 13, 0, 0, 49, 11, 1, 0, 0, 0, 50, 51, 5, 14, 0, 0, 51, 13, 1, 0, 0, 0, 1, 22]
@@ -0,0 +1,28 @@
QUIXOS_LOCK=1
VERSION=2
QUIXOS=3
SOURCE=4
INTERFACE=5
PACKAGE=6
REPOSITORY=7
COMMIT=8
LBRACE=9
RBRACE=10
SEMI=11
INTEGER=12
IDENTIFIER=13
STRING_LITERAL=14
LINE_COMMENT=15
BLOCK_COMMENT=16
WS=17
'quixos-lock'=1
'version'=2
'quixos'=3
'source'=4
'interface'=5
'package'=6
'repository'=7
'commit'=8
'{'=9
'}'=10
';'=11
File diff suppressed because one or more lines are too long
@@ -0,0 +1,28 @@
QUIXOS_LOCK=1
VERSION=2
QUIXOS=3
SOURCE=4
INTERFACE=5
PACKAGE=6
REPOSITORY=7
COMMIT=8
LBRACE=9
RBRACE=10
SEMI=11
INTEGER=12
IDENTIFIER=13
STRING_LITERAL=14
LINE_COMMENT=15
BLOCK_COMMENT=16
WS=17
'quixos-lock'=1
'version'=2
'quixos'=3
'source'=4
'interface'=5
'package'=6
'repository'=7
'commit'=8
'{'=9
'}'=10
';'=11
@@ -0,0 +1,155 @@
import * as antlr from "antlr4ng";
import { Token } from "antlr4ng";
export class QuixosLockLexer extends antlr.Lexer {
public static readonly QUIXOS_LOCK = 1;
public static readonly VERSION = 2;
public static readonly QUIXOS = 3;
public static readonly SOURCE = 4;
public static readonly INTERFACE = 5;
public static readonly PACKAGE = 6;
public static readonly REPOSITORY = 7;
public static readonly COMMIT = 8;
public static readonly LBRACE = 9;
public static readonly RBRACE = 10;
public static readonly SEMI = 11;
public static readonly INTEGER = 12;
public static readonly IDENTIFIER = 13;
public static readonly STRING_LITERAL = 14;
public static readonly LINE_COMMENT = 15;
public static readonly BLOCK_COMMENT = 16;
public static readonly WS = 17;
public static readonly channelNames = [
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
];
public static readonly literalNames = [
null, "'quixos-lock'", "'version'", "'quixos'", "'source'", "'interface'",
"'package'", "'repository'", "'commit'", "'{'", "'}'", "';'"
];
public static readonly symbolicNames = [
null, "QUIXOS_LOCK", "VERSION", "QUIXOS", "SOURCE", "INTERFACE",
"PACKAGE", "REPOSITORY", "COMMIT", "LBRACE", "RBRACE", "SEMI", "INTEGER",
"IDENTIFIER", "STRING_LITERAL", "LINE_COMMENT", "BLOCK_COMMENT",
"WS"
];
public static readonly modeNames = [
"DEFAULT_MODE",
];
public static readonly ruleNames = [
"QUIXOS_LOCK", "VERSION", "QUIXOS", "SOURCE", "INTERFACE", "PACKAGE",
"REPOSITORY", "COMMIT", "LBRACE", "RBRACE", "SEMI", "INTEGER", "IDENTIFIER",
"STRING_LITERAL", "ESC", "HEX", "LINE_COMMENT", "BLOCK_COMMENT",
"WS",
];
public constructor(input: antlr.CharStream) {
super(input);
this.interpreter = new antlr.LexerATNSimulator(this, QuixosLockLexer._ATN, QuixosLockLexer.decisionsToDFA, new antlr.PredictionContextCache());
}
public get grammarFileName(): string { return "QuixosLock.g4"; }
public get literalNames(): (string | null)[] { return QuixosLockLexer.literalNames; }
public get symbolicNames(): (string | null)[] { return QuixosLockLexer.symbolicNames; }
public get ruleNames(): string[] { return QuixosLockLexer.ruleNames; }
public get serializedATN(): number[] { return QuixosLockLexer._serializedATN; }
public get channelNames(): string[] { return QuixosLockLexer.channelNames; }
public get modeNames(): string[] { return QuixosLockLexer.modeNames; }
public static readonly _serializedATN: number[] = [
4,0,17,181,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,
2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,
13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,1,0,1,
0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,
3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,
5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,
7,1,7,1,7,1,7,1,7,1,8,1,8,1,9,1,9,1,10,1,10,1,11,4,11,117,8,11,11,
11,12,11,118,1,12,1,12,5,12,123,8,12,10,12,12,12,126,9,12,1,13,1,
13,1,13,5,13,131,8,13,10,13,12,13,134,9,13,1,13,1,13,1,14,1,14,1,
14,1,14,1,14,1,14,1,14,1,14,3,14,146,8,14,1,15,1,15,1,16,1,16,1,
16,1,16,5,16,154,8,16,10,16,12,16,157,9,16,1,16,1,16,1,17,1,17,1,
17,1,17,5,17,165,8,17,10,17,12,17,168,9,17,1,17,1,17,1,17,1,17,1,
17,1,18,4,18,176,8,18,11,18,12,18,177,1,18,1,18,1,166,0,19,1,1,3,
2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,
29,0,31,0,33,15,35,16,37,17,1,0,8,1,0,48,57,3,0,65,90,95,95,97,122,
4,0,48,57,65,90,95,95,97,122,4,0,10,10,13,13,34,34,92,92,8,0,34,
34,47,47,92,92,98,98,102,102,110,110,114,114,116,116,3,0,48,57,65,
70,97,102,2,0,10,10,13,13,3,0,9,10,13,13,32,32,186,0,1,1,0,0,0,0,
3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,
1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,
1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,
1,0,0,0,1,39,1,0,0,0,3,51,1,0,0,0,5,59,1,0,0,0,7,66,1,0,0,0,9,73,
1,0,0,0,11,83,1,0,0,0,13,91,1,0,0,0,15,102,1,0,0,0,17,109,1,0,0,
0,19,111,1,0,0,0,21,113,1,0,0,0,23,116,1,0,0,0,25,120,1,0,0,0,27,
127,1,0,0,0,29,137,1,0,0,0,31,147,1,0,0,0,33,149,1,0,0,0,35,160,
1,0,0,0,37,175,1,0,0,0,39,40,5,113,0,0,40,41,5,117,0,0,41,42,5,105,
0,0,42,43,5,120,0,0,43,44,5,111,0,0,44,45,5,115,0,0,45,46,5,45,0,
0,46,47,5,108,0,0,47,48,5,111,0,0,48,49,5,99,0,0,49,50,5,107,0,0,
50,2,1,0,0,0,51,52,5,118,0,0,52,53,5,101,0,0,53,54,5,114,0,0,54,
55,5,115,0,0,55,56,5,105,0,0,56,57,5,111,0,0,57,58,5,110,0,0,58,
4,1,0,0,0,59,60,5,113,0,0,60,61,5,117,0,0,61,62,5,105,0,0,62,63,
5,120,0,0,63,64,5,111,0,0,64,65,5,115,0,0,65,6,1,0,0,0,66,67,5,115,
0,0,67,68,5,111,0,0,68,69,5,117,0,0,69,70,5,114,0,0,70,71,5,99,0,
0,71,72,5,101,0,0,72,8,1,0,0,0,73,74,5,105,0,0,74,75,5,110,0,0,75,
76,5,116,0,0,76,77,5,101,0,0,77,78,5,114,0,0,78,79,5,102,0,0,79,
80,5,97,0,0,80,81,5,99,0,0,81,82,5,101,0,0,82,10,1,0,0,0,83,84,5,
112,0,0,84,85,5,97,0,0,85,86,5,99,0,0,86,87,5,107,0,0,87,88,5,97,
0,0,88,89,5,103,0,0,89,90,5,101,0,0,90,12,1,0,0,0,91,92,5,114,0,
0,92,93,5,101,0,0,93,94,5,112,0,0,94,95,5,111,0,0,95,96,5,115,0,
0,96,97,5,105,0,0,97,98,5,116,0,0,98,99,5,111,0,0,99,100,5,114,0,
0,100,101,5,121,0,0,101,14,1,0,0,0,102,103,5,99,0,0,103,104,5,111,
0,0,104,105,5,109,0,0,105,106,5,109,0,0,106,107,5,105,0,0,107,108,
5,116,0,0,108,16,1,0,0,0,109,110,5,123,0,0,110,18,1,0,0,0,111,112,
5,125,0,0,112,20,1,0,0,0,113,114,5,59,0,0,114,22,1,0,0,0,115,117,
7,0,0,0,116,115,1,0,0,0,117,118,1,0,0,0,118,116,1,0,0,0,118,119,
1,0,0,0,119,24,1,0,0,0,120,124,7,1,0,0,121,123,7,2,0,0,122,121,1,
0,0,0,123,126,1,0,0,0,124,122,1,0,0,0,124,125,1,0,0,0,125,26,1,0,
0,0,126,124,1,0,0,0,127,132,5,34,0,0,128,131,3,29,14,0,129,131,8,
3,0,0,130,128,1,0,0,0,130,129,1,0,0,0,131,134,1,0,0,0,132,130,1,
0,0,0,132,133,1,0,0,0,133,135,1,0,0,0,134,132,1,0,0,0,135,136,5,
34,0,0,136,28,1,0,0,0,137,145,5,92,0,0,138,146,7,4,0,0,139,140,5,
117,0,0,140,141,3,31,15,0,141,142,3,31,15,0,142,143,3,31,15,0,143,
144,3,31,15,0,144,146,1,0,0,0,145,138,1,0,0,0,145,139,1,0,0,0,146,
30,1,0,0,0,147,148,7,5,0,0,148,32,1,0,0,0,149,150,5,47,0,0,150,151,
5,47,0,0,151,155,1,0,0,0,152,154,8,6,0,0,153,152,1,0,0,0,154,157,
1,0,0,0,155,153,1,0,0,0,155,156,1,0,0,0,156,158,1,0,0,0,157,155,
1,0,0,0,158,159,6,16,0,0,159,34,1,0,0,0,160,161,5,47,0,0,161,162,
5,42,0,0,162,166,1,0,0,0,163,165,9,0,0,0,164,163,1,0,0,0,165,168,
1,0,0,0,166,167,1,0,0,0,166,164,1,0,0,0,167,169,1,0,0,0,168,166,
1,0,0,0,169,170,5,42,0,0,170,171,5,47,0,0,171,172,1,0,0,0,172,173,
6,17,0,0,173,36,1,0,0,0,174,176,7,7,0,0,175,174,1,0,0,0,176,177,
1,0,0,0,177,175,1,0,0,0,177,178,1,0,0,0,178,179,1,0,0,0,179,180,
6,18,0,0,180,38,1,0,0,0,9,0,118,124,130,132,145,155,166,177,1,6,
0,0
];
private static __ATN: antlr.ATN;
public static get _ATN(): antlr.ATN {
if (!QuixosLockLexer.__ATN) {
QuixosLockLexer.__ATN = new antlr.ATNDeserializer().deserialize(QuixosLockLexer._serializedATN);
}
return QuixosLockLexer.__ATN;
}
private static readonly vocabulary = new antlr.Vocabulary(QuixosLockLexer.literalNames, QuixosLockLexer.symbolicNames, []);
public override get vocabulary(): antlr.Vocabulary {
return QuixosLockLexer.vocabulary;
}
private static readonly decisionsToDFA = QuixosLockLexer._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) );
}
@@ -0,0 +1,535 @@
import * as antlr from "antlr4ng";
import { Token } from "antlr4ng";
import { QuixosLockVisitor } from "./QuixosLockVisitor.js";
// for running tests with parameters, TODO: discuss strategy for typed parameters in CI
// eslint-disable-next-line no-unused-vars
type int = number;
export class QuixosLockParser extends antlr.Parser {
public static readonly QUIXOS_LOCK = 1;
public static readonly VERSION = 2;
public static readonly QUIXOS = 3;
public static readonly SOURCE = 4;
public static readonly INTERFACE = 5;
public static readonly PACKAGE = 6;
public static readonly REPOSITORY = 7;
public static readonly COMMIT = 8;
public static readonly LBRACE = 9;
public static readonly RBRACE = 10;
public static readonly SEMI = 11;
public static readonly INTEGER = 12;
public static readonly IDENTIFIER = 13;
public static readonly STRING_LITERAL = 14;
public static readonly LINE_COMMENT = 15;
public static readonly BLOCK_COMMENT = 16;
public static readonly WS = 17;
public static readonly RULE_document = 0;
public static readonly RULE_quixosEntry = 1;
public static readonly RULE_resourceEntry = 2;
public static readonly RULE_resourceKind = 3;
public static readonly RULE_sourceBlock = 4;
public static readonly RULE_identifier = 5;
public static readonly RULE_stringLiteral = 6;
public static readonly literalNames = [
null, "'quixos-lock'", "'version'", "'quixos'", "'source'", "'interface'",
"'package'", "'repository'", "'commit'", "'{'", "'}'", "';'"
];
public static readonly symbolicNames = [
null, "QUIXOS_LOCK", "VERSION", "QUIXOS", "SOURCE", "INTERFACE",
"PACKAGE", "REPOSITORY", "COMMIT", "LBRACE", "RBRACE", "SEMI", "INTEGER",
"IDENTIFIER", "STRING_LITERAL", "LINE_COMMENT", "BLOCK_COMMENT",
"WS"
];
public static readonly ruleNames = [
"document", "quixosEntry", "resourceEntry", "resourceKind", "sourceBlock",
"identifier", "stringLiteral",
];
public get grammarFileName(): string { return "QuixosLock.g4"; }
public get literalNames(): (string | null)[] { return QuixosLockParser.literalNames; }
public get symbolicNames(): (string | null)[] { return QuixosLockParser.symbolicNames; }
public get ruleNames(): string[] { return QuixosLockParser.ruleNames; }
public get serializedATN(): number[] { return QuixosLockParser._serializedATN; }
protected createFailedPredicateException(predicate?: string, message?: string): antlr.FailedPredicateException {
return new antlr.FailedPredicateException(this, predicate, message);
}
public constructor(input: antlr.TokenStream) {
super(input);
this.interpreter = new antlr.ParserATNSimulator(this, QuixosLockParser._ATN, QuixosLockParser.decisionsToDFA, new antlr.PredictionContextCache());
}
public document(): DocumentContext {
let localContext = new DocumentContext(this.context, this.state);
this.enterRule(localContext, 0, QuixosLockParser.RULE_document);
let _la: number;
try {
this.enterOuterAlt(localContext, 1);
{
this.state = 14;
this.match(QuixosLockParser.QUIXOS_LOCK);
this.state = 15;
this.match(QuixosLockParser.VERSION);
this.state = 16;
this.match(QuixosLockParser.INTEGER);
this.state = 17;
this.match(QuixosLockParser.LBRACE);
this.state = 18;
this.quixosEntry();
this.state = 22;
this.errorHandler.sync(this);
_la = this.tokenStream.LA(1);
while (_la === 5 || _la === 6) {
{
{
this.state = 19;
this.resourceEntry();
}
}
this.state = 24;
this.errorHandler.sync(this);
_la = this.tokenStream.LA(1);
}
this.state = 25;
this.match(QuixosLockParser.RBRACE);
this.state = 26;
this.match(QuixosLockParser.EOF);
}
}
catch (re) {
if (re instanceof antlr.RecognitionException) {
this.errorHandler.reportError(this, re);
this.errorHandler.recover(this, re);
} else {
throw re;
}
}
finally {
this.exitRule();
}
return localContext;
}
public quixosEntry(): QuixosEntryContext {
let localContext = new QuixosEntryContext(this.context, this.state);
this.enterRule(localContext, 2, QuixosLockParser.RULE_quixosEntry);
try {
this.enterOuterAlt(localContext, 1);
{
this.state = 28;
this.match(QuixosLockParser.QUIXOS);
this.state = 29;
this.match(QuixosLockParser.SOURCE);
this.state = 30;
this.sourceBlock();
}
}
catch (re) {
if (re instanceof antlr.RecognitionException) {
this.errorHandler.reportError(this, re);
this.errorHandler.recover(this, re);
} else {
throw re;
}
}
finally {
this.exitRule();
}
return localContext;
}
public resourceEntry(): ResourceEntryContext {
let localContext = new ResourceEntryContext(this.context, this.state);
this.enterRule(localContext, 4, QuixosLockParser.RULE_resourceEntry);
try {
this.enterOuterAlt(localContext, 1);
{
this.state = 32;
this.resourceKind();
this.state = 33;
this.identifier();
this.state = 34;
this.match(QuixosLockParser.SOURCE);
this.state = 35;
this.sourceBlock();
}
}
catch (re) {
if (re instanceof antlr.RecognitionException) {
this.errorHandler.reportError(this, re);
this.errorHandler.recover(this, re);
} else {
throw re;
}
}
finally {
this.exitRule();
}
return localContext;
}
public resourceKind(): ResourceKindContext {
let localContext = new ResourceKindContext(this.context, this.state);
this.enterRule(localContext, 6, QuixosLockParser.RULE_resourceKind);
let _la: number;
try {
this.enterOuterAlt(localContext, 1);
{
this.state = 37;
_la = this.tokenStream.LA(1);
if(!(_la === 5 || _la === 6)) {
this.errorHandler.recoverInline(this);
}
else {
this.errorHandler.reportMatch(this);
this.consume();
}
}
}
catch (re) {
if (re instanceof antlr.RecognitionException) {
this.errorHandler.reportError(this, re);
this.errorHandler.recover(this, re);
} else {
throw re;
}
}
finally {
this.exitRule();
}
return localContext;
}
public sourceBlock(): SourceBlockContext {
let localContext = new SourceBlockContext(this.context, this.state);
this.enterRule(localContext, 8, QuixosLockParser.RULE_sourceBlock);
try {
this.enterOuterAlt(localContext, 1);
{
this.state = 39;
this.match(QuixosLockParser.LBRACE);
this.state = 40;
this.match(QuixosLockParser.REPOSITORY);
this.state = 41;
this.stringLiteral();
this.state = 42;
this.match(QuixosLockParser.SEMI);
this.state = 43;
this.match(QuixosLockParser.COMMIT);
this.state = 44;
this.stringLiteral();
this.state = 45;
this.match(QuixosLockParser.SEMI);
this.state = 46;
this.match(QuixosLockParser.RBRACE);
}
}
catch (re) {
if (re instanceof antlr.RecognitionException) {
this.errorHandler.reportError(this, re);
this.errorHandler.recover(this, re);
} else {
throw re;
}
}
finally {
this.exitRule();
}
return localContext;
}
public identifier(): IdentifierContext {
let localContext = new IdentifierContext(this.context, this.state);
this.enterRule(localContext, 10, QuixosLockParser.RULE_identifier);
try {
this.enterOuterAlt(localContext, 1);
{
this.state = 48;
this.match(QuixosLockParser.IDENTIFIER);
}
}
catch (re) {
if (re instanceof antlr.RecognitionException) {
this.errorHandler.reportError(this, re);
this.errorHandler.recover(this, re);
} else {
throw re;
}
}
finally {
this.exitRule();
}
return localContext;
}
public stringLiteral(): StringLiteralContext {
let localContext = new StringLiteralContext(this.context, this.state);
this.enterRule(localContext, 12, QuixosLockParser.RULE_stringLiteral);
try {
this.enterOuterAlt(localContext, 1);
{
this.state = 50;
this.match(QuixosLockParser.STRING_LITERAL);
}
}
catch (re) {
if (re instanceof antlr.RecognitionException) {
this.errorHandler.reportError(this, re);
this.errorHandler.recover(this, re);
} else {
throw re;
}
}
finally {
this.exitRule();
}
return localContext;
}
public static readonly _serializedATN: number[] = [
4,1,17,53,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,
6,1,0,1,0,1,0,1,0,1,0,1,0,5,0,21,8,0,10,0,12,0,24,9,0,1,0,1,0,1,
0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,4,1,4,1,4,1,4,1,
4,1,4,1,4,1,4,1,4,1,5,1,5,1,6,1,6,1,6,0,0,7,0,2,4,6,8,10,12,0,1,
1,0,5,6,46,0,14,1,0,0,0,2,28,1,0,0,0,4,32,1,0,0,0,6,37,1,0,0,0,8,
39,1,0,0,0,10,48,1,0,0,0,12,50,1,0,0,0,14,15,5,1,0,0,15,16,5,2,0,
0,16,17,5,12,0,0,17,18,5,9,0,0,18,22,3,2,1,0,19,21,3,4,2,0,20,19,
1,0,0,0,21,24,1,0,0,0,22,20,1,0,0,0,22,23,1,0,0,0,23,25,1,0,0,0,
24,22,1,0,0,0,25,26,5,10,0,0,26,27,5,0,0,1,27,1,1,0,0,0,28,29,5,
3,0,0,29,30,5,4,0,0,30,31,3,8,4,0,31,3,1,0,0,0,32,33,3,6,3,0,33,
34,3,10,5,0,34,35,5,4,0,0,35,36,3,8,4,0,36,5,1,0,0,0,37,38,7,0,0,
0,38,7,1,0,0,0,39,40,5,9,0,0,40,41,5,7,0,0,41,42,3,12,6,0,42,43,
5,11,0,0,43,44,5,8,0,0,44,45,3,12,6,0,45,46,5,11,0,0,46,47,5,10,
0,0,47,9,1,0,0,0,48,49,5,13,0,0,49,11,1,0,0,0,50,51,5,14,0,0,51,
13,1,0,0,0,1,22
];
private static __ATN: antlr.ATN;
public static get _ATN(): antlr.ATN {
if (!QuixosLockParser.__ATN) {
QuixosLockParser.__ATN = new antlr.ATNDeserializer().deserialize(QuixosLockParser._serializedATN);
}
return QuixosLockParser.__ATN;
}
private static readonly vocabulary = new antlr.Vocabulary(QuixosLockParser.literalNames, QuixosLockParser.symbolicNames, []);
public override get vocabulary(): antlr.Vocabulary {
return QuixosLockParser.vocabulary;
}
private static readonly decisionsToDFA = QuixosLockParser._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) );
}
export class DocumentContext extends antlr.ParserRuleContext {
public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
super(parent, invokingState);
}
public QUIXOS_LOCK(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.QUIXOS_LOCK, 0)!;
}
public VERSION(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.VERSION, 0)!;
}
public INTEGER(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.INTEGER, 0)!;
}
public LBRACE(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.LBRACE, 0)!;
}
public quixosEntry(): QuixosEntryContext {
return this.getRuleContext(0, QuixosEntryContext)!;
}
public RBRACE(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.RBRACE, 0)!;
}
public EOF(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.EOF, 0)!;
}
public resourceEntry(): ResourceEntryContext[];
public resourceEntry(i: number): ResourceEntryContext | null;
public resourceEntry(i?: number): ResourceEntryContext[] | ResourceEntryContext | null {
if (i === undefined) {
return this.getRuleContexts(ResourceEntryContext);
}
return this.getRuleContext(i, ResourceEntryContext);
}
public override get ruleIndex(): number {
return QuixosLockParser.RULE_document;
}
public override accept<Result>(visitor: QuixosLockVisitor<Result>): Result | null {
if (visitor.visitDocument) {
return visitor.visitDocument(this);
} else {
return visitor.visitChildren(this);
}
}
}
export class QuixosEntryContext extends antlr.ParserRuleContext {
public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
super(parent, invokingState);
}
public QUIXOS(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.QUIXOS, 0)!;
}
public SOURCE(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.SOURCE, 0)!;
}
public sourceBlock(): SourceBlockContext {
return this.getRuleContext(0, SourceBlockContext)!;
}
public override get ruleIndex(): number {
return QuixosLockParser.RULE_quixosEntry;
}
public override accept<Result>(visitor: QuixosLockVisitor<Result>): Result | null {
if (visitor.visitQuixosEntry) {
return visitor.visitQuixosEntry(this);
} else {
return visitor.visitChildren(this);
}
}
}
export class ResourceEntryContext extends antlr.ParserRuleContext {
public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
super(parent, invokingState);
}
public resourceKind(): ResourceKindContext {
return this.getRuleContext(0, ResourceKindContext)!;
}
public identifier(): IdentifierContext {
return this.getRuleContext(0, IdentifierContext)!;
}
public SOURCE(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.SOURCE, 0)!;
}
public sourceBlock(): SourceBlockContext {
return this.getRuleContext(0, SourceBlockContext)!;
}
public override get ruleIndex(): number {
return QuixosLockParser.RULE_resourceEntry;
}
public override accept<Result>(visitor: QuixosLockVisitor<Result>): Result | null {
if (visitor.visitResourceEntry) {
return visitor.visitResourceEntry(this);
} else {
return visitor.visitChildren(this);
}
}
}
export class ResourceKindContext extends antlr.ParserRuleContext {
public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
super(parent, invokingState);
}
public INTERFACE(): antlr.TerminalNode | null {
return this.getToken(QuixosLockParser.INTERFACE, 0);
}
public PACKAGE(): antlr.TerminalNode | null {
return this.getToken(QuixosLockParser.PACKAGE, 0);
}
public override get ruleIndex(): number {
return QuixosLockParser.RULE_resourceKind;
}
public override accept<Result>(visitor: QuixosLockVisitor<Result>): Result | null {
if (visitor.visitResourceKind) {
return visitor.visitResourceKind(this);
} else {
return visitor.visitChildren(this);
}
}
}
export class SourceBlockContext extends antlr.ParserRuleContext {
public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
super(parent, invokingState);
}
public LBRACE(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.LBRACE, 0)!;
}
public REPOSITORY(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.REPOSITORY, 0)!;
}
public stringLiteral(): StringLiteralContext[];
public stringLiteral(i: number): StringLiteralContext | null;
public stringLiteral(i?: number): StringLiteralContext[] | StringLiteralContext | null {
if (i === undefined) {
return this.getRuleContexts(StringLiteralContext);
}
return this.getRuleContext(i, StringLiteralContext);
}
public SEMI(): antlr.TerminalNode[];
public SEMI(i: number): antlr.TerminalNode | null;
public SEMI(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
if (i === undefined) {
return this.getTokens(QuixosLockParser.SEMI);
} else {
return this.getToken(QuixosLockParser.SEMI, i);
}
}
public COMMIT(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.COMMIT, 0)!;
}
public RBRACE(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.RBRACE, 0)!;
}
public override get ruleIndex(): number {
return QuixosLockParser.RULE_sourceBlock;
}
public override accept<Result>(visitor: QuixosLockVisitor<Result>): Result | null {
if (visitor.visitSourceBlock) {
return visitor.visitSourceBlock(this);
} else {
return visitor.visitChildren(this);
}
}
}
export class IdentifierContext extends antlr.ParserRuleContext {
public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
super(parent, invokingState);
}
public IDENTIFIER(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.IDENTIFIER, 0)!;
}
public override get ruleIndex(): number {
return QuixosLockParser.RULE_identifier;
}
public override accept<Result>(visitor: QuixosLockVisitor<Result>): Result | null {
if (visitor.visitIdentifier) {
return visitor.visitIdentifier(this);
} else {
return visitor.visitChildren(this);
}
}
}
export class StringLiteralContext extends antlr.ParserRuleContext {
public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
super(parent, invokingState);
}
public STRING_LITERAL(): antlr.TerminalNode {
return this.getToken(QuixosLockParser.STRING_LITERAL, 0)!;
}
public override get ruleIndex(): number {
return QuixosLockParser.RULE_stringLiteral;
}
public override accept<Result>(visitor: QuixosLockVisitor<Result>): Result | null {
if (visitor.visitStringLiteral) {
return visitor.visitStringLiteral(this);
} else {
return visitor.visitChildren(this);
}
}
}
@@ -0,0 +1,65 @@
import { AbstractParseTreeVisitor } from "antlr4ng";
import { DocumentContext } from "./QuixosLockParser.js";
import { QuixosEntryContext } from "./QuixosLockParser.js";
import { ResourceEntryContext } from "./QuixosLockParser.js";
import { ResourceKindContext } from "./QuixosLockParser.js";
import { SourceBlockContext } from "./QuixosLockParser.js";
import { IdentifierContext } from "./QuixosLockParser.js";
import { StringLiteralContext } from "./QuixosLockParser.js";
/**
* This interface defines a complete generic visitor for a parse tree produced
* by `QuixosLockParser`.
*
* @param <Result> The return type of the visit operation. Use `void` for
* operations with no return type.
*/
export class QuixosLockVisitor<Result> extends AbstractParseTreeVisitor<Result> {
/**
* Visit a parse tree produced by `QuixosLockParser.document`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDocument?: (ctx: DocumentContext) => Result;
/**
* Visit a parse tree produced by `QuixosLockParser.quixosEntry`.
* @param ctx the parse tree
* @return the visitor result
*/
visitQuixosEntry?: (ctx: QuixosEntryContext) => Result;
/**
* Visit a parse tree produced by `QuixosLockParser.resourceEntry`.
* @param ctx the parse tree
* @return the visitor result
*/
visitResourceEntry?: (ctx: ResourceEntryContext) => Result;
/**
* Visit a parse tree produced by `QuixosLockParser.resourceKind`.
* @param ctx the parse tree
* @return the visitor result
*/
visitResourceKind?: (ctx: ResourceKindContext) => Result;
/**
* Visit a parse tree produced by `QuixosLockParser.sourceBlock`.
* @param ctx the parse tree
* @return the visitor result
*/
visitSourceBlock?: (ctx: SourceBlockContext) => Result;
/**
* Visit a parse tree produced by `QuixosLockParser.identifier`.
* @param ctx the parse tree
* @return the visitor result
*/
visitIdentifier?: (ctx: IdentifierContext) => Result;
/**
* Visit a parse tree produced by `QuixosLockParser.stringLiteral`.
* @param ctx the parse tree
* @return the visitor result
*/
visitStringLiteral?: (ctx: StringLiteralContext) => Result;
}
+2
View File
@@ -0,0 +1,2 @@
export * from "./parser.js";
export * from "./types.js";
+227
View File
@@ -0,0 +1,227 @@
import {
BaseErrorListener,
CharStream,
CommonTokenStream,
type ATNSimulator,
type RecognitionException,
type Recognizer,
type Token,
} from "antlr4ng";
import { QuixosLockLexer } from "./generated/QuixosLockLexer.js";
import {
QuixosLockParser,
type SourceBlockContext,
} from "./generated/QuixosLockParser.js";
import type {
GitSource,
LockedResource,
QuixosRepositoryLock,
} from "./types.js";
export type QuixosLockDiagnostic = {
phase: "syntax" | "validation";
code: string;
message: string;
fileName: string;
line: number;
column: number;
path?: string;
};
export type QuixosLockParseResult =
| { ok: true; lock: QuixosRepositoryLock; diagnostics: [] }
| { ok: false; diagnostics: QuixosLockDiagnostic[] };
class SyntaxErrorListener extends BaseErrorListener {
constructor(
private readonly fileName: string,
private readonly diagnostics: QuixosLockDiagnostic[],
) {
super();
}
override syntaxError<S extends Token, T extends ATNSimulator>(
_recognizer: Recognizer<T>,
_offendingSymbol: S | null,
line: number,
column: number,
message: string,
_error: RecognitionException | null,
): void {
this.diagnostics.push({
phase: "syntax",
code: "syntax-error",
message,
fileName: this.fileName,
line,
column,
});
}
}
const stringValue = (context: { getText(): string }): string =>
JSON.parse(context.getText()) as string;
const lowerSource = (context: SourceBlockContext): GitSource => ({
resolver: "git",
repository: stringValue(context.stringLiteral(0)!),
commit: stringValue(context.stringLiteral(1)!).toLowerCase(),
});
const issue = (
diagnostics: QuixosLockDiagnostic[],
fileName: string,
code: string,
message: string,
path?: string,
) => diagnostics.push({
phase: "validation",
code,
message,
fileName,
line: 1,
column: 0,
path,
});
const validateSource = (
source: GitSource,
path: string,
fileName: string,
diagnostics: QuixosLockDiagnostic[],
) => {
if (!/^([0-9a-f]{40}|[0-9a-f]{64})$/.test(source.commit)) {
issue(
diagnostics,
fileName,
"invalid-git-commit",
`${path}.commit must be a full 40- or 64-character Git object ID`,
`${path}.commit`,
);
}
let repository: URL;
try {
repository = new URL(source.repository);
} catch {
issue(
diagnostics,
fileName,
"invalid-git-repository",
`${path}.repository must be an absolute Git URL`,
`${path}.repository`,
);
return;
}
if (!["https:", "ssh:"].includes(repository.protocol)) {
issue(
diagnostics,
fileName,
"unsupported-git-transport",
`${path}.repository must use https:// or ssh://`,
`${path}.repository`,
);
}
if (repository.search || repository.hash) {
issue(
diagnostics,
fileName,
"decorated-git-repository",
`${path}.repository must be a base repository URL without a query or fragment`,
`${path}.repository`,
);
}
if (repository.password || (repository.protocol === "https:" && repository.username)) {
issue(
diagnostics,
fileName,
"embedded-git-credential",
`${path}.repository must not embed credentials`,
`${path}.repository`,
);
}
};
export const parseQuixosLock = (
source: string,
fileName = "<memory>",
): QuixosLockParseResult => {
const diagnostics: QuixosLockDiagnostic[] = [];
const listener = new SyntaxErrorListener(fileName, diagnostics);
const lexer = new QuixosLockLexer(CharStream.fromString(source));
lexer.removeErrorListeners();
lexer.addErrorListener(listener);
const parser = new QuixosLockParser(new CommonTokenStream(lexer));
parser.removeErrorListeners();
parser.addErrorListener(listener);
const tree = parser.document();
if (diagnostics.length > 0) return { ok: false, diagnostics };
const formatVersion = Number.parseInt(tree.INTEGER().getText(), 10);
if (formatVersion !== 1) {
issue(
diagnostics,
fileName,
"unsupported-lock-version",
`Unsupported Quixos lock format version ${formatVersion}`,
"formatVersion",
);
}
const quixos = lowerSource(tree.quixosEntry().sourceBlock());
validateSource(quixos, "quixos", fileName, diagnostics);
const resources: LockedResource[] = [];
const bindings = new Set<string>();
for (const [index, context] of tree.resourceEntry().entries()) {
const kind = context.resourceKind().INTERFACE() ? "interface" : "package";
const binding = context.identifier().getText();
const key = `${kind}\0${binding}`;
if (bindings.has(key)) {
issue(
diagnostics,
fileName,
"duplicate-resource-binding",
`Duplicate ${kind} binding ${binding}`,
`resources[${index}].binding`,
);
}
bindings.add(key);
const resource = { kind, binding, source: lowerSource(context.sourceBlock()) } as LockedResource;
validateSource(resource.source, `resources[${index}].source`, fileName, diagnostics);
resources.push(resource);
}
return diagnostics.length > 0
? { ok: false, diagnostics }
: {
ok: true,
lock: { formatVersion: 1, quixos, resources },
diagnostics: [],
};
};
const quoted = (value: string) => JSON.stringify(value);
const sourceLines = (source: GitSource, indentation: string): string[] => [
`${indentation}repository ${quoted(source.repository)};`,
`${indentation}commit ${quoted(source.commit.toLowerCase())};`,
];
export const formatQuixosLock = (lock: QuixosRepositoryLock): string => {
const lines = [
"quixos-lock version 1 {",
" quixos source {",
...sourceLines(lock.quixos, " "),
" }",
];
for (const resource of lock.resources) {
lines.push(
"",
` ${resource.kind} ${resource.binding} source {`,
...sourceLines(resource.source, " "),
" }",
);
}
lines.push("}", "");
return lines.join("\n");
};
+38
View File
@@ -0,0 +1,38 @@
export type GitSource = {
resolver: "git";
repository: string;
commit: string;
};
export type LockedResourceKind = "interface" | "package";
export type LockedResource = {
kind: LockedResourceKind;
binding: string;
source: GitSource;
};
export type QuixosRepositoryLock = {
formatVersion: 1;
quixos: GitSource;
resources: LockedResource[];
};
export type NixGitInput = {
type: "git";
url: string;
ref: string;
rev: string;
};
export const RETENTION_TAG_PREFIX = "refs/tags/quixos-reachability/";
export const retentionTagForCommit = (commit: string): string =>
`${RETENTION_TAG_PREFIX}${commit.toLowerCase()}`;
export const nixGitInput = (source: GitSource): NixGitInput => ({
type: "git",
url: source.repository,
ref: retentionTagForCommit(source.commit),
rev: source.commit.toLowerCase(),
});