@kontor/kontor-sdk 1.0.0-alpha.1 → 1.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/kwit/error.js +59 -0
- package/dist/src/kwit/error.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/errors/kwit-parameter.js +29 -0
- package/dist/src/kwit/kwit-parser/core/errors/kwit-parameter.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/errors/signature.js +42 -0
- package/dist/src/kwit/kwit-parser/core/errors/signature.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/errors/splitParameters.js +18 -0
- package/dist/src/kwit/kwit-parser/core/errors/splitParameters.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/records.js +73 -0
- package/dist/src/kwit/kwit-parser/core/records.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/records.test.js +53 -0
- package/dist/src/kwit/kwit-parser/core/records.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/signatures.js +33 -0
- package/dist/src/kwit/kwit-parser/core/signatures.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/signatures.test.js +54 -0
- package/dist/src/kwit/kwit-parser/core/signatures.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/records.js +2 -0
- package/dist/src/kwit/kwit-parser/core/types/records.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/records.test-d.js +19 -0
- package/dist/src/kwit/kwit-parser/core/types/records.test-d.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.js +3 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.test-d.js +18 -0
- package/dist/src/kwit/kwit-parser/core/types/signatures.test-d.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.js +2 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.test-d.js +159 -0
- package/dist/src/kwit/kwit-parser/core/types/utils.test-d.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/utils.js +212 -0
- package/dist/src/kwit/kwit-parser/core/utils.js.map +1 -0
- package/dist/src/kwit/kwit-parser/core/utils.test.js +302 -0
- package/dist/src/kwit/kwit-parser/core/utils.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.js +26 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.test.js +83 -0
- package/dist/src/kwit/kwit-parser/parse-kwit-parameter.test.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.js +16 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.js.map +1 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.test.js +78 -0
- package/dist/src/kwit/kwit-parser/parse-kwit.test.js.map +1 -0
- package/dist/src/kwit/kwit.js +2 -0
- package/dist/src/kwit/kwit.js.map +1 -0
- package/dist/src/kwit/kwit.test.js +9 -0
- package/dist/src/kwit/kwit.test.js.map +1 -0
- package/dist/src/kwit/narrow.js +14 -0
- package/dist/src/kwit/narrow.js.map +1 -0
- package/dist/src/kwit/regex.js +6 -0
- package/dist/src/kwit/regex.js.map +1 -0
- package/dist/src/kwit/register.js +2 -0
- package/dist/src/kwit/register.js.map +1 -0
- package/dist/src/kwit/type-utils.js +2 -0
- package/dist/src/kwit/type-utils.js.map +1 -0
- package/dist/src/kwit/utils.js +2 -0
- package/dist/src/kwit/utils.js.map +1 -0
- package/dist/src/kwit/utils.test-d.js +17 -0
- package/dist/src/kwit/utils.test-d.js.map +1 -0
- package/dist/src/kwit/version.js +2 -0
- package/dist/src/kwit/version.js.map +1 -0
- package/dist/src/sdk/actions/kontor/wallet/sign-reveal.js +0 -3
- package/dist/src/sdk/actions/kontor/wallet/sign-reveal.js.map +1 -1
- package/dist/src/sdk/actions/public/test-mempool-accept.js +8 -32
- package/dist/src/sdk/actions/public/test-mempool-accept.js.map +1 -1
- package/dist/src/sdk/clients/decorators/public.js +2 -0
- package/dist/src/sdk/clients/decorators/public.js.map +1 -1
- package/dist/src/sdk/errors/kwit.js +19 -0
- package/dist/src/sdk/errors/kwit.js.map +1 -0
- package/dist/src/sdk/test/e2e.test.js +27 -6
- package/dist/src/sdk/test/e2e.test.js.map +1 -1
- package/dist/src/sdk/utils/kwit/codecs/decimal.js +165 -0
- package/dist/src/sdk/utils/kwit/codecs/decimal.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/enum.js +104 -0
- package/dist/src/sdk/utils/kwit/codecs/enum.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/integer.js +167 -0
- package/dist/src/sdk/utils/kwit/codecs/integer.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/list.js +117 -0
- package/dist/src/sdk/utils/kwit/codecs/list.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/option.js +91 -0
- package/dist/src/sdk/utils/kwit/codecs/option.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/string.js +27 -0
- package/dist/src/sdk/utils/kwit/codecs/string.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/types.js +45 -0
- package/dist/src/sdk/utils/kwit/codecs/types.js.map +1 -0
- package/dist/src/sdk/utils/kwit/codecs/unit.js +22 -0
- package/dist/src/sdk/utils/kwit/codecs/unit.js.map +1 -0
- package/dist/src/sdk/utils/kwit/decode-function-result.js +36 -0
- package/dist/src/sdk/utils/kwit/decode-function-result.js.map +1 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.js +286 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.js.map +1 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.test.js +75 -0
- package/dist/src/sdk/utils/kwit/decode-kwit-parameter.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.js +17 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test-d.js +21 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test-d.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test.js +91 -0
- package/dist/src/sdk/utils/kwit/encode-function-data.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.js +250 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.js.map +1 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.test.js +62 -0
- package/dist/src/sdk/utils/kwit/encode-kwit-parameters.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.js +186 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.js.map +1 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.test.js +119 -0
- package/dist/src/sdk/utils/kwit/get-kwit-item.test.js.map +1 -0
- package/dist/src/sdk/utils/kwit/prepare-encode-function-data.js +24 -0
- package/dist/src/sdk/utils/kwit/prepare-encode-function-data.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -2
- package/src/sdk/actions/kontor/wallet/sign-reveal.ts +0 -4
- package/src/sdk/actions/public/test-mempool-accept.ts +34 -31
- package/src/sdk/clients/decorators/public.ts +11 -0
- package/src/sdk/test/e2e.test.ts +31 -6
- package/src/sdk/types/btc-rpc.ts +12 -11
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { version } from "./version.js";
|
|
2
|
+
export class BaseError extends Error {
|
|
3
|
+
constructor(shortMessage, args = {}) {
|
|
4
|
+
const details = args.cause instanceof BaseError
|
|
5
|
+
? args.cause.details
|
|
6
|
+
: args.cause?.message
|
|
7
|
+
? args.cause.message
|
|
8
|
+
: args.details;
|
|
9
|
+
const docsPath = args.cause instanceof BaseError
|
|
10
|
+
? args.cause.docsPath || args.docsPath
|
|
11
|
+
: args.docsPath;
|
|
12
|
+
const message = [
|
|
13
|
+
shortMessage || "An error occurred.",
|
|
14
|
+
"",
|
|
15
|
+
...(args.metaMessages ? [...args.metaMessages, ""] : []),
|
|
16
|
+
...(docsPath ? [`Docs: https://abitype.dev${docsPath}`] : []),
|
|
17
|
+
...(details ? [`Details: ${details}`] : []),
|
|
18
|
+
`Version: kwittype@${version}`,
|
|
19
|
+
].join("\n");
|
|
20
|
+
super(message);
|
|
21
|
+
Object.defineProperty(this, "details", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: void 0
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(this, "docsPath", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: void 0
|
|
32
|
+
});
|
|
33
|
+
Object.defineProperty(this, "metaMessages", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true,
|
|
37
|
+
value: void 0
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(this, "shortMessage", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: void 0
|
|
44
|
+
});
|
|
45
|
+
Object.defineProperty(this, "name", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true,
|
|
49
|
+
value: "KwitTypeError"
|
|
50
|
+
});
|
|
51
|
+
if (args.cause)
|
|
52
|
+
this.cause = args.cause;
|
|
53
|
+
this.details = details;
|
|
54
|
+
this.docsPath = docsPath;
|
|
55
|
+
this.metaMessages = args.metaMessages;
|
|
56
|
+
this.shortMessage = shortMessage;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/kwit/error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AASvC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAQlC,YAAY,YAAoB,EAAE,OAAsB,EAAE;QACxD,MAAM,OAAO,GACX,IAAI,CAAC,KAAK,YAAY,SAAS;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;YACpB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;gBACnB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;gBACpB,CAAC,CAAC,IAAI,CAAC,OAAQ,CAAC;QACtB,MAAM,QAAQ,GACZ,IAAI,CAAC,KAAK,YAAY,SAAS;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YACtC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpB,MAAM,OAAO,GAAG;YACd,YAAY,IAAI,oBAAoB;YACpC,EAAE;YACF,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,qBAAqB,OAAO,EAAE;SAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,KAAK,CAAC,OAAO,CAAC,CAAC;QA3BjB;;;;;WAAgB;QAChB;;;;;WAA8B;QAC9B;;;;;WAAoC;QACpC;;;;;WAAqB;QAEZ;;;;mBAAO,eAAe;WAAC;QAwB9B,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseError } from "../../../error.js";
|
|
2
|
+
export class InvalidKwitParameterError extends BaseError {
|
|
3
|
+
constructor({ param }) {
|
|
4
|
+
super("Failed to parse Kwit parameter.", {
|
|
5
|
+
details: `parseKwitParameter(${JSON.stringify(param, null, 2)})`,
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(this, "name", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: "InvalidKwitParameterError"
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class KwitProtectedKeywordError extends BaseError {
|
|
16
|
+
constructor({ param, name }) {
|
|
17
|
+
super("Invalid Kwit parameter.", {
|
|
18
|
+
details: param,
|
|
19
|
+
metaMessages: [`"${name}" is a protected Kwit keyword`],
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(this, "name", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: "KwitProtectedKeywordError"
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=kwit-parameter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kwit-parameter.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/errors/kwit-parameter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,OAAO,yBAA0B,SAAQ,SAAS;IAGtD,YAAY,EAAE,KAAK,EAA8B;QAC/C,KAAK,CAAC,iCAAiC,EAAE;YACvC,OAAO,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG;SACjE,CAAC,CAAC;QALI;;;;mBAAO,2BAA2B;WAAC;IAM5C,CAAC;CACF;AACD,MAAM,OAAO,yBAA0B,SAAQ,SAAS;IAGtD,YAAY,EAAE,KAAK,EAAE,IAAI,EAAmC;QAC1D,KAAK,CAAC,yBAAyB,EAAE;YAC/B,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,CAAC,IAAI,IAAI,+BAA+B,CAAC;SACxD,CAAC,CAAC;QANI;;;;mBAAO,2BAA2B;WAAC;IAO5C,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { BaseError } from "../../../error.js";
|
|
2
|
+
export class InvalidSignatureError extends BaseError {
|
|
3
|
+
constructor({ signature, type, }) {
|
|
4
|
+
super(`Invalid ${type} signature.`, {
|
|
5
|
+
details: signature,
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(this, "name", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: "InvalidSignatureError"
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class UnknownSignatureError extends BaseError {
|
|
16
|
+
constructor({ signature }) {
|
|
17
|
+
super("Unknown signature.", {
|
|
18
|
+
details: signature,
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(this, "name", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: "UnknownSignatureError"
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class InvalidRecordSignatureError extends BaseError {
|
|
29
|
+
constructor({ signature }) {
|
|
30
|
+
super("Invalid record signature.", {
|
|
31
|
+
details: signature,
|
|
32
|
+
metaMessages: ["No properties exist."],
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(this, "name", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: "InvalidStructSignatureError"
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/errors/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IAGlD,YAAY,EACV,SAAS,EACT,IAAI,GAIL;QACC,KAAK,CAAC,WAAW,IAAI,aAAa,EAAE;YAClC,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;QAXI;;;;mBAAO,uBAAuB;WAAC;IAYxC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IAGlD,YAAY,EAAE,SAAS,EAAyB;QAC9C,KAAK,CAAC,oBAAoB,EAAE;YAC1B,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC;QALI;;;;mBAAO,uBAAuB;WAAC;IAMxC,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,SAAS;IAGxD,YAAY,EAAE,SAAS,EAAyB;QAC9C,KAAK,CAAC,2BAA2B,EAAE;YACjC,OAAO,EAAE,SAAS;YAClB,YAAY,EAAE,CAAC,sBAAsB,CAAC;SACvC,CAAC,CAAC;QANI;;;;mBAAO,6BAA6B;WAAC;IAO9C,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseError } from "../../../error.js";
|
|
2
|
+
export class InvalidGenericDepthError extends BaseError {
|
|
3
|
+
constructor({ current, depth }) {
|
|
4
|
+
super("Unbalanced angle brackets.", {
|
|
5
|
+
metaMessages: [
|
|
6
|
+
`"${current.trim()}" has too many ${depth > 0 ? "opening" : "closing"} brackets.`,
|
|
7
|
+
],
|
|
8
|
+
details: `Depth "${depth}"`,
|
|
9
|
+
});
|
|
10
|
+
Object.defineProperty(this, "name", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: "InvalidGenericDepthError"
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=splitParameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitParameters.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/errors/splitParameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,OAAO,wBAAyB,SAAQ,SAAS;IAGrD,YAAY,EAAE,OAAO,EAAE,KAAK,EAAsC;QAChE,KAAK,CAAC,4BAA4B,EAAE;YAClC,YAAY,EAAE;gBACZ,IAAI,OAAO,CAAC,IAAI,EAAE,kBAChB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAC1B,YAAY;aACb;YACD,OAAO,EAAE,UAAU,KAAK,GAAG;SAC5B,CAAC,CAAC;QAVI;;;;mBAAO,0BAA0B;WAAC;IAW3C,CAAC;CACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { execTyped, isGenericRegex } from "../../regex.js";
|
|
2
|
+
import { InvalidRecordSignatureError, InvalidSignatureError, } from "./errors/signature.js";
|
|
3
|
+
import { execRecordSignature, isRecordSignature } from "./signatures.js";
|
|
4
|
+
import { parseKwitParameter } from "./utils.js";
|
|
5
|
+
export function parseRecords(signatures) {
|
|
6
|
+
const shallowRecords = {};
|
|
7
|
+
const signaturesLength = signatures.length;
|
|
8
|
+
for (let i = 0; i < signaturesLength; i++) {
|
|
9
|
+
const signature = signatures[i];
|
|
10
|
+
if (!isRecordSignature(signature))
|
|
11
|
+
continue;
|
|
12
|
+
const match = execRecordSignature(signature);
|
|
13
|
+
if (!match)
|
|
14
|
+
throw new InvalidSignatureError({ signature, type: "record" });
|
|
15
|
+
const properties = match.properties.split(",");
|
|
16
|
+
const components = [];
|
|
17
|
+
const propertiesLength = properties.length;
|
|
18
|
+
for (let k = 0; k < propertiesLength; k++) {
|
|
19
|
+
const property = properties[k];
|
|
20
|
+
const trimmed = property.trim();
|
|
21
|
+
if (!trimmed)
|
|
22
|
+
continue;
|
|
23
|
+
const kwitParameter = parseKwitParameter(trimmed, {
|
|
24
|
+
type: "record",
|
|
25
|
+
});
|
|
26
|
+
components.push(kwitParameter);
|
|
27
|
+
}
|
|
28
|
+
if (!components.length)
|
|
29
|
+
throw new InvalidRecordSignatureError({ signature });
|
|
30
|
+
shallowRecords[match.name] = components;
|
|
31
|
+
}
|
|
32
|
+
const resolvedRecords = {};
|
|
33
|
+
const entries = Object.entries(shallowRecords);
|
|
34
|
+
const entriesLength = entries.length;
|
|
35
|
+
for (let i = 0; i < entriesLength; i++) {
|
|
36
|
+
const [name, parameters] = entries[i];
|
|
37
|
+
resolvedRecords[name] = resolveRecords(parameters, shallowRecords);
|
|
38
|
+
}
|
|
39
|
+
return resolvedRecords;
|
|
40
|
+
}
|
|
41
|
+
// TODO: move?
|
|
42
|
+
// e.g. "list<u8>", "option<signer>", "result<integer, error>", "borrow<proc-context>"
|
|
43
|
+
export function isGeneric(type) {
|
|
44
|
+
return isGenericRegex.test(type.trim());
|
|
45
|
+
}
|
|
46
|
+
// e.g. "string", "list<u8>", "option<signer>", "result<integer, error>", "borrow<proc-context>"
|
|
47
|
+
const witTypeRegex = /^(?:(?<wrapper>borrow|own)\s*<\s*)?(?<base>[a-zA-Z$_][a-zA-Z0-9$_-]*)(?:\s*<(?<inner>[\s\S]+)>)?\s*(?:>)?$/;
|
|
48
|
+
function resolveRecords(kwitParameters, records, ancestors = new Set()) {
|
|
49
|
+
const components = [];
|
|
50
|
+
for (const kwitParameter of kwitParameters) {
|
|
51
|
+
const m = execTyped(witTypeRegex, kwitParameter.type);
|
|
52
|
+
// TODO: add custom error
|
|
53
|
+
if (!m?.base)
|
|
54
|
+
throw new Error(`Invalid WIT type: ${kwitParameter.type}`);
|
|
55
|
+
const base = m.base;
|
|
56
|
+
// If it's a named record, expand it into a tuple of its fields.
|
|
57
|
+
if (base in records) {
|
|
58
|
+
// TODO: add custom error
|
|
59
|
+
if (ancestors.has(base))
|
|
60
|
+
throw new Error("Circular reference detected.");
|
|
61
|
+
components.push({
|
|
62
|
+
...kwitParameter,
|
|
63
|
+
type: "tuple", // normalize records -> tuple
|
|
64
|
+
components: resolveRecords(records[base] ?? [], records, new Set([...ancestors, base])),
|
|
65
|
+
});
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// Otherwise, just pass it through (builtins, generics, etc.)
|
|
69
|
+
components.push(kwitParameter);
|
|
70
|
+
}
|
|
71
|
+
return components;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../../../../src/kwit/kwit-parser/core/records.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { parseRecords } from "./records.js";
|
|
3
|
+
test("parse records", () => {
|
|
4
|
+
expect(parseRecords([
|
|
5
|
+
"record contract-address { name: string, height: s64, tx-index: s64 }",
|
|
6
|
+
"record token-pair { a: contract-address, b: contract-address }",
|
|
7
|
+
])).toEqual({
|
|
8
|
+
"contract-address": [
|
|
9
|
+
{ name: "name", type: "string" },
|
|
10
|
+
{ name: "height", type: "s64" },
|
|
11
|
+
{ name: "tx-index", type: "s64" },
|
|
12
|
+
],
|
|
13
|
+
"token-pair": [
|
|
14
|
+
{
|
|
15
|
+
type: "tuple",
|
|
16
|
+
name: "a",
|
|
17
|
+
components: [
|
|
18
|
+
{ name: "name", type: "string" },
|
|
19
|
+
{ name: "height", type: "s64" },
|
|
20
|
+
{ name: "tx-index", type: "s64" },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: "tuple",
|
|
25
|
+
name: "b",
|
|
26
|
+
components: [
|
|
27
|
+
{ name: "name", type: "string" },
|
|
28
|
+
{ name: "height", type: "s64" },
|
|
29
|
+
{ name: "tx-index", type: "s64" },
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
test("generic", () => {
|
|
36
|
+
expect(parseRecords(["record generic { values: list<string> }"])).toEqual({
|
|
37
|
+
generic: [{ name: "values", type: "list<string>" }],
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
test("generic", () => {
|
|
41
|
+
expect(parseRecords([
|
|
42
|
+
"record contract-address { name: string, height: s64, tx-index: s64 }",
|
|
43
|
+
"record generic { values: list<contract-address> }",
|
|
44
|
+
])).toEqual({
|
|
45
|
+
"contract-address": [
|
|
46
|
+
{ type: "string", name: "name" },
|
|
47
|
+
{ type: "s64", name: "height" },
|
|
48
|
+
{ type: "s64", name: "tx-index" },
|
|
49
|
+
],
|
|
50
|
+
generic: [{ name: "values", type: "list<contract-address>" }],
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=records.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.test.js","sourceRoot":"","sources":["../../../../../src/kwit/kwit-parser/core/records.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IACzB,MAAM,CACJ,YAAY,CAAC;QACX,uEAAuE;QACvE,iEAAiE;KAClE,CAAC,CACH,CAAC,OAAO,CAAC;QACR,kBAAkB,EAAE;YAClB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;YAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;SAClC;QACD,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,GAAG;gBACT,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;oBAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;iBAClC;aACF;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,GAAG;gBACT,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;oBAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;iBAClC;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;IACnB,MAAM,CAAC,YAAY,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;KACpD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;IACnB,MAAM,CACJ,YAAY,CAAC;QACX,uEAAuE;QACvE,oDAAoD;KACrD,CAAC,CACH,CAAC,OAAO,CAAC;QACR,kBAAkB,EAAE;YAClB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;YAChC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;SAClC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// import type { KwitFuncContext } from "../../kwit.ts";
|
|
2
|
+
import { execTyped } from "../../regex.js";
|
|
3
|
+
const errorSignatureRegex = /^error (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\((?<parameters>.*?)\)$/;
|
|
4
|
+
export function isErrorSignature(signature) {
|
|
5
|
+
return errorSignatureRegex.test(signature);
|
|
6
|
+
}
|
|
7
|
+
export function execErrorSignature(signature) {
|
|
8
|
+
return execTyped(errorSignatureRegex, signature);
|
|
9
|
+
}
|
|
10
|
+
const kwitFnSignatureRegex = /^export\s+(?<name>[a-z][a-z0-9-]*)\s*:\s*func\s*\(\s*ctx\s*:\s*borrow<(?<ctx>proc-context|view-context|core-context)>\s*(?:,\s*(?<rest>.*?))?\)\s*(?:->\s*(?<returns>[^;]+))?;\s*$/;
|
|
11
|
+
export function isFunctionSignature(signature) {
|
|
12
|
+
return kwitFnSignatureRegex.test(signature);
|
|
13
|
+
}
|
|
14
|
+
export function execFunctionSignature(signature) {
|
|
15
|
+
const m = kwitFnSignatureRegex.exec(signature);
|
|
16
|
+
if (!m || !m.groups)
|
|
17
|
+
return null;
|
|
18
|
+
const name = m.groups.name;
|
|
19
|
+
const ctx = m.groups.ctx;
|
|
20
|
+
const type = ctx === "proc-context" ? "proc" : ctx == "view-context" ? "view" : "core";
|
|
21
|
+
const rest = (m.groups.rest ?? "").trim();
|
|
22
|
+
const parameters = rest.length > 0 ? `ctx: borrow<${ctx}>, ${rest}` : `ctx: borrow<${ctx}>`;
|
|
23
|
+
const returns = (m.groups.returns ?? "").trim() || undefined;
|
|
24
|
+
return { name, type, parameters, returns };
|
|
25
|
+
}
|
|
26
|
+
const kwitRecordSignatureRegex = /^record\s+(?<name>[a-zA-Z$_][a-zA-Z0-9$_-]*)\s*\{(?<properties>[\s\S]*?)\}$/;
|
|
27
|
+
export function isRecordSignature(signature) {
|
|
28
|
+
return kwitRecordSignatureRegex.test(signature);
|
|
29
|
+
}
|
|
30
|
+
export function execRecordSignature(signature) {
|
|
31
|
+
return execTyped(kwitRecordSignatureRegex, signature);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=signatures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatures.js","sourceRoot":"","sources":["../../../../../src/kwit/kwit-parser/core/signatures.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,mBAAmB,GACvB,iEAAiE,CAAC;AACpE,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO,SAAS,CACd,mBAAmB,EACnB,SAAS,CACV,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GACxB,oLAAoL,CAAC;AAEvL,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,MAAM,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAK,CAAC;IAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAuD,CAAC;IAC7E,MAAM,IAAI,GACR,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAE5E,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,UAAU,GACd,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC;IAE3E,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAE7D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,wBAAwB,GAC5B,6EAA6E,CAAC;AAEhF,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,SAAS,CAGb,wBAAwB,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { expect, test, describe } from "vitest";
|
|
2
|
+
import { execFunctionSignature, isFunctionSignature } from "./signatures.js";
|
|
3
|
+
describe("isFunctionSignature", () => {
|
|
4
|
+
test.each([
|
|
5
|
+
"export fib: func(ctx: borrow<proc-context>, arith-address: contract-address, n: u64) -> u64;",
|
|
6
|
+
"export fib-of-sub: func(ctx: borrow<proc-context>, arith-address: contract-address, x: string, y: string) -> result<u64, error>;",
|
|
7
|
+
"export cached-values: func(ctx: borrow<view-context>) -> list<u64>;",
|
|
8
|
+
])("%s -> %s", (input) => {
|
|
9
|
+
expect(isFunctionSignature(input)).toBe(true);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
describe("execFunctionSignature", () => {
|
|
13
|
+
test.each([
|
|
14
|
+
{
|
|
15
|
+
input: "export fib: func(ctx: borrow<proc-context>, arith-address: contract-address, n: u64) -> u64;",
|
|
16
|
+
expected: {
|
|
17
|
+
name: "fib",
|
|
18
|
+
type: "proc",
|
|
19
|
+
parameters: "ctx: borrow<proc-context>, arith-address: contract-address, n: u64",
|
|
20
|
+
returns: "u64",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
input: "export fib-of-sub: func(ctx: borrow<proc-context>, arith-address: contract-address, x: string, y: string) -> result<u64, error>;",
|
|
25
|
+
expected: {
|
|
26
|
+
name: "fib-of-sub",
|
|
27
|
+
type: "proc",
|
|
28
|
+
parameters: "ctx: borrow<proc-context>, arith-address: contract-address, x: string, y: string",
|
|
29
|
+
returns: "result<u64, error>",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
input: "export cached-values: func(ctx: borrow<view-context>) -> list<u64>;",
|
|
34
|
+
expected: {
|
|
35
|
+
name: "cached-values",
|
|
36
|
+
type: "view",
|
|
37
|
+
parameters: "ctx: borrow<view-context>",
|
|
38
|
+
returns: "list<u64>",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
input: "export cached-values: func(ctx: borrow<core-context>) -> list<u64>;",
|
|
43
|
+
expected: {
|
|
44
|
+
name: "cached-values",
|
|
45
|
+
type: "core",
|
|
46
|
+
parameters: "ctx: borrow<core-context>",
|
|
47
|
+
returns: "list<u64>",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
])("%s", ({ input, expected }) => {
|
|
51
|
+
expect(execFunctionSignature(input)).toStrictEqual(expected);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=signatures.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatures.test.js","sourceRoot":"","sources":["../../../../../src/kwit/kwit-parser/core/signatures.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,IAAI,CAAC;QACR,8FAA8F;QAE9F,kIAAkI;QAElI,qEAAqE;KACtE,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QACvB,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,IAAI,CAAC;QACR;YACE,KAAK,EACH,8FAA8F;YAChG,QAAQ,EAAE;gBACR,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,MAAM;gBACZ,UAAU,EACR,oEAAoE;gBACtE,OAAO,EAAE,KAAK;aACf;SACF;QACD;YACE,KAAK,EACH,kIAAkI;YACpI,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,MAAM;gBACZ,UAAU,EACR,kFAAkF;gBACpF,OAAO,EAAE,oBAAoB;aAC9B;SACF;QACD;YACE,KAAK,EACH,qEAAqE;YACvE,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,2BAA2B;gBACvC,OAAO,EAAE,WAAW;aACrB;SACF;QACD;YACE,KAAK,EACH,qEAAqE;YACvE,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,2BAA2B;gBACvC,OAAO,EAAE,WAAW;aACrB;SACF;KACF,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/B,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/types/records.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { expectTypeOf, test } from "vitest";
|
|
2
|
+
test("ParseRecords", () => {
|
|
3
|
+
expectTypeOf().toEqualTypeOf();
|
|
4
|
+
expectTypeOf().toEqualTypeOf();
|
|
5
|
+
expectTypeOf().toEqualTypeOf();
|
|
6
|
+
});
|
|
7
|
+
test("ParseRecord", () => {
|
|
8
|
+
expectTypeOf().toEqualTypeOf();
|
|
9
|
+
expectTypeOf().toEqualTypeOf();
|
|
10
|
+
expectTypeOf().toEqualTypeOf();
|
|
11
|
+
});
|
|
12
|
+
test("ParseRecordProperties", () => {
|
|
13
|
+
expectTypeOf().toEqualTypeOf();
|
|
14
|
+
expectTypeOf().toEqualTypeOf();
|
|
15
|
+
expectTypeOf().toEqualTypeOf();
|
|
16
|
+
expectTypeOf().toEqualTypeOf();
|
|
17
|
+
expectTypeOf().toEqualTypeOf();
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=records.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.test-d.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/types/records.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiB5C,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;IACxB,YAAY,EAOT,CAAC,aAAa,EA2Bb,CAAC;IACL,YAAY,EAOT,CAAC,aAAa,EAab,CAAC;IACL,YAAY,EAET,CAAC,aAAa,EAYb,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;IACvB,YAAY,EAET,CAAC,aAAa,EAOb,CAAC;IAEL,YAAY,EAET,CAAC,aAAa,EAMb,CAAC;IAEL,YAAY,EAKT,CAAC,aAAa,EAsBb,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACjC,YAAY,EAET,CAAC,aAAa,EAMd,CAAC;IAEJ,YAAY,EAET,CAAC,aAAa,EAKd,CAAC;IAEJ,YAAY,EAET,CAAC,aAAa,EAqBd,CAAC;IAEJ,YAAY,EAET,CAAC,aAAa,EAOd,CAAC;IAEJ,YAAY,EAET,CAAC,aAAa,EAYd,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatures.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/types/signatures.ts"],"names":[],"mappings":";AAmLA,SAAS"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { assertType, test } from "vitest";
|
|
2
|
+
test("IsFunctionSignature", () => {
|
|
3
|
+
assertType(true);
|
|
4
|
+
assertType(true);
|
|
5
|
+
assertType(true);
|
|
6
|
+
});
|
|
7
|
+
test("IsRecordSignature", () => {
|
|
8
|
+
assertType(true);
|
|
9
|
+
assertType(true);
|
|
10
|
+
});
|
|
11
|
+
test("IsSignature", () => {
|
|
12
|
+
assertType(true);
|
|
13
|
+
assertType(true);
|
|
14
|
+
assertType(true);
|
|
15
|
+
assertType(true);
|
|
16
|
+
assertType(true);
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=signatures.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatures.test-d.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/types/signatures.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAY1C,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAER,IAAI,CAAC,CAAC;IAER,UAAU,CAER,IAAI,CAAC,CAAC;IAER,UAAU,CAER,IAAI,CAAC,CAAC;AACV,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC7B,UAAU,CAER,IAAI,CAAC,CAAC;IAER,UAAU,CAER,IAAI,CAAC,CAAC;AACV,CAAC,CAAC,CAAC;AACH,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;IACvB,UAAU,CAER,IAAI,CAAC,CAAC;IAER,UAAU,CAER,IAAI,CAAC,CAAC;IAER,UAAU,CAER,IAAI,CAAC,CAAC;IAER,UAAU,CAER,IAAI,CAAC,CAAC;IAER,UAAU,CAER,IAAI,CAAC,CAAC;AACV,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/types/utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { assertType, test } from "vitest";
|
|
2
|
+
test("ParseKwitParameter", () => {
|
|
3
|
+
// everything in fib contrct
|
|
4
|
+
assertType({
|
|
5
|
+
name: "ctx",
|
|
6
|
+
type: "borrow<proc-context>",
|
|
7
|
+
});
|
|
8
|
+
assertType({
|
|
9
|
+
name: "arith-address",
|
|
10
|
+
type: "contract-address",
|
|
11
|
+
});
|
|
12
|
+
assertType({
|
|
13
|
+
name: "n",
|
|
14
|
+
type: "u64",
|
|
15
|
+
});
|
|
16
|
+
assertType({
|
|
17
|
+
type: "u64",
|
|
18
|
+
});
|
|
19
|
+
assertType({
|
|
20
|
+
name: "x",
|
|
21
|
+
type: "string",
|
|
22
|
+
});
|
|
23
|
+
assertType({
|
|
24
|
+
name: "y",
|
|
25
|
+
type: "string",
|
|
26
|
+
});
|
|
27
|
+
assertType({
|
|
28
|
+
name: "option-string",
|
|
29
|
+
type: "option<string>",
|
|
30
|
+
});
|
|
31
|
+
assertType({
|
|
32
|
+
name: "option-list-string",
|
|
33
|
+
type: "option<list<string>>",
|
|
34
|
+
});
|
|
35
|
+
assertType({
|
|
36
|
+
name: "option-list-result-string-contract-address",
|
|
37
|
+
type: "option<list<result<string, contract-address>>>",
|
|
38
|
+
});
|
|
39
|
+
// assertType<
|
|
40
|
+
// ParseKwitParameter<
|
|
41
|
+
// "option-list-result-string-contract-address: option<list<result<string, contract-address>>>",
|
|
42
|
+
// OptionsWithRecords
|
|
43
|
+
// >
|
|
44
|
+
// >({
|
|
45
|
+
// name: "option-list-result-string-contract-address",
|
|
46
|
+
// type: "option<list<result<string, tuple>>>",
|
|
47
|
+
// components: [
|
|
48
|
+
// { type: "string", name: "left" },
|
|
49
|
+
// {
|
|
50
|
+
// name: "right",
|
|
51
|
+
// type: "tuple",
|
|
52
|
+
// components: [
|
|
53
|
+
// { type: "string", name: "name" },
|
|
54
|
+
// { name: "height", type: "s64" },
|
|
55
|
+
// { name: "tx-index", type: "s64" },
|
|
56
|
+
// ],
|
|
57
|
+
// },
|
|
58
|
+
// ],
|
|
59
|
+
// });
|
|
60
|
+
assertType({
|
|
61
|
+
type: "contract-address",
|
|
62
|
+
});
|
|
63
|
+
assertType({
|
|
64
|
+
name: "ctx",
|
|
65
|
+
type: "borrow<view-context>",
|
|
66
|
+
});
|
|
67
|
+
assertType({
|
|
68
|
+
name: "arith-address",
|
|
69
|
+
type: "contract-address",
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
test("_ParseFunctionParametersAndContext", () => {
|
|
73
|
+
assertType({
|
|
74
|
+
Inputs: "arith-address: contract-address, n: u64",
|
|
75
|
+
Context: "proc",
|
|
76
|
+
});
|
|
77
|
+
assertType({
|
|
78
|
+
Inputs: "",
|
|
79
|
+
Context: "view",
|
|
80
|
+
});
|
|
81
|
+
assertType({
|
|
82
|
+
Inputs: "",
|
|
83
|
+
Context: "view",
|
|
84
|
+
});
|
|
85
|
+
assertType({
|
|
86
|
+
Inputs: "",
|
|
87
|
+
Context: "core",
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
test("SplitParameters", () => {
|
|
91
|
+
assertType(["u64"]);
|
|
92
|
+
assertType([
|
|
93
|
+
"arith-address: contract-address",
|
|
94
|
+
"n: list<u64>",
|
|
95
|
+
]);
|
|
96
|
+
});
|
|
97
|
+
test("Parse Signature", () => {
|
|
98
|
+
assertType({
|
|
99
|
+
type: "function",
|
|
100
|
+
name: "fib",
|
|
101
|
+
context: "proc",
|
|
102
|
+
inputs: [
|
|
103
|
+
{ name: "arith-address", type: "contract-address" },
|
|
104
|
+
{ name: "n", type: "list<u64>" },
|
|
105
|
+
],
|
|
106
|
+
outputs: [
|
|
107
|
+
{
|
|
108
|
+
type: "u64",
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
});
|
|
112
|
+
assertType({
|
|
113
|
+
type: "function",
|
|
114
|
+
name: "fib",
|
|
115
|
+
context: "proc",
|
|
116
|
+
inputs: [
|
|
117
|
+
{ name: "arith-address", type: "contract-address" },
|
|
118
|
+
{ name: "n", type: "list<u64>" },
|
|
119
|
+
],
|
|
120
|
+
outputs: [
|
|
121
|
+
{
|
|
122
|
+
type: "contract-address",
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
});
|
|
126
|
+
assertType({
|
|
127
|
+
type: "function",
|
|
128
|
+
name: "fib",
|
|
129
|
+
context: "proc",
|
|
130
|
+
inputs: [
|
|
131
|
+
{
|
|
132
|
+
name: "arith-address",
|
|
133
|
+
type: "contract-address",
|
|
134
|
+
},
|
|
135
|
+
{ name: "n", type: "list<u64>" },
|
|
136
|
+
],
|
|
137
|
+
outputs: [
|
|
138
|
+
{
|
|
139
|
+
type: "contract-address",
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
});
|
|
143
|
+
assertType({
|
|
144
|
+
type: "function",
|
|
145
|
+
name: "get-dogs",
|
|
146
|
+
context: "proc",
|
|
147
|
+
inputs: [],
|
|
148
|
+
outputs: [
|
|
149
|
+
{
|
|
150
|
+
type: "list<tuple>",
|
|
151
|
+
components: [
|
|
152
|
+
{ type: "string", name: "name" },
|
|
153
|
+
{ type: "string", name: "breed" },
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=utils.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test-d.js","sourceRoot":"","sources":["../../../../../../src/kwit/kwit-parser/core/types/utils.test-d.ts"],"names":[],"mappings":"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"}
|