@suss/ir-core 0.33.0 → 0.34.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.
@@ -40,6 +40,12 @@ declare const FunctionCallSemanticsSchema: z.ZodObject<{
40
40
  exportPath: z.ZodOptional<z.ZodArray<z.ZodString>>;
41
41
  }, z.core.$strip>;
42
42
  type FunctionCallSemantics = z.infer<typeof FunctionCallSemanticsSchema>;
43
+ /**
44
+ * Whether `module` is the name a project gave one of its modules rather
45
+ * than a path. A path always has a separator in it, and a module name
46
+ * never does, so a rewrite that makes paths relative leaves a name alone.
47
+ */
48
+ declare function isModuleName(module: string): boolean;
43
49
 
44
50
  declare const GraphqlOperationSemanticsSchema: z.ZodObject<{
45
51
  name: z.ZodLiteral<"graphql-operation">;
@@ -80,20 +86,19 @@ declare const MessageBusSemanticsSchema: z.ZodObject<{
80
86
  }, z.core.$strip>;
81
87
  type MessageBusSemantics = z.infer<typeof MessageBusSemanticsSchema>;
82
88
  /**
83
- * The bus technologies the schema allows. It comes from the enum, so a
84
- * value added there cannot drift from a hand-written copy elsewhere.
89
+ * The bus technologies the schema allows. It is derived from the enum,
90
+ * so there is no hand-written copy to fall out of step.
85
91
  */
86
92
  type MessageBusTechnology = MessageBusSemantics["messageBus"];
87
93
 
88
94
  /**
89
- * Where the protocol modules come together.
95
+ * The list of protocol definitions, and the lookups built from it.
90
96
  *
91
- * Each protocol under this directory exports one
92
- * `BoundarySemanticsDefinition`. This file lists them twice, once for
93
- * the schema union and once for the behavior lookup, and the type check
94
- * at the bottom fails compilation if the two lists ever cover different
95
- * sets. Adding a protocol changes this file and no other, by one line in
96
- * each list.
97
+ * Each protocol module in this directory exports one
98
+ * `BoundarySemanticsDefinition`. They are listed twice, once for the
99
+ * schema union and once for the behavior lookup, and the type check at
100
+ * the bottom fails compilation if the two lists differ. Besides its own
101
+ * module, a new protocol needs one line in each list.
97
102
  */
98
103
 
99
104
  /**
@@ -171,6 +176,9 @@ declare const SemanticsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
171
176
  }>;
172
177
  name: z.ZodLiteral<"unit-invocation">;
173
178
  instanceName: z.ZodNullable<z.ZodString>;
179
+ }, z.core.$strip>, z.ZodObject<{
180
+ name: z.ZodLiteral<"io">;
181
+ target: z.ZodNullable<z.ZodString>;
174
182
  }, z.core.$strip>], "name">;
175
183
  type Semantics = z.infer<typeof SemanticsSchema>;
176
184
 
@@ -191,44 +199,43 @@ type RestSemantics = z.infer<typeof RestSemanticsSchema>;
191
199
  */
192
200
  declare function normalizePath(path: string): string;
193
201
  /**
194
- * A path with every parameter reduced to its position. `/users/{id}`
195
- * and `/users/:userId` both come out `/users/{}`, which is the set of
196
- * requests each one serves, and what deciding whether two sides
197
- * describe one endpoint rests on. The name a parameter is written
198
- * under is worth keeping in a report and worth nothing in a comparison.
199
- * A parameter's range stays, since `{tenant?}` serves a different set
200
- * of requests from `{tenant}`.
202
+ * A path with every parameter name removed, for comparing two paths.
203
+ * `/users/{id}` and `/users/:userId` both become `/users/{}`, since a
204
+ * parameter's name does not change which requests the path serves. A
205
+ * parameter's range stays, since `{tenant?}` serves a different set of
206
+ * requests from `{tenant}`.
201
207
  */
202
208
  declare function pathShape(path: string): string;
203
209
  /**
204
210
  * Whether two REST methods mean the same thing. Equal methods agree,
205
- * and `"*"` agrees with any stated method, because a handler that
206
- * responds to every method responds to this one. A null method was never
207
- * stated, so it agrees with nothing: there is no claim to agree with.
211
+ * and `"*"` agrees with any given method, because a handler that
212
+ * responds to every method responds to this one. A null method means
213
+ * the source never gave one, so it agrees with nothing.
208
214
  *
209
- * This is the counterpart of `busesAgree`. No list of methods appears
210
- * here, so a wildcard pairs with whatever methods consumers write.
215
+ * This is the REST counterpart of `busesAgree`. There is no list of
216
+ * known methods, so a wildcard pairs with whatever methods consumers
217
+ * write.
211
218
  */
212
219
  declare function methodsAgree(a: string | null, b: string | null): boolean;
213
220
  /**
214
221
  * Whether a declared route path admits a concrete request path. Both
215
- * sides compare on their normalized forms, and a hole in the request
216
- * is text like any other, so a route inside a mount pattern is admitted
217
- * by it and a wider route is not.
222
+ * are normalized first. A hole in the request path is compared as plain
223
+ * text, so a mount pattern admits a route inside it and rejects a wider
224
+ * route.
218
225
  */
219
226
  declare function routePathAdmits(declaredPath: string, requestPath: string): boolean;
220
227
  /** Whether two declared route paths serve at least one request in common. */
221
228
  declare function routePathsMeet(a: string, b: string): boolean;
222
229
 
223
230
  /**
224
- * The pairing key is `(deploymentTarget, instanceName)`, which is
225
- * exactly a deployable unit, so the two fields come from
226
- * `DeployableUnitSchema` instead of being written out a second time.
231
+ * The dedicated pass pairs on `(deploymentTarget, instanceName)`, which
232
+ * is a deployable unit, so the two fields come from
233
+ * `DeployableUnitSchema`.
227
234
  *
228
- * A provider states both. The reading side is the code, which knows it
229
- * reads its configuration and not which deployment will run it, so a
230
- * recognizer standing at a read leaves both off rather than guessing.
231
- * The pairing pass takes the deployment from the provider anyway.
235
+ * A provider sets both. The reading side is code, and code does not say
236
+ * which deployment will run it, so a recognizer at a read leaves both
237
+ * out and does not guess. The pairing pass takes the deployment from
238
+ * the provider.
232
239
  */
233
240
  declare const RuntimeConfigSemanticsSchema: z.ZodObject<{
234
241
  deploymentTarget: z.ZodOptional<z.ZodEnum<{
@@ -252,37 +259,36 @@ declare const StorageSemanticsSchema: z.ZodObject<{
252
259
  }, z.core.$strip>;
253
260
  type StorageSemantics = z.infer<typeof StorageSemanticsSchema>;
254
261
  /**
255
- * `postgresql:invoices`, `aws.dynamodb:editions#by-publication`. The
256
- * pairing pass has no key to fall back on here, so a reader who types
257
- * this back at `suss ask`, the pass that indexes accesses by it, and an
258
- * intent doc that says which store a write reaches all read this one.
262
+ * The store's label, such as `postgresql:invoices` or
263
+ * `aws.dynamodb:editions#by-publication`. Storage has no identity key,
264
+ * so `suss ask`, the pass that indexes accesses, and an intent doc all
265
+ * refer to a store by this label.
259
266
  */
260
267
  declare function storageLabel(semantics: StorageSemantics): string;
261
- /** The engine, or the words a report writes where nobody settled one. */
268
+ /** The storage system, or `<unknown engine>` when it is null. */
262
269
  declare function storageSystemLabel(semantics: StorageSemantics): string;
263
270
  /**
264
- * What an access writes for its columns when it asked for all of them,
265
- * which is a query with no explicit projection. It covers every column
266
- * rather than saying which one, so anything comparing column lists has
267
- * to tell it apart from a list of columns.
271
+ * The column list an access records when it reads every column, as a
272
+ * query without an explicit projection does. It means all columns and
273
+ * does not list any, so code comparing column lists has to handle it
274
+ * separately.
268
275
  */
269
276
  declare const EVERY_FIELD = "*";
270
- /** The store on its own, which a finding writes without the system. */
277
+ /** The store's label without the storage system, as a finding writes it. */
271
278
  declare function storageContainerLabel(semantics: StorageSemantics): string;
272
279
 
273
280
  /**
274
- * @suss/ir-core schemas: primitives shared by every suss IR.
281
+ * The zod schemas for the primitives every suss IR uses.
275
282
  *
276
- * These are the types that any IR built on suss references: the
277
- * structure of a value (`TypeShape`), the identity of a boundary
278
- * (`BoundaryBinding` and its `Semantics` variants), where something is
279
- * in the source (`SourceLocation`), and how much to trust a claim
280
- * (`Confidence`). Behavioural summaries, intent docs, and later on
281
- * observation records all speak in these terms, so they are defined
282
- * here, in one place none of those IRs needs another IR to reach.
283
+ * `TypeShape` is the structure of a value. `BoundaryBinding` and its
284
+ * `Semantics` variants identify a boundary. `SourceLocation` says where
285
+ * something is in the source, and `Confidence` says how much to trust a
286
+ * claim. Behavioral summaries and intent docs are both built from these,
287
+ * so they live in a package of their own and neither IR depends on the
288
+ * other.
283
289
  *
284
- * The schemas are the single source of truth, and the package's
285
- * `index.ts` derives the types from them with `z.infer`.
290
+ * The schemas are the source of truth. The package index derives the
291
+ * types from them with `z.infer`.
286
292
  */
287
293
 
288
294
  declare const ConfidenceSourceSchema: z.ZodEnum<{
@@ -297,17 +303,17 @@ declare const ConfidenceLevelSchema: z.ZodEnum<{
297
303
  low: "low";
298
304
  }>;
299
305
  /**
300
- * What came of corroborating a claim by running the code
301
- * (`suss corroborate`). Inputs that satisfy the claim's own conditions
302
- * are generated and run through the function, and the observation
303
- * either agreed every time (`observed`), disagreed at least once
304
- * (`refuted`, which is either an extractor bug or a surprise, and the
305
- * counterexample says which input), or never produced a verdict
306
- * (`untested`, meaning no satisfying input was found, or every
307
- * satisfying run hit a dependency the harness cannot supply).
306
+ * The result of checking a claim by running the code (`suss
307
+ * corroborate`). The harness generates inputs that satisfy the claim's
308
+ * own conditions and runs the function on them.
309
+ *
310
+ * - `observed`: every run agreed with the claim.
311
+ * - `refuted`: at least one run disagreed, which is either an extractor
312
+ * bug or a surprise. `counterexample` gives the input.
313
+ * - `untested`: no run produced a verdict. No satisfying input was
314
+ * found, or every run hit a dependency the harness cannot supply.
308
315
  *
309
- * Corroboration adds observations to a derivation. It is extra
310
- * evidence, and it never rewrites the derived claim.
316
+ * Corroboration adds evidence to a derived claim and never rewrites it.
311
317
  */
312
318
  declare const CorroborationSchema: z.ZodObject<{
313
319
  outcome: z.ZodEnum<{
@@ -354,6 +360,7 @@ declare const SourceLocationSchema: z.ZodObject<{
354
360
  }, z.core.$strip>>;
355
361
  exportName: z.ZodNullable<z.ZodString>;
356
362
  workspace: z.ZodOptional<z.ZodString>;
363
+ module: z.ZodOptional<z.ZodString>;
357
364
  }, z.core.$strip>;
358
365
  declare const BoundaryBindingSchema: z.ZodObject<{
359
366
  transport: z.ZodString;
@@ -428,6 +435,9 @@ declare const BoundaryBindingSchema: z.ZodObject<{
428
435
  }>;
429
436
  name: z.ZodLiteral<"unit-invocation">;
430
437
  instanceName: z.ZodNullable<z.ZodString>;
438
+ }, z.core.$strip>, z.ZodObject<{
439
+ name: z.ZodLiteral<"io">;
440
+ target: z.ZodNullable<z.ZodString>;
431
441
  }, z.core.$strip>], "name">;
432
442
  recognition: z.ZodString;
433
443
  }, z.core.$strip>;
@@ -478,24 +488,22 @@ type TypeShape = {
478
488
  def?: string | undefined;
479
489
  /**
480
490
  * The file that declares this type, when the project declares it.
481
- * Absent for a name the language or a dependency owns, which means
482
- * the same thing everywhere.
491
+ * Absent for a name the language or a dependency defines, which
492
+ * means the same thing everywhere.
483
493
  *
484
- * A name on its own does not identify a type. Two modules each
485
- * declaring a `User` produce the same ref, and a checker comparing
486
- * them has nothing to go on. This is what tells them apart.
494
+ * A name on its own does not identify a type. Two modules that each
495
+ * declare a `User` produce the same ref, and `from` is the only
496
+ * field that tells them apart.
487
497
  */
488
498
  from?: string | undefined;
489
499
  } | {
490
500
  type: "unknown";
491
501
  };
492
502
  /**
493
- * The key a table of definitions uses for the type a ref points at.
494
- *
495
- * A ref has the name and the file that declares it, and that pair
496
- * already identifies the type, so a table keyed on it needs nothing new
497
- * on the ref. A name that the language or a dependency owns has no
498
- * file, and keys on the name alone.
503
+ * The key a table of definitions uses for the type a ref points at,
504
+ * which is the ref's `def`. Null for a ref without one, such as a name
505
+ * the language or a dependency defines, and such a ref is never looked
506
+ * up.
499
507
  */
500
508
  declare function typeDefinitionKey(ref: {
501
509
  def?: string | undefined;
@@ -505,16 +513,15 @@ declare const TypeShapeSchema: z.ZodType<TypeShape>;
505
513
  * A shape with the definitions it refers to substituted back into it.
506
514
  *
507
515
  * Comparing two shapes means comparing their structure, and a ref has
508
- * none. Rather than teach every comparison to look in a table, the
509
- * definitions go back into the shape once and everything downstream
510
- * reads what it always read.
516
+ * none. Substituting the definitions once means no comparison has to
517
+ * look anything up in a table.
511
518
  *
512
- * Substituting a definition is not a level of nesting, so it does not
513
- * spend depth. Counting it meant a type six deep came back three deep,
514
- * and a consumer reading a field past that was told the provider did
515
- * not have it. A type that refers to itself is stopped by the names
516
- * already substituted on this path, the shape walk's own cycle guard.
519
+ * Substituting a definition does not count as a level of nesting. If it
520
+ * did, a type six levels deep would come back three deep, and a
521
+ * consumer reading a field past that would be told the provider lacks
522
+ * it. A type that refers to itself stops at a key already substituted
523
+ * on this path, the same cycle guard the shape walk uses.
517
524
  */
518
525
  declare function withDefinitionsInlined(shape: TypeShape, definitions: Record<string, TypeShape> | undefined, depth?: number, inProgress?: ReadonlySet<string>): TypeShape;
519
526
 
520
- export { storageSystemLabel as A, BoundaryBindingSchema as B, ConfidenceInfoSchema as C, type DeployableUnit as D, EVERY_FIELD as E, type FunctionCallSemantics as F, type GraphqlOperationSemantics as G, typeDefinitionKey as H, withDefinitionsInlined as I, type MessageBusSemantics as M, type RestSemantics as R, type Semantics as S, type TypeShape as T, ConfidenceLevelSchema as a, ConfidenceSourceSchema as b, CorroborationSchema as c, SourceLocationSchema as d, type MessageBusTechnology as e, DeployableUnitSchema as f, FunctionCallSemanticsSchema as g, GraphqlOperationSemanticsSchema as h, type GraphqlResolverSemantics as i, GraphqlResolverSemanticsSchema as j, MessageBusSemanticsSchema as k, RestSemanticsSchema as l, type RuntimeConfigSemantics as m, RuntimeConfigSemanticsSchema as n, SemanticsSchema as o, type StorageSemantics as p, StorageSemanticsSchema as q, TypeShapeSchema as r, ecsContainerInstanceName as s, methodsAgree as t, normalizePath as u, pathShape as v, routePathAdmits as w, routePathsMeet as x, storageContainerLabel as y, storageLabel as z };
527
+ export { storageLabel as A, BoundaryBindingSchema as B, ConfidenceInfoSchema as C, type DeployableUnit as D, EVERY_FIELD as E, type FunctionCallSemantics as F, type GraphqlOperationSemantics as G, storageSystemLabel as H, typeDefinitionKey as I, withDefinitionsInlined as J, type MessageBusSemantics as M, type RestSemantics as R, type Semantics as S, type TypeShape as T, ConfidenceLevelSchema as a, ConfidenceSourceSchema as b, CorroborationSchema as c, SourceLocationSchema as d, type MessageBusTechnology as e, DeployableUnitSchema as f, FunctionCallSemanticsSchema as g, GraphqlOperationSemanticsSchema as h, type GraphqlResolverSemantics as i, GraphqlResolverSemanticsSchema as j, MessageBusSemanticsSchema as k, RestSemanticsSchema as l, type RuntimeConfigSemantics as m, RuntimeConfigSemanticsSchema as n, SemanticsSchema as o, type StorageSemantics as p, StorageSemanticsSchema as q, TypeShapeSchema as r, ecsContainerInstanceName as s, isModuleName as t, methodsAgree as u, normalizePath as v, pathShape as w, routePathAdmits as x, routePathsMeet as y, storageContainerLabel as z };