@kernlang/core 3.5.9-canary.220.1.c398cd95 → 4.0.0
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/capability-matrix.js +8 -6
- package/dist/capability-matrix.js.map +1 -1
- package/dist/closure-eligibility.d.ts +104 -0
- package/dist/closure-eligibility.js +443 -0
- package/dist/closure-eligibility.js.map +1 -0
- package/dist/closure-python-lowering.d.ts +26 -0
- package/dist/closure-python-lowering.js +132 -22
- package/dist/closure-python-lowering.js.map +1 -1
- package/dist/codegen/body-ts.js +13 -0
- package/dist/codegen/body-ts.js.map +1 -1
- package/dist/codegen/type-system.js +50 -3
- package/dist/codegen/type-system.js.map +1 -1
- package/dist/codegen-core.js +29 -0
- package/dist/codegen-core.js.map +1 -1
- package/dist/codegen-expression.js +7 -0
- package/dist/codegen-expression.js.map +1 -1
- package/dist/constructor-super.d.ts +34 -0
- package/dist/constructor-super.js +122 -0
- package/dist/constructor-super.js.map +1 -0
- package/dist/core-contracts/boolean.d.ts +147 -0
- package/dist/core-contracts/boolean.js +110 -0
- package/dist/core-contracts/boolean.js.map +1 -0
- package/dist/core-contracts/function.d.ts +6 -0
- package/dist/core-contracts/function.js +7 -0
- package/dist/core-contracts/function.js.map +1 -0
- package/dist/core-contracts/index.d.ts +1032 -0
- package/dist/core-contracts/index.js +30 -0
- package/dist/core-contracts/index.js.map +1 -0
- package/dist/core-contracts/list.d.ts +87 -0
- package/dist/core-contracts/list.js +54 -0
- package/dist/core-contracts/list.js.map +1 -0
- package/dist/core-contracts/nullish.d.ts +12 -0
- package/dist/core-contracts/nullish.js +13 -0
- package/dist/core-contracts/nullish.js.map +1 -0
- package/dist/core-contracts/number.d.ts +291 -0
- package/dist/core-contracts/number.js +214 -0
- package/dist/core-contracts/number.js.map +1 -0
- package/dist/core-contracts/record.d.ts +60 -0
- package/dist/core-contracts/record.js +32 -0
- package/dist/core-contracts/record.js.map +1 -0
- package/dist/core-contracts/schema.d.ts +71 -0
- package/dist/core-contracts/schema.js +98 -0
- package/dist/core-contracts/schema.js.map +1 -0
- package/dist/core-contracts/semantics.d.ts +7 -0
- package/dist/core-contracts/semantics.js +221 -0
- package/dist/core-contracts/semantics.js.map +1 -0
- package/dist/core-contracts/string.d.ts +414 -0
- package/dist/core-contracts/string.js +335 -0
- package/dist/core-contracts/string.js.map +1 -0
- package/dist/core-runtime/contract-adapter.d.ts +8 -0
- package/dist/core-runtime/contract-adapter.js +73 -0
- package/dist/core-runtime/contract-adapter.js.map +1 -0
- package/dist/core-runtime/index.d.ts +109 -0
- package/dist/core-runtime/index.js +1946 -0
- package/dist/core-runtime/index.js.map +1 -0
- package/dist/core-runtime/shape-validator.d.ts +61 -0
- package/dist/core-runtime/shape-validator.js +564 -0
- package/dist/core-runtime/shape-validator.js.map +1 -0
- package/dist/core-runtime/value-brand.d.ts +2 -0
- package/dist/core-runtime/value-brand.js +6 -0
- package/dist/core-runtime/value-brand.js.map +1 -0
- package/dist/decompiler.js +46 -0
- package/dist/decompiler.js.map +1 -1
- package/dist/eligibility-taxonomy.d.ts +58 -0
- package/dist/eligibility-taxonomy.generated.d.ts +472 -0
- package/dist/eligibility-taxonomy.generated.js +566 -0
- package/dist/eligibility-taxonomy.generated.js.map +1 -0
- package/dist/eligibility-taxonomy.js +55 -0
- package/dist/eligibility-taxonomy.js.map +1 -0
- package/dist/index.d.ts +19 -2
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/instanceof-rhs.d.ts +53 -0
- package/dist/instanceof-rhs.js +74 -0
- package/dist/instanceof-rhs.js.map +1 -0
- package/dist/ir/semantics/lambda.js +9 -1
- package/dist/ir/semantics/lambda.js.map +1 -1
- package/dist/native-eligibility-ast.d.ts +5 -0
- package/dist/native-eligibility-ast.js +242 -63
- package/dist/native-eligibility-ast.js.map +1 -1
- package/dist/parser-expression.d.ts +1 -1
- package/dist/parser-expression.js +90 -1
- package/dist/parser-expression.js.map +1 -1
- package/dist/rag-assertions.d.ts +3 -0
- package/dist/rag-assertions.js +15 -0
- package/dist/rag-assertions.js.map +1 -0
- package/dist/rag-runtime.d.ts +169 -0
- package/dist/rag-runtime.js +823 -0
- package/dist/rag-runtime.js.map +1 -0
- package/dist/schema.d.ts +1 -0
- package/dist/schema.js +197 -2
- package/dist/schema.js.map +1 -1
- package/dist/semantic-substrate.d.ts +108 -0
- package/dist/semantic-substrate.js +263 -0
- package/dist/semantic-substrate.js.map +1 -0
- package/dist/semantic-validator.d.ts +332 -0
- package/dist/semantic-validator.js +3387 -0
- package/dist/semantic-validator.js.map +1 -1
- package/dist/spec.d.ts +2 -2
- package/dist/spec.js +15 -1
- package/dist/spec.js.map +1 -1
- package/dist/value-ir.d.ts +11 -1
- package/dist/value-ir.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { CORE_FIXTURE_UNDEFINED, isCoreFixtureFunction, isCoreFixtureUndefined, } from './schema.js';
|
|
2
|
+
export class CoreContractEvaluationError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(code, message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.name = 'CoreContractEvaluationError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function coreFixtureValueType(value) {
|
|
11
|
+
if (typeof value === 'string')
|
|
12
|
+
return 'String';
|
|
13
|
+
if (typeof value === 'boolean')
|
|
14
|
+
return 'Boolean';
|
|
15
|
+
if (typeof value === 'number')
|
|
16
|
+
return 'Number';
|
|
17
|
+
if (value === null)
|
|
18
|
+
return 'Null';
|
|
19
|
+
if (isCoreFixtureUndefined(value))
|
|
20
|
+
return 'Undefined';
|
|
21
|
+
if (isCoreFixtureFunction(value))
|
|
22
|
+
return 'Function';
|
|
23
|
+
if (Array.isArray(value))
|
|
24
|
+
return 'List';
|
|
25
|
+
return 'Record';
|
|
26
|
+
}
|
|
27
|
+
export function evaluateCoreContractOperation(operationId, args) {
|
|
28
|
+
switch (operationId) {
|
|
29
|
+
case 'Boolean.not': {
|
|
30
|
+
const [value] = expectCoreTypes(operationId, args, ['Boolean']);
|
|
31
|
+
return !value;
|
|
32
|
+
}
|
|
33
|
+
case 'Boolean.and': {
|
|
34
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Boolean', 'Boolean']);
|
|
35
|
+
return left && right;
|
|
36
|
+
}
|
|
37
|
+
case 'Boolean.or': {
|
|
38
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Boolean', 'Boolean']);
|
|
39
|
+
return left || right;
|
|
40
|
+
}
|
|
41
|
+
case 'Boolean.equals': {
|
|
42
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Boolean', 'Boolean']);
|
|
43
|
+
return left === right;
|
|
44
|
+
}
|
|
45
|
+
case 'Boolean.toString': {
|
|
46
|
+
const [value] = expectCoreTypes(operationId, args, ['Boolean']);
|
|
47
|
+
return value ? 'true' : 'false';
|
|
48
|
+
}
|
|
49
|
+
case 'String.length': {
|
|
50
|
+
const [value] = expectCoreTypes(operationId, args, ['String']);
|
|
51
|
+
return stringCodePoints(value).length;
|
|
52
|
+
}
|
|
53
|
+
case 'String.index': {
|
|
54
|
+
const [value, index] = expectCoreTypes(operationId, args, ['String', 'Number']);
|
|
55
|
+
if (!Number.isInteger(index) || index < 0)
|
|
56
|
+
return CORE_FIXTURE_UNDEFINED;
|
|
57
|
+
const chars = stringCodePoints(value);
|
|
58
|
+
return index < chars.length ? (chars[index] ?? '') : CORE_FIXTURE_UNDEFINED;
|
|
59
|
+
}
|
|
60
|
+
case 'String.includes': {
|
|
61
|
+
const [value, search] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
62
|
+
return value.includes(search);
|
|
63
|
+
}
|
|
64
|
+
case 'String.startsWith': {
|
|
65
|
+
const [value, search] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
66
|
+
return value.startsWith(search);
|
|
67
|
+
}
|
|
68
|
+
case 'String.endsWith': {
|
|
69
|
+
const [value, search] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
70
|
+
return value.endsWith(search);
|
|
71
|
+
}
|
|
72
|
+
case 'String.slice': {
|
|
73
|
+
const [value, start, end] = expectCoreTypes(operationId, args, ['String', 'Number', 'Number']);
|
|
74
|
+
return stringCodePoints(value).slice(truncateOffset(start), truncateOffset(end)).join('');
|
|
75
|
+
}
|
|
76
|
+
case 'String.trim': {
|
|
77
|
+
const [value] = expectCoreTypes(operationId, args, ['String']);
|
|
78
|
+
return value.trim();
|
|
79
|
+
}
|
|
80
|
+
case 'String.lower': {
|
|
81
|
+
const [value] = expectCoreTypes(operationId, args, ['String']);
|
|
82
|
+
return value.toLowerCase();
|
|
83
|
+
}
|
|
84
|
+
case 'String.upper': {
|
|
85
|
+
const [value] = expectCoreTypes(operationId, args, ['String']);
|
|
86
|
+
return value.toUpperCase();
|
|
87
|
+
}
|
|
88
|
+
case 'String.concat': {
|
|
89
|
+
const [left, right] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
90
|
+
return left + right;
|
|
91
|
+
}
|
|
92
|
+
case 'String.equals': {
|
|
93
|
+
const [left, right] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
94
|
+
return left === right;
|
|
95
|
+
}
|
|
96
|
+
case 'String.lessThan': {
|
|
97
|
+
const [left, right] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
98
|
+
return compareStrings(left, right) < 0;
|
|
99
|
+
}
|
|
100
|
+
case 'String.lessThanOrEqual': {
|
|
101
|
+
const [left, right] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
102
|
+
return compareStrings(left, right) <= 0;
|
|
103
|
+
}
|
|
104
|
+
case 'String.greaterThan': {
|
|
105
|
+
const [left, right] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
106
|
+
return compareStrings(left, right) > 0;
|
|
107
|
+
}
|
|
108
|
+
case 'String.greaterThanOrEqual': {
|
|
109
|
+
const [left, right] = expectCoreTypes(operationId, args, ['String', 'String']);
|
|
110
|
+
return compareStrings(left, right) >= 0;
|
|
111
|
+
}
|
|
112
|
+
case 'String.toString': {
|
|
113
|
+
const [value] = expectCoreTypes(operationId, args, ['String']);
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
case 'Number.negate': {
|
|
117
|
+
const [value] = expectCoreTypes(operationId, args, ['Number']);
|
|
118
|
+
return finiteNumberResult(operationId, -value);
|
|
119
|
+
}
|
|
120
|
+
case 'Number.add': {
|
|
121
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
122
|
+
return finiteNumberResult(operationId, left + right);
|
|
123
|
+
}
|
|
124
|
+
case 'Number.subtract': {
|
|
125
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
126
|
+
return finiteNumberResult(operationId, left - right);
|
|
127
|
+
}
|
|
128
|
+
case 'Number.multiply': {
|
|
129
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
130
|
+
return finiteNumberResult(operationId, left * right);
|
|
131
|
+
}
|
|
132
|
+
case 'Number.divide': {
|
|
133
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
134
|
+
if (right === 0)
|
|
135
|
+
throw new CoreContractEvaluationError('division-by-zero', 'Number.divide division by zero.');
|
|
136
|
+
return finiteNumberResult(operationId, left / right);
|
|
137
|
+
}
|
|
138
|
+
case 'Number.remainder': {
|
|
139
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
140
|
+
if (right === 0)
|
|
141
|
+
throw new CoreContractEvaluationError('division-by-zero', 'Number.remainder division by zero.');
|
|
142
|
+
return finiteNumberResult(operationId, left % right);
|
|
143
|
+
}
|
|
144
|
+
case 'Number.lessThan': {
|
|
145
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
146
|
+
return left < right;
|
|
147
|
+
}
|
|
148
|
+
case 'Number.lessThanOrEqual': {
|
|
149
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
150
|
+
return left <= right;
|
|
151
|
+
}
|
|
152
|
+
case 'Number.greaterThan': {
|
|
153
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
154
|
+
return left > right;
|
|
155
|
+
}
|
|
156
|
+
case 'Number.greaterThanOrEqual': {
|
|
157
|
+
const [left, right] = expectCoreTypes(operationId, args, ['Number', 'Number']);
|
|
158
|
+
return left >= right;
|
|
159
|
+
}
|
|
160
|
+
case 'List.length': {
|
|
161
|
+
const [value] = expectCoreTypes(operationId, args, ['List']);
|
|
162
|
+
return value.length;
|
|
163
|
+
}
|
|
164
|
+
case 'List.index': {
|
|
165
|
+
const [value, index] = expectCoreTypes(operationId, args, ['List', 'Number']);
|
|
166
|
+
if (!Number.isInteger(index) || index < 0)
|
|
167
|
+
return CORE_FIXTURE_UNDEFINED;
|
|
168
|
+
return index < value.length && Object.hasOwn(value, index)
|
|
169
|
+
? value[index]
|
|
170
|
+
: CORE_FIXTURE_UNDEFINED;
|
|
171
|
+
}
|
|
172
|
+
case 'Record.get': {
|
|
173
|
+
const [value, key] = expectCoreTypes(operationId, args, ['Record', 'String']);
|
|
174
|
+
return Object.hasOwn(value, key) ? value[key] : CORE_FIXTURE_UNDEFINED;
|
|
175
|
+
}
|
|
176
|
+
default:
|
|
177
|
+
throw new CoreContractEvaluationError('unsupported-operation', `Unsupported core contract operation: ${operationId}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function expectCoreTypes(operationId, args, types) {
|
|
181
|
+
if (args.length !== types.length)
|
|
182
|
+
throw strictTypeError(operationId, types);
|
|
183
|
+
for (let index = 0; index < types.length; index += 1) {
|
|
184
|
+
if (!Object.hasOwn(args, index))
|
|
185
|
+
throw strictTypeError(operationId, types);
|
|
186
|
+
const arg = args[index];
|
|
187
|
+
if (coreFixtureValueType(arg) !== types[index])
|
|
188
|
+
throw strictTypeError(operationId, types);
|
|
189
|
+
if (types[index] === 'Number' && (typeof arg !== 'number' || !Number.isFinite(arg))) {
|
|
190
|
+
throw strictTypeError(operationId, types);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return args;
|
|
194
|
+
}
|
|
195
|
+
function strictTypeError(operationId, types) {
|
|
196
|
+
return new CoreContractEvaluationError('strict-type', `${operationId} expects ${types.join(', ')}.`);
|
|
197
|
+
}
|
|
198
|
+
function stringCodePoints(value) {
|
|
199
|
+
return Array.from(value);
|
|
200
|
+
}
|
|
201
|
+
function compareStrings(left, right) {
|
|
202
|
+
const leftPoints = Array.from(left, (char) => char.codePointAt(0) ?? 0);
|
|
203
|
+
const rightPoints = Array.from(right, (char) => char.codePointAt(0) ?? 0);
|
|
204
|
+
const length = Math.min(leftPoints.length, rightPoints.length);
|
|
205
|
+
for (let index = 0; index < length; index += 1) {
|
|
206
|
+
const delta = (leftPoints[index] ?? 0) - (rightPoints[index] ?? 0);
|
|
207
|
+
if (delta !== 0)
|
|
208
|
+
return delta;
|
|
209
|
+
}
|
|
210
|
+
return leftPoints.length - rightPoints.length;
|
|
211
|
+
}
|
|
212
|
+
function truncateOffset(value) {
|
|
213
|
+
return Math.trunc(value);
|
|
214
|
+
}
|
|
215
|
+
function finiteNumberResult(operationId, value) {
|
|
216
|
+
if (!Number.isFinite(value)) {
|
|
217
|
+
throw new CoreContractEvaluationError('strict-type', `${operationId} result must be finite.`);
|
|
218
|
+
}
|
|
219
|
+
return value;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=semantics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantics.js","sourceRoot":"","sources":["../../src/core-contracts/semantics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
export declare const STRING_CONTRACT: {
|
|
2
|
+
readonly name: "String";
|
|
3
|
+
readonly kind: "primitive";
|
|
4
|
+
readonly strict: true;
|
|
5
|
+
readonly operations: readonly [{
|
|
6
|
+
readonly id: "String.length";
|
|
7
|
+
readonly kind: "property";
|
|
8
|
+
readonly args: readonly ["String"];
|
|
9
|
+
readonly returns: "Number";
|
|
10
|
+
readonly lowers: {
|
|
11
|
+
readonly kern: "String.length($0)";
|
|
12
|
+
readonly ts: "__kernStringLength($0)";
|
|
13
|
+
readonly python: "__kern_string_length($0)";
|
|
14
|
+
};
|
|
15
|
+
readonly fixtures: readonly [{
|
|
16
|
+
readonly args: readonly [""];
|
|
17
|
+
readonly returns: 0;
|
|
18
|
+
}, {
|
|
19
|
+
readonly args: readonly ["kern"];
|
|
20
|
+
readonly returns: 4;
|
|
21
|
+
}, {
|
|
22
|
+
readonly args: readonly ["𐐷"];
|
|
23
|
+
readonly returns: 1;
|
|
24
|
+
}, {
|
|
25
|
+
readonly args: readonly ["é"];
|
|
26
|
+
readonly returns: 2;
|
|
27
|
+
}];
|
|
28
|
+
readonly review: {
|
|
29
|
+
readonly summary: "KERN string length counts Unicode code points with no normalization.";
|
|
30
|
+
readonly graph: readonly ["String", "Number", "portable", "unicode-code-point"];
|
|
31
|
+
};
|
|
32
|
+
}, {
|
|
33
|
+
readonly id: "String.index";
|
|
34
|
+
readonly kind: "method";
|
|
35
|
+
readonly args: readonly ["String", "Number"];
|
|
36
|
+
readonly returns: readonly ["String", "Undefined"];
|
|
37
|
+
readonly lowers: {
|
|
38
|
+
readonly kern: "String.index($0, $1)";
|
|
39
|
+
readonly ts: "__kernStringIndex($0, $1)";
|
|
40
|
+
readonly python: "__kern_string_index($0, $1)";
|
|
41
|
+
};
|
|
42
|
+
readonly fixtures: readonly [{
|
|
43
|
+
readonly args: readonly ["abc", 1];
|
|
44
|
+
readonly returns: "b";
|
|
45
|
+
}, {
|
|
46
|
+
readonly args: readonly ["a𐐷b", 1];
|
|
47
|
+
readonly returns: "𐐷";
|
|
48
|
+
}, {
|
|
49
|
+
readonly args: readonly ["abc", 4];
|
|
50
|
+
readonly returns: {
|
|
51
|
+
readonly __kernFixture: "Undefined";
|
|
52
|
+
};
|
|
53
|
+
}, {
|
|
54
|
+
readonly args: readonly ["abc", -1];
|
|
55
|
+
readonly returns: {
|
|
56
|
+
readonly __kernFixture: "Undefined";
|
|
57
|
+
};
|
|
58
|
+
}, {
|
|
59
|
+
readonly args: readonly ["abc", 1.2];
|
|
60
|
+
readonly returns: {
|
|
61
|
+
readonly __kernFixture: "Undefined";
|
|
62
|
+
};
|
|
63
|
+
}, {
|
|
64
|
+
readonly args: readonly ["abc", "1"];
|
|
65
|
+
readonly throws: {
|
|
66
|
+
readonly code: "strict-type";
|
|
67
|
+
readonly message: "String.index expects String, Number.";
|
|
68
|
+
};
|
|
69
|
+
}];
|
|
70
|
+
readonly review: {
|
|
71
|
+
readonly summary: "Strict string indexing over Unicode code-point offsets; negative, fractional, and out-of-range misses return Undefined.";
|
|
72
|
+
readonly graph: readonly ["String", "Undefined", "strict", "portable", "unicode-code-point"];
|
|
73
|
+
};
|
|
74
|
+
}, {
|
|
75
|
+
readonly id: "String.includes";
|
|
76
|
+
readonly kind: "method";
|
|
77
|
+
readonly args: readonly ["String", "String"];
|
|
78
|
+
readonly returns: "Boolean";
|
|
79
|
+
readonly lowers: {
|
|
80
|
+
readonly kern: "String.includes($0, $1)";
|
|
81
|
+
readonly ts: "__kernStringIncludes($0, $1)";
|
|
82
|
+
readonly python: "__kern_string_includes($0, $1)";
|
|
83
|
+
};
|
|
84
|
+
readonly fixtures: readonly [{
|
|
85
|
+
readonly args: readonly ["abc", "b"];
|
|
86
|
+
readonly returns: true;
|
|
87
|
+
}, {
|
|
88
|
+
readonly args: readonly ["abc", "x"];
|
|
89
|
+
readonly returns: false;
|
|
90
|
+
}];
|
|
91
|
+
readonly review: {
|
|
92
|
+
readonly summary: "Strict string containment.";
|
|
93
|
+
readonly graph: readonly ["String", "Boolean", "portable"];
|
|
94
|
+
};
|
|
95
|
+
}, {
|
|
96
|
+
readonly id: "String.startsWith";
|
|
97
|
+
readonly kind: "method";
|
|
98
|
+
readonly args: readonly ["String", "String"];
|
|
99
|
+
readonly returns: "Boolean";
|
|
100
|
+
readonly lowers: {
|
|
101
|
+
readonly kern: "String.startsWith($0, $1)";
|
|
102
|
+
readonly ts: "__kernStringStartsWith($0, $1)";
|
|
103
|
+
readonly python: "__kern_string_starts_with($0, $1)";
|
|
104
|
+
};
|
|
105
|
+
readonly fixtures: readonly [{
|
|
106
|
+
readonly args: readonly ["kern", "ke"];
|
|
107
|
+
readonly returns: true;
|
|
108
|
+
}, {
|
|
109
|
+
readonly args: readonly ["kern", "rn"];
|
|
110
|
+
readonly returns: false;
|
|
111
|
+
}];
|
|
112
|
+
readonly review: {
|
|
113
|
+
readonly summary: "Strict string prefix test.";
|
|
114
|
+
readonly graph: readonly ["String", "Boolean", "portable"];
|
|
115
|
+
};
|
|
116
|
+
}, {
|
|
117
|
+
readonly id: "String.endsWith";
|
|
118
|
+
readonly kind: "method";
|
|
119
|
+
readonly args: readonly ["String", "String"];
|
|
120
|
+
readonly returns: "Boolean";
|
|
121
|
+
readonly lowers: {
|
|
122
|
+
readonly kern: "String.endsWith($0, $1)";
|
|
123
|
+
readonly ts: "__kernStringEndsWith($0, $1)";
|
|
124
|
+
readonly python: "__kern_string_ends_with($0, $1)";
|
|
125
|
+
};
|
|
126
|
+
readonly fixtures: readonly [{
|
|
127
|
+
readonly args: readonly ["kern", "rn"];
|
|
128
|
+
readonly returns: true;
|
|
129
|
+
}, {
|
|
130
|
+
readonly args: readonly ["kern", "ke"];
|
|
131
|
+
readonly returns: false;
|
|
132
|
+
}];
|
|
133
|
+
readonly review: {
|
|
134
|
+
readonly summary: "Strict string suffix test.";
|
|
135
|
+
readonly graph: readonly ["String", "Boolean", "portable"];
|
|
136
|
+
};
|
|
137
|
+
}, {
|
|
138
|
+
readonly id: "String.slice";
|
|
139
|
+
readonly kind: "method";
|
|
140
|
+
readonly args: readonly ["String", "Number", "Number"];
|
|
141
|
+
readonly returns: "String";
|
|
142
|
+
readonly lowers: {
|
|
143
|
+
readonly kern: "String.slice($0, $1, $2)";
|
|
144
|
+
readonly ts: "__kernStringSlice($0, $1, $2)";
|
|
145
|
+
readonly python: "__kern_string_slice($0, $1, $2)";
|
|
146
|
+
};
|
|
147
|
+
readonly fixtures: readonly [{
|
|
148
|
+
readonly args: readonly ["abcdef", 1, 4];
|
|
149
|
+
readonly returns: "bcd";
|
|
150
|
+
}, {
|
|
151
|
+
readonly args: readonly ["abcdef", 1.9, 4.2];
|
|
152
|
+
readonly returns: "bcd";
|
|
153
|
+
}, {
|
|
154
|
+
readonly args: readonly ["abc", 0, 2];
|
|
155
|
+
readonly returns: "ab";
|
|
156
|
+
}, {
|
|
157
|
+
readonly args: readonly ["abcdef", -3, -1];
|
|
158
|
+
readonly returns: "de";
|
|
159
|
+
}, {
|
|
160
|
+
readonly args: readonly ["abcdef", -20, 2];
|
|
161
|
+
readonly returns: "ab";
|
|
162
|
+
}, {
|
|
163
|
+
readonly args: readonly ["abcdef", 4, 2];
|
|
164
|
+
readonly returns: "";
|
|
165
|
+
}, {
|
|
166
|
+
readonly args: readonly ["a𐐷b", 1, 2];
|
|
167
|
+
readonly returns: "𐐷";
|
|
168
|
+
}, {
|
|
169
|
+
readonly args: readonly ["éx", 0, 2];
|
|
170
|
+
readonly returns: "é";
|
|
171
|
+
}, {
|
|
172
|
+
readonly args: readonly ["abc", "0", 2];
|
|
173
|
+
readonly throws: {
|
|
174
|
+
readonly code: "strict-type";
|
|
175
|
+
readonly message: "String.slice expects String, Number, Number.";
|
|
176
|
+
};
|
|
177
|
+
}, {
|
|
178
|
+
readonly args: readonly ["abc", 1];
|
|
179
|
+
readonly throws: {
|
|
180
|
+
readonly code: "strict-type";
|
|
181
|
+
readonly message: "String.slice expects String, Number, Number.";
|
|
182
|
+
};
|
|
183
|
+
}];
|
|
184
|
+
readonly review: {
|
|
185
|
+
readonly summary: "Strict string slice over Unicode code-point offsets with explicit start and end offsets; negative offsets count from the end.";
|
|
186
|
+
readonly graph: readonly ["String", "Number", "strict", "portable", "unicode-code-point"];
|
|
187
|
+
};
|
|
188
|
+
}, {
|
|
189
|
+
readonly id: "String.trim";
|
|
190
|
+
readonly kind: "method";
|
|
191
|
+
readonly args: readonly ["String"];
|
|
192
|
+
readonly returns: "String";
|
|
193
|
+
readonly lowers: {
|
|
194
|
+
readonly kern: "String.trim($0)";
|
|
195
|
+
readonly ts: "__kernStringTrim($0)";
|
|
196
|
+
readonly python: "__kern_string_trim($0)";
|
|
197
|
+
};
|
|
198
|
+
readonly fixtures: readonly [{
|
|
199
|
+
readonly args: readonly [" kern "];
|
|
200
|
+
readonly returns: "kern";
|
|
201
|
+
}, {
|
|
202
|
+
readonly args: readonly ["\ncore\t"];
|
|
203
|
+
readonly returns: "core";
|
|
204
|
+
}];
|
|
205
|
+
readonly review: {
|
|
206
|
+
readonly summary: "Portable surrounding whitespace trim.";
|
|
207
|
+
readonly graph: readonly ["String", "portable"];
|
|
208
|
+
};
|
|
209
|
+
}, {
|
|
210
|
+
readonly id: "String.lower";
|
|
211
|
+
readonly kind: "method";
|
|
212
|
+
readonly args: readonly ["String"];
|
|
213
|
+
readonly returns: "String";
|
|
214
|
+
readonly lowers: {
|
|
215
|
+
readonly kern: "String.lower($0)";
|
|
216
|
+
readonly ts: "__kernStringLower($0)";
|
|
217
|
+
readonly python: "__kern_string_lower($0)";
|
|
218
|
+
};
|
|
219
|
+
readonly fixtures: readonly [{
|
|
220
|
+
readonly args: readonly ["KERN"];
|
|
221
|
+
readonly returns: "kern";
|
|
222
|
+
}, {
|
|
223
|
+
readonly args: readonly ["Core"];
|
|
224
|
+
readonly returns: "core";
|
|
225
|
+
}];
|
|
226
|
+
readonly review: {
|
|
227
|
+
readonly summary: "Portable lowercase conversion.";
|
|
228
|
+
readonly graph: readonly ["String", "portable"];
|
|
229
|
+
};
|
|
230
|
+
}, {
|
|
231
|
+
readonly id: "String.upper";
|
|
232
|
+
readonly kind: "method";
|
|
233
|
+
readonly args: readonly ["String"];
|
|
234
|
+
readonly returns: "String";
|
|
235
|
+
readonly lowers: {
|
|
236
|
+
readonly kern: "String.upper($0)";
|
|
237
|
+
readonly ts: "__kernStringUpper($0)";
|
|
238
|
+
readonly python: "__kern_string_upper($0)";
|
|
239
|
+
};
|
|
240
|
+
readonly fixtures: readonly [{
|
|
241
|
+
readonly args: readonly ["kern"];
|
|
242
|
+
readonly returns: "KERN";
|
|
243
|
+
}, {
|
|
244
|
+
readonly args: readonly ["Core"];
|
|
245
|
+
readonly returns: "CORE";
|
|
246
|
+
}];
|
|
247
|
+
readonly review: {
|
|
248
|
+
readonly summary: "Portable uppercase conversion.";
|
|
249
|
+
readonly graph: readonly ["String", "portable"];
|
|
250
|
+
};
|
|
251
|
+
}, {
|
|
252
|
+
readonly id: "String.concat";
|
|
253
|
+
readonly kind: "method";
|
|
254
|
+
readonly args: readonly ["String", "String"];
|
|
255
|
+
readonly returns: "String";
|
|
256
|
+
readonly lowers: {
|
|
257
|
+
readonly kern: "String.concat($0, $1)";
|
|
258
|
+
readonly ts: "__kernStringConcat($0, $1)";
|
|
259
|
+
readonly python: "__kern_string_concat($0, $1)";
|
|
260
|
+
};
|
|
261
|
+
readonly fixtures: readonly [{
|
|
262
|
+
readonly args: readonly ["kern", "lang"];
|
|
263
|
+
readonly returns: "kernlang";
|
|
264
|
+
}, {
|
|
265
|
+
readonly args: readonly ["count:", 2];
|
|
266
|
+
readonly throws: {
|
|
267
|
+
readonly code: "strict-type";
|
|
268
|
+
readonly message: "String.concat expects String, String.";
|
|
269
|
+
};
|
|
270
|
+
}];
|
|
271
|
+
readonly review: {
|
|
272
|
+
readonly summary: "Strict string concatenation; both operands must be String.";
|
|
273
|
+
readonly graph: readonly ["String", "strict", "portable"];
|
|
274
|
+
};
|
|
275
|
+
}, {
|
|
276
|
+
readonly id: "String.equals";
|
|
277
|
+
readonly kind: "method";
|
|
278
|
+
readonly args: readonly ["String", "String"];
|
|
279
|
+
readonly returns: "Boolean";
|
|
280
|
+
readonly lowers: {
|
|
281
|
+
readonly kern: "String.equals($0, $1)";
|
|
282
|
+
readonly ts: "__kernStringEquals($0, $1)";
|
|
283
|
+
readonly python: "__kern_string_equals($0, $1)";
|
|
284
|
+
};
|
|
285
|
+
readonly fixtures: readonly [{
|
|
286
|
+
readonly args: readonly ["kern", "kern"];
|
|
287
|
+
readonly returns: true;
|
|
288
|
+
}, {
|
|
289
|
+
readonly args: readonly ["kern", "core"];
|
|
290
|
+
readonly returns: false;
|
|
291
|
+
}, {
|
|
292
|
+
readonly args: readonly ["kern", true];
|
|
293
|
+
readonly throws: {
|
|
294
|
+
readonly code: "strict-type";
|
|
295
|
+
readonly message: "String.equals expects String, String.";
|
|
296
|
+
};
|
|
297
|
+
}];
|
|
298
|
+
readonly review: {
|
|
299
|
+
readonly summary: "Strict string equality; cross-type equality is a type error in schema v1.";
|
|
300
|
+
readonly graph: readonly ["String", "Boolean", "strict", "portable"];
|
|
301
|
+
};
|
|
302
|
+
}, {
|
|
303
|
+
readonly id: "String.lessThan";
|
|
304
|
+
readonly kind: "operator";
|
|
305
|
+
readonly args: readonly ["String", "String"];
|
|
306
|
+
readonly returns: "Boolean";
|
|
307
|
+
readonly lowers: {
|
|
308
|
+
readonly kern: "String.lessThan($0, $1)";
|
|
309
|
+
readonly ts: "__kernStringLessThan($0, $1)";
|
|
310
|
+
readonly python: "__kern_string_less_than($0, $1)";
|
|
311
|
+
};
|
|
312
|
+
readonly fixtures: readonly [{
|
|
313
|
+
readonly args: readonly ["abc", "abd"];
|
|
314
|
+
readonly returns: true;
|
|
315
|
+
}, {
|
|
316
|
+
readonly args: readonly ["abc", "abc"];
|
|
317
|
+
readonly returns: false;
|
|
318
|
+
}, {
|
|
319
|
+
readonly args: readonly ["abc", true];
|
|
320
|
+
readonly throws: {
|
|
321
|
+
readonly code: "strict-type";
|
|
322
|
+
readonly message: "String.lessThan expects String, String.";
|
|
323
|
+
};
|
|
324
|
+
}];
|
|
325
|
+
readonly review: {
|
|
326
|
+
readonly summary: "Strict string less-than comparison using KERN portable code-point ordering.";
|
|
327
|
+
readonly graph: readonly ["String", "Boolean", "strict", "portable", "unicode-code-point-order"];
|
|
328
|
+
};
|
|
329
|
+
}, {
|
|
330
|
+
readonly id: "String.lessThanOrEqual";
|
|
331
|
+
readonly kind: "operator";
|
|
332
|
+
readonly args: readonly ["String", "String"];
|
|
333
|
+
readonly returns: "Boolean";
|
|
334
|
+
readonly lowers: {
|
|
335
|
+
readonly kern: "String.lessThanOrEqual($0, $1)";
|
|
336
|
+
readonly ts: "__kernStringLessThanOrEqual($0, $1)";
|
|
337
|
+
readonly python: "__kern_string_less_than_or_equal($0, $1)";
|
|
338
|
+
};
|
|
339
|
+
readonly fixtures: readonly [{
|
|
340
|
+
readonly args: readonly ["abc", "abc"];
|
|
341
|
+
readonly returns: true;
|
|
342
|
+
}, {
|
|
343
|
+
readonly args: readonly ["abd", "abc"];
|
|
344
|
+
readonly returns: false;
|
|
345
|
+
}];
|
|
346
|
+
readonly review: {
|
|
347
|
+
readonly summary: "Strict string less-than-or-equal comparison using KERN portable code-point ordering.";
|
|
348
|
+
readonly graph: readonly ["String", "Boolean", "strict", "portable", "unicode-code-point-order"];
|
|
349
|
+
};
|
|
350
|
+
}, {
|
|
351
|
+
readonly id: "String.greaterThan";
|
|
352
|
+
readonly kind: "operator";
|
|
353
|
+
readonly args: readonly ["String", "String"];
|
|
354
|
+
readonly returns: "Boolean";
|
|
355
|
+
readonly lowers: {
|
|
356
|
+
readonly kern: "String.greaterThan($0, $1)";
|
|
357
|
+
readonly ts: "__kernStringGreaterThan($0, $1)";
|
|
358
|
+
readonly python: "__kern_string_greater_than($0, $1)";
|
|
359
|
+
};
|
|
360
|
+
readonly fixtures: readonly [{
|
|
361
|
+
readonly args: readonly ["abd", "abc"];
|
|
362
|
+
readonly returns: true;
|
|
363
|
+
}, {
|
|
364
|
+
readonly args: readonly ["abc", "abc"];
|
|
365
|
+
readonly returns: false;
|
|
366
|
+
}];
|
|
367
|
+
readonly review: {
|
|
368
|
+
readonly summary: "Strict string greater-than comparison using KERN portable code-point ordering.";
|
|
369
|
+
readonly graph: readonly ["String", "Boolean", "strict", "portable", "unicode-code-point-order"];
|
|
370
|
+
};
|
|
371
|
+
}, {
|
|
372
|
+
readonly id: "String.greaterThanOrEqual";
|
|
373
|
+
readonly kind: "operator";
|
|
374
|
+
readonly args: readonly ["String", "String"];
|
|
375
|
+
readonly returns: "Boolean";
|
|
376
|
+
readonly lowers: {
|
|
377
|
+
readonly kern: "String.greaterThanOrEqual($0, $1)";
|
|
378
|
+
readonly ts: "__kernStringGreaterThanOrEqual($0, $1)";
|
|
379
|
+
readonly python: "__kern_string_greater_than_or_equal($0, $1)";
|
|
380
|
+
};
|
|
381
|
+
readonly fixtures: readonly [{
|
|
382
|
+
readonly args: readonly ["abc", "abc"];
|
|
383
|
+
readonly returns: true;
|
|
384
|
+
}, {
|
|
385
|
+
readonly args: readonly ["abc", "abd"];
|
|
386
|
+
readonly returns: false;
|
|
387
|
+
}];
|
|
388
|
+
readonly review: {
|
|
389
|
+
readonly summary: "Strict string greater-than-or-equal comparison using KERN portable code-point ordering.";
|
|
390
|
+
readonly graph: readonly ["String", "Boolean", "strict", "portable", "unicode-code-point-order"];
|
|
391
|
+
};
|
|
392
|
+
}, {
|
|
393
|
+
readonly id: "String.toString";
|
|
394
|
+
readonly kind: "coercion";
|
|
395
|
+
readonly args: readonly ["String"];
|
|
396
|
+
readonly returns: "String";
|
|
397
|
+
readonly lowers: {
|
|
398
|
+
readonly kern: "String.toString($0)";
|
|
399
|
+
readonly ts: "__kernStringToString($0)";
|
|
400
|
+
readonly python: "__kern_string_to_string($0)";
|
|
401
|
+
};
|
|
402
|
+
readonly fixtures: readonly [{
|
|
403
|
+
readonly args: readonly ["kern"];
|
|
404
|
+
readonly returns: "kern";
|
|
405
|
+
}, {
|
|
406
|
+
readonly args: readonly [""];
|
|
407
|
+
readonly returns: "";
|
|
408
|
+
}];
|
|
409
|
+
readonly review: {
|
|
410
|
+
readonly summary: "String identity coercion.";
|
|
411
|
+
readonly graph: readonly ["String", "portable"];
|
|
412
|
+
};
|
|
413
|
+
}];
|
|
414
|
+
};
|