@suss/ir-core 0.33.1 → 0.34.1

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
  /**
@@ -105,6 +110,8 @@ declare const SemanticsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
105
110
  method: z.ZodNullable<z.ZodString>;
106
111
  path: z.ZodNullable<z.ZodString>;
107
112
  declaredResponses: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
113
+ host: z.ZodOptional<z.ZodString>;
114
+ optionalFormat: z.ZodOptional<z.ZodBoolean>;
108
115
  }, z.core.$strip>, z.ZodObject<{
109
116
  name: z.ZodLiteral<"function-call">;
110
117
  module: z.ZodOptional<z.ZodString>;
@@ -171,6 +178,9 @@ declare const SemanticsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
171
178
  }>;
172
179
  name: z.ZodLiteral<"unit-invocation">;
173
180
  instanceName: z.ZodNullable<z.ZodString>;
181
+ }, z.core.$strip>, z.ZodObject<{
182
+ name: z.ZodLiteral<"io">;
183
+ target: z.ZodNullable<z.ZodString>;
174
184
  }, z.core.$strip>], "name">;
175
185
  type Semantics = z.infer<typeof SemanticsSchema>;
176
186
 
@@ -179,6 +189,8 @@ declare const RestSemanticsSchema: z.ZodObject<{
179
189
  method: z.ZodNullable<z.ZodString>;
180
190
  path: z.ZodNullable<z.ZodString>;
181
191
  declaredResponses: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
192
+ host: z.ZodOptional<z.ZodString>;
193
+ optionalFormat: z.ZodOptional<z.ZodBoolean>;
182
194
  }, z.core.$strip>;
183
195
  type RestSemantics = z.infer<typeof RestSemanticsSchema>;
184
196
  /**
@@ -191,44 +203,43 @@ type RestSemantics = z.infer<typeof RestSemanticsSchema>;
191
203
  */
192
204
  declare function normalizePath(path: string): string;
193
205
  /**
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}`.
206
+ * A path with every parameter name removed, for comparing two paths.
207
+ * `/users/{id}` and `/users/:userId` both become `/users/{}`, since a
208
+ * parameter's name does not change which requests the path serves. A
209
+ * parameter's range stays, since `{tenant?}` serves a different set of
210
+ * requests from `{tenant}`.
201
211
  */
202
212
  declare function pathShape(path: string): string;
203
213
  /**
204
214
  * 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.
215
+ * and `"*"` agrees with any given method, because a handler that
216
+ * responds to every method responds to this one. A null method means
217
+ * the source never gave one, so it agrees with nothing.
208
218
  *
209
- * This is the counterpart of `busesAgree`. No list of methods appears
210
- * here, so a wildcard pairs with whatever methods consumers write.
219
+ * This is the REST counterpart of `busesAgree`. There is no list of
220
+ * known methods, so a wildcard pairs with whatever methods consumers
221
+ * write.
211
222
  */
212
223
  declare function methodsAgree(a: string | null, b: string | null): boolean;
213
224
  /**
214
225
  * 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.
226
+ * are normalized first. A hole in the request path is compared as plain
227
+ * text, so a mount pattern admits a route inside it and rejects a wider
228
+ * route.
218
229
  */
219
230
  declare function routePathAdmits(declaredPath: string, requestPath: string): boolean;
220
231
  /** Whether two declared route paths serve at least one request in common. */
221
232
  declare function routePathsMeet(a: string, b: string): boolean;
222
233
 
223
234
  /**
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.
235
+ * The dedicated pass pairs on `(deploymentTarget, instanceName)`, which
236
+ * is a deployable unit, so the two fields come from
237
+ * `DeployableUnitSchema`.
227
238
  *
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.
239
+ * A provider sets both. The reading side is code, and code does not say
240
+ * which deployment will run it, so a recognizer at a read leaves both
241
+ * out and does not guess. The pairing pass takes the deployment from
242
+ * the provider.
232
243
  */
