@reprova/sdk 0.5.0 → 0.6.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 (145) hide show
  1. package/README.md +75 -0
  2. package/dist/cjs/context.js +28 -0
  3. package/dist/cjs/distributionBaselinePoller.js +87 -0
  4. package/dist/cjs/distributionDrift.js +170 -0
  5. package/dist/cjs/drizzle.js +204 -0
  6. package/dist/cjs/frameworkAdapter.js +2 -0
  7. package/dist/cjs/httpFetch.js +59 -0
  8. package/dist/cjs/idempotency.js +132 -0
  9. package/dist/cjs/idempotencySettingsPoller.js +71 -0
  10. package/dist/cjs/index.js +96 -0
  11. package/dist/cjs/invariantInference.js +90 -0
  12. package/dist/cjs/invariantRules.js +142 -0
  13. package/dist/cjs/knex.js +86 -0
  14. package/dist/cjs/kysely.js +175 -0
  15. package/dist/cjs/legacyPrisma.js +130 -0
  16. package/dist/cjs/mikroorm.js +74 -0
  17. package/dist/cjs/mongoSchemaReporter.js +85 -0
  18. package/dist/cjs/mongoose.js +335 -0
  19. package/dist/cjs/nPlusOne.js +0 -0
  20. package/dist/cjs/nest.js +136 -0
  21. package/dist/cjs/nextjs.js +180 -0
  22. package/dist/cjs/package.json +1 -0
  23. package/dist/cjs/prisma.js +363 -0
  24. package/dist/cjs/proto.gen.js +4 -0
  25. package/dist/cjs/registry.js +100 -0
  26. package/dist/cjs/retryStorm.js +70 -0
  27. package/dist/cjs/rulesPoller.js +77 -0
  28. package/dist/cjs/sdk.js +1231 -0
  29. package/dist/cjs/sequelize.js +108 -0
  30. package/dist/cjs/shape.js +45 -0
  31. package/dist/cjs/stack.js +51 -0
  32. package/dist/cjs/transport.js +71 -0
  33. package/dist/cjs/typeorm.js +200 -0
  34. package/dist/context.d.ts +18 -0
  35. package/dist/context.d.ts.map +1 -1
  36. package/dist/context.js.map +1 -1
  37. package/dist/distributionBaselinePoller.d.ts +36 -0
  38. package/dist/distributionBaselinePoller.d.ts.map +1 -0
  39. package/dist/distributionBaselinePoller.js +84 -0
  40. package/dist/distributionBaselinePoller.js.map +1 -0
  41. package/dist/distributionDrift.d.ts +41 -0
  42. package/dist/distributionDrift.d.ts.map +1 -0
  43. package/dist/distributionDrift.js +161 -0
  44. package/dist/distributionDrift.js.map +1 -0
  45. package/dist/drizzle.d.ts.map +1 -1
  46. package/dist/drizzle.js +10 -4
  47. package/dist/drizzle.js.map +1 -1
  48. package/dist/frameworkAdapter.d.ts +5 -0
  49. package/dist/frameworkAdapter.d.ts.map +1 -0
  50. package/dist/frameworkAdapter.js +2 -0
  51. package/dist/frameworkAdapter.js.map +1 -0
  52. package/dist/httpFetch.d.ts +13 -0
  53. package/dist/httpFetch.d.ts.map +1 -0
  54. package/dist/httpFetch.js +54 -0
  55. package/dist/httpFetch.js.map +1 -0
  56. package/dist/idempotency.d.ts +26 -0
  57. package/dist/idempotency.d.ts.map +1 -0
  58. package/dist/idempotency.js +124 -0
  59. package/dist/idempotency.js.map +1 -0
  60. package/dist/idempotencySettingsPoller.d.ts +23 -0
  61. package/dist/idempotencySettingsPoller.d.ts.map +1 -0
  62. package/dist/idempotencySettingsPoller.js +68 -0
  63. package/dist/idempotencySettingsPoller.js.map +1 -0
  64. package/dist/index.d.ts +30 -5
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +17 -3
  67. package/dist/index.js.map +1 -1
  68. package/dist/invariantInference.d.ts +28 -0
  69. package/dist/invariantInference.d.ts.map +1 -0
  70. package/dist/invariantInference.js +87 -0
  71. package/dist/invariantInference.js.map +1 -0
  72. package/dist/invariantRules.d.ts +16 -0
  73. package/dist/invariantRules.d.ts.map +1 -0
  74. package/dist/invariantRules.js +104 -0
  75. package/dist/invariantRules.js.map +1 -0
  76. package/dist/knex.d.ts.map +1 -1
  77. package/dist/knex.js +1 -0
  78. package/dist/knex.js.map +1 -1
  79. package/dist/kysely.d.ts.map +1 -1
  80. package/dist/kysely.js +2 -1
  81. package/dist/kysely.js.map +1 -1
  82. package/dist/legacyPrisma.d.ts +6 -0
  83. package/dist/legacyPrisma.d.ts.map +1 -0
  84. package/dist/legacyPrisma.js +128 -0
  85. package/dist/legacyPrisma.js.map +1 -0
  86. package/dist/mikroorm.d.ts +2 -0
  87. package/dist/mikroorm.d.ts.map +1 -0
  88. package/dist/mikroorm.js +72 -0
  89. package/dist/mikroorm.js.map +1 -0
  90. package/dist/mongoSchemaReporter.d.ts +23 -0
  91. package/dist/mongoSchemaReporter.d.ts.map +1 -0
  92. package/dist/mongoSchemaReporter.js +82 -0
  93. package/dist/mongoSchemaReporter.js.map +1 -0
  94. package/dist/mongoose.d.ts +48 -0
  95. package/dist/mongoose.d.ts.map +1 -0
  96. package/dist/mongoose.js +331 -0
  97. package/dist/mongoose.js.map +1 -0
  98. package/dist/nPlusOne.d.ts +52 -0
  99. package/dist/nPlusOne.d.ts.map +1 -0
  100. package/dist/nPlusOne.js +0 -0
  101. package/dist/nPlusOne.js.map +1 -0
  102. package/dist/nest.d.ts +13 -0
  103. package/dist/nest.d.ts.map +1 -1
  104. package/dist/nest.js +39 -0
  105. package/dist/nest.js.map +1 -1
  106. package/dist/nextjs.d.ts +27 -0
  107. package/dist/nextjs.d.ts.map +1 -0
  108. package/dist/nextjs.js +178 -0
  109. package/dist/nextjs.js.map +1 -0
  110. package/dist/prisma.d.ts +21 -5
  111. package/dist/prisma.d.ts.map +1 -1
  112. package/dist/prisma.js +247 -22
  113. package/dist/prisma.js.map +1 -1
  114. package/dist/proto.gen.d.ts +10 -2
  115. package/dist/proto.gen.d.ts.map +1 -1
  116. package/dist/registry.d.ts +1 -0
  117. package/dist/registry.d.ts.map +1 -1
  118. package/dist/registry.js +24 -0
  119. package/dist/registry.js.map +1 -1
  120. package/dist/retryStorm.d.ts +42 -0
  121. package/dist/retryStorm.d.ts.map +1 -0
  122. package/dist/retryStorm.js +65 -0
  123. package/dist/retryStorm.js.map +1 -0
  124. package/dist/rulesPoller.d.ts +26 -0
  125. package/dist/rulesPoller.d.ts.map +1 -0
  126. package/dist/rulesPoller.js +74 -0
  127. package/dist/rulesPoller.js.map +1 -0
  128. package/dist/sdk.d.ts +48 -7
  129. package/dist/sdk.d.ts.map +1 -1
  130. package/dist/sdk.js +619 -47
  131. package/dist/sdk.js.map +1 -1
  132. package/dist/sequelize.d.ts.map +1 -1
  133. package/dist/sequelize.js +4 -3
  134. package/dist/sequelize.js.map +1 -1
  135. package/dist/stack.d.ts.map +1 -1
  136. package/dist/stack.js +6 -3
  137. package/dist/stack.js.map +1 -1
  138. package/dist/transport.d.ts.map +1 -1
  139. package/dist/transport.js +2 -1
  140. package/dist/transport.js.map +1 -1
  141. package/dist/typeorm.d.ts +1 -0
  142. package/dist/typeorm.d.ts.map +1 -1
  143. package/dist/typeorm.js +133 -1
  144. package/dist/typeorm.js.map +1 -1
  145. package/package.json +14 -5
