@orygn/opa-mcp 0.4.0 → 0.6.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 +583 -4
- package/README.md +144 -98
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +14 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +91 -19
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1 -6
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +17 -3
- package/dist/constants.js.map +1 -1
- package/dist/lib/bundle-signatures.d.ts +23 -0
- package/dist/lib/bundle-signatures.d.ts.map +1 -0
- package/dist/lib/bundle-signatures.js +152 -0
- package/dist/lib/bundle-signatures.js.map +1 -0
- package/dist/lib/child-env.d.ts +9 -2
- package/dist/lib/child-env.d.ts.map +1 -1
- package/dist/lib/child-env.js +38 -6
- package/dist/lib/child-env.js.map +1 -1
- package/dist/lib/conftest-cli.d.ts +25 -10
- package/dist/lib/conftest-cli.d.ts.map +1 -1
- package/dist/lib/conftest-cli.js +233 -50
- package/dist/lib/conftest-cli.js.map +1 -1
- package/dist/lib/errors.d.ts +4 -5
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +15 -3
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/inline-paths.d.ts +37 -0
- package/dist/lib/inline-paths.d.ts.map +1 -0
- package/dist/lib/inline-paths.js +162 -0
- package/dist/lib/inline-paths.js.map +1 -0
- package/dist/lib/install-id.d.ts.map +1 -1
- package/dist/lib/install-id.js +18 -3
- package/dist/lib/install-id.js.map +1 -1
- package/dist/lib/json-stream.d.ts +26 -0
- package/dist/lib/json-stream.d.ts.map +1 -0
- package/dist/lib/json-stream.js +69 -0
- package/dist/lib/json-stream.js.map +1 -0
- package/dist/lib/opa-cli.d.ts +74 -16
- package/dist/lib/opa-cli.d.ts.map +1 -1
- package/dist/lib/opa-cli.js +107 -30
- package/dist/lib/opa-cli.js.map +1 -1
- package/dist/lib/opa-client.d.ts +27 -1
- package/dist/lib/opa-client.d.ts.map +1 -1
- package/dist/lib/opa-client.js +98 -14
- package/dist/lib/opa-client.js.map +1 -1
- package/dist/lib/opa-paths.d.ts +34 -0
- package/dist/lib/opa-paths.d.ts.map +1 -0
- package/dist/lib/opa-paths.js +101 -0
- package/dist/lib/opa-paths.js.map +1 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +83 -10
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/regal-cli.d.ts +16 -1
- package/dist/lib/regal-cli.d.ts.map +1 -1
- package/dist/lib/regal-cli.js +40 -6
- package/dist/lib/regal-cli.js.map +1 -1
- package/dist/lib/rego-ast-walker.d.ts +0 -6
- package/dist/lib/rego-ast-walker.d.ts.map +1 -1
- package/dist/lib/rego-ast-walker.js +181 -55
- package/dist/lib/rego-ast-walker.js.map +1 -1
- package/dist/lib/rego-counterexample.d.ts +15 -2
- package/dist/lib/rego-counterexample.d.ts.map +1 -1
- package/dist/lib/rego-counterexample.js +63 -15
- package/dist/lib/rego-counterexample.js.map +1 -1
- package/dist/lib/rego-input-path.d.ts +20 -0
- package/dist/lib/rego-input-path.d.ts.map +1 -0
- package/dist/lib/rego-input-path.js +70 -0
- package/dist/lib/rego-input-path.js.map +1 -0
- package/dist/lib/rego-ir.d.ts +34 -3
- package/dist/lib/rego-ir.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.d.ts +88 -5
- package/dist/lib/rego-smt-encoder.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.js +270 -31
- package/dist/lib/rego-smt-encoder.js.map +1 -1
- package/dist/lib/rego-type-inferencer.d.ts +27 -2
- package/dist/lib/rego-type-inferencer.d.ts.map +1 -1
- package/dist/lib/rego-type-inferencer.js +71 -3
- package/dist/lib/rego-type-inferencer.js.map +1 -1
- package/dist/lib/rego-verify-engine.d.ts.map +1 -1
- package/dist/lib/rego-verify-engine.js +203 -90
- package/dist/lib/rego-verify-engine.js.map +1 -1
- package/dist/lib/rego-z3.d.ts +66 -0
- package/dist/lib/rego-z3.d.ts.map +1 -1
- package/dist/lib/rego-z3.js +312 -5
- package/dist/lib/rego-z3.js.map +1 -1
- package/dist/lib/security.d.ts +8 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +130 -54
- package/dist/lib/security.js.map +1 -1
- package/dist/lib/subprocess.d.ts +13 -0
- package/dist/lib/subprocess.d.ts.map +1 -1
- package/dist/lib/subprocess.js +153 -18
- package/dist/lib/subprocess.js.map +1 -1
- package/dist/lib/tool-helpers.d.ts +12 -25
- package/dist/lib/tool-helpers.d.ts.map +1 -1
- package/dist/lib/tool-helpers.js +66 -40
- package/dist/lib/tool-helpers.js.map +1 -1
- package/dist/prompts/index.js +2 -2
- package/dist/resources/index.js +1 -1
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/patterns.d.ts +1 -1
- package/dist/resources/patterns.d.ts.map +1 -1
- package/dist/resources/patterns.js +42 -15
- package/dist/resources/patterns.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +50 -7
- package/dist/server.js.map +1 -1
- package/dist/tools/authoring/capabilities.d.ts +4 -0
- package/dist/tools/authoring/capabilities.d.ts.map +1 -1
- package/dist/tools/authoring/capabilities.js +41 -4
- package/dist/tools/authoring/capabilities.js.map +1 -1
- package/dist/tools/authoring/check-schema.d.ts +6 -0
- package/dist/tools/authoring/check-schema.d.ts.map +1 -1
- package/dist/tools/authoring/check-schema.js +56 -3
- package/dist/tools/authoring/check-schema.js.map +1 -1
- package/dist/tools/authoring/format.d.ts.map +1 -1
- package/dist/tools/authoring/format.js +2 -2
- package/dist/tools/authoring/format.js.map +1 -1
- package/dist/tools/authoring/lint.d.ts.map +1 -1
- package/dist/tools/authoring/lint.js +8 -6
- package/dist/tools/authoring/lint.js.map +1 -1
- package/dist/tools/authoring/migrate-v1.d.ts.map +1 -1
- package/dist/tools/authoring/migrate-v1.js +20 -4
- package/dist/tools/authoring/migrate-v1.js.map +1 -1
- package/dist/tools/authoring/parse.d.ts.map +1 -1
- package/dist/tools/authoring/parse.js +3 -3
- package/dist/tools/authoring/parse.js.map +1 -1
- package/dist/tools/bundles/build.d.ts.map +1 -1
- package/dist/tools/bundles/build.js +12 -4
- package/dist/tools/bundles/build.js.map +1 -1
- package/dist/tools/bundles/sign.d.ts +9 -2
- package/dist/tools/bundles/sign.d.ts.map +1 -1
- package/dist/tools/bundles/sign.js +125 -19
- package/dist/tools/bundles/sign.js.map +1 -1
- package/dist/tools/bundles/verify.d.ts +1 -1
- package/dist/tools/bundles/verify.d.ts.map +1 -1
- package/dist/tools/bundles/verify.js +58 -19
- package/dist/tools/bundles/verify.js.map +1 -1
- package/dist/tools/conftest/index.d.ts +5 -0
- package/dist/tools/conftest/index.d.ts.map +1 -1
- package/dist/tools/conftest/index.js.map +1 -1
- package/dist/tools/conftest/pull.d.ts.map +1 -1
- package/dist/tools/conftest/pull.js +24 -10
- package/dist/tools/conftest/pull.js.map +1 -1
- package/dist/tools/conftest/push.d.ts.map +1 -1
- package/dist/tools/conftest/push.js +17 -7
- package/dist/tools/conftest/push.js.map +1 -1
- package/dist/tools/conftest/test.d.ts +10 -6
- package/dist/tools/conftest/test.d.ts.map +1 -1
- package/dist/tools/conftest/test.js +61 -39
- package/dist/tools/conftest/test.js.map +1 -1
- package/dist/tools/conftest/verify.d.ts +10 -6
- package/dist/tools/conftest/verify.d.ts.map +1 -1
- package/dist/tools/conftest/verify.js +40 -32
- package/dist/tools/conftest/verify.js.map +1 -1
- package/dist/tools/evaluation/_shared.js +9 -12
- package/dist/tools/evaluation/_shared.js.map +1 -1
- package/dist/tools/evaluation/bench.d.ts +29 -2
- package/dist/tools/evaluation/bench.d.ts.map +1 -1
- package/dist/tools/evaluation/bench.js +53 -9
- package/dist/tools/evaluation/bench.js.map +1 -1
- package/dist/tools/evaluation/compile.js +4 -4
- package/dist/tools/evaluation/compile.js.map +1 -1
- package/dist/tools/evaluation/eval.d.ts.map +1 -1
- package/dist/tools/evaluation/eval.js +12 -16
- package/dist/tools/evaluation/eval.js.map +1 -1
- package/dist/tools/evaluation/exec.d.ts +16 -0
- package/dist/tools/evaluation/exec.d.ts.map +1 -1
- package/dist/tools/evaluation/exec.js +38 -6
- package/dist/tools/evaluation/exec.js.map +1 -1
- package/dist/tools/evaluation/test-multiroot.d.ts +6 -0
- package/dist/tools/evaluation/test-multiroot.d.ts.map +1 -1
- package/dist/tools/evaluation/test-multiroot.js +35 -8
- package/dist/tools/evaluation/test-multiroot.js.map +1 -1
- package/dist/tools/evaluation/test.d.ts +45 -0
- package/dist/tools/evaluation/test.d.ts.map +1 -1
- package/dist/tools/evaluation/test.js +153 -32
- package/dist/tools/evaluation/test.js.map +1 -1
- package/dist/tools/helpers/coverage-gaps.d.ts +11 -3
- package/dist/tools/helpers/coverage-gaps.d.ts.map +1 -1
- package/dist/tools/helpers/coverage-gaps.js +7 -7
- package/dist/tools/helpers/coverage-gaps.js.map +1 -1
- package/dist/tools/helpers/describe-policy.d.ts.map +1 -1
- package/dist/tools/helpers/describe-policy.js +2 -2
- package/dist/tools/helpers/describe-policy.js.map +1 -1
- package/dist/tools/helpers/explain-decision.d.ts.map +1 -1
- package/dist/tools/helpers/explain-decision.js +3 -4
- package/dist/tools/helpers/explain-decision.js.map +1 -1
- package/dist/tools/helpers/explain-undefined.d.ts +9 -3
- package/dist/tools/helpers/explain-undefined.d.ts.map +1 -1
- package/dist/tools/helpers/explain-undefined.js +214 -73
- package/dist/tools/helpers/explain-undefined.js.map +1 -1
- package/dist/tools/helpers/fix.d.ts +11 -5
- package/dist/tools/helpers/fix.d.ts.map +1 -1
- package/dist/tools/helpers/fix.js +88 -45
- package/dist/tools/helpers/fix.js.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.d.ts.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.js +105 -21
- package/dist/tools/helpers/generate-test-skeleton.js.map +1 -1
- package/dist/tools/helpers/playground-share.d.ts +4 -2
- package/dist/tools/helpers/playground-share.d.ts.map +1 -1
- package/dist/tools/helpers/playground-share.js +13 -3
- package/dist/tools/helpers/playground-share.js.map +1 -1
- package/dist/tools/helpers/policy-diff.d.ts.map +1 -1
- package/dist/tools/helpers/policy-diff.js +3 -4
- package/dist/tools/helpers/policy-diff.js.map +1 -1
- package/dist/tools/helpers/security-audit.d.ts.map +1 -1
- package/dist/tools/helpers/security-audit.js +19 -19
- package/dist/tools/helpers/security-audit.js.map +1 -1
- package/dist/tools/helpers/verify.d.ts.map +1 -1
- package/dist/tools/helpers/verify.js +5 -1
- package/dist/tools/helpers/verify.js.map +1 -1
- package/dist/tools/meta/index.d.ts +1 -1
- package/dist/tools/server-management/_shared.d.ts +15 -4
- package/dist/tools/server-management/_shared.d.ts.map +1 -1
- package/dist/tools/server-management/_shared.js +86 -13
- package/dist/tools/server-management/_shared.js.map +1 -1
- package/dist/tools/server-management/data.d.ts.map +1 -1
- package/dist/tools/server-management/data.js +88 -23
- package/dist/tools/server-management/data.js.map +1 -1
- package/dist/tools/server-management/decisions.d.ts.map +1 -1
- package/dist/tools/server-management/decisions.js +16 -3
- package/dist/tools/server-management/decisions.js.map +1 -1
- package/dist/tools/server-management/policies.d.ts.map +1 -1
- package/dist/tools/server-management/policies.js +44 -7
- package/dist/tools/server-management/policies.js.map +1 -1
- package/dist/tools/server-management/status.d.ts.map +1 -1
- package/dist/tools/server-management/status.js +80 -13
- package/dist/tools/server-management/status.js.map +1 -1
- package/dist/types.d.ts +10 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isSimpleRegexPattern } from './rego-smt-encoder.js';
|
|
2
|
+
import { renderInputPath } from './rego-input-path.js';
|
|
2
3
|
const MAX_INLINE_DEPTH = 5;
|
|
3
4
|
/** Operator names (first-term ref) that Phase 1 can encode in SMT. */
|
|
4
5
|
const SUPPORTED_BINARY_OPS = new Set([
|
|
@@ -19,6 +20,7 @@ export function walkModule(ast) {
|
|
|
19
20
|
const result = {
|
|
20
21
|
rules: new Map(),
|
|
21
22
|
defaults: new Map(),
|
|
23
|
+
shapes: new Map(),
|
|
22
24
|
inputPaths: new Map(),
|
|
23
25
|
unsupported: [],
|
|
24
26
|
};
|
|
@@ -32,12 +34,40 @@ export function walkModule(ast) {
|
|
|
32
34
|
}
|
|
33
35
|
function walkRule(rule, result, ast, ruleNames, inliningStack, depth, clauseIndex) {
|
|
34
36
|
const name = rule.head.name;
|
|
37
|
+
// A head shape the encoder cannot model must still be RECORDED as a clause
|
|
38
|
+
// carrying an unsupported marker. Returning early used to drop the clause
|
|
39
|
+
// entirely, leaving the rule under-constrained: the encoded rule became
|
|
40
|
+
// strictly more permissive than the real one, which is the direction that
|
|
41
|
+
// produces a false PROVEN.
|
|
42
|
+
const recordShape = (shape, constructType, description) => {
|
|
43
|
+
result.shapes.set(name, shape);
|
|
44
|
+
addUnsupported(result, constructType, description);
|
|
45
|
+
const cs = result.rules.get(name) ?? [];
|
|
46
|
+
cs.push({
|
|
47
|
+
clauseIndex,
|
|
48
|
+
headValue: true,
|
|
49
|
+
expressions: [{ kind: 'unsupported', constructType, reason: description }],
|
|
50
|
+
});
|
|
51
|
+
result.rules.set(name, cs);
|
|
52
|
+
};
|
|
35
53
|
if (rule.else !== undefined) {
|
|
36
|
-
|
|
54
|
+
recordShape('else_chain', 'else_chain', `Rule '${name}' uses an else chain.`);
|
|
37
55
|
return;
|
|
38
56
|
}
|
|
39
57
|
if (rule.head.args && rule.head.args.length > 0) {
|
|
40
|
-
|
|
58
|
+
recordShape('function', 'function_rule', `Rule '${name}' is a function (has arguments).`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// `deny contains msg` and `perms[k] := v` produce a set and an object. Their
|
|
62
|
+
// value is never the boolean `true`, so always_true / never_true would answer
|
|
63
|
+
// a question the caller did not ask. Mark them rather than coercing the head
|
|
64
|
+
// to `true` and returning a confident wrong answer.
|
|
65
|
+
if (rule.head.key !== undefined) {
|
|
66
|
+
recordShape('partial_set', 'partial_set_rule', `Rule '${name}' is a partial set rule; its value is a set, not a boolean.`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(rule.head.ref) && rule.head.ref.length > 1) {
|
|
70
|
+
recordShape('partial_object', 'partial_object_rule', `Rule '${name}' is a partial object rule; its value is an object, not a boolean.`);
|
|
41
71
|
return;
|
|
42
72
|
}
|
|
43
73
|
if (rule.default === true) {
|
|
@@ -46,13 +76,39 @@ function walkRule(rule, result, ast, ruleNames, inliningStack, depth, clauseInde
|
|
|
46
76
|
result.defaults.set(name, dv);
|
|
47
77
|
return;
|
|
48
78
|
}
|
|
49
|
-
|
|
79
|
+
if (!result.shapes.has(name))
|
|
80
|
+
result.shapes.set(name, 'complete');
|
|
81
|
+
// A head with no value is the bare `allow if { ... }` form, meaning true.
|
|
82
|
+
// A head WITH a value keeps it: `allow := false if { ... }` must not be
|
|
83
|
+
// treated as asserting true.
|
|
84
|
+
const extractedHead = extractLiteralValue(rule.head.value);
|
|
85
|
+
const headValue = rule.head.value === undefined ? true : (extractedHead ?? true);
|
|
86
|
+
const headIsUnknown = rule.head.value !== undefined && extractedHead === undefined;
|
|
50
87
|
const exprs = [];
|
|
51
88
|
let anonCounter = 0;
|
|
89
|
+
// A head value the walker could not read is not safe to assume true.
|
|
90
|
+
if (headIsUnknown) {
|
|
91
|
+
exprs.push({
|
|
92
|
+
kind: 'unsupported',
|
|
93
|
+
constructType: 'non_literal_head',
|
|
94
|
+
reason: `Rule '${name}' has a head value that is not a literal.`,
|
|
95
|
+
});
|
|
96
|
+
addUnsupported(result, 'non_literal_head', `Rule '${name}' has a computed head value the encoder cannot read.`);
|
|
97
|
+
}
|
|
52
98
|
for (const bodyExpr of rule.body) {
|
|
53
|
-
//
|
|
54
|
-
|
|
99
|
+
// A bare boolean body term, possibly negated. One that holds (`true`,
|
|
100
|
+
// `not false`) adds no constraint; one that does not (`false`, `not true`)
|
|
101
|
+
// makes the clause unsatisfiable. Skipping the latter left an empty body,
|
|
102
|
+
// which the encoder reads as "always true" and turns into a false PROVEN.
|
|
103
|
+
if (isBooleanLiteral(bodyExpr)) {
|
|
104
|
+
if (!booleanLiteralHolds(bodyExpr)) {
|
|
105
|
+
exprs.push({
|
|
106
|
+
kind: 'contradiction',
|
|
107
|
+
reason: 'a boolean literal in the rule body never holds',
|
|
108
|
+
});
|
|
109
|
+
}
|
|
55
110
|
continue;
|
|
111
|
+
}
|
|
56
112
|
if (bodyExpr.negated === true) {
|
|
57
113
|
addUnsupported(result, 'naf', `Rule '${name}' uses negation-as-failure.`, bodyExpr);
|
|
58
114
|
exprs.push({ kind: 'unsupported', constructType: 'naf', reason: 'negation-as-failure' });
|
|
@@ -145,7 +201,7 @@ function walkExpression(expr, ruleName, clauseIndex, ruleNames, inliningStack, d
|
|
|
145
201
|
},
|
|
146
202
|
];
|
|
147
203
|
}
|
|
148
|
-
return [buildBinaryExpr(opName, args, ruleName, clauseIndex, result, nextAnon)];
|
|
204
|
+
return [buildBinaryExpr(opName, args, ruleName, clauseIndex, depth, result, nextAnon)];
|
|
149
205
|
}
|
|
150
206
|
function walkSingleTerm(term, ruleName, clauseIndex, ruleNames, inliningStack, depth, result, ast) {
|
|
151
207
|
// Bare var: could be a cross-rule reference or a local variable.
|
|
@@ -156,7 +212,10 @@ function walkSingleTerm(term, ruleName, clauseIndex, ruleNames, inliningStack, d
|
|
|
156
212
|
}
|
|
157
213
|
// Local var used as bool check -- unusual but handle gracefully.
|
|
158
214
|
return [
|
|
159
|
-
{
|
|
215
|
+
{
|
|
216
|
+
kind: 'bool_check',
|
|
217
|
+
ref: { kind: 'local_var', name: scopedLocal(clauseIndex, varName, ruleName, depth) },
|
|
218
|
+
},
|
|
160
219
|
];
|
|
161
220
|
}
|
|
162
221
|
// Bare ref: input.field (bool truthiness check) or data.* (unsupported).
|
|
@@ -224,6 +283,55 @@ function inlineRule(targetName, callerName, clauseIndex, ruleNames, inliningStac
|
|
|
224
283
|
},
|
|
225
284
|
];
|
|
226
285
|
}
|
|
286
|
+
let negateInlinedBody = false;
|
|
287
|
+
// A helper with a default AND a clause is not just its clause body. Its value
|
|
288
|
+
// is the head value when the body holds and the default when it does not, so
|
|
289
|
+
// `helper == true` is (body AND head is true) OR (NOT body AND default is true).
|
|
290
|
+
// Inlining only the body dropped the default half and made `default helper :=
|
|
291
|
+
// true` verify as though the helper were merely its guard.
|
|
292
|
+
if (targetRules.length === 1) {
|
|
293
|
+
const only = targetRules[0];
|
|
294
|
+
const defRule = ast.rules.find((r) => r.head.name === targetName && r.default === true);
|
|
295
|
+
// A bare reference in a rule body SUCCEEDS when the referenced rule is
|
|
296
|
+
// defined and its value is not `false`. Only `false` is falsy in Rego:
|
|
297
|
+
// verified against OPA 1.19.0 that 0, "" and [] all satisfy the body term.
|
|
298
|
+
// So the test is `!== false`, not `=== true`. Using `=== true` treated a
|
|
299
|
+
// helper like `helper := "yes"` as if it could never fire.
|
|
300
|
+
const rawHead = only.head.value === undefined ? true : extractLiteralValue(only.head.value);
|
|
301
|
+
const rawDefault = defRule === undefined ? undefined : extractLiteralValue(defRule.head.value);
|
|
302
|
+
// A head or default the walker cannot read as a literal is not safe to guess.
|
|
303
|
+
if (rawHead === undefined || (defRule !== undefined && rawDefault === undefined)) {
|
|
304
|
+
addUnsupported(result, 'non_literal_head', `Helper '${targetName}' has a head or default value that is not a literal.`);
|
|
305
|
+
return [
|
|
306
|
+
{
|
|
307
|
+
kind: 'unsupported',
|
|
308
|
+
constructType: 'non_literal_head',
|
|
309
|
+
reason: 'non-literal helper head',
|
|
310
|
+
},
|
|
311
|
+
];
|
|
312
|
+
}
|
|
313
|
+
const headSucceeds = rawHead !== false;
|
|
314
|
+
// With no default the helper is UNDEFINED when the body fails, and an
|
|
315
|
+
// undefined reference does not satisfy a body term.
|
|
316
|
+
const defaultSucceeds = defRule !== undefined && rawDefault !== false;
|
|
317
|
+
// Both branches satisfy the reference, so it holds for every input.
|
|
318
|
+
if (headSucceeds && defaultSucceeds)
|
|
319
|
+
return [];
|
|
320
|
+
// Neither branch can satisfy it.
|
|
321
|
+
if (!headSucceeds && !defaultSucceeds) {
|
|
322
|
+
return [
|
|
323
|
+
{
|
|
324
|
+
kind: 'contradiction',
|
|
325
|
+
reason: `Helper '${targetName}' can never satisfy a body reference: its value is false when defined, and no default supplies a truthy value.`,
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
}
|
|
329
|
+
// Only the default satisfies it, so the reference holds exactly when the
|
|
330
|
+
// body does NOT. Applied to the inlined body at the end.
|
|
331
|
+
if (!headSucceeds && defaultSucceeds)
|
|
332
|
+
negateInlinedBody = true;
|
|
333
|
+
// headSucceeds && !defaultSucceeds falls through to ordinary body inlining.
|
|
334
|
+
}
|
|
227
335
|
if (targetRules.length > 1) {
|
|
228
336
|
// Multiple clauses: OR semantics can't be flattened into the caller's AND.
|
|
229
337
|
addUnsupported(result, 'multi_clause_inline', `Rule '${targetName}' (referenced from '${callerName}') has multiple clauses; OR inlining is not supported in Phase 1.`);
|
|
@@ -244,8 +352,30 @@ function inlineRule(targetName, callerName, clauseIndex, ruleNames, inliningStac
|
|
|
244
352
|
}
|
|
245
353
|
const newStack = new Set(inliningStack);
|
|
246
354
|
newStack.add(targetName);
|
|
247
|
-
|
|
355
|
+
// A boolean literal that never holds (`false`, `not true`) makes the
|
|
356
|
+
// helper's body unsatisfiable, exactly as it does in a rule body (see
|
|
357
|
+
// walkRule). It used to be dropped along with the harmless ones, which left
|
|
358
|
+
// an always-true body behind and verified a helper that can never fire as
|
|
359
|
+
// one that always does.
|
|
360
|
+
if (targetRule.body.some((e) => isBooleanLiteral(e) && !booleanLiteralHolds(e))) {
|
|
361
|
+
// Under negation the reference holds exactly when the body fails, which
|
|
362
|
+
// here is always.
|
|
363
|
+
if (negateInlinedBody)
|
|
364
|
+
return [];
|
|
365
|
+
return [
|
|
366
|
+
{
|
|
367
|
+
kind: 'contradiction',
|
|
368
|
+
reason: `Helper '${targetName}' has a boolean literal in its body that never holds.`,
|
|
369
|
+
},
|
|
370
|
+
];
|
|
371
|
+
}
|
|
372
|
+
const bodyExprs = targetRule.body.filter((e) => !isBooleanLiteral(e));
|
|
248
373
|
if (bodyExprs.length === 0) {
|
|
374
|
+
// An empty body always holds, so a helper whose default is the only true
|
|
375
|
+
// branch can never be true.
|
|
376
|
+
if (negateInlinedBody) {
|
|
377
|
+
return [{ kind: 'contradiction', reason: `Helper '${targetName}' has an always-true body.` }];
|
|
378
|
+
}
|
|
249
379
|
return [
|
|
250
380
|
{
|
|
251
381
|
kind: 'eq',
|
|
@@ -283,7 +413,7 @@ function inlineRule(targetName, callerName, clauseIndex, ruleNames, inliningStac
|
|
|
283
413
|
for (const e of ve)
|
|
284
414
|
inlined.push(e);
|
|
285
415
|
}
|
|
286
|
-
|
|
416
|
+
const body = inlined.length > 0
|
|
287
417
|
? inlined
|
|
288
418
|
: [
|
|
289
419
|
{
|
|
@@ -292,17 +422,31 @@ function inlineRule(targetName, callerName, clauseIndex, ruleNames, inliningStac
|
|
|
292
422
|
right: { kind: 'literal_bool', value: true },
|
|
293
423
|
},
|
|
294
424
|
];
|
|
425
|
+
return negateInlinedBody ? [{ kind: 'negation', inner: body }] : body;
|
|
426
|
+
}
|
|
427
|
+
/** A body expression that is a bare boolean term, negated or not. */
|
|
428
|
+
function isBooleanLiteral(expr) {
|
|
429
|
+
return !Array.isArray(expr.terms) && expr.terms.type === 'boolean';
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Whether a bare boolean term holds: `true` and `not false` do, `false` and
|
|
433
|
+
* `not true` do not. Reading `not false` as the literal `false` proved a rule
|
|
434
|
+
* that always fires never true.
|
|
435
|
+
*/
|
|
436
|
+
function booleanLiteralHolds(expr) {
|
|
437
|
+
const value = Array.isArray(expr.terms) ? undefined : expr.terms.value;
|
|
438
|
+
return expr.negated === true ? value === false : value === true;
|
|
295
439
|
}
|
|
296
440
|
/**
|
|
297
441
|
* Build a VerifyExpr for a two-argument operator expression.
|
|
298
442
|
*/
|
|
299
|
-
function buildBinaryExpr(opName, args, ruleName, clauseIndex, result, nextAnon) {
|
|
443
|
+
function buildBinaryExpr(opName, args, ruleName, clauseIndex, depth, result, nextAnon) {
|
|
300
444
|
if (args.length < 2) {
|
|
301
445
|
addUnsupported(result, 'arity_error', `Operator '${opName}' in rule '${ruleName}' has fewer than 2 arguments.`);
|
|
302
446
|
return { kind: 'unsupported', constructType: 'arity_error', reason: `${opName} arity` };
|
|
303
447
|
}
|
|
304
|
-
const left = termToValue(args[0], clauseIndex, result, nextAnon);
|
|
305
|
-
const right = termToValue(args[1], clauseIndex, result, nextAnon);
|
|
448
|
+
const left = termToValue(args[0], clauseIndex, ruleName, depth, result, nextAnon);
|
|
449
|
+
const right = termToValue(args[1], clauseIndex, ruleName, depth, result, nextAnon);
|
|
306
450
|
if (left === null || right === null) {
|
|
307
451
|
return {
|
|
308
452
|
kind: 'unsupported',
|
|
@@ -325,7 +469,11 @@ function buildBinaryExpr(opName, args, ruleName, clauseIndex, result, nextAnon)
|
|
|
325
469
|
reason: 'non-var LHS in assign',
|
|
326
470
|
};
|
|
327
471
|
}
|
|
328
|
-
return {
|
|
472
|
+
return {
|
|
473
|
+
kind: 'assign',
|
|
474
|
+
local: scopedLocal(clauseIndex, a0.value, ruleName, depth),
|
|
475
|
+
value: right,
|
|
476
|
+
};
|
|
329
477
|
}
|
|
330
478
|
case 'neq':
|
|
331
479
|
return { kind: 'neq', left, right };
|
|
@@ -375,7 +523,7 @@ function buildBinaryExpr(opName, args, ruleName, clauseIndex, result, nextAnon)
|
|
|
375
523
|
* Convert an OpaTerm to a VerifyValue.
|
|
376
524
|
* Returns null when the term cannot be represented (triggers unsupported).
|
|
377
525
|
*/
|
|
378
|
-
function termToValue(term, clauseIndex, result, nextAnon) {
|
|
526
|
+
function termToValue(term, clauseIndex, ruleName, depth, result, nextAnon) {
|
|
379
527
|
switch (term.type) {
|
|
380
528
|
case 'string':
|
|
381
529
|
return { kind: 'literal_string', value: term.value };
|
|
@@ -388,9 +536,12 @@ function termToValue(term, clauseIndex, result, nextAnon) {
|
|
|
388
536
|
case 'var': {
|
|
389
537
|
const varName = term.value;
|
|
390
538
|
if (varName === '_') {
|
|
391
|
-
return {
|
|
539
|
+
return {
|
|
540
|
+
kind: 'local_var',
|
|
541
|
+
name: scopedLocal(clauseIndex, `_anon${nextAnon()}`, ruleName, depth),
|
|
542
|
+
};
|
|
392
543
|
}
|
|
393
|
-
return { kind: 'local_var', name: scopedLocal(clauseIndex, varName) };
|
|
544
|
+
return { kind: 'local_var', name: scopedLocal(clauseIndex, varName, ruleName, depth) };
|
|
394
545
|
}
|
|
395
546
|
case 'ref': {
|
|
396
547
|
const refTerms = term.value;
|
|
@@ -425,7 +576,12 @@ function extractInputRef(refTerms, result) {
|
|
|
425
576
|
return null;
|
|
426
577
|
}
|
|
427
578
|
}
|
|
428
|
-
|
|
579
|
+
// The whole input compared as one value is not modelled: every variable
|
|
580
|
+
// the encoder creates stands for a field, and a witness for a bare `input`
|
|
581
|
+
// came back under a key named for a missing segment.
|
|
582
|
+
if (segments.length === 0)
|
|
583
|
+
return null;
|
|
584
|
+
const path = renderInputPath(segments);
|
|
429
585
|
if (!result.inputPaths.has(path)) {
|
|
430
586
|
result.inputPaths.set(path, segments);
|
|
431
587
|
}
|
|
@@ -483,45 +639,15 @@ function addUnsupported(result, constructType, description, expr) {
|
|
|
483
639
|
const loc = expr ? extractLocation(expr.terms) : undefined;
|
|
484
640
|
result.unsupported.push({ constructType, description, location: loc });
|
|
485
641
|
}
|
|
486
|
-
function scopedLocal(clauseIndex, varName) {
|
|
487
|
-
return `local_${clauseIndex}_${varName}`;
|
|
488
|
-
}
|
|
489
642
|
/**
|
|
490
|
-
*
|
|
491
|
-
*
|
|
492
|
-
*
|
|
643
|
+
* Scope a local variable name.
|
|
644
|
+
*
|
|
645
|
+
* The owning rule and the inline depth are part of the key. Without them,
|
|
646
|
+
* inlining a helper into a caller that reuses a variable name (`x`, `msg`,
|
|
647
|
+
* `user` are the common ones) made the two share one Z3 constant, silently
|
|
648
|
+
* unifying unrelated values and producing PROVEN for rules that do fire.
|
|
493
649
|
*/
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
return;
|
|
497
|
-
if (Array.isArray(node)) {
|
|
498
|
-
for (const item of node)
|
|
499
|
-
collectAllInputPaths(item, out);
|
|
500
|
-
return;
|
|
501
|
-
}
|
|
502
|
-
const obj = node;
|
|
503
|
-
if (obj['type'] === 'ref' && Array.isArray(obj['value'])) {
|
|
504
|
-
const terms = obj['value'];
|
|
505
|
-
if (terms[0]?.type === 'var' && terms[0]?.value === 'input') {
|
|
506
|
-
const segs = [];
|
|
507
|
-
let ok = true;
|
|
508
|
-
for (let i = 1; i < terms.length; i++) {
|
|
509
|
-
const t = terms[i];
|
|
510
|
-
if (t.type === 'string' && typeof t.value === 'string')
|
|
511
|
-
segs.push(t.value);
|
|
512
|
-
else {
|
|
513
|
-
ok = false;
|
|
514
|
-
break;
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
if (ok && segs.length > 0) {
|
|
518
|
-
const path = 'input.' + segs.join('.');
|
|
519
|
-
if (!out.has(path))
|
|
520
|
-
out.set(path, segs);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
for (const val of Object.values(obj))
|
|
525
|
-
collectAllInputPaths(val, out);
|
|
650
|
+
function scopedLocal(clauseIndex, varName, ruleName, depth) {
|
|
651
|
+
return `local_${clauseIndex}_d${depth}_${ruleName}_${varName}`;
|
|
526
652
|
}
|
|
527
653
|
//# sourceMappingURL=rego-ast-walker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rego-ast-walker.js","sourceRoot":"","sources":["../../src/lib/rego-ast-walker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rego-ast-walker.js","sourceRoot":"","sources":["../../src/lib/rego-ast-walker.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* strips the leading "input." prefix, and returns the nested object the
|
|
7
7
|
* MCP caller can put directly into OPA's `--input` flag.
|
|
8
8
|
*
|
|
9
|
-
* Supported Z3 sorts: string,
|
|
9
|
+
* Supported Z3 sorts: string, real, bool.
|
|
10
10
|
* Uninterpreted sorts produce a placeholder string in the output.
|
|
11
11
|
*/
|
|
12
12
|
import type { init as Z3Init } from 'z3-solver';
|
|
@@ -21,9 +21,22 @@ export type CounterexampleInput = Record<string, unknown>;
|
|
|
21
21
|
* @param model - the SAT model from solver.model()
|
|
22
22
|
* @param inputVars - map from path ("input.user.role") to Z3 constant
|
|
23
23
|
* @param sorts - inferred sort for each path
|
|
24
|
+
* @param presenceVars - per path, the Z3 boolean saying whether the input
|
|
25
|
+
* carries the field; a path the model leaves absent is omitted
|
|
24
26
|
* @returns nested JSON for the "input" field (leading "input." stripped)
|
|
25
27
|
*/
|
|
26
|
-
export declare function extractCounterexample(model: Z3Model, inputVars: Map<string, Z3AnyExpr>, sorts: Map<string, Z3Sort>): CounterexampleInput;
|
|
28
|
+
export declare function extractCounterexample(model: Z3Model, inputVars: Map<string, Z3AnyExpr>, sorts: Map<string, Z3Sort>, presenceVars?: Map<string, Z3AnyExpr>): CounterexampleInput;
|
|
29
|
+
/**
|
|
30
|
+
* Undo Z3's rendering of a string value. The binding writes every byte
|
|
31
|
+
* outside printable ASCII as `\u{HH}`, one escape per UTF-8 byte, so "héllo"
|
|
32
|
+
* arrives as `h\u{c3}\u{a9}llo` and a tab as `\u{9}`; a backslash the policy
|
|
33
|
+
* wrote arrives as `\u{5c}`, since the encoder escapes it. A witness left in
|
|
34
|
+
* that form did not reproduce: OPA compared the policy's literal against the
|
|
35
|
+
* escape text. Each run of escapes is read back as bytes and decoded as
|
|
36
|
+
* UTF-8; the text between runs is kept as it is, so a character Z3 did not
|
|
37
|
+
* escape survives, and a code point no string can hold is left unread.
|
|
38
|
+
*/
|
|
39
|
+
export declare function decodeZ3String(text: string): string;
|
|
27
40
|
/**
|
|
28
41
|
* Format a counterexample as a human-readable string for the MCP response.
|
|
29
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rego-counterexample.d.ts","sourceRoot":"","sources":["../../src/lib/rego-counterexample.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"rego-counterexample.d.ts","sourceRoot":"","sources":["../../src/lib/rego-counterexample.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3E,KAAK,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,KAAK,SAAS,GACV,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GACtC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GACrC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1D;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,mBAAmB,CAyDrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYnD;AA+BD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAEpE"}
|
|
@@ -1,32 +1,53 @@
|
|
|
1
|
+
import { parseInputPath } from './rego-input-path.js';
|
|
1
2
|
/**
|
|
2
3
|
* Extract the witness/counterexample input object from a Z3 model.
|
|
3
4
|
*
|
|
4
5
|
* @param model - the SAT model from solver.model()
|
|
5
6
|
* @param inputVars - map from path ("input.user.role") to Z3 constant
|
|
6
7
|
* @param sorts - inferred sort for each path
|
|
8
|
+
* @param presenceVars - per path, the Z3 boolean saying whether the input
|
|
9
|
+
* carries the field; a path the model leaves absent is omitted
|
|
7
10
|
* @returns nested JSON for the "input" field (leading "input." stripped)
|
|
8
11
|
*/
|
|
9
|
-
export function extractCounterexample(model, inputVars, sorts) {
|
|
12
|
+
export function extractCounterexample(model, inputVars, sorts, presenceVars) {
|
|
10
13
|
const flat = {};
|
|
11
14
|
for (const [path, varExpr] of inputVars) {
|
|
15
|
+
// A field the model chose to leave ABSENT must be omitted, not given a
|
|
16
|
+
// value. Emitting one produced witnesses that did not reproduce: the tool
|
|
17
|
+
// said "here is an input where the rule is false" while handing back an
|
|
18
|
+
// input on which the rule was true, because the real reason it was false
|
|
19
|
+
// was that the field was missing.
|
|
20
|
+
const presence = presenceVars?.get(path);
|
|
21
|
+
if (presence !== undefined) {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
23
|
+
const isPresent = model.eval(presence, true).toString() === 'true';
|
|
24
|
+
if (!isPresent)
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
12
27
|
const sort = sorts.get(path) ?? 'string';
|
|
13
28
|
const evaluated = model.eval(varExpr, true); // true = model completion
|
|
14
29
|
let value;
|
|
15
30
|
switch (sort) {
|
|
16
31
|
case 'string':
|
|
17
32
|
try {
|
|
18
|
-
value = evaluated.asString();
|
|
33
|
+
value = decodeZ3String(evaluated.asString());
|
|
19
34
|
}
|
|
20
35
|
catch {
|
|
21
36
|
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
22
|
-
value = evaluated.toString().replace(/^"|"$/g, '');
|
|
37
|
+
value = decodeZ3String(evaluated.toString().replace(/^"|"$/g, ''));
|
|
23
38
|
}
|
|
24
39
|
break;
|
|
25
|
-
case '
|
|
26
|
-
// Z3
|
|
40
|
+
case 'real': {
|
|
41
|
+
// Z3 prints negatives as "(- N)" and non-integers as "(/ p q)".
|
|
27
42
|
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
28
|
-
const
|
|
29
|
-
|
|
43
|
+
const raw = evaluated.toString();
|
|
44
|
+
const frac = /^\(\/\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\)$/.exec(raw);
|
|
45
|
+
if (frac) {
|
|
46
|
+
value = Number(frac[1]) / Number(frac[2]);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
value = Number(raw.replace(/\(-\s+([\d.]+)\)/, '-$1'));
|
|
50
|
+
}
|
|
30
51
|
break;
|
|
31
52
|
}
|
|
32
53
|
case 'bool':
|
|
@@ -38,21 +59,48 @@ export function extractCounterexample(model, inputVars, sorts) {
|
|
|
38
59
|
value = `<opaque:${evaluated.toString()}>`;
|
|
39
60
|
break;
|
|
40
61
|
}
|
|
41
|
-
|
|
42
|
-
const inputRelPath = path.startsWith('input.') ? path.slice('input.'.length) : path;
|
|
43
|
-
flat[inputRelPath] = value;
|
|
62
|
+
flat[path] = value;
|
|
44
63
|
}
|
|
45
64
|
return buildNestedObject(flat);
|
|
46
65
|
}
|
|
47
66
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
67
|
+
* Undo Z3's rendering of a string value. The binding writes every byte
|
|
68
|
+
* outside printable ASCII as `\u{HH}`, one escape per UTF-8 byte, so "héllo"
|
|
69
|
+
* arrives as `h\u{c3}\u{a9}llo` and a tab as `\u{9}`; a backslash the policy
|
|
70
|
+
* wrote arrives as `\u{5c}`, since the encoder escapes it. A witness left in
|
|
71
|
+
* that form did not reproduce: OPA compared the policy's literal against the
|
|
72
|
+
* escape text. Each run of escapes is read back as bytes and decoded as
|
|
73
|
+
* UTF-8; the text between runs is kept as it is, so a character Z3 did not
|
|
74
|
+
* escape survives, and a code point no string can hold is left unread.
|
|
75
|
+
*/
|
|
76
|
+
export function decodeZ3String(text) {
|
|
77
|
+
if (!text.includes('\\u{'))
|
|
78
|
+
return text;
|
|
79
|
+
return text.replace(/(?:\\u\{[0-9a-fA-F]{1,6}\})+/g, (run) => {
|
|
80
|
+
const bytes = [];
|
|
81
|
+
for (const m of run.matchAll(/\\u\{([0-9a-fA-F]{1,6})\}/g)) {
|
|
82
|
+
const code = parseInt(m[1], 16);
|
|
83
|
+
if (code <= 0xff)
|
|
84
|
+
bytes.push(code);
|
|
85
|
+
else if (code <= 0x10ffff)
|
|
86
|
+
bytes.push(...Buffer.from(String.fromCodePoint(code), 'utf8'));
|
|
87
|
+
else
|
|
88
|
+
return run;
|
|
89
|
+
}
|
|
90
|
+
return Buffer.from(bytes).toString('utf8');
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Convert rendered input paths to a nested object.
|
|
95
|
+
* E.g. { 'input.user.role': "admin", 'input["a.b"]': "read" } →
|
|
96
|
+
* { user: { role: "admin" }, "a.b": "read" }
|
|
97
|
+
* Splitting on dots put a quoted dotted key under nested objects, and the
|
|
98
|
+
* witness did not satisfy the rule it was produced for.
|
|
51
99
|
*/
|
|
52
100
|
function buildNestedObject(flat) {
|
|
53
101
|
const result = {};
|
|
54
|
-
for (const [
|
|
55
|
-
const segments =
|
|
102
|
+
for (const [renderedPath, value] of Object.entries(flat)) {
|
|
103
|
+
const segments = parseInputPath(renderedPath);
|
|
56
104
|
let cursor = result;
|
|
57
105
|
for (let i = 0; i < segments.length - 1; i++) {
|
|
58
106
|
const seg = segments[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rego-counterexample.js","sourceRoot":"","sources":["../../src/lib/rego-counterexample.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rego-counterexample.js","sourceRoot":"","sources":["../../src/lib/rego-counterexample.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering of an `input` path that is injective over its segments.
|
|
3
|
+
*
|
|
4
|
+
* Joining segments with dots made `input["a.b"]` and `input.a.b` the same
|
|
5
|
+
* string, so the two fields shared one Z3 constant and the witness for one
|
|
6
|
+
* was rebuilt as the other. A segment that is a plain identifier is written
|
|
7
|
+
* `.seg`; any other is written `["..."]` with JSON quoting, which is how Rego
|
|
8
|
+
* itself spells it, and the two forms cannot collide.
|
|
9
|
+
*/
|
|
10
|
+
/** Render `["user", "a.b"]` as `input.user["a.b"]`. */
|
|
11
|
+
export declare function renderInputPath(segments: readonly string[]): string;
|
|
12
|
+
/**
|
|
13
|
+
* Parse a rendered path back into its segments. The inverse of
|
|
14
|
+
* renderInputPath; anything it did not produce is read as best it can, one
|
|
15
|
+
* dot-separated segment at a time, so a plain `input.a.b` still works, and a
|
|
16
|
+
* bracket without a well-formed string inside is taken as literal text
|
|
17
|
+
* rather than thrown on.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseInputPath(path: string): string[];
|
|
20
|
+
//# sourceMappingURL=rego-input-path.d.ts.map
|