@suss/adapter-python 0.5.9 → 0.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -15747,7 +15747,16 @@ function date4(params) {
15747
15747
  // ../../../node_modules/zod/v4/classic/external.js
15748
15748
  config(en_default());
15749
15749
 
15750
- // ../../ir-core/dist/chunk-5KE7OWN3.js
15750
+ // ../../ir-core/dist/chunk-WKR5SU4N.js
15751
+ function gqlIdentityKey(typeName, fieldName) {
15752
+ return `gql:${typeName}.${fieldName}`;
15753
+ }
15754
+ function fnIdentityKey(packageName, exportPath) {
15755
+ return `fn:${packageName}::${exportPath.join(".")}`;
15756
+ }
15757
+ function busIdentityKey(messageBus, subject) {
15758
+ return `bus:${messageBus} ${subject}`;
15759
+ }
15751
15760
  function defineBoundarySemantics(definition) {
15752
15761
  return definition;
15753
15762
  }
@@ -15789,6 +15798,12 @@ var functionCallSemantics = defineBoundarySemantics({
15789
15798
  /** A call returns a value, which is not a status and a body. */
15790
15799
  exchangesHttpResponses: false,
15791
15800
  reportsUnpairedItself: false,
15801
+ /**
15802
+ * In-repo units (components, bare handlers) are keyless by design
15803
+ * and pair through call edges rather than the keyed pass, so a
15804
+ * missing key is not a boundary nothing can reach.
15805
+ */
15806
+ canPair: () => true,
15792
15807
  /**
15793
15808
  * `"fn:<package>::<exportPath>"` when both are set. Other in-process
15794
15809
  * function-call units, such as components and bare handlers inside
@@ -15796,7 +15811,7 @@ var functionCallSemantics = defineBoundarySemantics({
15796
15811
  */
15797
15812
  identityKey(semantics) {
15798
15813
  if (semantics.package !== void 0 && semantics.exportPath !== void 0 && semantics.exportPath.length > 0) {
15799
- return `fn:${semantics.package}::${semantics.exportPath.join(".")}`;
15814
+ return fnIdentityKey(semantics.package, semantics.exportPath);
15800
15815
  }
15801
15816
  return null;
15802
15817
  }
@@ -15819,6 +15834,8 @@ var graphqlOperationSemantics = defineBoundarySemantics({
15819
15834
  exchangesHttpResponses: false,
15820
15835
  reportsUnpairedItself: false,
15821
15836
  identityKey: () => null,
15837
+ /** Keyless by design; the dedicated pass pairs it by its document. */
15838
+ canPair: () => true,
15822
15839
  /** "query GetUser". The contract checker pairs it, the key does not. */
15823
15840
  displayLabel(semantics) {
15824
15841
  return `${semantics.operationType} ${semantics.operationName ?? "<anonymous>"}`;
@@ -15852,7 +15869,7 @@ var graphqlResolverSemantics = defineBoundarySemantics({
15852
15869
  if (semantics.typeName === null || semantics.fieldName === "") {
15853
15870
  return null;
15854
15871
  }
15855
- return `gql:${semantics.typeName}.${semantics.fieldName}`;
15872
+ return gqlIdentityKey(semantics.typeName, semantics.fieldName);
15856
15873
  }
15857
15874
  }
15858
15875
  });
@@ -15901,6 +15918,12 @@ var messageBusSemantics = defineBoundarySemantics({
15901
15918
  * ones, so the generic unmatched lists leave them alone.
15902
15919
  */
15903
15920
  reportsUnpairedItself: true,
15921
+ /**
15922
+ * A channel unnamed here can still pair: the dedicated pass
15923
+ * collapses env chains before comparing, so a consumer whose
15924
+ * channel arrives at runtime meets the template that declares it.
15925
+ */
15926
+ canPair: () => true,
15904
15927
  /**
15905
15928
  * `"bus:<messageBus> <subject>"`, or null when the channel is null
15906
15929
  * or its subject is empty.
@@ -15923,7 +15946,7 @@ var messageBusSemantics = defineBoundarySemantics({
15923
15946
  if (subject === "") {
15924
15947
  return null;
15925
15948
  }
15926
- return `bus:${semantics.messageBus} ${subject}`;
15949
+ return busIdentityKey(semantics.messageBus, subject);
15927
15950
  },
15928
15951
  sidesAgree(a, b) {
15929
15952
  if (a.channel === null || b.channel === null) {
@@ -16101,8 +16124,13 @@ var StorageRelationalSemanticsSchema = external_exports.object({
16101
16124
  * and a monorepo with several schemas gives each one its own value.
16102
16125
  */
16103
16126
  scope: external_exports.string(),
16104
- /** The table or model name, as declared in the schema. */
16105
- table: external_exports.string()
16127
+ /**
16128
+ * The table or model name as the schema declares it, or null when
16129
+ * the source states one this reader could not settle. A null table
16130
+ * pairs with nothing, rather than with whatever its source text
16131
+ * happens to spell.
16132
+ */
16133
+ table: external_exports.string().nullable()
16106
16134
  });
16107
16135
  var storageRelationalSemantics = defineBoundarySemantics({
16108
16136
  name: "storage-relational",
@@ -16261,6 +16289,14 @@ var SuppressionFileSchema = external_exports.object({
16261
16289
  version: external_exports.literal(1),
16262
16290
  rules: external_exports.array(SuppressionRuleSchema)
16263
16291
  }).strict();
16292
+ function namedOrNull(value, field2) {
16293
+ if (value === "") {
16294
+ throw new Error(
16295
+ `${field2} is an empty string; write null when the source does not name it`
16296
+ );
16297
+ }
16298
+ return value;
16299
+ }
16264
16300
  function storageRelationalBinding(opts) {
16265
16301
  return {
16266
16302
  transport: opts.storageSystem,
@@ -16268,7 +16304,7 @@ function storageRelationalBinding(opts) {
16268
16304
  name: "storage-relational",
16269
16305
  storageSystem: opts.storageSystem,
16270
16306
  scope: opts.scope,
16271
- table: opts.table
16307
+ table: namedOrNull(opts.table, "storage table")
16272
16308
  },
16273
16309
  recognition: opts.recognition
16274
16310
  };
package/dist/index.js CHANGED
@@ -15703,7 +15703,16 @@ function date4(params) {
15703
15703
  // ../../../node_modules/zod/v4/classic/external.js
15704
15704
  config(en_default());
15705
15705
 
15706
- // ../../ir-core/dist/chunk-5KE7OWN3.js
15706
+ // ../../ir-core/dist/chunk-WKR5SU4N.js
15707
+ function gqlIdentityKey(typeName, fieldName) {
15708
+ return `gql:${typeName}.${fieldName}`;
15709
+ }
15710
+ function fnIdentityKey(packageName, exportPath) {
15711
+ return `fn:${packageName}::${exportPath.join(".")}`;
15712
+ }
15713
+ function busIdentityKey(messageBus, subject) {
15714
+ return `bus:${messageBus} ${subject}`;
15715
+ }
15707
15716
  function defineBoundarySemantics(definition) {
15708
15717
  return definition;
15709
15718
  }
@@ -15745,6 +15754,12 @@ var functionCallSemantics = defineBoundarySemantics({
15745
15754
  /** A call returns a value, which is not a status and a body. */
15746
15755
  exchangesHttpResponses: false,
15747
15756
  reportsUnpairedItself: false,
15757
+ /**
15758
+ * In-repo units (components, bare handlers) are keyless by design
15759
+ * and pair through call edges rather than the keyed pass, so a
15760
+ * missing key is not a boundary nothing can reach.
15761
+ */
15762
+ canPair: () => true,
15748
15763
  /**
15749
15764
  * `"fn:<package>::<exportPath>"` when both are set. Other in-process
15750
15765
  * function-call units, such as components and bare handlers inside
@@ -15752,7 +15767,7 @@ var functionCallSemantics = defineBoundarySemantics({
15752
15767
  */
15753
15768
  identityKey(semantics) {
15754
15769
  if (semantics.package !== void 0 && semantics.exportPath !== void 0 && semantics.exportPath.length > 0) {
15755
- return `fn:${semantics.package}::${semantics.exportPath.join(".")}`;
15770
+ return fnIdentityKey(semantics.package, semantics.exportPath);
15756
15771
  }
15757
15772
  return null;
15758
15773
  }
@@ -15775,6 +15790,8 @@ var graphqlOperationSemantics = defineBoundarySemantics({
15775
15790
  exchangesHttpResponses: false,
15776
15791
  reportsUnpairedItself: false,
15777
15792
  identityKey: () => null,
15793
+ /** Keyless by design; the dedicated pass pairs it by its document. */
15794
+ canPair: () => true,
15778
15795
  /** "query GetUser". The contract checker pairs it, the key does not. */
15779
15796
  displayLabel(semantics) {
15780
15797
  return `${semantics.operationType} ${semantics.operationName ?? "<anonymous>"}`;
@@ -15808,7 +15825,7 @@ var graphqlResolverSemantics = defineBoundarySemantics({
15808
15825
  if (semantics.typeName === null || semantics.fieldName === "") {
15809
15826
  return null;
15810
15827
  }
15811
- return `gql:${semantics.typeName}.${semantics.fieldName}`;
15828
+ return gqlIdentityKey(semantics.typeName, semantics.fieldName);
15812
15829
  }
15813
15830
  }
15814
15831
  });
@@ -15857,6 +15874,12 @@ var messageBusSemantics = defineBoundarySemantics({
15857
15874
  * ones, so the generic unmatched lists leave them alone.
15858
15875
  */
15859
15876
  reportsUnpairedItself: true,
15877
+ /**
15878
+ * A channel unnamed here can still pair: the dedicated pass
15879
+ * collapses env chains before comparing, so a consumer whose
15880
+ * channel arrives at runtime meets the template that declares it.
15881
+ */
15882
+ canPair: () => true,
15860
15883
  /**
15861
15884
  * `"bus:<messageBus> <subject>"`, or null when the channel is null
15862
15885
  * or its subject is empty.
@@ -15879,7 +15902,7 @@ var messageBusSemantics = defineBoundarySemantics({
15879
15902
  if (subject === "") {
15880
15903
  return null;
15881
15904
  }
15882
- return `bus:${semantics.messageBus} ${subject}`;
15905
+ return busIdentityKey(semantics.messageBus, subject);
15883
15906
  },
15884
15907
  sidesAgree(a, b) {
15885
15908
  if (a.channel === null || b.channel === null) {
@@ -16057,8 +16080,13 @@ var StorageRelationalSemanticsSchema = external_exports.object({
16057
16080
  * and a monorepo with several schemas gives each one its own value.
16058
16081
  */
16059
16082
  scope: external_exports.string(),
16060
- /** The table or model name, as declared in the schema. */
16061
- table: external_exports.string()
16083
+ /**
16084
+ * The table or model name as the schema declares it, or null when
16085
+ * the source states one this reader could not settle. A null table
16086
+ * pairs with nothing, rather than with whatever its source text
16087
+ * happens to spell.
16088
+ */
16089
+ table: external_exports.string().nullable()
16062
16090
  });
16063
16091
  var storageRelationalSemantics = defineBoundarySemantics({
16064
16092
  name: "storage-relational",
@@ -16217,6 +16245,14 @@ var SuppressionFileSchema = external_exports.object({
16217
16245
  version: external_exports.literal(1),
16218
16246
  rules: external_exports.array(SuppressionRuleSchema)
16219
16247
  }).strict();
16248
+ function namedOrNull(value, field2) {
16249
+ if (value === "") {
16250
+ throw new Error(
16251
+ `${field2} is an empty string; write null when the source does not name it`
16252
+ );
16253
+ }
16254
+ return value;
16255
+ }
16220
16256
  function storageRelationalBinding(opts) {
16221
16257
  return {
16222
16258
  transport: opts.storageSystem,
@@ -16224,7 +16260,7 @@ function storageRelationalBinding(opts) {
16224
16260
  name: "storage-relational",
16225
16261
  storageSystem: opts.storageSystem,
16226
16262
  scope: opts.scope,
16227
- table: opts.table
16263
+ table: namedOrNull(opts.table, "storage table")
16228
16264
  },
16229
16265
  recognition: opts.recognition
16230
16266
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suss/adapter-python",
3
- "version": "0.5.9",
3
+ "version": "0.5.10",
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,9 +47,9 @@
47
47
  "typecheck": "tsc --noEmit"
48
48
  },
49
49
  "dependencies": {
50
- "@suss/behavioral-ir": "0.5.9",
51
- "@suss/datalog": "0.5.9",
52
- "@suss/extractor": "0.5.9",
50
+ "@suss/behavioral-ir": "0.5.10",
51
+ "@suss/datalog": "0.5.10",
52
+ "@suss/extractor": "0.5.10",
53
53
  "web-tree-sitter": "^0.26.11"
54
54
  },
55
55
  "devDependencies": {