@@ -0,0 +1,68 @@
1
+ import { DEFAULT_IDEMPOTENCY_SETTINGS } from './idempotency.js';
2
+ import { httpFetch } from './httpFetch.js';
3
+ const WARN_INTERVAL_MS = 60_000;
4
+ // Same start()/stop()/setInterval+unref shape as RulesPoller — periodically
5
+ // fetches the tenant's dashboard-configured idempotency-check settings so a
6
+ // toggle flipped in the dashboard reaches a running process without a
7
+ // redeploy. Falls back to DEFAULT_IDEMPOTENCY_SETTINGS before the first
8
+ // successful poll and keeps the last-known-good settings on any failure,
9
+ // never throwing and never leaving the detectors unconfigured.
10
+ export class IdempotencySettingsPoller {
11
+ settings = DEFAULT_IDEMPOTENCY_SETTINGS;
12
+ timer = null;
13
+ lastWarnAt = 0;
14
+ endpoint;
15
+ apiKey;
16
+ intervalMs;
17
+ constructor(opts) {
18
+ this.endpoint = opts.endpoint;
19
+ this.apiKey = opts.apiKey;
20
+ this.intervalMs = opts.intervalMs ?? 60_000;
21
+ }
22
+ start() {
23
+ void this.refresh(); // don't wait a full interval before settings are usable
24
+ this.timer = setInterval(() => void this.refresh(), this.intervalMs);
25
+ if (this.timer.unref)
26
+ this.timer.unref(); // don't block process exit
27
+ }
28
+ stop() {
29
+ if (this.timer) {
30
+ clearInterval(this.timer);
31
+ this.timer = null;
32
+ }
33
+ }
34
+ getSettings() {
35
+ return this.settings;
36
+ }
37
+ async refresh() {
38
+ try {
39
+ const res = await httpFetch(this.endpoint, {
40
+ headers: { 'X-Reprova-Key': this.apiKey },
41
+ });
42
+ if (!res.ok) {
43
+ this.warnOnce(`reprova: idempotency settings fetch returned ${res.status}`);
44
+ return;
45
+ }
46
+ this.seed((await res.json()));
47
+ }
48
+ catch (err) {
49
+ this.warnOnce(`reprova: idempotency settings fetch error: ${err.message}`);
50
+ }
51
+ }
52
+ // Applies an already-fetched settings object directly, with no network
53
+ // call — used by replay mode to seed a one-time snapshot the CLI fetched
54
+ // ahead of time (there's no live control plane to poll from inside a
55
+ // replayed app), so checkIdempotencyIfAny (sdk.ts) sees exactly the same
56
+ // shape it would from a real refresh().
57
+ seed(settings) {
58
+ this.settings = settings;
59
+ }
60
+ warnOnce(msg) {
61
+ const now = Date.now();
62
+ if (now - this.lastWarnAt > WARN_INTERVAL_MS) {
63
+ this.lastWarnAt = now;
64
+ console.warn(msg);
65
+ }
66
+ }
67
+ }
68
+ //# sourceMappingURL=idempotencySettingsPoller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotencySettingsPoller.js","sourceRoot":"","sources":["../src/idempotencySettingsPoller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQ3C,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,4EAA4E;AAC5E,4EAA4E;AAC5E,sEAAsE;AACtE,wEAAwE;AACxE,yEAAyE;AACzE,+DAA+D;AAC/D,MAAM,OAAO,yBAAyB;IAC5B,QAAQ,GAAwB,4BAA4B,CAAC;IAC7D,KAAK,GAA0C,IAAI,CAAC;IACpD,UAAU,GAAG,CAAC,CAAC;IACN,QAAQ,CAAS;IACjB,MAAM,CAAS;IACf,UAAU,CAAS;IAEpC,YAAY,IAAsC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,wDAAwD;QAC7E,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,2BAA2B;IACvE,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACzC,OAAO,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE;aAC1C,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC,QAAQ,CAAC,gDAAgD,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5E,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,8CAA+C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,qEAAqE;IACrE,yEAAyE;IACzE,wCAAwC;IACxC,IAAI,CAAC,QAA6B;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEO,QAAQ,CAAC,GAAW;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAAC;YAC7C,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,19 +1,44 @@
1
1
  export { Reprova, wrapResponse, forwardAsyncErrors, replayErrorHandler } from './sdk.js';
