pipework 0.8.7 → 0.8.9

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 (111) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/audit/schema/audit-record-fields.d.ts +38 -12
  3. package/dist/audit/schema/audit-record-fields.d.ts.map +1 -1
  4. package/dist/audit/schema/audit-record.d.ts +38 -12
  5. package/dist/audit/schema/audit-record.d.ts.map +1 -1
  6. package/dist/cli/commands/generate.d.ts.map +1 -1
  7. package/dist/cli/commands/generate.js +10 -2
  8. package/dist/cli/commands/generate.js.map +1 -1
  9. package/dist/core/config/discover.d.ts.map +1 -1
  10. package/dist/core/config/discover.js +16 -2
  11. package/dist/core/config/discover.js.map +1 -1
  12. package/dist/data/db/namespace.d.ts +19 -13
  13. package/dist/data/db/namespace.d.ts.map +1 -1
  14. package/dist/data/domain/build-schema.d.ts +5 -1
  15. package/dist/data/domain/build-schema.d.ts.map +1 -1
  16. package/dist/data/domain/build-schema.js.map +1 -1
  17. package/dist/data/domain/define.d.ts.map +1 -1
  18. package/dist/data/domain/define.js +4 -0
  19. package/dist/data/domain/define.js.map +1 -1
  20. package/dist/data/domain/field.d.ts +61 -33
  21. package/dist/data/domain/field.d.ts.map +1 -1
  22. package/dist/data/domain/field.js.map +1 -1
  23. package/dist/data/domain/projections.d.ts +32 -0
  24. package/dist/data/domain/projections.d.ts.map +1 -0
  25. package/dist/data/domain/projections.js +2 -0
  26. package/dist/data/domain/projections.js.map +1 -0
  27. package/dist/data/domain/types.d.ts +63 -17
  28. package/dist/data/domain/types.d.ts.map +1 -1
  29. package/dist/data/domain/types.js.map +1 -1
  30. package/dist/data/migrate/generate.d.ts +1 -1
  31. package/dist/data/migrate/generate.d.ts.map +1 -1
  32. package/dist/data/migrate/generate.js +7 -3
  33. package/dist/data/migrate/generate.js.map +1 -1
  34. package/dist/data/migrate/internal-definitions.d.ts +5 -0
  35. package/dist/data/migrate/internal-definitions.d.ts.map +1 -0
  36. package/dist/data/migrate/internal-definitions.js +28 -0
  37. package/dist/data/migrate/internal-definitions.js.map +1 -0
  38. package/dist/infra/idempotency/store.d.ts.map +1 -1
  39. package/dist/infra/idempotency/store.js +6 -1
  40. package/dist/infra/idempotency/store.js.map +1 -1
  41. package/dist/request/http/response.d.ts +1 -1
  42. package/dist/request/http/response.d.ts.map +1 -1
  43. package/dist/request/http/response.js +20 -2
  44. package/dist/request/http/response.js.map +1 -1
  45. package/dist/request/http/server.js +1 -1
  46. package/dist/request/http/server.js.map +1 -1
  47. package/dist/request/http/types.d.ts +5 -0
  48. package/dist/request/http/types.d.ts.map +1 -1
  49. package/dist/test/vitest-plugin.d.ts +9 -1
  50. package/dist/test/vitest-plugin.d.ts.map +1 -1
  51. package/dist/test/vitest-plugin.js +25 -1
  52. package/dist/test/vitest-plugin.js.map +1 -1
  53. package/dist/test/vitest-workspace.js +1 -1
  54. package/dist/test/vitest-workspace.js.map +1 -1
  55. package/dist/trace/schema/trace-fields.d.ts +53 -15
  56. package/dist/trace/schema/trace-fields.d.ts.map +1 -1
  57. package/dist/trace/schema/trace-retained.d.ts +53 -15
  58. package/dist/trace/schema/trace-retained.d.ts.map +1 -1
  59. package/dist/trace/schema/trace-step-fields.d.ts +38 -12
  60. package/dist/trace/schema/trace-step-fields.d.ts.map +1 -1
  61. package/dist/trace/schema/trace-step-retained.d.ts +38 -12
  62. package/dist/trace/schema/trace-step-retained.d.ts.map +1 -1
  63. package/dist/trace/schema/trace-step.d.ts +38 -12
  64. package/dist/trace/schema/trace-step.d.ts.map +1 -1
  65. package/dist/trace/schema/trace.d.ts +53 -15
  66. package/dist/trace/schema/trace.d.ts.map +1 -1
  67. package/package.json +1 -1
  68. package/dist/data/db/generated/drizzle-orm/aggregate.d.ts +0 -2
  69. package/dist/data/db/generated/drizzle-orm/aggregate.d.ts.map +0 -1
  70. package/dist/data/db/generated/drizzle-orm/aggregate.js +0 -5
  71. package/dist/data/db/generated/drizzle-orm/aggregate.js.map +0 -1
  72. package/dist/data/db/generated/drizzle-orm/introspection.d.ts +0 -2
  73. package/dist/data/db/generated/drizzle-orm/introspection.d.ts.map +0 -1
  74. package/dist/data/db/generated/drizzle-orm/introspection.js +0 -5
  75. package/dist/data/db/generated/drizzle-orm/introspection.js.map +0 -1
  76. package/dist/data/db/generated/drizzle-orm/operator.d.ts +0 -2
  77. package/dist/data/db/generated/drizzle-orm/operator.d.ts.map +0 -1
  78. package/dist/data/db/generated/drizzle-orm/operator.js +0 -5
  79. package/dist/data/db/generated/drizzle-orm/operator.js.map +0 -1
  80. package/dist/data/db/generated/drizzle-orm/relation.d.ts +0 -2
  81. package/dist/data/db/generated/drizzle-orm/relation.d.ts.map +0 -1
  82. package/dist/data/db/generated/drizzle-orm/relation.js +0 -5
  83. package/dist/data/db/generated/drizzle-orm/relation.js.map +0 -1
  84. package/dist/data/db/generated/drizzle-orm/type.d.ts +0 -3
  85. package/dist/data/db/generated/drizzle-orm/type.d.ts.map +0 -1
  86. package/dist/data/db/generated/drizzle-orm/type.js +0 -5
  87. package/dist/data/db/generated/drizzle-orm/type.js.map +0 -1
  88. package/dist/data/db/generated/pg-core/introspection.d.ts +0 -2
  89. package/dist/data/db/generated/pg-core/introspection.d.ts.map +0 -1
  90. package/dist/data/db/generated/pg-core/introspection.js +0 -5
  91. package/dist/data/db/generated/pg-core/introspection.js.map +0 -1
  92. package/dist/data/db/generated/pg-core/set-operation.d.ts +0 -2
  93. package/dist/data/db/generated/pg-core/set-operation.d.ts.map +0 -1
  94. package/dist/data/db/generated/pg-core/set-operation.js +0 -5
  95. package/dist/data/db/generated/pg-core/set-operation.js.map +0 -1
  96. package/dist/data/db/generated/pg-core/type.d.ts +0 -3
  97. package/dist/data/db/generated/pg-core/type.d.ts.map +0 -1
  98. package/dist/data/db/generated/pg-core/type.js +0 -5
  99. package/dist/data/db/generated/pg-core/type.js.map +0 -1
  100. package/dist/trace/annotation/flow-step-annotation.d.ts +0 -51
  101. package/dist/trace/annotation/flow-step-annotation.d.ts.map +0 -1
  102. package/dist/trace/annotation/flow-step-annotation.js +0 -6
  103. package/dist/trace/annotation/flow-step-annotation.js.map +0 -1
  104. package/dist/trace/annotation/parse-error.d.ts +0 -16
  105. package/dist/trace/annotation/parse-error.d.ts.map +0 -1
  106. package/dist/trace/annotation/parse-error.js +0 -5
  107. package/dist/trace/annotation/parse-error.js.map +0 -1
  108. package/dist/trace/annotation/parse.d.ts +0 -21
  109. package/dist/trace/annotation/parse.d.ts.map +0 -1
  110. package/dist/trace/annotation/parse.js +0 -201
  111. package/dist/trace/annotation/parse.js.map +0 -1