233
244
  declare const RuntimeConfigSemanticsSchema: z.ZodObject<{
234
245
  deploymentTarget: z.ZodOptional<z.ZodEnum<{
@@ -252,37 +263,36 @@ declare const StorageSemanticsSchema: z.ZodObject<{
252
263
  }, z.core.$strip>;
253
264
  type StorageSemantics = z.infer<typeof StorageSemanticsSchema>;
254
265
  /**
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.
266
+ * The store's label, such as `postgresql:invoices` or
267
+ * `aws.dynamodb:editions#by-publication`. Storage has no identity key,
268
+ * so `suss ask`, the pass that indexes accesses, and an intent doc all
269
+ * refer to a store by this label.
259
270
  */
260
271
  declare function storageLabel(semantics: StorageSemantics): string;
261
- /** The engine, or the words a report writes where nobody settled one. */
272
+ /** The storage system, or `<unknown engine>` when it is null. */
262
273
  declare function storageSystemLabel(semantics: StorageSemantics): string;
263
274
  /**
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.
275
+ * The column list an access records when it reads every column, as a
276
+ * query without an explicit projection does. It means all columns and
277
+ * does not list any, so code comparing column lists has to handle it
278
+ * separately.
268
279
  */
269
280
  declare const EVERY_FIELD = "*";
270
- /** The store on its own, which a finding writes without the system. */
281
+ /** The store's label without the storage system, as a finding writes it. */
271
282
  declare function storageContainerLabel(semantics: StorageSemantics): string;
272
283
 
273
284
  /**
274
- * @suss/ir-core schemas: primitives shared by every suss IR.
285
+ * The zod schemas for the primitives every suss IR uses.
275
286
  *
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.
287
+ * `TypeShape` is the structure of a value. `BoundaryBinding` and its
288
+ * `Semantics` variants identify a boundary. `SourceLocation` says where
289
+ * something is in the source, and `Confidence` says how much to trust a
290
+ * claim. Behavioral summaries and intent docs are both built from these,
291
+ * so they live in a package of their own and neither IR depends on the
292
+ * other.
283
293
  *
284
- * The schemas are the single source of truth, and the package's
285
- * `index.ts` derives the types from them with `z.infer`.
294
+ * The schemas are the source of truth. The package index derives the
295
+ * types from them with `z.infer`.
286
296
  */
287
297
 
288
298
  declare const ConfidenceSourceSchema: z.ZodEnum<{
@@ -297,17 +307,17 @@ declare const ConfidenceLevelSchema: z.ZodEnum<{
297
307
  low: "low";
298
308
  }>;
299
309
  /**
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).
310
+ * The result of checking a claim by running the code (`suss
311
+ * corroborate`). The harness generates inputs that satisfy the claim's
312
+ * own conditions and runs the function on them.
313
+ *
314
+ * - `observed`: every run agreed with the claim.
315
+ * - `refuted`: at least one run disagreed, which is either an extractor
316
+ * bug or a surprise. `counterexample` gives the input.
317
+ * - `untested`: no run produced a verdict. No satisfying input was
318
+ * found, or every run hit a dependency the harness cannot supply.
308
319
  *
309
- * Corroboration adds observations to a derivation. It is extra
310
- * evidence, and it never rewrites the derived claim.
320
+ * Corroboration adds evidence to a derived claim and never rewrites it.
311
321
  */
312
322
  declare const CorroborationSchema: z.ZodObject<{
313
323
  outcome: z.ZodEnum<{
@@ -354,6 +364,7 @@ declare const SourceLocationSchema: z.ZodObject<{
354
364
  }, z.core.$strip>>;
355
365
  exportName: z.ZodNullable<z.ZodString>;
356
366
  workspace: z.ZodOptional<z.ZodString>;
367
+ module: z.ZodOptional<z.ZodString>;
357
368
  }, z.core.$strip>;
358
369
  declare const BoundaryBindingSchema: z.ZodObject<{
359
370
  transport: z.ZodString;
@@ -362,6 +373,8 @@ declare const BoundaryBindingSchema: z.ZodObject<{
362
373
  method: z.ZodNullable<z.ZodString>;
363
374
  path: z.ZodNullable<z.ZodString>;
364
375
  declaredResponses: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
376
+ host: z.ZodOptional<z.ZodString>;
377
+ optionalFormat: z.ZodOptional<z.ZodBoolean>;
365
378
  }, z.core.$strip>, z.ZodObject<{
366
379
  name: z.ZodLiteral<"function-call">;
367
380
  module: z.ZodOptional<z.ZodString>;
@@ -428,6 +441,9 @@ declare const BoundaryBindingSchema: z.ZodObject<{
428
441
  }>;
429
442
  name: z.ZodLiteral<"unit-invocation">;
430
443
  instanceName: z.ZodNullable<z.ZodString>;
444
+ }, z.core.$strip>, z.ZodObject<{
445
+ name: z.ZodLiteral<"io">;
446
+ target: z.ZodNullable<z.ZodString>;
431
447
  }, z.core.$strip>], "name">;
432
448
  recognition: z.ZodString;
433
449
  }, z.core.$strip>;
@@ -478,24 +494,22 @@ type TypeShape = {
478
494
  def?: string | undefined;
479
495
  /**
480
496
  * 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.
497
+ * Absent for a name the language or a dependency defines, which
498
+ * means the same thing everywhere.
483
499
  *
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.
500
+ * A name on its own does not identify a type. Two modules that each
501
+ * declare a `User` produce the same ref, and `from` is the only
502
+ * field that tells them apart.
487
503
  */
488
504
  from?: string | undefined;
489
505
  } | {
490
506
  type: "unknown";
491
507
  };
492
508
  /**
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.
509
+ * The key a table of definitions uses for the type a ref points at,
510
+ * which is the ref's `def`. Null for a ref without one, such as a name
511
+ * the language or a dependency defines, and such a ref is never looked
512
+ * up.
499
513
  */
500
514
  declare function typeDefinitionKey(ref: {
501
515
  def?: string | undefined;
@@ -505,16 +519,15 @@ declare const TypeShapeSchema: z.ZodType<TypeShape>;
505
519
  * A shape with the definitions it refers to substituted back into it.
506
520
  *
507
521
  * 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.
522
+ * none. Substituting the definitions once means no comparison has to
523
+ * look anything up in a table.
511
524
  *
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.
525
+ * Substituting a definition does not count as a level of nesting. If it
526
+ * did, a type six levels deep would come back three deep, and a
527
+ * consumer reading a field past that would be told the provider lacks
528
+ * it. A type that refers to itself stops at a key already substituted
529
+ * on this path, the same cycle guard the shape walk uses.
517
530
  */
518
531
  declare function withDefinitionsInlined(shape: TypeShape, definitions: Record<string, TypeShape> | undefined, depth?: number, inProgress?: ReadonlySet<string>): TypeShape;
519
532
 
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 };
533
+ 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 };