2
+ export type { FrameworkAdapter } from './frameworkAdapter.js';
2
3
  export { contextStorage, currentContext, setAuthClaims } from './context.js';
3
- export { createPrismaExtension } from './prisma.js';
4
+ export { createPrismaExtension, recordPrismaOperation } from './prisma.js';
5
+ export type { DMMF, DMMFModel, DMMFField, PrismaRecordHooks } from './prisma.js';
6
+ export { instrumentLegacyPrismaClient } from './legacyPrisma.js';
7
+ export type { LegacyPrismaOptions } from './legacyPrisma.js';
4
8
  export { createKyselyPlugin } from './kysely.js';
5
9
  export type { KyselyPluginOptions, KyselyFootprintPlugin } from './kysely.js';
6
10
  export { installSequelizeHooks } from './sequelize.js';
7
11
  export type { SequelizeAdapterOptions } from './sequelize.js';
8
- export { installTypeOrmSubscriber } from './typeorm.js';
12
+ export { installTypeOrmSubscriber, installTypeOrmQueryLogger } from './typeorm.js';
13
+ export { installMikroOrmSubscriber } from './mikroorm.js';
14
+ export { reprovaMongoosePlugin, discoverMongooseSchema } from './mongoose.js';
15
+ export type { DiscoveredMongoModel, DiscoveredMongoEdge, MongooseInstanceLike } from './mongoose.js';
16
+ export { MongoSchemaReporter } from './mongoSchemaReporter.js';
9
17
  export { installKnexHooks } from './knex.js';