@@ -1,5 +0,0 @@
1
- // Auto-generated by scaffold-namespace — do not edit re-export lines
2
- // Run: node scripts/scaffold-namespace.js generate manifests/drizzle-orm.json
3
- // Manual symbols are not included — they live in separate files.
4
- export { and, arrayContained, arrayContains, arrayOverlaps, asc, between, desc, eq, exists, gt, gte, ilike, inArray, is, isNotNull, isNull, like, lt, lte, ne, not, notBetween, notExists, notIlike, notInArray, notLike, or } from '../../../query/index.js';
5
- //# sourceMappingURL=operator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operator.js","sourceRoot":"","sources":["../../../../../src/data/db/generated/drizzle-orm/operator.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,8EAA8E;AAC9E,iEAAiE;AAEjE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,2 +0,0 @@
1
- export { createMany, createOne, relations } from '../../../query/index.js';
2
- //# sourceMappingURL=relation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../../../../src/data/db/generated/drizzle-orm/relation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,5 +0,0 @@
1
- // Auto-generated by scaffold-namespace — do not edit re-export lines
2
- // Run: node scripts/scaffold-namespace.js generate manifests/drizzle-orm.json
3
- // Manual symbols are not included — they live in separate files.
4
- export { createMany, createOne, relations } from '../../../query/index.js';
5
- //# sourceMappingURL=relation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../../../../src/data/db/generated/drizzle-orm/relation.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,8EAA8E;AAC9E,iEAAiE;AAEjE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,3 +0,0 @@
1
- export type { Column as ColumnBase, InferInsertModel, InferModel, InferSelectModel, Logger, LogWriter, Query, SelectedFields, SelectedFieldsFlat, Subquery, Table as TableBase } from '../../../query/index.js';
2
- export { DrizzleError, Placeholder, SQL, TransactionRollbackError } from '../../../query/index.js';
3
- //# sourceMappingURL=type.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../../src/data/db/generated/drizzle-orm/type.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,MAAM,IAAI,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC/M,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,5 +0,0 @@
1
- // Auto-generated by scaffold-namespace — do not edit re-export lines
2
- // Run: node scripts/scaffold-namespace.js generate manifests/drizzle-orm.json
3
- // Manual symbols are not included — they live in separate files.
4
- export { DrizzleError, Placeholder, SQL, TransactionRollbackError } from '../../../query/index.js';
5
- //# sourceMappingURL=type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../../src/data/db/generated/drizzle-orm/type.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,8EAA8E;AAC9E,iEAAiE;AAGjE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,2 +0,0 @@
1
- export { alias } from '../../../query/pg-core/index.js';
2
- //# sourceMappingURL=introspection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"introspection.d.ts","sourceRoot":"","sources":["../../../../../src/data/db/generated/pg-core/introspection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA"}
@@ -1,5 +0,0 @@
1
- // Auto-generated by scaffold-namespace — do not edit re-export lines
2
- // Run: node scripts/scaffold-namespace.js generate manifests/drizzle-orm--pg-core.json
3
- // Manual symbols are not included — they live in separate files.
4
- export { alias } from '../../../query/pg-core/index.js';
5
- //# sourceMappingURL=introspection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"introspection.js","sourceRoot":"","sources":["../../../../../src/data/db/generated/pg-core/introspection.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,uFAAuF;AACvF,iEAAiE;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA"}
@@ -1,2 +0,0 @@
1
- export { except, exceptAll, intersect, intersectAll, union, unionAll } from '../../../query/pg-core/index.js';
2
- //# sourceMappingURL=set-operation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"set-operation.d.ts","sourceRoot":"","sources":["../../../../../src/data/db/generated/pg-core/set-operation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA"}
@@ -1,5 +0,0 @@
1
- // Auto-generated by scaffold-namespace — do not edit re-export lines
2
- // Run: node scripts/scaffold-namespace.js generate manifests/drizzle-orm--pg-core.json
3
- // Manual symbols are not included — they live in separate files.
4
- export { except, exceptAll, intersect, intersectAll, union, unionAll } from '../../../query/pg-core/index.js';
5
- //# sourceMappingURL=set-operation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"set-operation.js","sourceRoot":"","sources":["../../../../../src/data/db/generated/pg-core/set-operation.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,uFAAuF;AACvF,iEAAiE;AAEjE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA"}
@@ -1,3 +0,0 @@
1
- export type { CustomTypeParams, CustomTypeValues, IndexColumn, IntervalConfig, PgCreateSetOperatorFn, PgDelete, PgEnum as Enum, PgInsert, PgSelect, PgSequenceOptions, PgTableExtraConfig, PgTableFn, PgTableWithColumns as TableWithColumns, PgUpdate, Precision, SelectedFields, SelectedFieldsFlat, TimeConfig } from '../../../query/pg-core/index.js';
2
- export { PgColumn as Column, PgDatabase as Database, PgMaterializedView as MaterializedViewType, PgTable as Table, PgTransaction as Transaction, PgView as ViewType } from '../../../query/pg-core/index.js';
3
- //# sourceMappingURL=type.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../../src/data/db/generated/pg-core/type.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,IAAI,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAC1V,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,UAAU,IAAI,QAAQ,EAAE,kBAAkB,IAAI,oBAAoB,EAAE,OAAO,IAAI,KAAK,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,iCAAiC,CAAA"}
@@ -1,5 +0,0 @@
1
- // Auto-generated by scaffold-namespace — do not edit re-export lines
2
- // Run: node scripts/scaffold-namespace.js generate manifests/drizzle-orm--pg-core.json
3
- // Manual symbols are not included — they live in separate files.
4
- export { PgColumn as Column, PgDatabase as Database, PgMaterializedView as MaterializedViewType, PgTable as Table, PgTransaction as Transaction, PgView as ViewType } from '../../../query/pg-core/index.js';
5
- //# sourceMappingURL=type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../../src/data/db/generated/pg-core/type.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,uFAAuF;AACvF,iEAAiE;AAGjE,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,UAAU,IAAI,QAAQ,EAAE,kBAAkB,IAAI,oBAAoB,EAAE,OAAO,IAAI,KAAK,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,iCAAiC,CAAA"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Traversal count of a `@downstream` edge.
3
- *
4
- * - `step` — traversed at most once per execution of the parent.
5
- * - `branch` — traversed more than once (loop, batch, recursion, fan-out);
6
- * a branch opens a child trace.
7
- */
8
- export type EdgeCardinality = 'step' | 'branch';
9
- /** An `@upstream` edge target, written as `path:symbol`. */
10
- export interface AnnotationEdge {
11
- /** Module path exactly as written, e.g. `src/async/jobs/run.ts`. */
12
- readonly path: string;
13
- /** Symbol name exactly as written, e.g. `runJob`. */
14
- readonly symbol: string;
15
- }
16
- /**
17
- * A `@downstream` edge target with its declared cardinality.
18
- *
19
- * `cardinality` is `null` when the annotation omits it. The grammar permits
20
- * omission so that the parser stays usable against an un-migrated corpus;
21
- * the `flow` check rejects `null`. See PLAN.tracing.md, Q6.
22
- */
23
- export interface DownstreamEdge extends AnnotationEdge {
24
- readonly cardinality: EdgeCardinality | null;
25
- }
26
- /** A `@touches` target, written as `Entity:verb` — the audit-projection hook. */
27
- export interface EntityTouch {
28
- /** Entity name exactly as written, e.g. `Invoice`. */
29
- readonly entity: string;
30
- /** Verb exactly as written, e.g. `create`. */
31
- readonly verb: string;
32
- }
33
- /**
34
- * The parsed content of a single `@flow_step` JSDoc block.
35
- *
36
- * Purely syntactic: every field is the text as written, structured but not
37
- * semantically validated. Resolving paths, verifying symbols exist, and
38
- * checking cardinality against the call graph are downstream concerns.
39
- */
40
- export interface FlowStepAnnotation {
41
- /**
42
- * Free-text rationale from `@intent`. `null` when the tag is absent;
43
- * empty string when present but blank. `@intent` is the one part of the
44
- * grammar that is never programmatically validated.
45
- */
46
- readonly intent: string | null;
47
- readonly upstream: readonly AnnotationEdge[];
48
- readonly downstream: readonly DownstreamEdge[];
49
- readonly touches: readonly EntityTouch[];
50
- }
51
- //# sourceMappingURL=flow-step-annotation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow-step-annotation.d.ts","sourceRoot":"","sources":["../../../src/trace/annotation/flow-step-annotation.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE/C,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;CAC7C;AAED,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAA;IAC5C,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;CACzC"}
@@ -1,6 +0,0 @@
1
- // The output-type contract of the flow-step annotation parser. This shape
2
- // is semver'd: downstream consumers (the `flow` check, the cardinality
3
- // analyzer, the build transformer, grasp) depend on it. Changing it is a
4
- // breaking change to the parser package — see PLAN.tracing.md, Q6.
5
- export {};
6
- //# sourceMappingURL=flow-step-annotation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow-step-annotation.js","sourceRoot":"","sources":["../../../src/trace/annotation/flow-step-annotation.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,uEAAuE;AACvE,yEAAyE;AACzE,mEAAmE"}
@@ -1,16 +0,0 @@
1
- /** A closed union of every syntactic malformation the parser detects. */
2
- export type FlowStepParseErrorCode = 'flow-step-takes-no-args' | 'upstream-missing-target' | 'upstream-malformed-target' | 'upstream-extra-tokens' | 'downstream-missing-target' | 'downstream-malformed-target' | 'downstream-invalid-cardinality' | 'downstream-extra-tokens' | 'touches-missing-target' | 'touches-malformed-target' | 'touches-extra-tokens';
3
- /**
4
- * A single syntactic error within a `@flow_step` block.
5
- *
6
- * `line` is 1-based and relative to the start of the block, not the file —
7
- * the block extractor adds the file offset when reporting.
8
- */
9
- export interface FlowStepParseError {
10
- readonly code: FlowStepParseErrorCode;
11
- /** 1-based line within the block where the offending tag appears. */
12
- readonly line: number;
13
- /** Actionable message: what is wrong, what was meant, how to fix it. */
14
- readonly message: string;
15
- }
16
- //# sourceMappingURL=parse-error.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-error.d.ts","sourceRoot":"","sources":["../../../src/trace/annotation/parse-error.ts"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,MAAM,MAAM,sBAAsB,GAC9B,yBAAyB,GACzB,yBAAyB,GACzB,2BAA2B,GAC3B,uBAAuB,GACvB,2BAA2B,GAC3B,6BAA6B,GAC7B,gCAAgC,GAChC,yBAAyB,GACzB,wBAAwB,GACxB,0BAA0B,GAC1B,sBAAsB,CAAA;AAE1B;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB"}
@@ -1,5 +0,0 @@
1
- // Syntactic errors the flow-step parser can raise. Every code names one
2
- // concrete malformation; every message tells the author what is wrong and
3
- // how to fix it. The set is closed — adding a code is a contract change.
4
- export {};
5
- //# sourceMappingURL=parse-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-error.js","sourceRoot":"","sources":["../../../src/trace/annotation/parse-error.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE"}
@@ -1,21 +0,0 @@
1
- import type { FlowStepAnnotation } from './flow-step-annotation.js';
2
- import type { FlowStepParseError } from './parse-error.js';
3
- /**
4
- * Outcome of parsing one JSDoc block.
5
- *
6
- * - `not-a-flow-step` — the block has no `@flow_step` tag; not an error.
7
- * - `annotation` — a well-formed flow-step annotation.
8
- * - `invalid` — a `@flow_step` block with one or more syntactic errors.
9
- */
10
- export type FlowStepParseResult = {
11
- readonly kind: 'not-a-flow-step';
12
- } | {
13
- readonly kind: 'annotation';
14
- readonly annotation: FlowStepAnnotation;
15
- } | {
16
- readonly kind: 'invalid';
17
- readonly errors: readonly FlowStepParseError[];
18
- };
19
- /** Parses one JSDoc comment block into a FlowStepAnnotation, or reports its syntactic errors. */
20
- export declare function parseFlowStepAnnotation(block: string): FlowStepParseResult;
21
- //# sourceMappingURL=parse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/trace/annotation/parse.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,GACxE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAA;CAAE,CAAA;AAEhF,iGAAiG;AACjG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAgD1E"}
@@ -1,201 +0,0 @@
1
- // Pure syntactic parser for `@flow_step` JSDoc blocks. Text in, structured
2
- // records out — no file I/O, no TS AST, no semantic validation. The grammar
3
- // is permissive (downstream cardinality optional); the `flow` check layers
4
- // strictness on top. See PLAN.tracing.md, components 1 and 2.
5
- /** Parses one JSDoc comment block into a FlowStepAnnotation, or reports its syntactic errors. */
6
- export function parseFlowStepAnnotation(block) {
7
- const tags = collectTags(stripFraming(block));
8
- const hasFlowStep = tags.some(t => t.tag === 'flow_step');
9
- if (!hasFlowStep)
10
- return { kind: 'not-a-flow-step' };
11
- const errors = [];
12
- let intent = null;
13
- const upstream = [];
14
- const downstream = [];
15
- const touches = [];
16
- for (const t of tags) {
17
- switch (t.tag) {
18
- case 'flow_step': {
19
- if (t.args !== '') {
20
- errors.push({
21
- code: 'flow-step-takes-no-args',
22
- line: t.line,
23
- message: `@flow_step takes no arguments, found "${t.args}". Remove the trailing text — put rationale in @intent.`,
24
- });
25
- }
26
- break;
27
- }
28
- case 'intent': {
29
- intent = t.args;
30
- break;
31
- }
32
- case 'upstream': {
33
- parseUpstream(t, upstream, errors);
34
- break;
35
- }
36
- case 'downstream': {
37
- parseDownstream(t, downstream, errors);
38
- break;
39
- }
40
- case 'touches': {
41
- parseTouches(t, touches, errors);
42
- break;
43
- }
44
- default:
45
- // Foreign tag (@param, @returns, …) — not the parser's concern.
46
- break;
47
- }
48
- }
49
- if (errors.length > 0)
50
- return { kind: 'invalid', errors };
51
- return { kind: 'annotation', annotation: { intent, upstream, downstream, touches } };
52
- }
53
- /** Strips `/**`, `*\/`, and per-line `*` leaders, returning the inner lines. */
54
- function stripFraming(block) {
55
- let text = block.trim();
56
- if (text.startsWith('/**'))
57
- text = text.slice(3);
58
- else if (text.startsWith('/*'))
59
- text = text.slice(2);
60
- if (text.endsWith('*/'))
61
- text = text.slice(0, -2);
62
- return text.split('\n').map(stripLineLeader);
63
- }
64
- /** Removes leading whitespace, a single optional `*`, and one optional space. */
65
- function stripLineLeader(line) {
66
- const m = /^\s*\*?[ \t]?(.*)$/.exec(line);
67
- return m?.[1] ?? line;
68
- }
69
- /**
70
- * Walks the block lines, opening a `RawTag` on each `@tag` line and folding
71
- * non-blank continuation lines into the current tag's args.
72
- */
73
- function collectTags(lines) {
74
- const tags = [];
75
- let current = null;
76
- for (let i = 0; i < lines.length; i++) {
77
- const trimmed = (lines[i] ?? '').trim();
78
- const tagMatch = /^@(\S+)\s*(.*)$/.exec(trimmed);
79
- if (tagMatch) {
80
- current = { tag: tagMatch[1] ?? '', args: (tagMatch[2] ?? '').trim(), line: i + 1 };
81
- tags.push(current);
82
- }
83
- else if (current !== null && trimmed !== '') {
84
- current.args = current.args === '' ? trimmed : `${current.args} ${trimmed}`;
85
- }
86
- }
87
- return tags;
88
- }
89
- // ── Per-tag parsers ────────────────────────────────────────────────
90
- /** Matches a `path:symbol` target — both sides non-empty, no whitespace, no colon. */
91
- const TARGET = /^([^\s:]+):([^\s:]+)$/;
92
- function tokenize(args) {
93
- return args.split(/\s+/).filter(t => t !== '');
94
- }
95
- function parseUpstream(t, out, errors) {
96
- const tokens = tokenize(t.args);
97
- if (tokens.length === 0) {
98
- errors.push({
99
- code: 'upstream-missing-target',
100
- line: t.line,
101
- message: '@upstream requires a target in "path:symbol" form. Example: @upstream src/async/jobs/run.ts:runJob',
102
- });
103
- return;
104
- }
105
- if (tokens.length > 1) {
106
- errors.push({
107
- code: 'upstream-extra-tokens',
108
- line: t.line,
109
- message: `@upstream takes only a target — cardinality belongs on @downstream, not @upstream. Remove "${tokens[1] ?? ''}".`,
110
- });
111
- return;
112
- }
113
- const edge = parseTarget(tokens[0] ?? '');
114
- if (edge === null) {
115
- errors.push({
116
- code: 'upstream-malformed-target',
117
- line: t.line,
118
- message: `@upstream target "${tokens[0] ?? ''}" is not in "path:symbol" form. Example: @upstream src/async/jobs/run.ts:runJob`,
119
- });
120
- return;
121
- }
122
- out.push(edge);
123
- }
124
- function parseDownstream(t, out, errors) {
125
- const tokens = tokenize(t.args);
126
- if (tokens.length === 0) {
127
- errors.push({
128
- code: 'downstream-missing-target',
129
- line: t.line,
130
- message: '@downstream requires a target in "path:symbol" form. Example: @downstream src/engine/run.ts:runEngine branch',
131
- });
132
- return;
133
- }
134
- if (tokens.length > 2) {
135
- errors.push({
136
- code: 'downstream-extra-tokens',
137
- line: t.line,
138
- message: `@downstream takes a target and an optional cardinality, found ${String(tokens.length)} tokens. Expected: @downstream path:symbol [step|branch]`,
139
- });
140
- return;
141
- }
142
- const target = parseTarget(tokens[0] ?? '');
143
- if (target === null) {
144
- errors.push({
145
- code: 'downstream-malformed-target',
146
- line: t.line,
147
- message: `@downstream target "${tokens[0] ?? ''}" is not in "path:symbol" form. Example: @downstream src/engine/run.ts:runEngine branch`,
148
- });
149
- return;
150
- }
151
- let cardinality = null;
152
- if (tokens.length === 2) {
153
- const kind = tokens[1] ?? '';
154
- if (kind !== 'step' && kind !== 'branch') {
155
- errors.push({
156
- code: 'downstream-invalid-cardinality',
157
- line: t.line,
158
- message: `@downstream cardinality must be "step" or "branch", found "${kind}". A branch is an edge traversed more than once (loop, batch, recursion, fan-out).`,
159
- });
160
- return;
161
- }
162
- cardinality = kind;
163
- }
164
- out.push({ path: target.path, symbol: target.symbol, cardinality });
165
- }
166
- function parseTouches(t, out, errors) {
167
- const tokens = tokenize(t.args);
168
- if (tokens.length === 0) {
169
- errors.push({
170
- code: 'touches-missing-target',
171
- line: t.line,
172
- message: '@touches requires a target in "Entity:verb" form. Example: @touches Invoice:create',
173
- });
174
- return;
175
- }
176
- if (tokens.length > 1) {
177
- errors.push({
178
- code: 'touches-extra-tokens',
179
- line: t.line,
180
- message: `@touches takes exactly one "Entity:verb" target, found ${String(tokens.length)} tokens. Use one @touches tag per entity action.`,
181
- });
182
- return;
183
- }
184
- const m = TARGET.exec(tokens[0] ?? '');
185
- if (m === null) {
186
- errors.push({
187
- code: 'touches-malformed-target',
188
- line: t.line,
189
- message: `@touches target "${tokens[0] ?? ''}" is not in "Entity:verb" form. Example: @touches Invoice:create`,
190
- });
191
- return;
192
- }
193
- out.push({ entity: m[1] ?? '', verb: m[2] ?? '' });
194
- }
195
- function parseTarget(token) {
196
- const m = TARGET.exec(token);
197
- if (m === null)
198
- return null;
199
- return { path: m[1] ?? '', symbol: m[2] ?? '' };
200
- }
201
- //# sourceMappingURL=parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/trace/annotation/parse.ts"],"names":[],"mappings":"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"}