@suss/adapter-python 0.9.0 → 0.11.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.
Files changed (3) hide show
  1. package/dist/index.cjs +262 -226
  2. package/dist/index.js +51 -15
  3. package/package.json +5 -5
package/dist/index.cjs CHANGED
@@ -15747,7 +15747,7 @@ function date4(params) {
15747
15747
  // ../../../node_modules/zod/v4/classic/external.js
15748
15748
  config(en_default());
15749
15749
 
15750
- // ../../ir-core/dist/chunk-XUXN6DIX.js
15750
+ // ../../ir-core/dist/chunk-AQYS5AC6.js
15751
15751
  function gqlIdentityKey(typeName, fieldName) {
15752
15752
  return `gql:${typeName}.${fieldName}`;
15753
15753
  }
@@ -16049,6 +16049,9 @@ function normalizePath(path4) {
16049
16049
  );
16050
16050
  return normalized;
16051
16051
  }
16052
+ function pathShape(path4) {
16053
+ return normalizePath(path4).replace(/\{[^}]*\}/g, "{}");
16054
+ }
16052
16055
  function methodsAgree(a, b) {
16053
16056
  if (a === null || b === null) {
16054
16057
  return false;
@@ -16100,12 +16103,17 @@ var restSemantics = defineBoundarySemantics({
16100
16103
  * settles it inside the bucket. The identity key stays what a reader
16101
16104
  * sees and a suppression targets ("GET /users", "* /users"), and
16102
16105
  * this key groups what a reader still tells apart.
16106
+ *
16107
+ * A parameter's name goes too. A spec written by hand says
16108
+ * `{userId}` where the Express route that serves it says `:id`, and
16109
+ * both match the same requests, so pairing on the name gave two
16110
+ * boundaries that never met and a run with nothing to report.
16103
16111
  */
16104
16112
  pairingKey(semantics) {
16105
16113
  if (semantics.method === null || semantics.path === null) {
16106
16114
  return null;
16107
16115
  }
16108
- return `rest ${normalizePath(semantics.path)}`;
16116
+ return `rest ${pathShape(semantics.path)}`;
16109
16117
  },
16110
16118
  sidesAgree(a, b) {
16111
16119
  return methodsAgree(a.method, b.method);
@@ -16200,7 +16208,9 @@ var StorageSemanticsSchema = external_exports.object({
16200
16208
  * The table, bucket, collection, or index, as the source declares
16201
16209
  * it, or null when the source states one this reader could not
16202
16210
  * settle. A null container pairs with nothing, rather than with
16203
- * whatever its source text happens to spell.
16211
+ * whatever its source text happens to spell. The string is in the
16212
+ * boundary-name syntax: a literal, a pattern with `{}` holes, or a
16213
+ * reference, and `parseBoundaryName` is the one reader of it.
16204
16214
  */
16205
16215
  container: external_exports.string().nullable(),
16206
16216
  /**
@@ -16479,285 +16489,311 @@ function statementIn(call) {
16479
16489
  }
16480
16490
 
16481
16491
  // src/facts/resolve.ts
16482
- var import_datalog2 = require("@suss/datalog");
16492
+ var import_datalog3 = require("@suss/datalog");
16483
16493
 
16484
16494
  // ../../resolution/dist/index.js
16485
16495
  var import_datalog = require("@suss/datalog");
16486
- var VALUE_STEP = (0, import_datalog.constant)("value");
16487
- var RESULT_STEP = (0, import_datalog.constant)("result");
16496
+ var import_datalog2 = require("@suss/datalog");
16497
+ var VALUE_STEP = (0, import_datalog2.constant)("value");
16498
+ var RESULT_STEP = (0, import_datalog2.constant)("result");
16488
16499
  var RESOLUTION_RULES = [
16489
16500
  // Aliasing: const x = y, or an identifier referencing a declaration.
16490
16501
  // A language with a hop of its own, like JavaScript's `.bind`, states
16491
16502
  // it as a step too, or every question but `comesTo` misses it.
16492
- (0, import_datalog.rule)("stepsTo", [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"), VALUE_STEP], [(0, import_datalog.lit)("binds", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"))]),
16503
+ (0, import_datalog2.rule)(
16504
+ "stepsTo",
16505
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"), VALUE_STEP],
16506
+ [(0, import_datalog2.lit)("binds", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"))],
16507
+ "alias"
16508
+ ),
16493
16509
  // A name written more than once has the value the last write left
16494
16510
  // there. The adapter works out which write that is and stays quiet
16495
16511
  // when control flow decides, so such a name steps nowhere at all.
16496
- (0, import_datalog.rule)(
16512
+ (0, import_datalog2.rule)(
16513
+ "stepsTo",
16514
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"), VALUE_STEP],
16515
+ [(0, import_datalog2.lit)("endsHolding", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"))],
16516
+ "last write"
16517
+ ),
16518
+ // A fallback says the value is one of its branches, so each branch is
16519
+ // a step. A branch that resolves to nothing makes no claim, and two
16520
+ // branches resolving to different things fail the single-answer policy.
16521
+ (0, import_datalog2.rule)(
16497
16522
  "stepsTo",
16498
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"), VALUE_STEP],
16499
- [(0, import_datalog.lit)("endsHolding", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"))]
16523
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("b"), VALUE_STEP],
16524
+ [(0, import_datalog2.lit)("fallbackBranch", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("b"))],
16525
+ "fallback"
16500
16526
  ),
16501
16527
  // An import steps to what the module exports under that name.
16502
- (0, import_datalog.rule)(
16528
+ (0, import_datalog2.rule)(
16503
16529
  "stepsTo",
16504
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("value"), VALUE_STEP],
16530
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("value"), VALUE_STEP],
16505
16531
  [
16506
- (0, import_datalog.lit)("imports", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")),
16507
- (0, import_datalog.lit)("moduleExport", (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("value"))
16508
- ]
16532
+ (0, import_datalog2.lit)("imports", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")),
16533
+ (0, import_datalog2.lit)("moduleExport", (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("value"))
16534
+ ],
16535
+ "import"
16509
16536
  ),
16510
16537
  // A parameter steps to what a call passes it. A function called from
16511
16538
  // several places leaves its parameter with more than one value, and a
16512
16539
  // caller that needs those apart asks `paramAt`.
16513
- (0, import_datalog.rule)(
16540
+ (0, import_datalog2.rule)(
16514
16541
  "stepsTo",
16515
- [(0, import_datalog.variable)("p"), (0, import_datalog.variable)("a"), VALUE_STEP],
16516
- [(0, import_datalog.lit)("passesArgument", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("p"), (0, import_datalog.variable)("a"))]
16542
+ [(0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("a"), VALUE_STEP],
16543
+ [(0, import_datalog2.lit)("passesArgument", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("a"))],
16544
+ "argument"
16517
16545
  ),
16518
16546
  // Reading a property steps to what the object contains under that
16519
16547
  // name, whichever way the object arrived: `routes.list` off a name,
16520
16548
  // or `make(body).handle` off a call.
16521
- (0, import_datalog.rule)(
16549
+ (0, import_datalog2.rule)(
16522
16550
  "stepsTo",
16523
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("held"), VALUE_STEP],
16551
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("held"), VALUE_STEP],
16524
16552
  [
16525
- (0, import_datalog.lit)("readsProperty", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("o"), (0, import_datalog.variable)("n")),
16526
- (0, import_datalog.lit)("objectOf", (0, import_datalog.variable)("o"), (0, import_datalog.variable)("obj")),
16527
- (0, import_datalog.lit)("contains", (0, import_datalog.variable)("obj"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("held"))
16528
- ]
16553
+ (0, import_datalog2.lit)("readsProperty", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("o"), (0, import_datalog2.variable)("n")),
16554
+ (0, import_datalog2.lit)("objectOf", (0, import_datalog2.variable)("o"), (0, import_datalog2.variable)("obj")),
16555
+ (0, import_datalog2.lit)("contains", (0, import_datalog2.variable)("obj"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("held"))
16556
+ ],
16557
+ "property read"
16529
16558
  ),
16530
16559
  // Calling a class makes one of it, so the call steps to the class and
16531
16560
  // a method read off the result is the one the class declares. The
16532
16561
  // caveat below is about a factory function, and a class is not one.
16533
- (0, import_datalog.rule)(
16562
+ (0, import_datalog2.rule)(
16534
16563
  "stepsTo",
16535
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("cls"), VALUE_STEP],
16564
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("cls"), VALUE_STEP],
16536
16565
  [
16537
- (0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c")),
16538
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("cls")),
16539
- (0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("cls"))
16540
- ]
16566
+ (0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c")),
16567
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("cls")),
16568
+ (0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("cls"))
16569
+ ],
16570
+ "class instance"
16541
16571
  ),
16542
16572
  // Wrapper transparency, derived: calling a factory that returns a
16543
16573
  // function which calls its parameter k steps to argument k.
16544
- (0, import_datalog.rule)(
16574
+ (0, import_datalog2.rule)(
16545
16575
  "stepsTo",
16546
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("a"), VALUE_STEP],
16576
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("a"), VALUE_STEP],
16547
16577
  [
16548
- (0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c")),
16549
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("f")),
16550
- (0, import_datalog.lit)("unwraps", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("k")),
16551
- (0, import_datalog.lit)("callArg", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("k"), (0, import_datalog.variable)("a"))
16552
- ]
16578
+ (0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c")),
16579
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("f")),
16580
+ (0, import_datalog2.lit)("unwraps", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("k")),
16581
+ (0, import_datalog2.lit)("callArg", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("k"), (0, import_datalog2.variable)("a"))
16582
+ ],
16583
+ "factory unwrap"
16553
16584
  ),
16554
16585
  // Wrapper transparency, declared: a pack says this callee wraps
16555
16586
  // argument k. The callee has to come from the library the pack said,
16556
16587
  // so a local object spelled the same way is not mistaken for it.
16557
- (0, import_datalog.rule)(
16588
+ (0, import_datalog2.rule)(
16558
16589
  "stepsTo",
16559
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("a"), VALUE_STEP],
16590
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("a"), VALUE_STEP],
16560
16591
  [
16561
- (0, import_datalog.lit)("calleeName", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("n")),
16562
- (0, import_datalog.lit)("unwrapsByName", (0, import_datalog.variable)("n"), (0, import_datalog.variable)("k")),
16563
- (0, import_datalog.lit)("wrapperModule", (0, import_datalog.variable)("n"), (0, import_datalog.variable)("m")),
16564
- (0, import_datalog.lit)("calleeOrigin", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("m")),
16565
- (0, import_datalog.lit)("callArg", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("k"), (0, import_datalog.variable)("a"))
16566
- ]
16592
+ (0, import_datalog2.lit)("calleeName", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("n")),
16593
+ (0, import_datalog2.lit)("unwrapsByName", (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("k")),
16594
+ (0, import_datalog2.lit)("wrapperModule", (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("m")),
16595
+ (0, import_datalog2.lit)("calleeOrigin", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("m")),
16596
+ (0, import_datalog2.lit)("callArg", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("k"), (0, import_datalog2.variable)("a"))
16597
+ ],
16598
+ "declared wrapper"
16567
16599
  ),
16568
16600
  // The one step that runs a function forwards: a call steps to what
16569
16601
  // the function it invokes returns.
16570
- (0, import_datalog.rule)(
16602
+ (0, import_datalog2.rule)(
16571
16603
  "stepsTo",
16572
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("ret"), RESULT_STEP],
16573
- [(0, import_datalog.lit)("invokes", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")), (0, import_datalog.lit)("returnsValue", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("ret"))]
16604
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("ret"), RESULT_STEP],
16605
+ [(0, import_datalog2.lit)("invokes", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")), (0, import_datalog2.lit)("returnsValue", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("ret"))],
16606
+ "call result"
16574
16607
  ),
16575
16608
  // Where a walk gets to, and whether it ran a call on the way. A value
16576
16609
  // step keeps whatever the rest of the walk was, and a result step
16577
16610
  // makes the whole walk one that ran a call.
16578
- (0, import_datalog.rule)(
16611
+ (0, import_datalog2.rule)(
16579
16612
  "reaches",
16580
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), (0, import_datalog.variable)("kind")],
16581
- [(0, import_datalog.lit)("stepsTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), (0, import_datalog.variable)("kind"))]
16613
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), (0, import_datalog2.variable)("kind")],
16614
+ [(0, import_datalog2.lit)("stepsTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), (0, import_datalog2.variable)("kind"))]
16582
16615
  ),
16583
- (0, import_datalog.rule)(
16616
+ (0, import_datalog2.rule)(
16584
16617
  "reaches",
16585
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), (0, import_datalog.variable)("kind")],
16618
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), (0, import_datalog2.variable)("kind")],
16586
16619
  [
16587
- (0, import_datalog.lit)("stepsTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"), VALUE_STEP),
16588
- (0, import_datalog.lit)("reaches", (0, import_datalog.variable)("y"), (0, import_datalog.variable)("z"), (0, import_datalog.variable)("kind"))
16620
+ (0, import_datalog2.lit)("stepsTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"), VALUE_STEP),
16621
+ (0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("y"), (0, import_datalog2.variable)("z"), (0, import_datalog2.variable)("kind"))
16589
16622
  ]
16590
16623
  ),
16591
16624
  // Two rules rather than one leaving the rest of the walk's kind free.
16592
16625
  // A free kind is a second question about the same relation, and a
16593
16626
  // demand-driven run then derives both to answer either.
16594
- (0, import_datalog.rule)(
16627
+ (0, import_datalog2.rule)(
16595
16628
  "reaches",
16596
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), RESULT_STEP],
16629
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), RESULT_STEP],
16597
16630
  [
16598
- (0, import_datalog.lit)("stepsTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"), RESULT_STEP),
16599
- (0, import_datalog.lit)("reaches", (0, import_datalog.variable)("y"), (0, import_datalog.variable)("z"), VALUE_STEP)
16631
+ (0, import_datalog2.lit)("stepsTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"), RESULT_STEP),
16632
+ (0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("y"), (0, import_datalog2.variable)("z"), VALUE_STEP)
16600
16633
  ]
16601
16634
  ),
16602
- (0, import_datalog.rule)(
16635
+ (0, import_datalog2.rule)(
16603
16636
  "reaches",
16604
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), RESULT_STEP],
16637
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), RESULT_STEP],
16605
16638
  [
16606
- (0, import_datalog.lit)("stepsTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"), RESULT_STEP),
16607
- (0, import_datalog.lit)("reaches", (0, import_datalog.variable)("y"), (0, import_datalog.variable)("z"), RESULT_STEP)
16639
+ (0, import_datalog2.lit)("stepsTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"), RESULT_STEP),
16640
+ (0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("y"), (0, import_datalog2.variable)("z"), RESULT_STEP)
16608
16641
  ]
16609
16642
  ),
16610
16643
  // What a value comes down to: the walk that never ran a call, stopped
16611
16644
  // at a function or an object. Something already written out comes to
16612
16645
  // itself, and every other walk ends at one of those.
16613
- (0, import_datalog.rule)("comesTo", [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("x")], [(0, import_datalog.lit)("func", (0, import_datalog.variable)("x"))]),
16614
- (0, import_datalog.rule)("comesTo", [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("x")], [(0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("x"))]),
16615
- (0, import_datalog.rule)(
16646
+ (0, import_datalog2.rule)("comesTo", [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("x")], [(0, import_datalog2.lit)("func", (0, import_datalog2.variable)("x"))]),
16647
+ (0, import_datalog2.rule)("comesTo", [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("x")], [(0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("x"))]),
16648
+ (0, import_datalog2.rule)(
16616
16649
  "comesTo",
16617
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16618
- [(0, import_datalog.lit)("reaches", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), VALUE_STEP), (0, import_datalog.lit)("func", (0, import_datalog.variable)("z"))]
16650
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16651
+ [(0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), VALUE_STEP), (0, import_datalog2.lit)("func", (0, import_datalog2.variable)("z"))]
16619
16652
  ),
16620
- (0, import_datalog.rule)(
16653
+ (0, import_datalog2.rule)(
16621
16654
  "comesTo",
16622
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16623
- [(0, import_datalog.lit)("reaches", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), VALUE_STEP), (0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("z"))]
16655
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16656
+ [(0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), VALUE_STEP), (0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("z"))]
16624
16657
  ),
16625
16658
  // The same stopping condition, for the walk that ran a call. A call
16626
16659
  // gets no `comesTo` answer on purpose: coming back with what a
16627
16660
  // factory returned would fight the unwrapping answer.
16628
- (0, import_datalog.rule)(
16661
+ (0, import_datalog2.rule)(
16629
16662
  "givesBack",
16630
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16631
- [(0, import_datalog.lit)("reaches", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), RESULT_STEP), (0, import_datalog.lit)("func", (0, import_datalog.variable)("z"))]
16663
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16664
+ [(0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), RESULT_STEP), (0, import_datalog2.lit)("func", (0, import_datalog2.variable)("z"))]
16632
16665
  ),
16633
- (0, import_datalog.rule)(
16666
+ (0, import_datalog2.rule)(
16634
16667
  "givesBack",
16635
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16636
- [(0, import_datalog.lit)("reaches", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), RESULT_STEP), (0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("z"))]
16668
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16669
+ [(0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), RESULT_STEP), (0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("z"))]
16637
16670
  ),
16638
16671
  // Following a value to the expression it is written as, whatever kind
16639
16672
  // that is. A GraphQL document is neither a function nor an object, so
16640
16673
  // `comesTo` never reaches one.
16641
- (0, import_datalog.rule)("isWrittenAs", [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("x")], [(0, import_datalog.lit)("writtenValue", (0, import_datalog.variable)("x"))]),
16642
- (0, import_datalog.rule)("isWrittenAs", [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("x")], [(0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("x"))]),
16643
- (0, import_datalog.rule)(
16674
+ (0, import_datalog2.rule)("isWrittenAs", [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("x")], [(0, import_datalog2.lit)("writtenValue", (0, import_datalog2.variable)("x"))]),
16675
+ (0, import_datalog2.rule)("isWrittenAs", [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("x")], [(0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("x"))]),
16676
+ (0, import_datalog2.rule)(
16644
16677
  "isWrittenAs",
16645
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16646
- [(0, import_datalog.lit)("reaches", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), VALUE_STEP), (0, import_datalog.lit)("writtenValue", (0, import_datalog.variable)("z"))]
16678
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16679
+ [(0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), VALUE_STEP), (0, import_datalog2.lit)("writtenValue", (0, import_datalog2.variable)("z"))]
16647
16680
  ),
16648
- (0, import_datalog.rule)(
16681
+ (0, import_datalog2.rule)(
16649
16682
  "isWrittenAs",
16650
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16651
- [(0, import_datalog.lit)("reaches", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"), VALUE_STEP), (0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("z"))]
16683
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16684
+ [(0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"), VALUE_STEP), (0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("z"))]
16652
16685
  ),
16653
16686
  // What one call site put in a parameter, told apart from what the
16654
16687
  // other callers passed.
16655
- (0, import_datalog.rule)(
16688
+ (0, import_datalog2.rule)(
16656
16689
  "paramAt",
16657
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("p"), (0, import_datalog.variable)("z")],
16690
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("z")],
16658
16691
  [
16659
- (0, import_datalog.lit)("passesArgument", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("p"), (0, import_datalog.variable)("a")),
16660
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("a"), (0, import_datalog.variable)("z"))
16692
+ (0, import_datalog2.lit)("passesArgument", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("a")),
16693
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("a"), (0, import_datalog2.variable)("z"))
16661
16694
  ]
16662
16695
  ),
16663
16696
  // An argument arriving at the parameter it is passed to, by position
16664
16697
  // or by the name the caller wrote, keeping the call it went through
16665
16698
  // so `paramAt` can tell two call sites apart.
16666
- (0, import_datalog.rule)(
16699
+ (0, import_datalog2.rule)(
16667
16700
  "passesArgument",
16668
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("p"), (0, import_datalog.variable)("a")],
16701
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("a")],
16669
16702
  [
16670
- (0, import_datalog.lit)("paramOf", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("k"), (0, import_datalog.variable)("p")),
16671
- (0, import_datalog.lit)("callsFunction", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")),
16672
- (0, import_datalog.lit)("callArg", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("k"), (0, import_datalog.variable)("a"))
16703
+ (0, import_datalog2.lit)("paramOf", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("k"), (0, import_datalog2.variable)("p")),
16704
+ (0, import_datalog2.lit)("callsFunction", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")),
16705
+ (0, import_datalog2.lit)("callArg", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("k"), (0, import_datalog2.variable)("a"))
16673
16706
  ]
16674
16707
  ),
16675
- (0, import_datalog.rule)(
16708
+ (0, import_datalog2.rule)(
16676
16709
  "passesArgument",
16677
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("p"), (0, import_datalog.variable)("a")],
16710
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("a")],
16678
16711
  [
16679
- (0, import_datalog.lit)("paramNamed", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("p")),
16680
- (0, import_datalog.lit)("callsFunction", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")),
16681
- (0, import_datalog.lit)("callKeywordArg", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("a"))
16712
+ (0, import_datalog2.lit)("paramNamed", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("p")),
16713
+ (0, import_datalog2.lit)("callsFunction", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")),
16714
+ (0, import_datalog2.lit)("callKeywordArg", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("a"))
16682
16715
  ]
16683
16716
  ),
16684
16717
  // What a module exports: directly, or through re-export chains.
16685
- (0, import_datalog.rule)(
16718
+ (0, import_datalog2.rule)(
16686
16719
  "moduleExport",
16687
- [(0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("value")],
16688
- [(0, import_datalog.lit)("exportsAs", (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("value"))]
16720
+ [(0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("value")],
16721
+ [(0, import_datalog2.lit)("exportsAs", (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("value"))],
16722
+ "export"
16689
16723
  ),
16690
- (0, import_datalog.rule)(
16724
+ (0, import_datalog2.rule)(
16691
16725
  "moduleExport",
16692
- [(0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("value")],
16726
+ [(0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("value")],
16693
16727
  [
16694
- (0, import_datalog.lit)("reExports", (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("m2"), (0, import_datalog.variable)("n2")),
16695
- (0, import_datalog.lit)("moduleExport", (0, import_datalog.variable)("m2"), (0, import_datalog.variable)("n2"), (0, import_datalog.variable)("value"))
16696
- ]
16728
+ (0, import_datalog2.lit)("reExports", (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("m2"), (0, import_datalog2.variable)("n2")),
16729
+ (0, import_datalog2.lit)("moduleExport", (0, import_datalog2.variable)("m2"), (0, import_datalog2.variable)("n2"), (0, import_datalog2.variable)("value"))
16730
+ ],
16731
+ "re-export"
16697
16732
  ),
16698
- (0, import_datalog.rule)(
16733
+ (0, import_datalog2.rule)(
16699
16734
  "moduleExport",
16700
- [(0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("value")],
16735
+ [(0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("value")],
16701
16736
  [
16702
- (0, import_datalog.lit)("reExportsAll", (0, import_datalog.variable)("m"), (0, import_datalog.variable)("m2")),
16703
- (0, import_datalog.lit)("moduleExport", (0, import_datalog.variable)("m2"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("value"))
16704
- ]
16737
+ (0, import_datalog2.lit)("reExportsAll", (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("m2")),
16738
+ (0, import_datalog2.lit)("moduleExport", (0, import_datalog2.variable)("m2"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("value"))
16739
+ ],
16740
+ "re-export all"
16705
16741
  ),
16706
16742
  // The function a call runs, written from the call's side because a
16707
16743
  // caller asking what a call gives back has the call in hand.
16708
- (0, import_datalog.rule)(
16744
+ (0, import_datalog2.rule)(
16709
16745
  "invokes",
16710
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")],
16711
- [(0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c")), (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("f"))]
16746
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")],
16747
+ [(0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c")), (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("f"))]
16712
16748
  ),
16713
16749
  // The callee is itself a call: `daoBuilder()()`.
16714
- (0, import_datalog.rule)(
16750
+ (0, import_datalog2.rule)(
16715
16751
  "invokes",
16716
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")],
16717
- [(0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c")), (0, import_datalog.lit)("givesBack", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("f"))]
16752
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")],
16753
+ [(0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c")), (0, import_datalog2.lit)("givesBack", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("f"))]
16718
16754
  ),
16719
16755
  // The object an expression refers to: a name through `comesTo`, a
16720
16756
  // factory call through what it gives back. Naming the step is what
16721
16757
  // makes `routes.list` and `make(body).handle` one rule.
16722
- (0, import_datalog.rule)(
16758
+ (0, import_datalog2.rule)(
16723
16759
  "objectOf",
16724
- [(0, import_datalog.variable)("o"), (0, import_datalog.variable)("obj")],
16725
- [(0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("o"), (0, import_datalog.variable)("obj")), (0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("obj"))]
16760
+ [(0, import_datalog2.variable)("o"), (0, import_datalog2.variable)("obj")],
16761
+ [(0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("o"), (0, import_datalog2.variable)("obj")), (0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("obj"))]
16726
16762
  ),
16727
- (0, import_datalog.rule)(
16763
+ (0, import_datalog2.rule)(
16728
16764
  "objectOf",
16729
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("obj")],
16730
- [(0, import_datalog.lit)("givesBack", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("obj")), (0, import_datalog.lit)("objectValue", (0, import_datalog.variable)("obj"))]
16765
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("obj")],
16766
+ [(0, import_datalog2.lit)("givesBack", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("obj")), (0, import_datalog2.lit)("objectValue", (0, import_datalog2.variable)("obj"))]
16731
16767
  ),
16732
16768
  // Which calls a function, found by the name the call is written as
16733
16769
  // rather than by resolving every callee in the project. A caller knows
16734
16770
  // the function and wants its call sites, so both of these start from
16735
16771
  // the function. Starting from `call` instead asks what every call in
16736
16772
  // the project imports, which was 72% of everything derived.
16737
- (0, import_datalog.rule)(
16773
+ (0, import_datalog2.rule)(
16738
16774
  "callsFunction",
16739
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")],
16740
- [(0, import_datalog.lit)("binds", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("f")), (0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c"))]
16775
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")],
16776
+ [(0, import_datalog2.lit)("binds", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("f")), (0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c"))]
16741
16777
  ),
16742
- (0, import_datalog.rule)(
16778
+ (0, import_datalog2.rule)(
16743
16779
  "callsFunction",
16744
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")],
16780
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")],
16745
16781
  [
16746
- (0, import_datalog.lit)("moduleExport", (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("f")),
16747
- (0, import_datalog.lit)("imports", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")),
16748
- (0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c"))
16782
+ (0, import_datalog2.lit)("moduleExport", (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("f")),
16783
+ (0, import_datalog2.lit)("imports", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")),
16784
+ (0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c"))
16749
16785
  ]
16750
16786
  ),
16751
16787
  // The same, for a language whose adapter writes the import down as a
16752
16788
  // declaration and the call's callee as the name referring to it.
16753
- (0, import_datalog.rule)(
16789
+ (0, import_datalog2.rule)(
16754
16790
  "callsFunction",
16755
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("f")],
16791
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("f")],
16756
16792
  [
16757
- (0, import_datalog.lit)("moduleExport", (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("f")),
16758
- (0, import_datalog.lit)("imports", (0, import_datalog.variable)("d"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")),
16759
- (0, import_datalog.lit)("binds", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("d")),
16760
- (0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c"))
16793
+ (0, import_datalog2.lit)("moduleExport", (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("f")),
16794
+ (0, import_datalog2.lit)("imports", (0, import_datalog2.variable)("d"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")),
16795
+ (0, import_datalog2.lit)("binds", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("d")),
16796
+ (0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c"))
16761
16797
  ]
16762
16798
  ),
16763
16799
  // What an object contains, its base class included, so a method the base
@@ -16765,47 +16801,47 @@ var RESOLUTION_RULES = [
16765
16801
  // declare gives two, and the caller decides. This is its own relation
16766
16802
  // rather than more `holdsProperty`, which stays something an adapter
16767
16803
  // states and the rules only read.
16768
- (0, import_datalog.rule)(
16804
+ (0, import_datalog2.rule)(
16769
16805
  "contains",
16770
- [(0, import_datalog.variable)("o"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("held")],
16771
- [(0, import_datalog.lit)("holdsProperty", (0, import_datalog.variable)("o"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("held"))]
16806
+ [(0, import_datalog2.variable)("o"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("held")],
16807
+ [(0, import_datalog2.lit)("holdsProperty", (0, import_datalog2.variable)("o"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("held"))]
16772
16808
  ),
16773
- (0, import_datalog.rule)(
16809
+ (0, import_datalog2.rule)(
16774
16810
  "contains",
16775
- [(0, import_datalog.variable)("cls"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("held")],
16811
+ [(0, import_datalog2.variable)("cls"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("held")],
16776
16812
  [
16777
- (0, import_datalog.lit)("extends", (0, import_datalog.variable)("cls"), (0, import_datalog.variable)("base")),
16778
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("base"), (0, import_datalog.variable)("baseCls")),
16779
- (0, import_datalog.lit)("contains", (0, import_datalog.variable)("baseCls"), (0, import_datalog.variable)("n"), (0, import_datalog.variable)("held"))
16813
+ (0, import_datalog2.lit)("extends", (0, import_datalog2.variable)("cls"), (0, import_datalog2.variable)("base")),
16814
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("base"), (0, import_datalog2.variable)("baseCls")),
16815
+ (0, import_datalog2.lit)("contains", (0, import_datalog2.variable)("baseCls"), (0, import_datalog2.variable)("n"), (0, import_datalog2.variable)("held"))
16780
16816
  ]
16781
16817
  ),
16782
16818
  // Which function a factory returns, and which of its parameters that
16783
16819
  // function calls: together they are what makes it a wrapper.
16784
- (0, import_datalog.rule)(
16820
+ (0, import_datalog2.rule)(
16785
16821
  "returnsFunc",
16786
- [(0, import_datalog.variable)("f"), (0, import_datalog.variable)("g")],
16822
+ [(0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("g")],
16787
16823
  [
16788
- (0, import_datalog.lit)("returnsValue", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("value")),
16789
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("value"), (0, import_datalog.variable)("g")),
16790
- (0, import_datalog.lit)("func", (0, import_datalog.variable)("g"))
16824
+ (0, import_datalog2.lit)("returnsValue", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("value")),
16825
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("value"), (0, import_datalog2.variable)("g")),
16826
+ (0, import_datalog2.lit)("func", (0, import_datalog2.variable)("g"))
16791
16827
  ]
16792
16828
  ),
16793
16829
  // A call made by a nested closure counts as made by the function
16794
16830
  // that declares it; the closure runs as part of that function.
16795
- (0, import_datalog.rule)("bodyCallsDeep", [(0, import_datalog.variable)("f"), (0, import_datalog.variable)("c")], [(0, import_datalog.lit)("bodyCalls", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("c"))]),
16796
- (0, import_datalog.rule)(
16831
+ (0, import_datalog2.rule)("bodyCallsDeep", [(0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("c")], [(0, import_datalog2.lit)("bodyCalls", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("c"))]),
16832
+ (0, import_datalog2.rule)(
16797
16833
  "bodyCallsDeep",
16798
- [(0, import_datalog.variable)("f"), (0, import_datalog.variable)("c")],
16799
- [(0, import_datalog.lit)("containsFn", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("g")), (0, import_datalog.lit)("bodyCallsDeep", (0, import_datalog.variable)("g"), (0, import_datalog.variable)("c"))]
16834
+ [(0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("c")],
16835
+ [(0, import_datalog2.lit)("containsFn", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("g")), (0, import_datalog2.lit)("bodyCallsDeep", (0, import_datalog2.variable)("g"), (0, import_datalog2.variable)("c"))]
16800
16836
  ),
16801
- (0, import_datalog.rule)(
16837
+ (0, import_datalog2.rule)(
16802
16838
  "unwraps",
16803
- [(0, import_datalog.variable)("f"), (0, import_datalog.variable)("k")],
16839
+ [(0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("k")],
16804
16840
  [
16805
- (0, import_datalog.lit)("returnsFunc", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("g")),
16806
- (0, import_datalog.lit)("bodyCallsDeep", (0, import_datalog.variable)("g"), (0, import_datalog.variable)("c")),
16807
- (0, import_datalog.lit)("binds", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("p")),
16808
- (0, import_datalog.lit)("paramOf", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("k"), (0, import_datalog.variable)("p"))
16841
+ (0, import_datalog2.lit)("returnsFunc", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("g")),
16842
+ (0, import_datalog2.lit)("bodyCallsDeep", (0, import_datalog2.variable)("g"), (0, import_datalog2.variable)("c")),
16843
+ (0, import_datalog2.lit)("binds", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("p")),
16844
+ (0, import_datalog2.lit)("paramOf", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("k"), (0, import_datalog2.variable)("p"))
16809
16845
  ]
16810
16846
  ),
16811
16847
  // Argument flow: which parameter a value traces back to. Directly
@@ -16813,48 +16849,48 @@ var RESOLUTION_RULES = [
16813
16849
  // another unwrapping factory. This is what lets
16814
16850
  // `createProtected(h) { return service.withAuth(h); }` unwrap:
16815
16851
  // the returned call passes h through withAuth, which unwraps.
16816
- (0, import_datalog.rule)(
16852
+ (0, import_datalog2.rule)(
16817
16853
  "flowsToParam",
16818
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("p")],
16854
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("p")],
16819
16855
  [
16820
- (0, import_datalog.lit)("binds", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("p")),
16821
- (0, import_datalog.lit)("paramOf", (0, import_datalog.variable)("anyF"), (0, import_datalog.variable)("anyK"), (0, import_datalog.variable)("p"))
16856
+ (0, import_datalog2.lit)("binds", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("p")),
16857
+ (0, import_datalog2.lit)("paramOf", (0, import_datalog2.variable)("anyF"), (0, import_datalog2.variable)("anyK"), (0, import_datalog2.variable)("p"))
16822
16858
  ]
16823
16859
  ),
16824
- (0, import_datalog.rule)(
16860
+ (0, import_datalog2.rule)(
16825
16861
  "flowsToParam",
16826
- [(0, import_datalog.variable)("r"), (0, import_datalog.variable)("p")],
16862
+ [(0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("p")],
16827
16863
  [
16828
- (0, import_datalog.lit)("call", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("c")),
16829
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("f")),
16830
- (0, import_datalog.lit)("unwraps", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("k")),
16831
- (0, import_datalog.lit)("callArg", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("k"), (0, import_datalog.variable)("a")),
16832
- (0, import_datalog.lit)("flowsToParam", (0, import_datalog.variable)("a"), (0, import_datalog.variable)("p"))
16864
+ (0, import_datalog2.lit)("call", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("c")),
16865
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("f")),
16866
+ (0, import_datalog2.lit)("unwraps", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("k")),
16867
+ (0, import_datalog2.lit)("callArg", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("k"), (0, import_datalog2.variable)("a")),
16868
+ (0, import_datalog2.lit)("flowsToParam", (0, import_datalog2.variable)("a"), (0, import_datalog2.variable)("p"))
16833
16869
  ]
16834
16870
  ),
16835
- (0, import_datalog.rule)(
16871
+ (0, import_datalog2.rule)(
16836
16872
  "unwraps",
16837
- [(0, import_datalog.variable)("f"), (0, import_datalog.variable)("k")],
16873
+ [(0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("k")],
16838
16874
  [
16839
- (0, import_datalog.lit)("returnsValue", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("value")),
16840
- (0, import_datalog.lit)("flowsToParam", (0, import_datalog.variable)("value"), (0, import_datalog.variable)("p")),
16841
- (0, import_datalog.lit)("paramOf", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("k"), (0, import_datalog.variable)("p"))
16875
+ (0, import_datalog2.lit)("returnsValue", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("value")),
16876
+ (0, import_datalog2.lit)("flowsToParam", (0, import_datalog2.variable)("value"), (0, import_datalog2.variable)("p")),
16877
+ (0, import_datalog2.lit)("paramOf", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("k"), (0, import_datalog2.variable)("p"))
16842
16878
  ]
16843
16879
  ),
16844
16880
  // Where a name comes from, when what it refers to lives outside the
16845
16881
  // source being read. A walk ends at something written out in source,
16846
16882
  // so it never reaches a library's own function.
16847
- (0, import_datalog.rule)(
16883
+ (0, import_datalog2.rule)(
16848
16884
  "comesFrom",
16849
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")],
16850
- [(0, import_datalog.lit)("imports", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"))]
16885
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")],
16886
+ [(0, import_datalog2.lit)("imports", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"))]
16851
16887
  ),
16852
- (0, import_datalog.rule)(
16888
+ (0, import_datalog2.rule)(
16853
16889
  "comesFrom",
16854
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")],
16890
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")],
16855
16891
  [
16856
- (0, import_datalog.lit)("reaches", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("y"), VALUE_STEP),
16857
- (0, import_datalog.lit)("imports", (0, import_datalog.variable)("y"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"))
16892
+ (0, import_datalog2.lit)("reaches", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("y"), VALUE_STEP),
16893
+ (0, import_datalog2.lit)("imports", (0, import_datalog2.variable)("y"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"))
16858
16894
  ]
16859
16895
  ),
16860
16896
  // Calling f ends up calling the name n that module m exports. One hop
@@ -16866,80 +16902,80 @@ var RESOLUTION_RULES = [
16866
16902
  // ambiguity: a project decorator that composes two library decorators
16867
16903
  // applies both. A caller asks whether a particular (m, n) is among
16868
16904
  // them.
16869
- (0, import_datalog.rule)(
16905
+ (0, import_datalog2.rule)(
16870
16906
  "callsInto",
16871
- [(0, import_datalog.variable)("f"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")],
16907
+ [(0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")],
16872
16908
  [
16873
- (0, import_datalog.lit)("bodyCallsDeep", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("c")),
16874
- (0, import_datalog.lit)("comesFrom", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"))
16909
+ (0, import_datalog2.lit)("bodyCallsDeep", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("c")),
16910
+ (0, import_datalog2.lit)("comesFrom", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"))
16875
16911
  ]
16876
16912
  ),
16877
- (0, import_datalog.rule)(
16913
+ (0, import_datalog2.rule)(
16878
16914
  "callsInto",
16879
- [(0, import_datalog.variable)("f"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")],
16915
+ [(0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")],
16880
16916
  [
16881
- (0, import_datalog.lit)("bodyCallsDeep", (0, import_datalog.variable)("f"), (0, import_datalog.variable)("c")),
16882
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("c"), (0, import_datalog.variable)("g")),
16883
- (0, import_datalog.lit)("callsInto", (0, import_datalog.variable)("g"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"))
16917
+ (0, import_datalog2.lit)("bodyCallsDeep", (0, import_datalog2.variable)("f"), (0, import_datalog2.variable)("c")),
16918
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("c"), (0, import_datalog2.variable)("g")),
16919
+ (0, import_datalog2.lit)("callsInto", (0, import_datalog2.variable)("g"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"))
16884
16920
  ]
16885
16921
  ),
16886
16922
  // The question callers ask: what a value comes to, narrowed to the
16887
16923
  // functions. Objects appear in the middle of chains and never in an
16888
16924
  // answer.
16889
- (0, import_datalog.rule)(
16925
+ (0, import_datalog2.rule)(
16890
16926
  "resolves",
16891
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16892
- [(0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")), (0, import_datalog.lit)("func", (0, import_datalog.variable)("z"))]
16927
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16928
+ [(0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")), (0, import_datalog2.lit)("func", (0, import_datalog2.variable)("z"))]
16893
16929
  )
16894
16930
  ];
16895
16931
  var RESOLUTION_QUESTIONS = [
16896
- (0, import_datalog.rule)(
16932
+ (0, import_datalog2.rule)(
16897
16933
  "wantedResolves",
16898
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16899
- [(0, import_datalog.lit)("wanted", (0, import_datalog.variable)("x")), (0, import_datalog.lit)("resolves", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"))]
16934
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16935
+ [(0, import_datalog2.lit)("wanted", (0, import_datalog2.variable)("x")), (0, import_datalog2.lit)("resolves", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"))]
16900
16936
  ),
16901
- (0, import_datalog.rule)(
16937
+ (0, import_datalog2.rule)(
16902
16938
  "wantedComesTo",
16903
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16904
- [(0, import_datalog.lit)("wanted", (0, import_datalog.variable)("x")), (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"))]
16939
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16940
+ [(0, import_datalog2.lit)("wanted", (0, import_datalog2.variable)("x")), (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"))]
16905
16941
  ),
16906
- (0, import_datalog.rule)(
16942
+ (0, import_datalog2.rule)(
16907
16943
  "wantedComesTo",
16908
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16909
- [(0, import_datalog.lit)("wantedOrigin", (0, import_datalog.variable)("x")), (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"))]
16944
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16945
+ [(0, import_datalog2.lit)("wantedOrigin", (0, import_datalog2.variable)("x")), (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"))]
16910
16946
  ),
16911
- (0, import_datalog.rule)(
16947
+ (0, import_datalog2.rule)(
16912
16948
  "wantedIsWrittenAs",
16913
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16914
- [(0, import_datalog.lit)("wanted", (0, import_datalog.variable)("x")), (0, import_datalog.lit)("isWrittenAs", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"))]
16949
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16950
+ [(0, import_datalog2.lit)("wanted", (0, import_datalog2.variable)("x")), (0, import_datalog2.lit)("isWrittenAs", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"))]
16915
16951
  ),
16916
16952
  // A call is given no `comesTo`, so this is the only way to ask what
16917
16953
  // object one arrives at, and without it a demand-driven run derives
16918
16954
  // `objectOf` nowhere.
16919
- (0, import_datalog.rule)(
16955
+ (0, import_datalog2.rule)(
16920
16956
  "wantedObjectOf",
16921
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("z")],
16922
- [(0, import_datalog.lit)("wanted", (0, import_datalog.variable)("x")), (0, import_datalog.lit)("objectOf", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("z"))]
16957
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z")],
16958
+ [(0, import_datalog2.lit)("wanted", (0, import_datalog2.variable)("x")), (0, import_datalog2.lit)("objectOf", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("z"))]
16923
16959
  ),
16924
16960
  // Keyed by the parameter, since that is what a caller has in hand
16925
16961
  // when it wants the call sites told apart.
16926
- (0, import_datalog.rule)(
16962
+ (0, import_datalog2.rule)(
16927
16963
  "wantedParamAt",
16928
- [(0, import_datalog.variable)("p"), (0, import_datalog.variable)("r"), (0, import_datalog.variable)("z")],
16929
- [(0, import_datalog.lit)("wanted", (0, import_datalog.variable)("p")), (0, import_datalog.lit)("paramAt", (0, import_datalog.variable)("r"), (0, import_datalog.variable)("p"), (0, import_datalog.variable)("z"))]
16964
+ [(0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("z")],
16965
+ [(0, import_datalog2.lit)("wanted", (0, import_datalog2.variable)("p")), (0, import_datalog2.lit)("paramAt", (0, import_datalog2.variable)("r"), (0, import_datalog2.variable)("p"), (0, import_datalog2.variable)("z"))]
16930
16966
  ),
16931
- (0, import_datalog.rule)(
16967
+ (0, import_datalog2.rule)(
16932
16968
  "wantedComesFrom",
16933
- [(0, import_datalog.variable)("x"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")],
16934
- [(0, import_datalog.lit)("wantedOrigin", (0, import_datalog.variable)("x")), (0, import_datalog.lit)("comesFrom", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"))]
16969
+ [(0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")],
16970
+ [(0, import_datalog2.lit)("wantedOrigin", (0, import_datalog2.variable)("x")), (0, import_datalog2.lit)("comesFrom", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"))]
16935
16971
  ),
16936
- (0, import_datalog.rule)(
16972
+ (0, import_datalog2.rule)(
16937
16973
  "wantedCallsInto",
16938
- [(0, import_datalog.variable)("g"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n")],
16974
+ [(0, import_datalog2.variable)("g"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n")],
16939
16975
  [
16940
- (0, import_datalog.lit)("wantedOrigin", (0, import_datalog.variable)("x")),
16941
- (0, import_datalog.lit)("comesTo", (0, import_datalog.variable)("x"), (0, import_datalog.variable)("g")),
16942
- (0, import_datalog.lit)("callsInto", (0, import_datalog.variable)("g"), (0, import_datalog.variable)("m"), (0, import_datalog.variable)("n"))
16976
+ (0, import_datalog2.lit)("wantedOrigin", (0, import_datalog2.variable)("x")),
16977
+ (0, import_datalog2.lit)("comesTo", (0, import_datalog2.variable)("x"), (0, import_datalog2.variable)("g")),
16978
+ (0, import_datalog2.lit)("callsInto", (0, import_datalog2.variable)("g"), (0, import_datalog2.variable)("m"), (0, import_datalog2.variable)("n"))
16943
16979
  ]
16944
16980
  )
16945
16981
  ];
@@ -16948,7 +16984,7 @@ var ANSWER_RELATIONS = [
16948
16984
  ];
16949
16985
 
16950
16986
  // src/facts/resolve.ts
16951
- var RESOLUTION_PROGRAM = (0, import_datalog2.deriveOnDemand)(
16987
+ var RESOLUTION_PROGRAM = (0, import_datalog3.deriveOnDemand)(
16952
16988
  [...RESOLUTION_RULES, ...RESOLUTION_QUESTIONS],
16953
16989
  ANSWER_RELATIONS
16954
16990
  );
@@ -16959,7 +16995,7 @@ function resolveCalls(db, callKeys) {
16959
16995
  for (const callKey of callKeys) {
16960
16996
  db.add("wanted", [callKey]);
16961
16997
  }
16962
- (0, import_datalog2.evaluate)(db, RESOLUTION_PROGRAM.rules);
16998
+ (0, import_datalog3.evaluate)(db, RESOLUTION_PROGRAM.rules);
16963
16999
  }
16964
17000
  function containedValues(db, objectKey) {
16965
17001
  return db.facts("holdsProperty").filter((row) => row[0] === objectKey).map((row) => [String(row[1]), String(row[2])]).sort(([left], [right]) => Number(left) - Number(right)).map(([, value]) => value);
@@ -18534,7 +18570,7 @@ async function parsePython(source) {
18534
18570
  // src/project.ts
18535
18571
  var import_node_fs3 = __toESM(require("fs"), 1);
18536
18572
  var import_node_path3 = __toESM(require("path"), 1);
18537
- var import_datalog3 = require("@suss/datalog");
18573
+ var import_datalog4 = require("@suss/datalog");
18538
18574
  var import_extractor4 = require("@suss/extractor");
18539
18575
 
18540
18576
  // src/routers.ts
@@ -19484,7 +19520,7 @@ function reportUnresolvedProjectModules(options) {
19484
19520
  }
19485
19521
  }
19486
19522
  async function extractPythonProject(options) {
19487
- const db = new import_datalog3.Database();
19523
+ const db = new import_datalog4.Database();
19488
19524
  const summaries = [];
19489
19525
  const gapHandling = options.gapHandling ?? "permissive";
19490
19526
  const displayPathOf = (file2) => options.workspaceRoot !== void 0 ? import_node_path3.default.relative(options.workspaceRoot, file2) : file2;
package/dist/index.js CHANGED
@@ -15703,7 +15703,7 @@ function date4(params) {
15703
15703
  // ../../../node_modules/zod/v4/classic/external.js
15704
15704
  config(en_default());
15705
15705
 
15706
- // ../../ir-core/dist/chunk-XUXN6DIX.js
15706
+ // ../../ir-core/dist/chunk-AQYS5AC6.js
15707
15707
  function gqlIdentityKey(typeName, fieldName) {
15708
15708
  return `gql:${typeName}.${fieldName}`;
15709
15709
  }
@@ -16005,6 +16005,9 @@ function normalizePath(path4) {
16005
16005
  );
16006
16006
  return normalized;
16007
16007
  }
16008
+ function pathShape(path4) {
16009
+ return normalizePath(path4).replace(/\{[^}]*\}/g, "{}");
16010
+ }
16008
16011
  function methodsAgree(a, b) {
16009
16012
  if (a === null || b === null) {
16010
16013
  return false;
@@ -16056,12 +16059,17 @@ var restSemantics = defineBoundarySemantics({
16056
16059
  * settles it inside the bucket. The identity key stays what a reader
16057
16060
  * sees and a suppression targets ("GET /users", "* /users"), and
16058
16061
  * this key groups what a reader still tells apart.
16062
+ *
16063
+ * A parameter's name goes too. A spec written by hand says
16064
+ * `{userId}` where the Express route that serves it says `:id`, and
16065
+ * both match the same requests, so pairing on the name gave two
16066
+ * boundaries that never met and a run with nothing to report.
16059
16067
  */
16060
16068
  pairingKey(semantics) {
16061
16069
  if (semantics.method === null || semantics.path === null) {
16062
16070
  return null;
16063
16071
  }
16064
- return `rest ${normalizePath(semantics.path)}`;
16072
+ return `rest ${pathShape(semantics.path)}`;
16065
16073
  },
16066
16074
  sidesAgree(a, b) {
16067
16075
  return methodsAgree(a.method, b.method);
@@ -16156,7 +16164,9 @@ var StorageSemanticsSchema = external_exports.object({
16156
16164
  * The table, bucket, collection, or index, as the source declares
16157
16165
  * it, or null when the source states one this reader could not
16158
16166
  * settle. A null container pairs with nothing, rather than with
16159
- * whatever its source text happens to spell.
16167
+ * whatever its source text happens to spell. The string is in the
16168
+ * boundary-name syntax: a literal, a pattern with `{}` holes, or a
16169
+ * reference, and `parseBoundaryName` is the one reader of it.
16160
16170
  */
16161
16171
  container: external_exports.string().nullable(),
16162
16172
  /**
@@ -16438,6 +16448,7 @@ function statementIn(call) {
16438
16448
  import { deriveOnDemand, evaluate } from "@suss/datalog";
16439
16449
 
16440
16450
  // ../../resolution/dist/index.js
16451
+ import { ruleLabel } from "@suss/datalog";
16441
16452
  import { constant, lit, rule, variable as v } from "@suss/datalog";
16442
16453
  var VALUE_STEP = constant("value");
16443
16454
  var RESULT_STEP = constant("result");
@@ -16445,14 +16456,29 @@ var RESOLUTION_RULES = [
16445
16456
  // Aliasing: const x = y, or an identifier referencing a declaration.
16446
16457
  // A language with a hop of its own, like JavaScript's `.bind`, states
16447
16458
  // it as a step too, or every question but `comesTo` misses it.
16448
- rule("stepsTo", [v("x"), v("y"), VALUE_STEP], [lit("binds", v("x"), v("y"))]),
16459
+ rule(
16460
+ "stepsTo",
16461
+ [v("x"), v("y"), VALUE_STEP],
16462
+ [lit("binds", v("x"), v("y"))],
16463
+ "alias"
16464
+ ),
16449
16465
  // A name written more than once has the value the last write left
16450
16466
  // there. The adapter works out which write that is and stays quiet
16451
16467
  // when control flow decides, so such a name steps nowhere at all.
16452
16468
  rule(
16453
16469
  "stepsTo",
16454
16470
  [v("x"), v("y"), VALUE_STEP],
16455
- [lit("endsHolding", v("x"), v("y"))]
16471
+ [lit("endsHolding", v("x"), v("y"))],
16472
+ "last write"
16473
+ ),
16474
+ // A fallback says the value is one of its branches, so each branch is
16475
+ // a step. A branch that resolves to nothing makes no claim, and two
16476
+ // branches resolving to different things fail the single-answer policy.
16477
+ rule(
16478
+ "stepsTo",
16479
+ [v("x"), v("b"), VALUE_STEP],
16480
+ [lit("fallbackBranch", v("x"), v("b"))],
16481
+ "fallback"
16456
16482
  ),
16457
16483
  // An import steps to what the module exports under that name.
16458
16484
  rule(
@@ -16461,7 +16487,8 @@ var RESOLUTION_RULES = [
16461
16487
  [
16462
16488
  lit("imports", v("x"), v("m"), v("n")),
16463
16489
  lit("moduleExport", v("m"), v("n"), v("value"))
16464
- ]
16490
+ ],
16491
+ "import"
16465
16492
  ),
16466
16493
  // A parameter steps to what a call passes it. A function called from
16467
16494
  // several places leaves its parameter with more than one value, and a
@@ -16469,7 +16496,8 @@ var RESOLUTION_RULES = [
16469
16496
  rule(
16470
16497
  "stepsTo",
16471
16498
  [v("p"), v("a"), VALUE_STEP],
16472
- [lit("passesArgument", v("r"), v("p"), v("a"))]
16499
+ [lit("passesArgument", v("r"), v("p"), v("a"))],
16500
+ "argument"
16473
16501
  ),
16474
16502
  // Reading a property steps to what the object contains under that
16475
16503
  // name, whichever way the object arrived: `routes.list` off a name,
@@ -16481,7 +16509,8 @@ var RESOLUTION_RULES = [
16481
16509
  lit("readsProperty", v("x"), v("o"), v("n")),
16482
16510
  lit("objectOf", v("o"), v("obj")),
16483
16511
  lit("contains", v("obj"), v("n"), v("held"))
16484
- ]
16512
+ ],
16513
+ "property read"
16485
16514
  ),
16486
16515
  // Calling a class makes one of it, so the call steps to the class and
16487
16516
  // a method read off the result is the one the class declares. The
@@ -16493,7 +16522,8 @@ var RESOLUTION_RULES = [
16493
16522
  lit("call", v("r"), v("c")),
16494
16523
  lit("comesTo", v("c"), v("cls")),
16495
16524
  lit("objectValue", v("cls"))
16496
- ]
16525
+ ],
16526
+ "class instance"
16497
16527
  ),
16498
16528
  // Wrapper transparency, derived: calling a factory that returns a
16499
16529
  // function which calls its parameter k steps to argument k.
@@ -16505,7 +16535,8 @@ var RESOLUTION_RULES = [
16505
16535
  lit("comesTo", v("c"), v("f")),
16506
16536
  lit("unwraps", v("f"), v("k")),
16507
16537
  lit("callArg", v("r"), v("k"), v("a"))
16508
- ]
16538
+ ],
16539
+ "factory unwrap"
16509
16540
  ),
16510
16541
  // Wrapper transparency, declared: a pack says this callee wraps
16511
16542
  // argument k. The callee has to come from the library the pack said,
@@ -16519,14 +16550,16 @@ var RESOLUTION_RULES = [
16519
16550
  lit("wrapperModule", v("n"), v("m")),
16520
16551
  lit("calleeOrigin", v("r"), v("m")),
16521
16552
  lit("callArg", v("r"), v("k"), v("a"))
16522
- ]
16553
+ ],
16554
+ "declared wrapper"
16523
16555
  ),
16524
16556
  // The one step that runs a function forwards: a call steps to what
16525
16557
  // the function it invokes returns.
16526
16558
  rule(
16527
16559
  "stepsTo",
16528
16560
  [v("r"), v("ret"), RESULT_STEP],
16529
- [lit("invokes", v("r"), v("f")), lit("returnsValue", v("f"), v("ret"))]
16561
+ [lit("invokes", v("r"), v("f")), lit("returnsValue", v("f"), v("ret"))],
16562
+ "call result"
16530
16563
  ),
16531
16564
  // Where a walk gets to, and whether it ran a call on the way. A value
16532
16565
  // step keeps whatever the rest of the walk was, and a result step
@@ -16641,7 +16674,8 @@ var RESOLUTION_RULES = [
16641
16674
  rule(
16642
16675
  "moduleExport",
16643
16676
  [v("m"), v("n"), v("value")],
16644
- [lit("exportsAs", v("m"), v("n"), v("value"))]
16677
+ [lit("exportsAs", v("m"), v("n"), v("value"))],
16678
+ "export"
16645
16679
  ),
16646
16680
  rule(
16647
16681
  "moduleExport",
@@ -16649,7 +16683,8 @@ var RESOLUTION_RULES = [
16649
16683
  [
16650
16684
  lit("reExports", v("m"), v("n"), v("m2"), v("n2")),
16651
16685
  lit("moduleExport", v("m2"), v("n2"), v("value"))
16652
- ]
16686
+ ],
16687
+ "re-export"
16653
16688
  ),
16654
16689
  rule(
16655
16690
  "moduleExport",
@@ -16657,7 +16692,8 @@ var RESOLUTION_RULES = [
16657
16692
  [
16658
16693
  lit("reExportsAll", v("m"), v("m2")),
16659
16694
  lit("moduleExport", v("m2"), v("n"), v("value"))
16660
- ]
16695
+ ],
16696
+ "re-export all"
16661
16697
  ),
16662
16698
  // The function a call runs, written from the call's side because a
16663
16699
  // caller asking what a call gives back has the call in hand.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suss/adapter-python",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "type": "module",
5
5
  "description": "Python language adapter for suss — parses source with tree-sitter (WASM), resolves names with a lexical binder, and emits raw extractions for the suss pipeline.",
6
6
  "keywords": [
@@ -47,10 +47,10 @@
47
47
  "typecheck": "tsc --noEmit"
48
48
  },
49
49
  "dependencies": {
50
- "@suss/behavioral-ir": "0.9.0",
51
- "@suss/datalog": "0.9.0",
52
- "@suss/extractor": "0.9.0",
53
- "@suss/sql": "0.9.0",
50
+ "@suss/behavioral-ir": "0.11.0",
51
+ "@suss/datalog": "0.11.0",
52
+ "@suss/extractor": "0.11.0",
53
+ "@suss/sql": "0.11.0",
54
54
  "web-tree-sitter": "^0.26.11"
55
55
  },
56
56
  "devDependencies": {