10
18
  export type { KnexAdapterOptions } from './knex.js';
11
- export { createNestExceptionFilter } from './nest.js';
12
- export type { ReprovaNestFilter, NestExceptionFilterOptions, ArgumentsHostLike, NestAppLike } from './nest.js';
19
+ export { createNestExceptionFilter, createNestContextInterceptor } from './nest.js';
20
+ export type { ReprovaNestFilter, NestExceptionFilterOptions, ArgumentsHostLike, NestAppLike, CallHandlerLike, ReprovaNestInterceptor, NestContextInterceptorOptions, } from './nest.js';
21
+ export { createNextAdapter } from './nextjs.js';
22
+ export type { NextAdapterOptions, ReprovaNextAdapter, ReprovaTrpcMiddleware, TrpcMiddlewareResultLike, TrpcMiddlewareParamsLike } from './nextjs.js';
13
23
  export { createDrizzleLogger, createDrizzleCache, createDrizzleFootprint } from './drizzle.js';
14
24
  export type { DrizzleLoggerOptions, DrizzleLogger, DrizzleCache, DrizzleCacheOptions, DrizzleFootprintOptions, } from './drizzle.js';
15
25
  export type { ReprovaOptions } from './sdk.js';
16
- export type { ReprovaContext, FootprintQuery, OutboundCall, RequestSnapshot } from './context.js';
26
+ export type { ReprovaContext, FootprintQuery, OutboundCall, RequestSnapshot, BusinessInvariantHit, WriteCountDriftHit } from './context.js';
27
+ export { detectNPlusOne, describeNPlusOne, PotentialNPlusOneQuery } from './nPlusOne.js';
28
+ export type { NPlusOneFinding } from './nPlusOne.js';
29
+ export { detectRetryStorm, describeRetryStorm, PotentialRetryStorm } from './retryStorm.js';
30
+ export type { RetryStormFinding } from './retryStorm.js';
31
+ export { compileInvariant, evaluateInvariant, operationMatchesHook, BusinessInvariantViolation } from './invariantRules.js';
32
+ export type { InvariantRule, CompiledInvariant } from './invariantRules.js';
33
+ export { RulesPoller } from './rulesPoller.js';
34
+ export { DEFAULT_IDEMPOTENCY_SETTINGS, HashMismatchCache, IdempotencyKeyMismatch, DuplicateReadMismatch, findIdempotencyKey, extractIdentity, hashResponseBody, } from './idempotency.js';
35
+ export type { IdempotencySettings } from './idempotency.js';
36
+ export { IdempotencySettingsPoller } from './idempotencySettingsPoller.js';
37
+ export { InferenceReporter } from './invariantInference.js';
38
+ export type { InferredInvariantObservation } from './invariantInference.js';
39
+ export { ValueDistributionDrift, WriteCountDrift, newWelfordState, updateWelfordState, isDrift, extractTopLevelNumericFields, DistributionDriftReporter, } from './distributionDrift.js';
40
+ export type { WelfordState, DistributionBaseline } from './distributionDrift.js';
41
+ export { DistributionBaselinePoller } from './distributionBaselinePoller.js';
17
42
  export * from './proto.gen.js';
18
43
  export declare const SDK_VERSION = "0.1.0";
19
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC/F,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc,gBAAgB,CAAC;AAE/B,eAAO,MAAM,WAAW,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,12 +1,26 @@
1
1
  export { Reprova, wrapResponse, forwardAsyncErrors, replayErrorHandler } from './sdk.js';
2
2
  export { contextStorage, currentContext, setAuthClaims } from './context.js';
