@typed-sql/conformance 2.0.0-rc.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/CHANGELOG.md +30 -0
- package/LICENSE +21 -0
- package/README.md +33 -0
- package/dist/packages/conformance/src/assertions.d.ts +8 -0
- package/dist/packages/conformance/src/assertions.d.ts.map +1 -0
- package/dist/packages/conformance/src/assertions.js +194 -0
- package/dist/packages/conformance/src/assertions.js.map +1 -0
- package/dist/packages/conformance/src/index.d.ts +5 -0
- package/dist/packages/conformance/src/index.d.ts.map +1 -0
- package/dist/packages/conformance/src/index.js +4 -0
- package/dist/packages/conformance/src/index.js.map +1 -0
- package/dist/packages/conformance/src/performance.d.ts +8 -0
- package/dist/packages/conformance/src/performance.d.ts.map +1 -0
- package/dist/packages/conformance/src/performance.js +39 -0
- package/dist/packages/conformance/src/performance.js.map +1 -0
- package/dist/packages/conformance/src/types.d.ts +115 -0
- package/dist/packages/conformance/src/types.d.ts.map +1 -0
- package/dist/packages/conformance/src/types.js +11 -0
- package/dist/packages/conformance/src/types.js.map +1 -0
- package/package.json +46 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# @typed-sql/conformance
|
|
2
|
+
|
|
3
|
+
## 2.0.0-rc.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 58297bf: Publish the versioned public grammar conformance kit with typed fixture builders, required inference
|
|
8
|
+
probes, explicit capability suites, fail-closed semantics, structural variants, driver-free runtime
|
|
9
|
+
adapter and codec assertions, and normalized performance evidence.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [29afc3d]
|
|
14
|
+
- Updated dependencies [3f063f6]
|
|
15
|
+
- Updated dependencies [6a7ae58]
|
|
16
|
+
- Updated dependencies [b06fd0a]
|
|
17
|
+
- Updated dependencies [3050209]
|
|
18
|
+
- Updated dependencies [1b054b6]
|
|
19
|
+
- Updated dependencies [b4f1b6e]
|
|
20
|
+
- Updated dependencies [87189c3]
|
|
21
|
+
- Updated dependencies [e654fae]
|
|
22
|
+
- Updated dependencies [b2ec119]
|
|
23
|
+
- @typed-sql/core@2.0.0-rc.0
|
|
24
|
+
- @typed-sql/compiler@2.0.0-rc.0
|
|
25
|
+
|
|
26
|
+
## 1.0.0
|
|
27
|
+
|
|
28
|
+
### Major Changes
|
|
29
|
+
|
|
30
|
+
- Publish the versioned public grammar conformance contract.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 typed-sql contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# @typed-sql/conformance
|
|
2
|
+
|
|
3
|
+
Executable compatibility tests for first- and third-party typed-sql grammar packages.
|
|
4
|
+
|
|
5
|
+
Release track: **stable**.
|
|
6
|
+
|
|
7
|
+
The kit verifies the public dialect contract, required inference families, explicit capability
|
|
8
|
+
claims, fail-closed diagnostics, semantic evidence, structural variants, codecs, and reproducible
|
|
9
|
+
analysis performance. It imports only grammar-neutral public packages and does not install Poku or
|
|
10
|
+
a database driver.
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import {
|
|
14
|
+
assertGrammarConformance,
|
|
15
|
+
defineGrammarConformanceFixture,
|
|
16
|
+
GRAMMAR_CONFORMANCE_VERSION,
|
|
17
|
+
} from "@typed-sql/conformance";
|
|
18
|
+
import { describe, it } from "poku";
|
|
19
|
+
import { acme, acmeFixture } from "./grammar.js";
|
|
20
|
+
|
|
21
|
+
await describe("acme grammar", async () => {
|
|
22
|
+
await it("passes the typed-sql contract", () => {
|
|
23
|
+
assertGrammarConformance(defineGrammarConformanceFixture({
|
|
24
|
+
version: GRAMMAR_CONFORMANCE_VERSION,
|
|
25
|
+
dialect: acme(),
|
|
26
|
+
...acmeFixture,
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
See the [custom grammar guide](https://lojhan.github.io/typed-sql/extending/custom-grammars.html)
|
|
33
|
+
for the complete fixture and compatibility policy.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type SchemaSnapshot } from "@typed-sql/core";
|
|
2
|
+
import { type CodecConformanceFixture, type GrammarConformanceFixture, type GrammarConformanceReport, type RuntimeAdapterConformanceFixture } from "./types.js";
|
|
3
|
+
export declare function defineGrammarConformanceFixture<Snapshot extends SchemaSnapshot, Policy>(fixture: GrammarConformanceFixture<Snapshot, Policy>): GrammarConformanceFixture<Snapshot, Policy>;
|
|
4
|
+
export declare function defineCodecConformanceFixture<Input, Output>(fixture: CodecConformanceFixture<Input, Output>): CodecConformanceFixture<Input, Output>;
|
|
5
|
+
export declare function assertGrammarConformance<Snapshot extends SchemaSnapshot, Policy>(fixture: GrammarConformanceFixture<Snapshot, Policy>): GrammarConformanceReport;
|
|
6
|
+
export declare function assertCodecConformance<Input, Output>(fixture: CodecConformanceFixture<Input, Output>): void;
|
|
7
|
+
export declare function assertRuntimeAdapterConformance<Row, Parameters extends readonly unknown[]>(fixture: RuntimeAdapterConformanceFixture<Row, Parameters>): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=assertions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../../../src/assertions.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,uBAAuB,EAG5B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAK7B,KAAK,gCAAgC,EACtC,MAAM,YAAY,CAAC;AAEpB,wBAAgB,+BAA+B,CAAC,QAAQ,SAAS,cAAc,EAAE,MAAM,EACrF,OAAO,EAAE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,GACnD,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAE7C;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EACzD,OAAO,EAAE,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GAC9C,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAExC;AAkID,wBAAgB,wBAAwB,CAAC,QAAQ,SAAS,cAAc,EAAE,MAAM,EAC9E,OAAO,EAAE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,GACnD,wBAAwB,CAiG1B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAK3G;AAED,wBAAsB,+BAA+B,CAAC,GAAG,EAAE,UAAU,SAAS,SAAS,OAAO,EAAE,EAC9F,OAAO,EAAE,gCAAgC,CAAC,GAAG,EAAE,UAAU,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { strict as assert } from "node:assert";
|
|
2
|
+
import { compileSource } from "@typed-sql/compiler";
|
|
3
|
+
import { assertDialectPlugin, createDatabase, DIALECT_CONTRACT_VERSION, defineConfig, parameterTypeLiteral, QUERY_SEMANTICS_VERSION, renderQuery, rowTypeLiteral, } from "@typed-sql/core";
|
|
4
|
+
import { GRAMMAR_CONFORMANCE_VERSION, REQUIRED_GRAMMAR_PROBES, } from "./types.js";
|
|
5
|
+
export function defineGrammarConformanceFixture(fixture) {
|
|
6
|
+
return Object.freeze(fixture);
|
|
7
|
+
}
|
|
8
|
+
export function defineCodecConformanceFixture(fixture) {
|
|
9
|
+
return Object.freeze(fixture);
|
|
10
|
+
}
|
|
11
|
+
function assertRange(range, length, label) {
|
|
12
|
+
assert.ok(Number.isSafeInteger(range.start) && range.start >= 0, `${label} has an invalid start offset`);
|
|
13
|
+
assert.ok(Number.isSafeInteger(range.end) && range.end >= range.start, `${label} has an invalid end offset`);
|
|
14
|
+
assert.ok(range.end <= length, `${label} extends beyond its SQL source`);
|
|
15
|
+
assert.ok(Number.isSafeInteger(range.line) && range.line >= 1, `${label} has an invalid line`);
|
|
16
|
+
assert.ok(Number.isSafeInteger(range.column) && range.column >= 1, `${label} has an invalid column`);
|
|
17
|
+
}
|
|
18
|
+
function assertDeepFrozen(value, seen = new Set()) {
|
|
19
|
+
if (typeof value !== "object" || value === null || seen.has(value))
|
|
20
|
+
return;
|
|
21
|
+
seen.add(value);
|
|
22
|
+
assert.ok(Object.isFrozen(value), "semantic metadata must be deeply frozen");
|
|
23
|
+
for (const child of Object.values(value))
|
|
24
|
+
assertDeepFrozen(child, seen);
|
|
25
|
+
}
|
|
26
|
+
function dependencyMatches(actual, expected) {
|
|
27
|
+
return (actual.kind === expected.kind &&
|
|
28
|
+
actual.access === expected.access &&
|
|
29
|
+
actual.name === expected.name &&
|
|
30
|
+
actual.schema === expected.schema &&
|
|
31
|
+
actual.parent === expected.parent);
|
|
32
|
+
}
|
|
33
|
+
function assertSemantics(semantics, expected, sqlLength, label) {
|
|
34
|
+
assert.strictEqual(semantics.version, QUERY_SEMANTICS_VERSION, `${label} uses incompatible semantic metadata`);
|
|
35
|
+
assert.strictEqual(semantics.operation.value, expected.operation, `${label} operation`);
|
|
36
|
+
assert.strictEqual(semantics.volatility.value, expected.volatility, `${label} volatility`);
|
|
37
|
+
assert.strictEqual(semantics.locking.value, expected.locking ?? "none", `${label} locking`);
|
|
38
|
+
assert.strictEqual(semantics.connectionAffinity.value, expected.connectionAffinity ?? "none", `${label} connection affinity`);
|
|
39
|
+
assert.strictEqual(semantics.cardinality.minimum, expected.cardinalityMinimum ?? 0, `${label} cardinality minimum`);
|
|
40
|
+
assert.strictEqual(semantics.cardinality.maximum, expected.cardinalityMaximum, `${label} cardinality maximum`);
|
|
41
|
+
if (expected.capabilities !== undefined) {
|
|
42
|
+
assert.deepStrictEqual(semantics.capabilities, [...expected.capabilities].sort(), `${label} semantic capabilities`);
|
|
43
|
+
}
|
|
44
|
+
for (const dependency of expected.dependencies ?? []) {
|
|
45
|
+
assert.ok(semantics.dependencies.some((actual) => dependencyMatches(actual, dependency)), `${label} is missing ${dependency.kind} dependency ${dependency.name}`);
|
|
46
|
+
}
|
|
47
|
+
for (const [factName, evidence] of [
|
|
48
|
+
["operation", semantics.operation.evidence],
|
|
49
|
+
["cardinality", semantics.cardinality.evidence],
|
|
50
|
+
["volatility", semantics.volatility.evidence],
|
|
51
|
+
["locking", semantics.locking.evidence],
|
|
52
|
+
["connection affinity", semantics.connectionAffinity.evidence],
|
|
53
|
+
]) {
|
|
54
|
+
assert.ok(evidence.length > 0, `${label} ${factName} has no evidence`);
|
|
55
|
+
for (const [index, item] of evidence.entries())
|
|
56
|
+
assertRange(item.range, sqlLength, `${label} ${factName}[${index}]`);
|
|
57
|
+
}
|
|
58
|
+
for (const [index, dependency] of semantics.dependencies.entries()) {
|
|
59
|
+
assertRange(dependency.range, sqlLength, `${label} dependency[${index}]`);
|
|
60
|
+
}
|
|
61
|
+
assertDeepFrozen(semantics);
|
|
62
|
+
}
|
|
63
|
+
function assertNoAny(value, label) {
|
|
64
|
+
assert.ok(!/(?:^|[^A-Za-z])any(?:$|[^A-Za-z])/u.test(value), `${label} resolved to any`);
|
|
65
|
+
}
|
|
66
|
+
function assertAnalysis(analysis, probe, label) {
|
|
67
|
+
const diagnosticCodes = analysis.diagnostics.map(({ code }) => code);
|
|
68
|
+
assert.deepStrictEqual(diagnosticCodes, probe.expectedDiagnosticCodes ?? [], `${label} diagnostics`);
|
|
69
|
+
assert.strictEqual(analysis.resultKind ?? "rows", probe.expectedResultKind, `${label} result kind`);
|
|
70
|
+
const rowType = rowTypeLiteral(analysis.columns);
|
|
71
|
+
const parameterType = parameterTypeLiteral(probe.parameterCount, analysis.parameters);
|
|
72
|
+
assert.strictEqual(rowType, probe.expectedRowType, `${label} row type`);
|
|
73
|
+
assert.strictEqual(parameterType, probe.expectedParameterType, `${label} parameter type`);
|
|
74
|
+
assertNoAny(rowType, `${label} row type`);
|
|
75
|
+
assertNoAny(parameterType, `${label} parameter type`);
|
|
76
|
+
for (const [index, column] of analysis.columns.entries()) {
|
|
77
|
+
assertRange(column.range, probe.sql.length, `${label} column[${index}]`);
|
|
78
|
+
}
|
|
79
|
+
assertSemantics(analysis.semantics, probe.expectedSemantics, probe.sql.length, label);
|
|
80
|
+
}
|
|
81
|
+
function templateLiteralText(value) {
|
|
82
|
+
return value.replaceAll("\\", "\\\\").replaceAll("`", "\\`").replaceAll("${", "\\${");
|
|
83
|
+
}
|
|
84
|
+
function assertUnsupported(fixture, probe, label) {
|
|
85
|
+
const analysis = fixture.dialect.analyze(probe.sql, fixture.snapshot);
|
|
86
|
+
assert.ok(analysis.diagnostics.some(({ code, severity }) => code === probe.diagnosticCode && severity === "error"), `${label} did not report ${probe.diagnosticCode}`);
|
|
87
|
+
assert.strictEqual(analysis.semantics.operation.value, "unknown", `${label} operation must fail closed`);
|
|
88
|
+
assert.strictEqual(analysis.semantics.volatility.value, "unknown", `${label} volatility must fail closed`);
|
|
89
|
+
assert.strictEqual(analysis.semantics.locking.value, "unknown", `${label} locking must fail closed`);
|
|
90
|
+
assert.strictEqual(analysis.semantics.connectionAffinity.value, "unknown", `${label} connection affinity must fail closed`);
|
|
91
|
+
assert.strictEqual(analysis.semantics.cardinality.maximum, "unknown", `${label} cardinality must fail closed`);
|
|
92
|
+
const source = [
|
|
93
|
+
`import { sql } from ${JSON.stringify(fixture.dialect.sqlModule)};`,
|
|
94
|
+
"const query = sql`",
|
|
95
|
+
templateLiteralText(probe.sql),
|
|
96
|
+
"`;",
|
|
97
|
+
].join("\n");
|
|
98
|
+
const compiled = compileSource({ source, dialect: fixture.dialect, schema: fixture.snapshot });
|
|
99
|
+
assert.strictEqual(compiled.queries.length, 0, `${label} was optimistically compiled`);
|
|
100
|
+
assert.ok(compiled.diagnostics.some(({ code }) => code === probe.diagnosticCode), `${label} compiler diagnostic`);
|
|
101
|
+
}
|
|
102
|
+
export function assertGrammarConformance(fixture) {
|
|
103
|
+
assert.strictEqual(fixture.version, GRAMMAR_CONFORMANCE_VERSION, "Unsupported grammar conformance fixture");
|
|
104
|
+
assertDialectPlugin(fixture.dialect);
|
|
105
|
+
assert.strictEqual(fixture.dialect.contractVersion, DIALECT_CONTRACT_VERSION);
|
|
106
|
+
assert.doesNotThrow(() => defineConfig({
|
|
107
|
+
dialect: fixture.dialect,
|
|
108
|
+
schema: { file: "schema.json" },
|
|
109
|
+
outDir: "generated",
|
|
110
|
+
typePolicy: fixture.dialect.defaultTypePolicy,
|
|
111
|
+
}));
|
|
112
|
+
assert.ok(Object.values(fixture.dialect.capabilities).every((supported) => typeof supported === "boolean"));
|
|
113
|
+
assert.strictEqual(fixture.dialect.placeholder(2), fixture.placeholderTwo);
|
|
114
|
+
assert.strictEqual(fixture.dialect.placeholder(2), fixture.renderer.placeholder(2));
|
|
115
|
+
assert.throws(() => fixture.dialect.placeholder(0));
|
|
116
|
+
assert.strictEqual(fixture.dialect.quoteIdentifier(fixture.identifier), fixture.quotedIdentifier);
|
|
117
|
+
assert.strictEqual(fixture.dialect.quoteIdentifier(fixture.identifier), fixture.renderer.quoteIdentifier(fixture.identifier));
|
|
118
|
+
assert.strictEqual(fixture.dialect.validateSnapshot(fixture.snapshot).dialect, fixture.dialect.id);
|
|
119
|
+
assert.throws(() => fixture.dialect.validateSnapshot({ ...fixture.snapshot, dialect: `${fixture.dialect.id}-other` }));
|
|
120
|
+
assert.throws(() => fixture.dialect.validateSnapshot({ ...fixture.snapshot, dialectVersion: "incompatible" }));
|
|
121
|
+
assert.deepStrictEqual(Object.keys(fixture.probes).sort(), [...REQUIRED_GRAMMAR_PROBES].sort());
|
|
122
|
+
for (const probeName of REQUIRED_GRAMMAR_PROBES) {
|
|
123
|
+
const probe = fixture.probes[probeName];
|
|
124
|
+
assertAnalysis(fixture.dialect.analyze(probe.sql, fixture.snapshot), probe, `${fixture.name}.${probeName}`);
|
|
125
|
+
}
|
|
126
|
+
const capabilityNames = Object.keys(fixture.dialect.capabilities).sort();
|
|
127
|
+
assert.deepStrictEqual(fixture.capabilities.map(({ capability }) => capability).sort(), capabilityNames, `${fixture.name} must provide exactly one probe for every declared capability`);
|
|
128
|
+
assert.strictEqual(new Set(fixture.capabilities.map(({ capability }) => capability)).size, capabilityNames.length);
|
|
129
|
+
for (const capability of fixture.capabilities) {
|
|
130
|
+
assert.strictEqual(fixture.dialect.capabilities[capability.capability], capability.supported);
|
|
131
|
+
if (capability.supported) {
|
|
132
|
+
assertAnalysis(fixture.dialect.analyze(capability.analysis.sql, fixture.snapshot), capability.analysis, `${fixture.name}.capability.${capability.capability}`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
assertUnsupported(fixture, capability.unsupported, `${fixture.name}.capability.${capability.capability}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
assertUnsupported(fixture, fixture.unsupported, `${fixture.name}.unsupported`);
|
|
139
|
+
if (fixture.policy !== undefined) {
|
|
140
|
+
const policy = fixture.policy;
|
|
141
|
+
const analysis = fixture.dialect.analyze(policy.sql, fixture.snapshot, policy.policy);
|
|
142
|
+
assert.deepStrictEqual(analysis.diagnostics, []);
|
|
143
|
+
assert.strictEqual(rowTypeLiteral(analysis.columns), policy.expectedRowType);
|
|
144
|
+
if (policy.expectedParameterType !== undefined) {
|
|
145
|
+
assert.strictEqual(parameterTypeLiteral(policy.parameterCount, analysis.parameters), policy.expectedParameterType);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const structural = compileSource({
|
|
149
|
+
source: fixture.structural.source,
|
|
150
|
+
dialect: fixture.dialect,
|
|
151
|
+
schema: fixture.snapshot,
|
|
152
|
+
});
|
|
153
|
+
assert.deepStrictEqual(structural.diagnostics, [], `${fixture.name} structural diagnostics`);
|
|
154
|
+
assert.strictEqual(structural.queries.length, 1, `${fixture.name} structural query count`);
|
|
155
|
+
const compiled = structural.queries[0];
|
|
156
|
+
assert.strictEqual(compiled.structural, true);
|
|
157
|
+
assert.strictEqual(compiled.variantFingerprints.length, fixture.structural.expectedVariantCount);
|
|
158
|
+
assert.strictEqual(new Set(compiled.variantFingerprints).size, fixture.structural.expectedVariantCount);
|
|
159
|
+
assert.ok(compiled.fingerprint.startsWith("sha256:"));
|
|
160
|
+
assert.strictEqual(compiled.rowType, fixture.structural.expectedRowType);
|
|
161
|
+
assert.strictEqual(compiled.parameterType, fixture.structural.expectedParameterType);
|
|
162
|
+
assertSemantics(compiled.semantics, fixture.structural.expectedSemantics, fixture.structural.source.length, `${fixture.name}.structural`);
|
|
163
|
+
return Object.freeze({
|
|
164
|
+
version: GRAMMAR_CONFORMANCE_VERSION,
|
|
165
|
+
grammar: fixture.dialect.id,
|
|
166
|
+
grammarVersion: fixture.dialect.grammarVersion,
|
|
167
|
+
requiredProbes: REQUIRED_GRAMMAR_PROBES,
|
|
168
|
+
capabilities: Object.freeze({ ...fixture.dialect.capabilities }),
|
|
169
|
+
structuralVariants: compiled.variantFingerprints.length,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
export function assertCodecConformance(fixture) {
|
|
173
|
+
assert.ok(fixture.cases.length > 0, `${fixture.name} codec suite has no cases`);
|
|
174
|
+
for (const testCase of fixture.cases) {
|
|
175
|
+
assert.deepStrictEqual(fixture.decode(testCase.input), testCase.expected, `${fixture.name}.${testCase.name}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
export async function assertRuntimeAdapterConformance(fixture) {
|
|
179
|
+
const rendered = renderQuery(fixture.query, fixture.renderer);
|
|
180
|
+
assert.strictEqual(rendered.text, fixture.expectedText, `${fixture.name} rendered SQL`);
|
|
181
|
+
assert.deepStrictEqual(rendered.values, fixture.expectedValues, `${fixture.name} rendered values`);
|
|
182
|
+
const calls = [];
|
|
183
|
+
const executor = {
|
|
184
|
+
async execute(text, values) {
|
|
185
|
+
calls.push({ text, values });
|
|
186
|
+
return fixture.rows;
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
const database = createDatabase(executor, fixture.renderer, async (run) => run(executor));
|
|
190
|
+
assert.deepStrictEqual(await database.execute(fixture.query), fixture.rows, `${fixture.name} execution rows`);
|
|
191
|
+
assert.deepStrictEqual(await database.transaction((transaction) => transaction.execute(fixture.query)), fixture.rows, `${fixture.name} transaction rows`);
|
|
192
|
+
assert.deepStrictEqual(calls, [rendered, rendered], `${fixture.name} adapter dispatch`);
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=assertions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../../../src/assertions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { assertCodecConformance, assertGrammarConformance, assertRuntimeAdapterConformance, defineCodecConformanceFixture, defineGrammarConformanceFixture, } from "./assertions.js";
|
|
2
|
+
export { measureGrammarPerformance } from "./performance.js";
|
|
3
|
+
export type { CodecConformanceCase, CodecConformanceFixture, GrammarAnalysisProbe, GrammarCapabilityProbe, GrammarConformanceFixture, GrammarConformanceReport, GrammarDependencyExpectation, GrammarPerformanceOptions, GrammarPerformanceResult, GrammarPolicyProbe, GrammarSemanticExpectation, GrammarStructuralProbe, GrammarUnsupportedProbe, RequiredGrammarProbe, RuntimeAdapterConformanceFixture, } from "./types.js";
|
|
4
|
+
export { GRAMMAR_CONFORMANCE_VERSION, REQUIRED_GRAMMAR_PROBES } from "./types.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,+BAA+B,EAC/B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EACV,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,gCAAgC,GACjC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { assertCodecConformance, assertGrammarConformance, assertRuntimeAdapterConformance, defineCodecConformanceFixture, defineGrammarConformanceFixture, } from "./assertions.js";
|
|
2
|
+
export { measureGrammarPerformance } from "./performance.js";
|
|
3
|
+
export { GRAMMAR_CONFORMANCE_VERSION, REQUIRED_GRAMMAR_PROBES } from "./types.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,+BAA+B,EAC/B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAkB7D,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SchemaSnapshot } from "@typed-sql/core";
|
|
2
|
+
import type { GrammarPerformanceOptions, GrammarPerformanceResult } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Measures complete grammar analysis batches. Consumers choose environment-specific budgets and
|
|
5
|
+
* record the returned percentile evidence instead of relying on a machine-independent threshold.
|
|
6
|
+
*/
|
|
7
|
+
export declare function measureGrammarPerformance<Snapshot extends SchemaSnapshot, Policy>(options: GrammarPerformanceOptions<Snapshot, Policy>): GrammarPerformanceResult;
|
|
8
|
+
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../../../src/performance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAYtF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS,cAAc,EAAE,MAAM,EAC/E,OAAO,EAAE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,GACnD,wBAAwB,CAoB1B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
function positiveInteger(value, label) {
|
|
3
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
4
|
+
throw new RangeError(`${label} must be a positive integer`);
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
function percentile(values, quantile) {
|
|
8
|
+
const ordered = [...values].sort((left, right) => left - right);
|
|
9
|
+
return ordered[Math.max(0, Math.ceil(ordered.length * quantile) - 1)];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Measures complete grammar analysis batches. Consumers choose environment-specific budgets and
|
|
13
|
+
* record the returned percentile evidence instead of relying on a machine-independent threshold.
|
|
14
|
+
*/
|
|
15
|
+
export function measureGrammarPerformance(options) {
|
|
16
|
+
if (options.queries.length === 0)
|
|
17
|
+
throw new TypeError("Grammar performance queries must not be empty");
|
|
18
|
+
const warmups = positiveInteger(options.warmups ?? 3, "warmups");
|
|
19
|
+
const samples = positiveInteger(options.samples ?? 20, "samples");
|
|
20
|
+
const run = () => {
|
|
21
|
+
const start = performance.now();
|
|
22
|
+
for (const query of options.queries)
|
|
23
|
+
options.dialect.analyze(query, options.snapshot, options.policy);
|
|
24
|
+
return performance.now() - start;
|
|
25
|
+
};
|
|
26
|
+
for (let index = 0; index < warmups; index += 1)
|
|
27
|
+
run();
|
|
28
|
+
const durations = Array.from({ length: samples }, run);
|
|
29
|
+
const slowest = Math.max(...durations);
|
|
30
|
+
return Object.freeze({
|
|
31
|
+
queryCount: options.queries.length,
|
|
32
|
+
warmups,
|
|
33
|
+
samples,
|
|
34
|
+
p50Milliseconds: percentile(durations, 0.5),
|
|
35
|
+
p95Milliseconds: percentile(durations, 0.95),
|
|
36
|
+
minimumQueriesPerSecond: (options.queries.length * 1_000) / slowest,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../../src/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,SAAS,eAAe,CAAC,KAAa,EAAE,KAAa;IACnD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,MAAyB,EAAE,QAAgB;IAC7D,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAAoD;IAEpD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvG,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,GAAW,EAAE;QACvB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtG,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IACnC,CAAC,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC;QAAE,GAAG,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAClC,OAAO;QACP,OAAO;QACP,eAAe,EAAE,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC;QAC3C,eAAe,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC;QAC5C,uBAAuB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,OAAO;KACpE,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { DialectPlugin, Query, QueryCardinality, QueryConnectionAffinity, QueryDependencyAccess, QueryDependencyKind, QueryLocking, QueryOperation, QueryVolatility, SchemaSnapshot, SqlRenderer } from "@typed-sql/core";
|
|
2
|
+
export declare const GRAMMAR_CONFORMANCE_VERSION: 1;
|
|
3
|
+
export declare const REQUIRED_GRAMMAR_PROBES: readonly ["select", "parameters", "nullability", "joins", "ctes", "functions", "dml"];
|
|
4
|
+
export type RequiredGrammarProbe = (typeof REQUIRED_GRAMMAR_PROBES)[number];
|
|
5
|
+
export interface GrammarDependencyExpectation {
|
|
6
|
+
readonly kind: QueryDependencyKind;
|
|
7
|
+
readonly access: QueryDependencyAccess;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly schema?: string;
|
|
10
|
+
readonly parent?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GrammarSemanticExpectation {
|
|
13
|
+
readonly operation: QueryOperation;
|
|
14
|
+
readonly volatility: QueryVolatility;
|
|
15
|
+
readonly locking?: QueryLocking;
|
|
16
|
+
readonly connectionAffinity?: QueryConnectionAffinity;
|
|
17
|
+
readonly cardinalityMinimum?: QueryCardinality["minimum"];
|
|
18
|
+
readonly cardinalityMaximum: QueryCardinality["maximum"];
|
|
19
|
+
readonly dependencies?: readonly GrammarDependencyExpectation[];
|
|
20
|
+
readonly capabilities?: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
export interface GrammarAnalysisProbe {
|
|
23
|
+
readonly sql: string;
|
|
24
|
+
readonly parameterCount: number;
|
|
25
|
+
readonly expectedRowType: string;
|
|
26
|
+
readonly expectedParameterType: string;
|
|
27
|
+
readonly expectedResultKind: "rows" | "command";
|
|
28
|
+
readonly expectedSemantics: GrammarSemanticExpectation;
|
|
29
|
+
readonly expectedDiagnosticCodes?: readonly string[];
|
|
30
|
+
}
|
|
31
|
+
export interface GrammarUnsupportedProbe {
|
|
32
|
+
readonly sql: string;
|
|
33
|
+
readonly diagnosticCode: string;
|
|
34
|
+
}
|
|
35
|
+
export type GrammarCapabilityProbe = {
|
|
36
|
+
readonly capability: string;
|
|
37
|
+
readonly supported: true;
|
|
38
|
+
readonly analysis: GrammarAnalysisProbe;
|
|
39
|
+
} | {
|
|
40
|
+
readonly capability: string;
|
|
41
|
+
readonly supported: false;
|
|
42
|
+
readonly unsupported: GrammarUnsupportedProbe;
|
|
43
|
+
};
|
|
44
|
+
export interface GrammarStructuralProbe {
|
|
45
|
+
readonly source: string;
|
|
46
|
+
readonly expectedVariantCount: number;
|
|
47
|
+
readonly expectedRowType: string;
|
|
48
|
+
readonly expectedParameterType: string;
|
|
49
|
+
readonly expectedSemantics: GrammarSemanticExpectation;
|
|
50
|
+
}
|
|
51
|
+
export interface GrammarPolicyProbe<Policy> {
|
|
52
|
+
readonly sql: string;
|
|
53
|
+
readonly policy: Policy;
|
|
54
|
+
readonly parameterCount: number;
|
|
55
|
+
readonly expectedRowType: string;
|
|
56
|
+
readonly expectedParameterType?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface GrammarConformanceFixture<Snapshot extends SchemaSnapshot, Policy> {
|
|
59
|
+
readonly version: typeof GRAMMAR_CONFORMANCE_VERSION;
|
|
60
|
+
readonly name: string;
|
|
61
|
+
readonly dialect: DialectPlugin<Snapshot, Policy>;
|
|
62
|
+
readonly renderer: SqlRenderer;
|
|
63
|
+
readonly snapshot: Snapshot;
|
|
64
|
+
readonly placeholderTwo: string;
|
|
65
|
+
readonly identifier: string;
|
|
66
|
+
readonly quotedIdentifier: string;
|
|
67
|
+
readonly probes: Readonly<Record<RequiredGrammarProbe, GrammarAnalysisProbe>>;
|
|
68
|
+
readonly capabilities: readonly GrammarCapabilityProbe[];
|
|
69
|
+
readonly unsupported: GrammarUnsupportedProbe;
|
|
70
|
+
readonly structural: GrammarStructuralProbe;
|
|
71
|
+
readonly policy?: GrammarPolicyProbe<Policy>;
|
|
72
|
+
}
|
|
73
|
+
export interface GrammarConformanceReport {
|
|
74
|
+
readonly version: typeof GRAMMAR_CONFORMANCE_VERSION;
|
|
75
|
+
readonly grammar: string;
|
|
76
|
+
readonly grammarVersion: string;
|
|
77
|
+
readonly requiredProbes: readonly RequiredGrammarProbe[];
|
|
78
|
+
readonly capabilities: Readonly<Record<string, boolean>>;
|
|
79
|
+
readonly structuralVariants: number;
|
|
80
|
+
}
|
|
81
|
+
export interface CodecConformanceCase<Input, Output> {
|
|
82
|
+
readonly name: string;
|
|
83
|
+
readonly input: Input;
|
|
84
|
+
readonly expected: Output;
|
|
85
|
+
}
|
|
86
|
+
export interface CodecConformanceFixture<Input, Output> {
|
|
87
|
+
readonly name: string;
|
|
88
|
+
readonly decode: (input: Input) => Output;
|
|
89
|
+
readonly cases: readonly CodecConformanceCase<Input, Output>[];
|
|
90
|
+
}
|
|
91
|
+
export interface RuntimeAdapterConformanceFixture<Row, Parameters extends readonly unknown[]> {
|
|
92
|
+
readonly name: string;
|
|
93
|
+
readonly renderer: SqlRenderer;
|
|
94
|
+
readonly query: Query<Row, Parameters>;
|
|
95
|
+
readonly expectedText: string;
|
|
96
|
+
readonly expectedValues: readonly unknown[];
|
|
97
|
+
readonly rows: readonly Row[];
|
|
98
|
+
}
|
|
99
|
+
export interface GrammarPerformanceOptions<Snapshot extends SchemaSnapshot, Policy> {
|
|
100
|
+
readonly dialect: DialectPlugin<Snapshot, Policy>;
|
|
101
|
+
readonly snapshot: Snapshot;
|
|
102
|
+
readonly queries: readonly string[];
|
|
103
|
+
readonly policy?: Policy;
|
|
104
|
+
readonly warmups?: number;
|
|
105
|
+
readonly samples?: number;
|
|
106
|
+
}
|
|
107
|
+
export interface GrammarPerformanceResult {
|
|
108
|
+
readonly queryCount: number;
|
|
109
|
+
readonly warmups: number;
|
|
110
|
+
readonly samples: number;
|
|
111
|
+
readonly p50Milliseconds: number;
|
|
112
|
+
readonly p95Milliseconds: number;
|
|
113
|
+
readonly minimumQueriesPerSecond: number;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAU,CAAC;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,OAAO;IACP,MAAM;IACN,WAAW;IACX,KAAK;CACG,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@typed-sql/conformance",
|
|
3
|
+
"version": "2.0.0-rc.0",
|
|
4
|
+
"description": "Public grammar, capability, codec, and performance conformance kit for typed-sql dialects.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Lojhan",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Lojhan/typed-sql.git",
|
|
10
|
+
"directory": "packages/conformance"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/Lojhan/typed-sql#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/Lojhan/typed-sql/issues"
|
|
15
|
+
},
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=22.11"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist/**/*.js",
|
|
21
|
+
"dist/**/*.d.ts",
|
|
22
|
+
"dist/**/*.map",
|
|
23
|
+
"README.md",
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"CHANGELOG.md"
|
|
26
|
+
],
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"typedSql": {
|
|
31
|
+
"releaseTrack": "stable"
|
|
32
|
+
},
|
|
33
|
+
"sideEffects": false,
|
|
34
|
+
"type": "module",
|
|
35
|
+
"exports": {
|
|
36
|
+
".": "./dist/packages/conformance/src/index.js"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@typed-sql/compiler": "2.0.0-rc.0",
|
|
40
|
+
"@typed-sql/core": "2.0.0-rc.0"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"test": "poku test --reporter=compact --enforce",
|
|
44
|
+
"coverage": "poku test --coverage=@pokujs/c8 --coverageConfig=.c8rc.json --reporter=compact --enforce"
|
|
45
|
+
}
|
|
46
|
+
}
|