3
- export { createPrismaExtension } from './prisma.js';
3
+ export { createPrismaExtension, recordPrismaOperation } from './prisma.js';
4
+ export { instrumentLegacyPrismaClient } from './legacyPrisma.js';
4
5
  export { createKyselyPlugin } from './kysely.js';
5
6
  export { installSequelizeHooks } from './sequelize.js';
6
- export { installTypeOrmSubscriber } from './typeorm.js';
7
+ export { installTypeOrmSubscriber, installTypeOrmQueryLogger } from './typeorm.js';
8
+ export { installMikroOrmSubscriber } from './mikroorm.js';
9
+ export { reprovaMongoosePlugin, discoverMongooseSchema } from './mongoose.js';
10
+ export { MongoSchemaReporter } from './mongoSchemaReporter.js';
7
11
  export { installKnexHooks } from './knex.js';
8
- export { createNestExceptionFilter } from './nest.js';
12
+ export { createNestExceptionFilter, createNestContextInterceptor } from './nest.js';
13
+ export { createNextAdapter } from './nextjs.js';
9
14
  export { createDrizzleLogger, createDrizzleCache, createDrizzleFootprint } from './drizzle.js';
15
+ export { detectNPlusOne, describeNPlusOne, PotentialNPlusOneQuery } from './nPlusOne.js';
16
+ export { detectRetryStorm, describeRetryStorm, PotentialRetryStorm } from './retryStorm.js';
17
+ export { compileInvariant, evaluateInvariant, operationMatchesHook, BusinessInvariantViolation } from './invariantRules.js';
18
+ export { RulesPoller } from './rulesPoller.js';
19
+ export { DEFAULT_IDEMPOTENCY_SETTINGS, HashMismatchCache, IdempotencyKeyMismatch, DuplicateReadMismatch, findIdempotencyKey, extractIdentity, hashResponseBody, } from './idempotency.js';
20
+ export { IdempotencySettingsPoller } from './idempotencySettingsPoller.js';
21
+ export { InferenceReporter } from './invariantInference.js';
22
+ export { ValueDistributionDrift, WriteCountDrift, newWelfordState, updateWelfordState, isDrift, extractTopLevelNumericFields, DistributionDriftReporter, } from './distributionDrift.js';
23
+ export { DistributionBaselinePoller } from './distributionBaselinePoller.js';
10
24
  export * from './proto.gen.js';
11
25
  export const SDK_VERSION = '0.1.0';
12
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAU/F,cAAc,gBAAgB,CAAC;AAE/B,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AAUpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAU/F,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEzF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE5F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAE5H,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,cAAc,gBAAgB,CAAC;AAE/B,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface InferredInvariantObservation {
2
+ model: string;
3
+ field: string;
4
+ relation: string;
5
+ checked: number;
6
+ held: number;
7
+ }
8
+ interface ReporterOptions {
9
+ endpoint: string;
10
+ apiKey: string;
11
+ flushIntervalMs?: number;
12
+ }
13
+ export declare class InferenceReporter {
14
+ private counts;
15
+ private timer;
16
+ private lastWarnAt;
17
+ private readonly endpoint;
18
+ private readonly apiKey;
19
+ private readonly flushIntervalMs;
20
+ constructor(opts: ReporterOptions);
21
+ start(): void;
22
+ stop(): void;
23
+ record(model: string, field: string, relation: string, held: boolean): void;
24
+ flush(): Promise<void>;
25
+ private warnOnce;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=invariantInference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariantInference.d.ts","sourceRoot":"","sources":["../src/invariantInference.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAOD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAwG;IACtH,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,IAAI,EAAE,eAAe;IAMjC,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAOZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAWrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,OAAO,CAAC,QAAQ;CAOjB"}
@@ -0,0 +1,87 @@
1
+ // Invariant inference, v1 slice: instead of hand-authoring a
2
+ // business-invariant-rule condition tree, passively observe whether a
3
+ // same-named numeric field on a parent row equals the sum of that same
4
+ // field across an already-included to-many relation (Invoice.total vs
5
+ // sum(lineItems.total)) — and report pass/fail counts to the control plane.
6
+ // Once a candidate has been observed enough times at a high enough pass
7
+ // rate, the dashboard offers it as a one-click "confirm" that creates a
8
+ // normal business_invariant_rule — no new evaluation mechanism needed once
9
+ // confirmed, it becomes an ordinary dashboard-authored rule.
10
+ //
11
+ // Deliberately scoped down from the general idea: only the same-field-name
12
+ // shape (not every numeric-field-pair combination, which would be
13
+ // combinatorial and noisy), only `sum` (no `count`), and no dashboard-
14
+ // configurable thresholds yet — see PROGRESS.md for the fuller design this
15
+ // is a first slice of.
16
+ import { httpFetch } from './httpFetch.js';
17
+ const WARN_INTERVAL_MS = 60_000;
18
+ // Reports observation deltas, not cumulative totals — the control plane
19
+ // owns the running (checked_count, held_count) per candidate; the SDK only
20
+ // ever adds to it. That makes a dropped/failed flush harmless to correctness
21
+ // (the next flush's delta is unaffected by a prior one failing) at the cost
22
+ // of only ever undercounting on a genuine send failure, never overcounting.
23
+ export class InferenceReporter {
24
+ counts = new Map();
25
+ timer = null;
26
+ lastWarnAt = 0;
27
+ endpoint;
28
+ apiKey;
29
+ flushIntervalMs;
30
+ constructor(opts) {
31
+ this.endpoint = opts.endpoint;
32
+ this.apiKey = opts.apiKey;
33
+ this.flushIntervalMs = opts.flushIntervalMs ?? 30_000;
34
+ }
35
+ start() {
36
+ this.timer = setInterval(() => void this.flush(), this.flushIntervalMs);
37
+ if (this.timer.unref)
38
+ this.timer.unref(); // don't block process exit
39
+ }
40
+ stop() {
41
+ if (this.timer) {
42
+ clearInterval(this.timer);
43
+ this.timer = null;
44
+ }
45
+ }
46
+ record(model, field, relation, held) {
47
+ const key = `${model}\x00${field}\x00${relation}`;
48
+ let c = this.counts.get(key);
49
+ if (!c) {
50
+ c = { model, field, relation, checked: 0, held: 0 };
51
+ this.counts.set(key, c);
52
+ }
53
+ c.checked++;
54
+ if (held)
55
+ c.held++;
56
+ }
57
+ async flush() {
58
+ if (this.counts.size === 0)
59
+ return;
60
+ const observations = [...this.counts.values()];
61
+ this.counts.clear();
62
+ try {
63
+ const res = await httpFetch(this.endpoint, {
64
+ method: 'POST',
65
+ headers: {
66
+ 'Content-Type': 'application/json',
67
+ 'X-Reprova-Key': this.apiKey,
68
+ },
69
+ body: JSON.stringify({ observations }),
70
+ });
71
+ if (!res.ok) {
72
+ this.warnOnce(`reprova: inferred-invariant observation report returned ${res.status}`);
73
+ }
74
+ }
75
+ catch (err) {
76
+ this.warnOnce(`reprova: inferred-invariant observation report error: ${err.message}`);
77
+ }
78
+ }
79
+ warnOnce(msg) {
80
+ const now = Date.now();
81
+ if (now - this.lastWarnAt > WARN_INTERVAL_MS) {
82
+ this.lastWarnAt = now;
83
+ console.warn(msg);
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=invariantInference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariantInference.js","sourceRoot":"","sources":["../src/invariantInference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface InvariantRule {
2
+ id: string;
3
+ model: string;
4
+ when_hook: 'after_read' | 'after_write';
5
+ expr: string;
6
+ message: string;
7
+ enabled: boolean;
8
+ }
9
+ export declare function operationMatchesHook(op: string, whenHook: InvariantRule['when_hook']): boolean;
10
+ export type CompiledInvariant = (row: Record<string, unknown>) => unknown;
11
+ export declare function compileInvariant(rule: Pick<InvariantRule, 'id' | 'expr'>): Promise<CompiledInvariant | null>;
12
+ export declare function evaluateInvariant(compiled: CompiledInvariant, row: Record<string, unknown>): boolean | undefined;
13
+ export declare class BusinessInvariantViolation extends Error {
14
+ constructor(message: string);
15
+ }
16
+ //# sourceMappingURL=invariantRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariantRules.d.ts","sourceRoot":"","sources":["../src/invariantRules.ts"],"names":[],"mappings":"AA4DA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,YAAY,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AASD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,OAAO,CAE9F;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;AAc1E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAalH;AAOD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAQhH;AAOD,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAG5B"}
@@ -0,0 +1,104 @@
1
+ // Dashboard-authored business-invariant rules: CEL (Common Expression
2
+ // Language) expressions evaluated in-process against real Prisma query
3
+ // results (not just the footprint's PKs/counts — actual field values), so
4
+ // bugs that never throw and never return a 5xx (an invoice total that
5
+ // silently drifted from its line items, negative inventory, an order marked
6
+ // shipped with no shipment row) can still produce a reproduction.
7
+ //
8
+ // Replaces an earlier JSON condition-tree evaluator (see git history) — CEL
9
+ // gives the same same-row-comparison-and-relation-aggregate expressiveness
10
+ // with a much friendlier authoring surface (`total ==
11
+ // lineItems.map(x, x.total).sum()` instead of a nested op/field/right tree),
12
+ // using the actively-maintained, zero-dependency @marcbachmann/cel-js.
13
+ //
14
+ // `expr` is the INVARIANT itself — what should always be true — not the
15
+ // violation condition: a rule fires when `expr` evaluates to exactly
16
+ // `false`. This is the opposite polarity from the old JSON tree (which
17
+ // encoded the violation, e.g. `not: eq(...)`), but reads naturally in CEL
18
+ // and matches how an admin would actually describe the rule out loud.
19
+ //
20
+ // A field or relation the app's own query didn't `include` simply isn't a
21
+ // key on the row object, which CEL reports as a runtime "no such attribute"
22
+ // error rather than `false` — evaluateInvariant treats any evaluation error,
23
+ // and any non-boolean result (an author mistake, e.g. forgetting a
24
+ // comparison operator), as "can't evaluate" and skips, never firing a false
25
+ // violation on data the query simply didn't load. Same principle
26
+ // `invariantInference.ts`/`distributionDrift.ts` use: never guess.
27
+ let envPromise = null;
28
+ function loadEnv() {
29
+ if (!envPromise) {
30
+ envPromise = import('@marcbachmann/cel-js')
31
+ .then(({ Environment }) => new Environment({ unlistedVariablesAreDyn: true }).registerFunction({
32
+ name: 'sum',
33
+ receiverType: 'list',
34
+ returnType: 'double',
35
+ handler: (list) => list.reduce((a, b) => a + b, 0),
36
+ params: [],
37
+ }))
38
+ .catch(() => null); // can't load the CEL engine at all — every rule silently never fires, never crashes the host app
39
+ }
40
+ return envPromise;
41
+ }
42
+ const READ_OPS = new Set(['findUnique', 'findUniqueOrThrow', 'findFirst', 'findFirstOrThrow', 'findMany']);
43
+ const WRITE_OPS = new Set(['create', 'createMany', 'update', 'updateMany', 'upsert', 'delete', 'deleteMany']);
44
+ // Whether a Prisma operation name belongs to the read/write class a rule's
45
+ // when_hook asks to run on. Anything neither (e.g. $queryRaw, aggregate,
46
+ // count, groupBy) never matches — a rule needs real field values on a real
47
+ // row, which those don't uniformly provide.
48
+ export function operationMatchesHook(op, whenHook) {
49
+ return whenHook === 'after_read' ? READ_OPS.has(op) : WRITE_OPS.has(op);
50
+ }
51
+ // Compiled programs are cached by (rule id, expr) so an edited rule
52
+ // recompiles (new expr under the same id misses the cache) while an
53
+ // unchanged one is parsed exactly once for the life of the process — CEL
54
+ // parsing is not free, and this runs on every matching query result.
55
+ // Invalid CEL syntax caches a `null` miss rather than re-attempting the
56
+ // same broken parse on every request. A CEL-engine load failure (see
57
+ // loadEnv's own doc comment) is deliberately NOT cached here — that's a
58
+ // process-wide condition already memoized by envPromise itself, not a
59
+ // per-rule outcome, so a later rule with valid syntax isn't punished by an
60
+ // earlier one's transient load timing.
61
+ const compileCache = new Map();
62
+ export async function compileInvariant(rule) {
63
+ const key = `${rule.id}\x00${rule.expr}`;
64
+ if (compileCache.has(key))
65
+ return compileCache.get(key);
66
+ const env = await loadEnv();
67
+ if (!env)
68
+ return null;
69
+ let compiled;
70
+ try {
71
+ compiled = env.parse(rule.expr);
72
+ }
73
+ catch {
74
+ compiled = null; // invalid CEL — never crash the host app on a bad admin-authored rule
75
+ }
76
+ compileCache.set(key, compiled);
77
+ return compiled;
78
+ }
79
+ // Runs a compiled invariant against one row. Returns `false` only for a
80
+ // genuine, cleanly-evaluated violation; `undefined` for anything else
81
+ // (evaluation error from a missing field/relation, or a non-boolean result
82
+ // from a malformed expression) so the caller never mistakes "couldn't tell"
83
+ // for "violated".
84
+ export function evaluateInvariant(compiled, row) {
85
+ let result;
86
+ try {
87
+ result = compiled(row);
88
+ }
89
+ catch {
90
+ return undefined;
91
+ }
92
+ return typeof result === 'boolean' ? result : undefined;
93
+ }
94
+ // One reusable Error class for every rule violation. Per-rule identity comes
95
+ // from capture()'s extra.errorType override (see sdk.ts), not from a
96
+ // per-rule subclass — many rules can share this class without collapsing
97
+ // into one issue, since fingerprinting keys off errorType, not the class
98
+ // name, once errorType is supplied explicitly.
99
+ export class BusinessInvariantViolation extends Error {
100
+ constructor(message) {
101
+ super(message);
102
+ }
103
+ }
104
+ //# sourceMappingURL=invariantRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariantRules.js","sourceRoot":"","sources":["../src/invariantRules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"knex.d.ts","sourceRoot":"","sources":["../src/knex.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,kBAAkB;IAEjC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAC1C;AAsCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,kBAAuB,GAAG,IAAI,CAqCnF"}
1
+ {"version":3,"file":"knex.d.ts","sourceRoot":"","sources":["../src/knex.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,kBAAkB;IAEjC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAC1C;AAsCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,kBAAuB,GAAG,IAAI,CAsCnF"}
package/dist/knex.js CHANGED
@@ -72,6 +72,7 @@ export function installKnexHooks(knex, opts = {}) {
72
72
  pks,
73
73
  count,
74
74
  note: count === 0 ? 'returned 0 rows' : undefined,
75
+ resolved: true,
75
76
  };
76
77
  ctx.footprint.push(entry);
77
78
  }
package/dist/knex.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"knex.js","sourceRoot":"","sources":["../src/knex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knex.js","sourceRoot":"","sources":["../src/knex.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"kysely.d.ts","sourceRoot":"","sources":["../src/kysely.ts"],"names":[],"mappings":"AAmBA,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAOD,MAAM,WAAW,mBAAmB;IAKlC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAIzC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAKD,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,GAAG,CAAC,CAAC;IACzF,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AA6GD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,mBAAwB,GAAG,qBAAqB,CAmExF"}
1
+ {"version":3,"file":"kysely.d.ts","sourceRoot":"","sources":["../src/kysely.ts"],"names":[],"mappings":"AAmBA,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAOD,MAAM,WAAW,mBAAmB;IAKlC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAIzC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAKD,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,GAAG,CAAC,CAAC;IACzF,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AA6GD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,mBAAwB,GAAG,qBAAqB,CAoExF"}
package/dist/kysely.js CHANGED
@@ -149,6 +149,7 @@ export function createKyselyPlugin(opts = {}) {
149
149
  where_shape: meta.whereShape,
150
150
  count,
151
151
  note: count === 0 ? 'returned 0 rows' : undefined,
152
+ resolved: true,
152
153
  };
153
154
  ctx.footprint.push(entry);
154
155
  // Joined / subquery tables: recorded so the extractor knows they
@@ -157,7 +158,7 @@ export function createKyselyPlugin(opts = {}) {
157
158
  for (const t of meta.tables) {
158
159
  if (t === primary)
159
160
  continue;
160
- ctx.footprint.push({ model: t, op: meta.op, pks: [], count: 0, note: 'referenced (join/subquery)' });
161
+ ctx.footprint.push({ model: t, op: meta.op, pks: [], count: 0, note: 'referenced (join/subquery)', resolved: true });
161
162
  }
162
163
  }
163
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kysely.js","sourceRoot":"","sources":["../src/kysely.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kysely.js","sourceRoot":"","sources":["../src/kysely.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DMMF, PrismaRecordHooks } from './prisma.js';
2
+ export interface LegacyPrismaOptions extends PrismaRecordHooks {
3
+ dmmf?: DMMF;
4
+ }
5
+ export declare function instrumentLegacyPrismaClient(client: unknown, opts?: LegacyPrismaOptions): void;
6
+ //# sourceMappingURL=legacyPrisma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacyPrisma.d.ts","sourceRoot":"","sources":["../src/legacyPrisma.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA2C3D,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAM5D,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAOD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAE,mBAAwB,GAAG,IAAI,CA8BlG"}