@signaltree/guardrails 4.0.16 → 4.1.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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/guardrails.ts","../src/lib/rules.ts"],"names":["isFunction","value","isString","isObjectLike","resolveEnabledFlag","option","undefined","supportsMiddleware","tree","candidate","addTap","removeTap","tryStructuredClone","cloneFn","globalThis","structuredClone","isDevEnvironment","__DEV__","process","env","ngDevMode","Boolean","MAX_TIMING_SAMPLES","RECOMPUTATION_WINDOW_MS","withGuardrails","config","enabled","console","warn","stats","createRuntimeStats","context","issues","hotPaths","currentUpdate","suppressed","timings","hotPathData","Map","issueMap","signalUsage","memoryHistory","recomputationLog","disposed","middlewareId","treeId","Math","random","toString","slice","middleware","createGuardrailsMiddleware","stopMonitoring","startMonitoring","teardown","originalDestroy","destroy","bind","createAPI","updateCount","totalUpdateTime","avgUpdateTime","p50UpdateTime","p95UpdateTime","p99UpdateTime","maxUpdateTime","recomputationCount","recomputationsPerSecond","signalCount","signalRetention","unreadSignalCount","memoryGrowthRate","hotPathCount","violationCount","id","before","action","payload","state","metadata","extractMetadata","shouldSuppressUpdate","details","collectUpdateDetails","startTime","performance","now","detail","analyzePreUpdate","after","_action","_payload","_previousState","newState","pending","duration","max","timestamp","Date","recomputations","length","updateTimingStats","index","entries","latest","getValueAtPath","segments","diffRatio","calculateDiffRatio","oldValue","analyzePostUpdate","trackHotPath","path","trackSignalUsage","updateSignalStats","recordRecomputations","updatePercentiles","sorted","sort","a","b","floor","newValue","isComparableRecord","Object","is","oldKeys","Set","keys","newKeys","allKeys","changed","key","has","size","customRules","rule","evaluateRule","isPrimary","budgets","addIssue","type","severity","message","toFixed","count","minDiff","analysis","minDiffForParentReplace","warnParentReplace","pathKey","Array","isArray","join","windowMs","data","get","lastUpdate","durations","set","push","threshold","updatesPerSecond","p95","avg","reduce","sum","d","updateHotPath","heatScore","min","downstreamEffects","avgDuration","p95Duration","entry","updates","lastSeen","retentionWindow","memoryLeaks","checkInterval","historyWindow","staleCount","values","filter","baseline","growth","i","hotPath","existing","find","h","assign","topN","ruleContext","handleFailure","name","result","test","Promise","then","outcome","catch","error","issue","reporting","aggregateWarnings","mode","Error","suppressGuardrails","suppression","respectMetadata","autoSuppress","intent","source","some","interval","setInterval","clearInterval","checkMemory","maybeReport","retentionThreshold","growthThreshold","growthRate","exceedsRetention","exceedsGrowth","report","generateReport","customReporter","reportToConsole","clear","verbose","group","logIssues","logHotPaths","logVerboseStats","groupEnd","prefix","getSeverityPrefix","countSuffix","log","hp","memoryCurrent","memoryLimit","maxMemory","recomputationCurrent","recomputationLimit","maxRecomputations","updateTime","createBudgetItem","memory","from","recommendations","generateRecommendations","current","limit","usage","status","getReport","getStats","suppress","fn","was","dispose","finalReport","stateSnapshot","visit","currentState","captureValue","child","segment","isPlainObject","proto","getPrototypeOf","prototype","shift","rules","noDeepNesting","maxDepth","description","ctx","tags","noFunctionsInState","noCacheInPersistence","includes","maxPayloadSize","maxKB","JSON","stringify","kb","noSensitiveData","sensitiveKeys","toLowerCase"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SignalTree Guardrails Enhancer v1.1\n * Development-only performance monitoring and anti-pattern detection\n * @packageDocumentation\n */\n\nimport type { Middleware, SignalTree } from '@signaltree/core';\n\nimport type {\n GuardrailsConfig,\n GuardrailsAPI,\n GuardrailsReport,\n RuntimeStats,\n GuardrailIssue,\n HotPath,\n UpdateMetadata,\n RuleContext,\n BudgetStatus,\n BudgetItem,\n GuardrailRule,\n} from './types';\n\n// Dev environment detection\ndeclare const __DEV__: boolean | undefined;\ndeclare const ngDevMode: boolean | undefined;\ndeclare const process:\n | {\n env?: Record<string, string | undefined>;\n }\n | undefined;\n\ntype EnabledOption = boolean | (() => boolean);\n\ntype MiddlewareCapableTree<T extends Record<string, unknown>> =\n SignalTree<T> & {\n addTap: (middleware: Middleware<T>) => void;\n removeTap: (id: string) => void;\n };\n\nfunction isFunction<T extends (...args: never[]) => unknown>(\n value: unknown\n): value is T {\n return typeof value === 'function';\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction resolveEnabledFlag(option?: EnabledOption): boolean {\n if (option === undefined) {\n return true;\n }\n if (isFunction<() => boolean>(option)) {\n try {\n return option();\n } catch {\n return true;\n }\n }\n return option;\n}\n\nfunction supportsMiddleware<T extends Record<string, unknown>>(\n tree: SignalTree<T>\n): tree is MiddlewareCapableTree<T> {\n const candidate = tree as Partial<MiddlewareCapableTree<T>>;\n return isFunction(candidate.addTap) && isFunction(candidate.removeTap);\n}\n\nfunction tryStructuredClone<T>(value: T): T {\n const cloneFn = (\n globalThis as typeof globalThis & {\n structuredClone?: <U>(input: U) => U;\n }\n ).structuredClone;\n\n if (isFunction(cloneFn)) {\n try {\n return cloneFn(value);\n } catch {\n // Fall through to return original value.\n }\n }\n\n return value;\n}\n\nfunction isDevEnvironment(): boolean {\n if (__DEV__ !== undefined) return __DEV__;\n if (process?.env?.['NODE_ENV'] === 'production') return false;\n if (ngDevMode != null) return Boolean(ngDevMode);\n return true;\n}\n\ninterface UpdateDetail {\n path: string;\n segments: string[];\n newValue: unknown;\n oldValue: unknown;\n}\n\ninterface PendingUpdate {\n action: string;\n startTime: number;\n metadata?: UpdateMetadata;\n details: UpdateDetail[];\n}\n\ninterface GuardrailsContext<\n T extends Record<string, unknown> = Record<string, unknown>\n> {\n tree: SignalTree<T>;\n config: GuardrailsConfig<T>;\n stats: RuntimeStats;\n issues: GuardrailIssue[];\n hotPaths: HotPath[];\n currentUpdate: PendingUpdate | null;\n suppressed: boolean;\n timings: number[];\n hotPathData: Map<\n string,\n { count: number; lastUpdate: number; durations: number[] }\n >;\n issueMap: Map<string, GuardrailIssue>;\n signalUsage: Map<string, { updates: number; lastSeen: number }>;\n memoryHistory: Array<{ timestamp: number; count: number }>;\n recomputationLog: number[];\n middlewareId?: string;\n disposed: boolean;\n}\n\nconst MAX_TIMING_SAMPLES = 1000;\nconst RECOMPUTATION_WINDOW_MS = 1000;\n\n/**\n * Creates a guardrails enhancer for dev-only monitoring\n */\nexport function withGuardrails<T extends Record<string, unknown>>(\n config: GuardrailsConfig<T> = {}\n): (tree: SignalTree<T>) => SignalTree<T> {\n return (tree: SignalTree<T>) => {\n const enabled = resolveEnabledFlag(config.enabled);\n\n if (!isDevEnvironment() || !enabled) {\n return tree;\n }\n\n if (!supportsMiddleware(tree)) {\n console.warn(\n '[Guardrails] Tree does not expose middleware hooks; guardrails disabled.'\n );\n return tree;\n }\n\n const stats = createRuntimeStats();\n const context: GuardrailsContext<T> = {\n tree,\n config,\n stats,\n issues: [],\n hotPaths: [],\n currentUpdate: null,\n suppressed: false,\n timings: [],\n hotPathData: new Map(),\n issueMap: new Map(),\n signalUsage: new Map(),\n memoryHistory: [],\n recomputationLog: [],\n disposed: false,\n };\n\n const middlewareId = `guardrails:${config.treeId ?? 'tree'}:${Math.random()\n .toString(36)\n .slice(2)}`;\n context.middlewareId = middlewareId;\n\n const middleware = createGuardrailsMiddleware(context);\n tree.addTap(middleware);\n\n const stopMonitoring = startMonitoring(context);\n\n const teardown = () => {\n if (context.disposed) return;\n context.disposed = true;\n stopMonitoring();\n try {\n tree.removeTap(middlewareId);\n } catch {\n // ignore if removal fails\n }\n };\n\n const originalDestroy = tree.destroy?.bind(tree);\n tree.destroy = () => {\n teardown();\n if (originalDestroy) {\n originalDestroy();\n }\n };\n\n (tree as unknown as Record<string, unknown>)['__guardrails'] = createAPI(\n context,\n teardown\n );\n\n return tree;\n };\n}\n\nfunction createRuntimeStats(): RuntimeStats {\n return {\n updateCount: 0,\n totalUpdateTime: 0,\n avgUpdateTime: 0,\n p50UpdateTime: 0,\n p95UpdateTime: 0,\n p99UpdateTime: 0,\n maxUpdateTime: 0,\n recomputationCount: 0,\n recomputationsPerSecond: 0,\n signalCount: 0,\n signalRetention: 0,\n unreadSignalCount: 0,\n memoryGrowthRate: 0,\n hotPathCount: 0,\n violationCount: 0,\n };\n}\n\nfunction createGuardrailsMiddleware<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): Middleware<T> {\n return {\n id: context.middlewareId ?? 'guardrails',\n before: (action: string, payload: unknown, state: T): boolean => {\n if (context.suppressed) {\n context.currentUpdate = null;\n return !context.disposed;\n }\n\n const metadata = extractMetadata(payload);\n if (shouldSuppressUpdate(context, metadata)) {\n context.currentUpdate = null;\n return !context.disposed;\n }\n\n const details = collectUpdateDetails(payload, state);\n context.currentUpdate = {\n action,\n startTime: performance.now(),\n metadata,\n details,\n };\n\n for (const detail of details) {\n analyzePreUpdate(context, detail, metadata);\n }\n\n return !context.disposed;\n },\n after: (\n _action: string,\n _payload: unknown,\n _previousState: T,\n newState: T\n ): void => {\n const pending = context.currentUpdate;\n if (!pending) return;\n\n const duration = Math.max(0, performance.now() - pending.startTime);\n const timestamp = Date.now();\n const recomputations = Math.max(0, pending.details.length - 1);\n updateTimingStats(context, duration);\n\n for (const [index, detail] of pending.details.entries()) {\n const latest = getValueAtPath(newState, detail.segments);\n const diffRatio = calculateDiffRatio(detail.oldValue, latest);\n analyzePostUpdate(context, detail, duration, diffRatio, index === 0);\n trackHotPath(context, detail.path, duration);\n trackSignalUsage(context, detail.path, timestamp);\n }\n\n updateSignalStats(context, timestamp);\n recordRecomputations(context, recomputations, timestamp);\n\n context.currentUpdate = null;\n },\n };\n}\n\nfunction updatePercentiles<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (context.timings.length === 0) return;\n\n const sorted = [...context.timings].sort((a, b) => a - b);\n context.stats.p50UpdateTime = sorted[Math.floor(sorted.length * 0.5)] || 0;\n context.stats.p95UpdateTime = sorted[Math.floor(sorted.length * 0.95)] || 0;\n context.stats.p99UpdateTime = sorted[Math.floor(sorted.length * 0.99)] || 0;\n}\n\nfunction calculateDiffRatio(oldValue: unknown, newValue: unknown): number {\n if (!isComparableRecord(oldValue) || !isComparableRecord(newValue)) {\n return Object.is(oldValue, newValue) ? 0 : 1;\n }\n if (oldValue === newValue) return 0;\n\n const oldKeys = new Set(Object.keys(oldValue));\n const newKeys = new Set(Object.keys(newValue));\n const allKeys = new Set([...oldKeys, ...newKeys]);\n\n let changed = 0;\n for (const key of allKeys) {\n if (\n !oldKeys.has(key) ||\n !newKeys.has(key) ||\n oldValue[key] !== newValue[key]\n ) {\n changed++;\n }\n }\n\n return allKeys.size === 0 ? 0 : changed / allKeys.size;\n}\n\nfunction analyzePreUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n detail: UpdateDetail,\n metadata?: UpdateMetadata\n): void {\n if (!context.config.customRules) return;\n\n for (const rule of context.config.customRules) {\n evaluateRule(context, rule, {\n path: detail.segments,\n value: detail.newValue,\n oldValue: detail.oldValue,\n metadata,\n tree: context.tree,\n stats: context.stats,\n });\n }\n}\n\nfunction analyzePostUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n detail: UpdateDetail,\n duration: number,\n diffRatio: number,\n isPrimary: boolean\n): void {\n if (\n isPrimary &&\n context.config.budgets?.maxUpdateTime &&\n duration > context.config.budgets.maxUpdateTime\n ) {\n addIssue(context, {\n type: 'budget',\n severity: 'error',\n message: `Update took ${duration.toFixed(2)}ms (budget: ${\n context.config.budgets.maxUpdateTime\n }ms)`,\n path: detail.path,\n count: 1,\n });\n }\n\n const minDiff = context.config.analysis?.minDiffForParentReplace ?? 0.8;\n if (context.config.analysis?.warnParentReplace && diffRatio > minDiff) {\n addIssue(context, {\n type: 'analysis',\n severity: 'warning',\n message: `High diff ratio (${(diffRatio * 100).toFixed(\n 0\n )}%) - consider scoped updates`,\n path: detail.path,\n count: 1,\n diffRatio,\n });\n }\n}\n\nfunction trackHotPath<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n path: string,\n duration: number\n): void {\n if (!context.config.hotPaths?.enabled) return;\n\n const pathKey = Array.isArray(path) ? path.join('.') : path;\n const now = Date.now();\n const windowMs = context.config.hotPaths.windowMs || 1000;\n\n let data = context.hotPathData.get(pathKey);\n if (!data) {\n data = { count: 0, lastUpdate: now, durations: [] };\n context.hotPathData.set(pathKey, data);\n }\n\n // Reset if outside window\n if (now - data.lastUpdate > windowMs) {\n data.count = 0;\n data.durations = [];\n }\n\n data.count++;\n data.durations.push(duration);\n data.lastUpdate = now;\n\n // Check threshold\n const threshold = context.config.hotPaths.threshold || 10;\n const updatesPerSecond = (data.count / windowMs) * 1000;\n\n if (updatesPerSecond > threshold) {\n const sorted = [...data.durations].sort((a, b) => a - b);\n const p95 = sorted[Math.floor(sorted.length * 0.95)] || 0;\n const avg =\n data.durations.reduce((sum, d) => sum + d, 0) / data.durations.length;\n\n updateHotPath(context, {\n path: pathKey,\n updatesPerSecond,\n heatScore: Math.min(100, (updatesPerSecond / threshold) * 50),\n downstreamEffects: 0, // Would need dev hooks\n avgDuration: avg,\n p95Duration: p95,\n });\n }\n}\n\nfunction trackSignalUsage<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n path: string,\n timestamp: number\n): void {\n const key = Array.isArray(path) ? path.join('.') : path;\n const entry = context.signalUsage.get(key) ?? {\n updates: 0,\n lastSeen: timestamp,\n };\n entry.updates += 1;\n entry.lastSeen = timestamp;\n context.signalUsage.set(key, entry);\n}\n\nfunction updateSignalStats<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n timestamp: number\n): void {\n const retentionWindow = context.config.memoryLeaks?.checkInterval ?? 5000;\n const historyWindow = Math.max(retentionWindow, 1000);\n\n const signalCount = context.signalUsage.size;\n context.stats.signalCount = signalCount;\n\n const staleCount = [...context.signalUsage.values()].filter(\n (entry) => timestamp - entry.lastSeen > retentionWindow\n ).length;\n context.stats.signalRetention = staleCount;\n context.stats.unreadSignalCount = 0;\n\n context.memoryHistory.push({ timestamp, count: signalCount });\n context.memoryHistory = context.memoryHistory.filter(\n (entry) => timestamp - entry.timestamp <= historyWindow\n );\n\n const baseline = context.memoryHistory[0]?.count ?? signalCount;\n const growth =\n baseline === 0 ? 0 : (signalCount - baseline) / Math.max(1, baseline);\n context.stats.memoryGrowthRate = growth;\n}\n\nfunction recordRecomputations<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n count: number,\n timestamp: number\n): void {\n if (count > 0) {\n context.stats.recomputationCount += count;\n for (let i = 0; i < count; i++) {\n context.recomputationLog.push(timestamp);\n }\n }\n\n if (context.recomputationLog.length) {\n context.recomputationLog = context.recomputationLog.filter(\n (value) => timestamp - value <= RECOMPUTATION_WINDOW_MS\n );\n }\n\n context.stats.recomputationsPerSecond = context.recomputationLog.length;\n}\n\nfunction updateHotPath<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n hotPath: HotPath\n): void {\n const existing = context.hotPaths.find((h) => h.path === hotPath.path);\n if (existing) {\n Object.assign(existing, hotPath);\n } else {\n context.hotPaths.push(hotPath);\n const topN = context.config.hotPaths?.topN || 5;\n if (context.hotPaths.length > topN) {\n context.hotPaths.sort((a, b) => b.heatScore - a.heatScore);\n context.hotPaths.length = topN;\n }\n }\n context.stats.hotPathCount = context.hotPaths.length;\n}\n\nfunction evaluateRule<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n rule: GuardrailRule<T>,\n ruleContext: RuleContext<T>\n): void {\n const handleFailure = () => {\n const message =\n typeof rule.message === 'function'\n ? rule.message(ruleContext)\n : rule.message;\n\n addIssue(context, {\n type: 'rule',\n severity: rule.severity || 'warning',\n message,\n path: ruleContext.path.join('.'),\n count: 1,\n metadata: { rule: rule.name },\n });\n };\n\n try {\n const result = rule.test(ruleContext);\n if (result instanceof Promise) {\n result\n .then((outcome) => {\n if (!outcome) {\n handleFailure();\n }\n })\n .catch((error) => {\n console.warn(`[Guardrails] Rule ${rule.name} rejected:`, error);\n });\n return;\n }\n\n if (!result) {\n handleFailure();\n }\n } catch (error) {\n // Rule threw, log but don't halt\n console.warn(`[Guardrails] Rule ${rule.name} threw error:`, error);\n }\n}\n\nfunction addIssue<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n issue: GuardrailIssue\n): void {\n if (context.suppressed) return;\n\n // Aggregate similar issues\n if (context.config.reporting?.aggregateWarnings !== false) {\n const key = `${issue.type}:${issue.path}:${issue.message}`;\n const existing = context.issueMap.get(key);\n if (existing) {\n existing.count++;\n return;\n }\n context.issueMap.set(key, issue);\n }\n\n context.issues.push(issue);\n context.stats.violationCount++;\n\n // Throw mode\n if (context.config.mode === 'throw') {\n throw new Error(`[Guardrails] ${issue.message}`);\n }\n}\n\nfunction shouldSuppressUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n metadata?: UpdateMetadata\n): boolean {\n if (context.suppressed) return true;\n if (!metadata) return false;\n\n if (\n metadata.suppressGuardrails &&\n context.config.suppression?.respectMetadata !== false\n ) {\n return true;\n }\n\n const autoSuppress = new Set<string>(\n context.config.suppression?.autoSuppress ?? []\n );\n\n return [metadata.intent, metadata.source].some(\n (value) => isString(value) && autoSuppress.has(value)\n );\n}\n\nfunction startMonitoring<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): () => void {\n const interval = setInterval(() => {\n if (context.disposed) {\n clearInterval(interval);\n return;\n }\n checkMemory(context);\n maybeReport(context);\n }, context.config.reporting?.interval || 5000);\n\n return () => clearInterval(interval);\n}\n\nfunction checkMemory<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (!context.config.memoryLeaks?.enabled) return;\n\n const now = Date.now();\n const retentionWindow = context.config.memoryLeaks?.checkInterval ?? 5000;\n const retentionThreshold =\n context.config.memoryLeaks?.retentionThreshold ?? 100;\n const growthThreshold = context.config.memoryLeaks?.growthRate ?? 0.2;\n\n const staleCount = [...context.signalUsage.values()].filter(\n (entry) => now - entry.lastSeen > retentionWindow\n ).length;\n context.stats.signalRetention = staleCount;\n\n const exceedsRetention = context.stats.signalRetention > retentionThreshold;\n const exceedsGrowth = context.stats.memoryGrowthRate > growthThreshold;\n\n if (exceedsRetention || exceedsGrowth) {\n addIssue(context, {\n type: 'memory',\n severity: 'warning',\n message: `Potential memory leak detected (signals: ${\n context.stats.signalCount\n }, growth ${(context.stats.memoryGrowthRate * 100).toFixed(1)}%)`,\n path: 'root',\n count: 1,\n metadata: {\n signalCount: context.stats.signalCount,\n growth: context.stats.memoryGrowthRate,\n },\n });\n }\n}\n\nfunction maybeReport<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (context.config.reporting?.console === false) return;\n\n const report = generateReport(context);\n\n if (context.config.reporting?.customReporter) {\n context.config.reporting.customReporter(report);\n }\n\n if (context.config.reporting?.console && context.issues.length > 0) {\n reportToConsole(report, context.config.reporting.console === 'verbose');\n }\n\n // Clear issues after reporting\n context.issues = [];\n context.issueMap.clear();\n}\n\nfunction reportToConsole(report: GuardrailsReport, verbose: boolean): void {\n console.group('[Guardrails] Performance Report');\n logIssues(report.issues);\n logHotPaths(report.hotPaths);\n if (verbose) {\n logVerboseStats(report);\n }\n console.groupEnd();\n}\n\nfunction logIssues(issues: GuardrailIssue[]): void {\n if (issues.length === 0) return;\n console.warn(`${issues.length} issues detected:`);\n for (const issue of issues) {\n const prefix = getSeverityPrefix(issue.severity);\n const countSuffix = issue.count > 1 ? ` (x${issue.count})` : '';\n const message = `${prefix} [${issue.type}] ${issue.message}${countSuffix}`;\n console.log(` ${message}`);\n }\n}\n\nfunction logHotPaths(hotPaths: HotPath[]): void {\n if (hotPaths.length === 0) return;\n console.log(`\\nHot Paths (${hotPaths.length}):`);\n for (const hp of hotPaths) {\n const entry = ` đŸ”Ĩ ${hp.path}: ${hp.updatesPerSecond.toFixed(\n 1\n )}/s (heat: ${hp.heatScore.toFixed(0)})`;\n console.log(entry);\n }\n}\n\nfunction logVerboseStats(report: GuardrailsReport): void {\n console.log('\\nStats:', report.stats);\n console.log('Budgets:', report.budgets);\n}\n\nfunction getSeverityPrefix(severity: GuardrailIssue['severity']): string {\n if (severity === 'error') return '❌';\n if (severity === 'warning') return 'âš ī¸';\n return 'â„šī¸';\n}\n\nfunction generateReport<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): GuardrailsReport {\n const memoryCurrent = context.stats.signalCount;\n const memoryLimit = context.config.budgets?.maxMemory ?? 50;\n const recomputationCurrent = context.stats.recomputationsPerSecond;\n const recomputationLimit = context.config.budgets?.maxRecomputations ?? 100;\n\n const budgets: BudgetStatus = {\n updateTime: createBudgetItem(\n context.stats.avgUpdateTime,\n context.config.budgets?.maxUpdateTime || 16\n ),\n memory: createBudgetItem(memoryCurrent, memoryLimit),\n recomputations: createBudgetItem(recomputationCurrent, recomputationLimit),\n };\n\n return {\n timestamp: Date.now(),\n treeId: context.config.treeId,\n issues: Array.from(context.issueMap.values()),\n hotPaths: context.hotPaths,\n budgets,\n stats: context.stats,\n recommendations: generateRecommendations(context),\n };\n}\n\nfunction createBudgetItem(current: number, limit: number): BudgetItem {\n if (limit <= 0) {\n return {\n current,\n limit,\n usage: 0,\n status: 'ok',\n };\n }\n\n const usage = (current / limit) * 100;\n const threshold = 80;\n let status: BudgetItem['status'];\n if (usage > 100) {\n status = 'exceeded';\n } else if (usage > threshold) {\n status = 'warning';\n } else {\n status = 'ok';\n }\n return {\n current,\n limit,\n usage,\n status,\n };\n}\n\nfunction generateRecommendations<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): string[] {\n const recommendations: string[] = [];\n\n if (context.hotPaths.length > 0) {\n recommendations.push(\n 'Consider batching or debouncing updates to hot paths'\n );\n }\n\n if (context.stats.avgUpdateTime > 10) {\n recommendations.push('Average update time is high - review update logic');\n }\n\n return recommendations;\n}\n\nfunction createAPI<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n teardown: () => void\n): GuardrailsAPI {\n return {\n getReport: () => generateReport(context),\n getStats: () => context.stats,\n suppress: (fn: () => void) => {\n const was = context.suppressed;\n context.suppressed = true;\n try {\n fn();\n } finally {\n context.suppressed = was;\n }\n },\n dispose: () => {\n teardown();\n const finalReport = generateReport(context);\n if (context.config.reporting?.console !== false) {\n console.log('[Guardrails] Final report on disposal:', finalReport);\n }\n if (context.config.reporting?.customReporter) {\n context.config.reporting.customReporter(finalReport);\n }\n },\n };\n}\n\nfunction extractMetadata(payload: unknown): UpdateMetadata | undefined {\n if (!isObjectLike(payload)) return undefined;\n const candidate = (payload as Record<string, unknown>)['metadata'];\n return isObjectLike(candidate) ? (candidate as UpdateMetadata) : undefined;\n}\n\nfunction collectUpdateDetails(\n payload: unknown,\n stateSnapshot: unknown\n): UpdateDetail[] {\n const details: UpdateDetail[] = [];\n\n const visit = (value: unknown, segments: string[], currentState: unknown) => {\n const path = segments.length ? segments.join('.') : 'root';\n const oldValue = captureValue(currentState);\n\n if (isObjectLike(value)) {\n details.push({\n path,\n segments: [...segments],\n newValue: value,\n oldValue,\n });\n for (const [key, child] of Object.entries(value)) {\n visit(\n child,\n [...segments, key],\n isObjectLike(currentState)\n ? (currentState as Record<string, unknown>)[key]\n : undefined\n );\n }\n return;\n }\n\n details.push({ path, segments: [...segments], newValue: value, oldValue });\n };\n\n if (isObjectLike(payload)) {\n visit(payload, [], stateSnapshot);\n } else {\n details.push({\n path: 'root',\n segments: [],\n newValue: payload,\n oldValue: captureValue(stateSnapshot),\n });\n }\n\n if (details.length === 0) {\n details.push({\n path: 'root',\n segments: [],\n newValue: payload,\n oldValue: captureValue(stateSnapshot),\n });\n }\n\n return details;\n}\n\nfunction getValueAtPath(source: unknown, segments: string[]): unknown {\n let current = source;\n for (const segment of segments) {\n if (!isObjectLike(current)) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nfunction captureValue<T>(value: T): T {\n return tryStructuredClone(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object') return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction updateTimingStats<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n duration: number\n): void {\n context.timings.push(duration);\n if (context.timings.length > MAX_TIMING_SAMPLES) {\n context.timings.shift();\n }\n\n context.stats.updateCount++;\n context.stats.totalUpdateTime += duration;\n context.stats.avgUpdateTime =\n context.stats.totalUpdateTime / context.stats.updateCount;\n context.stats.maxUpdateTime = Math.max(context.stats.maxUpdateTime, duration);\n\n updatePercentiles(context);\n}\n\nfunction isComparableRecord(value: unknown): value is Record<string, unknown> {\n return isPlainObject(value);\n}\n","/**\n * Prebuilt Guardrail Rules\n * @packageDocumentation\n */\n\nimport type { GuardrailRule } from './types';\n\nexport const rules = {\n /**\n * Prevents deep nesting beyond specified depth\n */\n noDeepNesting: (maxDepth = 5): GuardrailRule => ({\n name: 'no-deep-nesting',\n description: `Prevents nesting deeper than ${maxDepth} levels`,\n test: (ctx) => ctx.path.length <= maxDepth,\n message: (ctx) => `Path too deep: ${ctx.path.join('.')} (${ctx.path.length} levels, max: ${maxDepth})`,\n severity: 'warning',\n tags: ['architecture', 'complexity'],\n }),\n \n /**\n * Prevents storing functions in state (breaks serialization)\n */\n noFunctionsInState: (): GuardrailRule => ({\n name: 'no-functions',\n description: 'Functions break serialization',\n test: (ctx) => typeof ctx.value !== 'function',\n message: 'Functions cannot be stored in state (breaks serialization)',\n severity: 'error',\n tags: ['serialization', 'data'],\n }),\n \n /**\n * Prevents cache from being persisted\n */\n noCacheInPersistence: (): GuardrailRule => ({\n name: 'no-cache-persistence',\n description: 'Prevent cache from being persisted',\n test: (ctx) => {\n if (ctx.metadata?.source === 'serialization' && ctx.path.includes('cache')) {\n return false;\n }\n return true;\n },\n message: 'Cache should not be persisted',\n severity: 'warning',\n tags: ['persistence', 'cache'],\n }),\n \n /**\n * Limits payload size\n */\n maxPayloadSize: (maxKB = 100): GuardrailRule => ({\n name: 'max-payload-size',\n description: `Limit payload size to ${maxKB}KB`,\n test: (ctx) => {\n try {\n const size = JSON.stringify(ctx.value).length;\n return size < maxKB * 1024;\n } catch {\n return true; // Can't serialize, let it pass\n }\n },\n message: (ctx) => {\n const size = JSON.stringify(ctx.value).length;\n const kb = (size / 1024).toFixed(1);\n return `Payload size ${kb}KB exceeds limit of ${maxKB}KB`;\n },\n severity: 'warning',\n tags: ['performance', 'data'],\n }),\n \n /**\n * Prevents storing sensitive data\n */\n noSensitiveData: (sensitiveKeys: string[] = ['password', 'token', 'secret', 'apiKey']): GuardrailRule => ({\n name: 'no-sensitive-data',\n description: 'Prevents storing sensitive data',\n test: (ctx) => {\n return !ctx.path.some(segment => \n sensitiveKeys.some(key => \n typeof segment === 'string' && segment.toLowerCase().includes(key.toLowerCase())\n )\n );\n },\n message: (ctx) => `Sensitive data detected in path: ${ctx.path.join('.')}`,\n severity: 'error',\n tags: ['security', 'data'],\n }),\n};\n"]}
package/dist/index.d.cts DELETED
@@ -1,44 +0,0 @@
1
- import { SignalTree } from '@signaltree/core';
2
- import { G as GuardrailsConfig, a as GuardrailRule } from './types-DfZ9n1yX.cjs';
3
- export { d as BudgetItem, B as BudgetStatus, c as GuardrailIssue, f as GuardrailsAPI, e as GuardrailsReport, H as HotPath, R as RuleContext, b as RuntimeStats, U as UpdateMetadata } from './types-DfZ9n1yX.cjs';
4
-
5
- /**
6
- * SignalTree Guardrails Enhancer v1.1
7
- * Development-only performance monitoring and anti-pattern detection
8
- * @packageDocumentation
9
- */
10
-
11
- /**
12
- * Creates a guardrails enhancer for dev-only monitoring
13
- */
14
- declare function withGuardrails<T extends Record<string, unknown>>(config?: GuardrailsConfig<T>): (tree: SignalTree<T>) => SignalTree<T>;
15
-
16
- /**
17
- * Prebuilt Guardrail Rules
18
- * @packageDocumentation
19
- */
20
-
21
- declare const rules: {
22
- /**
23
- * Prevents deep nesting beyond specified depth
24
- */
25
- noDeepNesting: (maxDepth?: number) => GuardrailRule;
26
- /**
27
- * Prevents storing functions in state (breaks serialization)
28
- */
29
- noFunctionsInState: () => GuardrailRule;
30
- /**
31
- * Prevents cache from being persisted
32
- */
33
- noCacheInPersistence: () => GuardrailRule;
34
- /**
35
- * Limits payload size
36
- */
37
- maxPayloadSize: (maxKB?: number) => GuardrailRule;
38
- /**
39
- * Prevents storing sensitive data
40
- */
41
- noSensitiveData: (sensitiveKeys?: string[]) => GuardrailRule;
42
- };
43
-
44
- export { GuardrailRule, GuardrailsConfig, rules, withGuardrails };
package/dist/index.d.ts DELETED
@@ -1,44 +0,0 @@
1
- import { SignalTree } from '@signaltree/core';
2
- import { G as GuardrailsConfig, a as GuardrailRule } from './types-DfZ9n1yX.js';
3
- export { d as BudgetItem, B as BudgetStatus, c as GuardrailIssue, f as GuardrailsAPI, e as GuardrailsReport, H as HotPath, R as RuleContext, b as RuntimeStats, U as UpdateMetadata } from './types-DfZ9n1yX.js';
4
-
5
- /**
6
- * SignalTree Guardrails Enhancer v1.1
7
- * Development-only performance monitoring and anti-pattern detection
8
- * @packageDocumentation
9
- */
10
-
11
- /**
12
- * Creates a guardrails enhancer for dev-only monitoring
13
- */
14
- declare function withGuardrails<T extends Record<string, unknown>>(config?: GuardrailsConfig<T>): (tree: SignalTree<T>) => SignalTree<T>;
15
-
16
- /**
17
- * Prebuilt Guardrail Rules
18
- * @packageDocumentation
19
- */
20
-
21
- declare const rules: {
22
- /**
23
- * Prevents deep nesting beyond specified depth
24
- */
25
- noDeepNesting: (maxDepth?: number) => GuardrailRule;
26
- /**
27
- * Prevents storing functions in state (breaks serialization)
28
- */
29
- noFunctionsInState: () => GuardrailRule;
30
- /**
31
- * Prevents cache from being persisted
32
- */
33
- noCacheInPersistence: () => GuardrailRule;
34
- /**
35
- * Limits payload size
36
- */
37
- maxPayloadSize: (maxKB?: number) => GuardrailRule;
38
- /**
39
- * Prevents storing sensitive data
40
- */
41
- noSensitiveData: (sensitiveKeys?: string[]) => GuardrailRule;
42
- };
43
-
44
- export { GuardrailRule, GuardrailsConfig, rules, withGuardrails };
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/guardrails.ts","../src/lib/rules.ts"],"names":["isFunction","value","isString","isObjectLike","resolveEnabledFlag","option","undefined","supportsMiddleware","tree","candidate","addTap","removeTap","tryStructuredClone","cloneFn","globalThis","structuredClone","isDevEnvironment","__DEV__","process","env","ngDevMode","Boolean","MAX_TIMING_SAMPLES","RECOMPUTATION_WINDOW_MS","withGuardrails","config","enabled","console","warn","stats","createRuntimeStats","context","issues","hotPaths","currentUpdate","suppressed","timings","hotPathData","Map","issueMap","signalUsage","memoryHistory","recomputationLog","disposed","middlewareId","treeId","Math","random","toString","slice","middleware","createGuardrailsMiddleware","stopMonitoring","startMonitoring","teardown","originalDestroy","destroy","bind","createAPI","updateCount","totalUpdateTime","avgUpdateTime","p50UpdateTime","p95UpdateTime","p99UpdateTime","maxUpdateTime","recomputationCount","recomputationsPerSecond","signalCount","signalRetention","unreadSignalCount","memoryGrowthRate","hotPathCount","violationCount","id","before","action","payload","state","metadata","extractMetadata","shouldSuppressUpdate","details","collectUpdateDetails","startTime","performance","now","detail","analyzePreUpdate","after","_action","_payload","_previousState","newState","pending","duration","max","timestamp","Date","recomputations","length","updateTimingStats","index","entries","latest","getValueAtPath","segments","diffRatio","calculateDiffRatio","oldValue","analyzePostUpdate","trackHotPath","path","trackSignalUsage","updateSignalStats","recordRecomputations","updatePercentiles","sorted","sort","a","b","floor","newValue","isComparableRecord","Object","is","oldKeys","Set","keys","newKeys","allKeys","changed","key","has","size","customRules","rule","evaluateRule","isPrimary","budgets","addIssue","type","severity","message","toFixed","count","minDiff","analysis","minDiffForParentReplace","warnParentReplace","pathKey","Array","isArray","join","windowMs","data","get","lastUpdate","durations","set","push","threshold","updatesPerSecond","p95","avg","reduce","sum","d","updateHotPath","heatScore","min","downstreamEffects","avgDuration","p95Duration","entry","updates","lastSeen","retentionWindow","memoryLeaks","checkInterval","historyWindow","staleCount","values","filter","baseline","growth","i","hotPath","existing","find","h","assign","topN","ruleContext","handleFailure","name","result","test","Promise","then","outcome","catch","error","issue","reporting","aggregateWarnings","mode","Error","suppressGuardrails","suppression","respectMetadata","autoSuppress","intent","source","some","interval","setInterval","clearInterval","checkMemory","maybeReport","retentionThreshold","growthThreshold","growthRate","exceedsRetention","exceedsGrowth","report","generateReport","customReporter","reportToConsole","clear","verbose","group","logIssues","logHotPaths","logVerboseStats","groupEnd","prefix","getSeverityPrefix","countSuffix","log","hp","memoryCurrent","memoryLimit","maxMemory","recomputationCurrent","recomputationLimit","maxRecomputations","updateTime","createBudgetItem","memory","from","recommendations","generateRecommendations","current","limit","usage","status","getReport","getStats","suppress","fn","was","dispose","finalReport","stateSnapshot","visit","currentState","captureValue","child","segment","isPlainObject","proto","getPrototypeOf","prototype","shift","rules","noDeepNesting","maxDepth","description","ctx","tags","noFunctionsInState","noCacheInPersistence","includes","maxPayloadSize","maxKB","JSON","stringify","kb","noSensitiveData","sensitiveKeys","toLowerCase"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SignalTree Guardrails Enhancer v1.1\n * Development-only performance monitoring and anti-pattern detection\n * @packageDocumentation\n */\n\nimport type { Middleware, SignalTree } from '@signaltree/core';\n\nimport type {\n GuardrailsConfig,\n GuardrailsAPI,\n GuardrailsReport,\n RuntimeStats,\n GuardrailIssue,\n HotPath,\n UpdateMetadata,\n RuleContext,\n BudgetStatus,\n BudgetItem,\n GuardrailRule,\n} from './types';\n\n// Dev environment detection\ndeclare const __DEV__: boolean | undefined;\ndeclare const ngDevMode: boolean | undefined;\ndeclare const process:\n | {\n env?: Record<string, string | undefined>;\n }\n | undefined;\n\ntype EnabledOption = boolean | (() => boolean);\n\ntype MiddlewareCapableTree<T extends Record<string, unknown>> =\n SignalTree<T> & {\n addTap: (middleware: Middleware<T>) => void;\n removeTap: (id: string) => void;\n };\n\nfunction isFunction<T extends (...args: never[]) => unknown>(\n value: unknown\n): value is T {\n return typeof value === 'function';\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction resolveEnabledFlag(option?: EnabledOption): boolean {\n if (option === undefined) {\n return true;\n }\n if (isFunction<() => boolean>(option)) {\n try {\n return option();\n } catch {\n return true;\n }\n }\n return option;\n}\n\nfunction supportsMiddleware<T extends Record<string, unknown>>(\n tree: SignalTree<T>\n): tree is MiddlewareCapableTree<T> {\n const candidate = tree as Partial<MiddlewareCapableTree<T>>;\n return isFunction(candidate.addTap) && isFunction(candidate.removeTap);\n}\n\nfunction tryStructuredClone<T>(value: T): T {\n const cloneFn = (\n globalThis as typeof globalThis & {\n structuredClone?: <U>(input: U) => U;\n }\n ).structuredClone;\n\n if (isFunction(cloneFn)) {\n try {\n return cloneFn(value);\n } catch {\n // Fall through to return original value.\n }\n }\n\n return value;\n}\n\nfunction isDevEnvironment(): boolean {\n if (__DEV__ !== undefined) return __DEV__;\n if (process?.env?.['NODE_ENV'] === 'production') return false;\n if (ngDevMode != null) return Boolean(ngDevMode);\n return true;\n}\n\ninterface UpdateDetail {\n path: string;\n segments: string[];\n newValue: unknown;\n oldValue: unknown;\n}\n\ninterface PendingUpdate {\n action: string;\n startTime: number;\n metadata?: UpdateMetadata;\n details: UpdateDetail[];\n}\n\ninterface GuardrailsContext<\n T extends Record<string, unknown> = Record<string, unknown>\n> {\n tree: SignalTree<T>;\n config: GuardrailsConfig<T>;\n stats: RuntimeStats;\n issues: GuardrailIssue[];\n hotPaths: HotPath[];\n currentUpdate: PendingUpdate | null;\n suppressed: boolean;\n timings: number[];\n hotPathData: Map<\n string,\n { count: number; lastUpdate: number; durations: number[] }\n >;\n issueMap: Map<string, GuardrailIssue>;\n signalUsage: Map<string, { updates: number; lastSeen: number }>;\n memoryHistory: Array<{ timestamp: number; count: number }>;\n recomputationLog: number[];\n middlewareId?: string;\n disposed: boolean;\n}\n\nconst MAX_TIMING_SAMPLES = 1000;\nconst RECOMPUTATION_WINDOW_MS = 1000;\n\n/**\n * Creates a guardrails enhancer for dev-only monitoring\n */\nexport function withGuardrails<T extends Record<string, unknown>>(\n config: GuardrailsConfig<T> = {}\n): (tree: SignalTree<T>) => SignalTree<T> {\n return (tree: SignalTree<T>) => {\n const enabled = resolveEnabledFlag(config.enabled);\n\n if (!isDevEnvironment() || !enabled) {\n return tree;\n }\n\n if (!supportsMiddleware(tree)) {\n console.warn(\n '[Guardrails] Tree does not expose middleware hooks; guardrails disabled.'\n );\n return tree;\n }\n\n const stats = createRuntimeStats();\n const context: GuardrailsContext<T> = {\n tree,\n config,\n stats,\n issues: [],\n hotPaths: [],\n currentUpdate: null,\n suppressed: false,\n timings: [],\n hotPathData: new Map(),\n issueMap: new Map(),\n signalUsage: new Map(),\n memoryHistory: [],\n recomputationLog: [],\n disposed: false,\n };\n\n const middlewareId = `guardrails:${config.treeId ?? 'tree'}:${Math.random()\n .toString(36)\n .slice(2)}`;\n context.middlewareId = middlewareId;\n\n const middleware = createGuardrailsMiddleware(context);\n tree.addTap(middleware);\n\n const stopMonitoring = startMonitoring(context);\n\n const teardown = () => {\n if (context.disposed) return;\n context.disposed = true;\n stopMonitoring();\n try {\n tree.removeTap(middlewareId);\n } catch {\n // ignore if removal fails\n }\n };\n\n const originalDestroy = tree.destroy?.bind(tree);\n tree.destroy = () => {\n teardown();\n if (originalDestroy) {\n originalDestroy();\n }\n };\n\n (tree as unknown as Record<string, unknown>)['__guardrails'] = createAPI(\n context,\n teardown\n );\n\n return tree;\n };\n}\n\nfunction createRuntimeStats(): RuntimeStats {\n return {\n updateCount: 0,\n totalUpdateTime: 0,\n avgUpdateTime: 0,\n p50UpdateTime: 0,\n p95UpdateTime: 0,\n p99UpdateTime: 0,\n maxUpdateTime: 0,\n recomputationCount: 0,\n recomputationsPerSecond: 0,\n signalCount: 0,\n signalRetention: 0,\n unreadSignalCount: 0,\n memoryGrowthRate: 0,\n hotPathCount: 0,\n violationCount: 0,\n };\n}\n\nfunction createGuardrailsMiddleware<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): Middleware<T> {\n return {\n id: context.middlewareId ?? 'guardrails',\n before: (action: string, payload: unknown, state: T): boolean => {\n if (context.suppressed) {\n context.currentUpdate = null;\n return !context.disposed;\n }\n\n const metadata = extractMetadata(payload);\n if (shouldSuppressUpdate(context, metadata)) {\n context.currentUpdate = null;\n return !context.disposed;\n }\n\n const details = collectUpdateDetails(payload, state);\n context.currentUpdate = {\n action,\n startTime: performance.now(),\n metadata,\n details,\n };\n\n for (const detail of details) {\n analyzePreUpdate(context, detail, metadata);\n }\n\n return !context.disposed;\n },\n after: (\n _action: string,\n _payload: unknown,\n _previousState: T,\n newState: T\n ): void => {\n const pending = context.currentUpdate;\n if (!pending) return;\n\n const duration = Math.max(0, performance.now() - pending.startTime);\n const timestamp = Date.now();\n const recomputations = Math.max(0, pending.details.length - 1);\n updateTimingStats(context, duration);\n\n for (const [index, detail] of pending.details.entries()) {\n const latest = getValueAtPath(newState, detail.segments);\n const diffRatio = calculateDiffRatio(detail.oldValue, latest);\n analyzePostUpdate(context, detail, duration, diffRatio, index === 0);\n trackHotPath(context, detail.path, duration);\n trackSignalUsage(context, detail.path, timestamp);\n }\n\n updateSignalStats(context, timestamp);\n recordRecomputations(context, recomputations, timestamp);\n\n context.currentUpdate = null;\n },\n };\n}\n\nfunction updatePercentiles<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (context.timings.length === 0) return;\n\n const sorted = [...context.timings].sort((a, b) => a - b);\n context.stats.p50UpdateTime = sorted[Math.floor(sorted.length * 0.5)] || 0;\n context.stats.p95UpdateTime = sorted[Math.floor(sorted.length * 0.95)] || 0;\n context.stats.p99UpdateTime = sorted[Math.floor(sorted.length * 0.99)] || 0;\n}\n\nfunction calculateDiffRatio(oldValue: unknown, newValue: unknown): number {\n if (!isComparableRecord(oldValue) || !isComparableRecord(newValue)) {\n return Object.is(oldValue, newValue) ? 0 : 1;\n }\n if (oldValue === newValue) return 0;\n\n const oldKeys = new Set(Object.keys(oldValue));\n const newKeys = new Set(Object.keys(newValue));\n const allKeys = new Set([...oldKeys, ...newKeys]);\n\n let changed = 0;\n for (const key of allKeys) {\n if (\n !oldKeys.has(key) ||\n !newKeys.has(key) ||\n oldValue[key] !== newValue[key]\n ) {\n changed++;\n }\n }\n\n return allKeys.size === 0 ? 0 : changed / allKeys.size;\n}\n\nfunction analyzePreUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n detail: UpdateDetail,\n metadata?: UpdateMetadata\n): void {\n if (!context.config.customRules) return;\n\n for (const rule of context.config.customRules) {\n evaluateRule(context, rule, {\n path: detail.segments,\n value: detail.newValue,\n oldValue: detail.oldValue,\n metadata,\n tree: context.tree,\n stats: context.stats,\n });\n }\n}\n\nfunction analyzePostUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n detail: UpdateDetail,\n duration: number,\n diffRatio: number,\n isPrimary: boolean\n): void {\n if (\n isPrimary &&\n context.config.budgets?.maxUpdateTime &&\n duration > context.config.budgets.maxUpdateTime\n ) {\n addIssue(context, {\n type: 'budget',\n severity: 'error',\n message: `Update took ${duration.toFixed(2)}ms (budget: ${\n context.config.budgets.maxUpdateTime\n }ms)`,\n path: detail.path,\n count: 1,\n });\n }\n\n const minDiff = context.config.analysis?.minDiffForParentReplace ?? 0.8;\n if (context.config.analysis?.warnParentReplace && diffRatio > minDiff) {\n addIssue(context, {\n type: 'analysis',\n severity: 'warning',\n message: `High diff ratio (${(diffRatio * 100).toFixed(\n 0\n )}%) - consider scoped updates`,\n path: detail.path,\n count: 1,\n diffRatio,\n });\n }\n}\n\nfunction trackHotPath<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n path: string,\n duration: number\n): void {\n if (!context.config.hotPaths?.enabled) return;\n\n const pathKey = Array.isArray(path) ? path.join('.') : path;\n const now = Date.now();\n const windowMs = context.config.hotPaths.windowMs || 1000;\n\n let data = context.hotPathData.get(pathKey);\n if (!data) {\n data = { count: 0, lastUpdate: now, durations: [] };\n context.hotPathData.set(pathKey, data);\n }\n\n // Reset if outside window\n if (now - data.lastUpdate > windowMs) {\n data.count = 0;\n data.durations = [];\n }\n\n data.count++;\n data.durations.push(duration);\n data.lastUpdate = now;\n\n // Check threshold\n const threshold = context.config.hotPaths.threshold || 10;\n const updatesPerSecond = (data.count / windowMs) * 1000;\n\n if (updatesPerSecond > threshold) {\n const sorted = [...data.durations].sort((a, b) => a - b);\n const p95 = sorted[Math.floor(sorted.length * 0.95)] || 0;\n const avg =\n data.durations.reduce((sum, d) => sum + d, 0) / data.durations.length;\n\n updateHotPath(context, {\n path: pathKey,\n updatesPerSecond,\n heatScore: Math.min(100, (updatesPerSecond / threshold) * 50),\n downstreamEffects: 0, // Would need dev hooks\n avgDuration: avg,\n p95Duration: p95,\n });\n }\n}\n\nfunction trackSignalUsage<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n path: string,\n timestamp: number\n): void {\n const key = Array.isArray(path) ? path.join('.') : path;\n const entry = context.signalUsage.get(key) ?? {\n updates: 0,\n lastSeen: timestamp,\n };\n entry.updates += 1;\n entry.lastSeen = timestamp;\n context.signalUsage.set(key, entry);\n}\n\nfunction updateSignalStats<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n timestamp: number\n): void {\n const retentionWindow = context.config.memoryLeaks?.checkInterval ?? 5000;\n const historyWindow = Math.max(retentionWindow, 1000);\n\n const signalCount = context.signalUsage.size;\n context.stats.signalCount = signalCount;\n\n const staleCount = [...context.signalUsage.values()].filter(\n (entry) => timestamp - entry.lastSeen > retentionWindow\n ).length;\n context.stats.signalRetention = staleCount;\n context.stats.unreadSignalCount = 0;\n\n context.memoryHistory.push({ timestamp, count: signalCount });\n context.memoryHistory = context.memoryHistory.filter(\n (entry) => timestamp - entry.timestamp <= historyWindow\n );\n\n const baseline = context.memoryHistory[0]?.count ?? signalCount;\n const growth =\n baseline === 0 ? 0 : (signalCount - baseline) / Math.max(1, baseline);\n context.stats.memoryGrowthRate = growth;\n}\n\nfunction recordRecomputations<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n count: number,\n timestamp: number\n): void {\n if (count > 0) {\n context.stats.recomputationCount += count;\n for (let i = 0; i < count; i++) {\n context.recomputationLog.push(timestamp);\n }\n }\n\n if (context.recomputationLog.length) {\n context.recomputationLog = context.recomputationLog.filter(\n (value) => timestamp - value <= RECOMPUTATION_WINDOW_MS\n );\n }\n\n context.stats.recomputationsPerSecond = context.recomputationLog.length;\n}\n\nfunction updateHotPath<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n hotPath: HotPath\n): void {\n const existing = context.hotPaths.find((h) => h.path === hotPath.path);\n if (existing) {\n Object.assign(existing, hotPath);\n } else {\n context.hotPaths.push(hotPath);\n const topN = context.config.hotPaths?.topN || 5;\n if (context.hotPaths.length > topN) {\n context.hotPaths.sort((a, b) => b.heatScore - a.heatScore);\n context.hotPaths.length = topN;\n }\n }\n context.stats.hotPathCount = context.hotPaths.length;\n}\n\nfunction evaluateRule<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n rule: GuardrailRule<T>,\n ruleContext: RuleContext<T>\n): void {\n const handleFailure = () => {\n const message =\n typeof rule.message === 'function'\n ? rule.message(ruleContext)\n : rule.message;\n\n addIssue(context, {\n type: 'rule',\n severity: rule.severity || 'warning',\n message,\n path: ruleContext.path.join('.'),\n count: 1,\n metadata: { rule: rule.name },\n });\n };\n\n try {\n const result = rule.test(ruleContext);\n if (result instanceof Promise) {\n result\n .then((outcome) => {\n if (!outcome) {\n handleFailure();\n }\n })\n .catch((error) => {\n console.warn(`[Guardrails] Rule ${rule.name} rejected:`, error);\n });\n return;\n }\n\n if (!result) {\n handleFailure();\n }\n } catch (error) {\n // Rule threw, log but don't halt\n console.warn(`[Guardrails] Rule ${rule.name} threw error:`, error);\n }\n}\n\nfunction addIssue<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n issue: GuardrailIssue\n): void {\n if (context.suppressed) return;\n\n // Aggregate similar issues\n if (context.config.reporting?.aggregateWarnings !== false) {\n const key = `${issue.type}:${issue.path}:${issue.message}`;\n const existing = context.issueMap.get(key);\n if (existing) {\n existing.count++;\n return;\n }\n context.issueMap.set(key, issue);\n }\n\n context.issues.push(issue);\n context.stats.violationCount++;\n\n // Throw mode\n if (context.config.mode === 'throw') {\n throw new Error(`[Guardrails] ${issue.message}`);\n }\n}\n\nfunction shouldSuppressUpdate<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n metadata?: UpdateMetadata\n): boolean {\n if (context.suppressed) return true;\n if (!metadata) return false;\n\n if (\n metadata.suppressGuardrails &&\n context.config.suppression?.respectMetadata !== false\n ) {\n return true;\n }\n\n const autoSuppress = new Set<string>(\n context.config.suppression?.autoSuppress ?? []\n );\n\n return [metadata.intent, metadata.source].some(\n (value) => isString(value) && autoSuppress.has(value)\n );\n}\n\nfunction startMonitoring<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): () => void {\n const interval = setInterval(() => {\n if (context.disposed) {\n clearInterval(interval);\n return;\n }\n checkMemory(context);\n maybeReport(context);\n }, context.config.reporting?.interval || 5000);\n\n return () => clearInterval(interval);\n}\n\nfunction checkMemory<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (!context.config.memoryLeaks?.enabled) return;\n\n const now = Date.now();\n const retentionWindow = context.config.memoryLeaks?.checkInterval ?? 5000;\n const retentionThreshold =\n context.config.memoryLeaks?.retentionThreshold ?? 100;\n const growthThreshold = context.config.memoryLeaks?.growthRate ?? 0.2;\n\n const staleCount = [...context.signalUsage.values()].filter(\n (entry) => now - entry.lastSeen > retentionWindow\n ).length;\n context.stats.signalRetention = staleCount;\n\n const exceedsRetention = context.stats.signalRetention > retentionThreshold;\n const exceedsGrowth = context.stats.memoryGrowthRate > growthThreshold;\n\n if (exceedsRetention || exceedsGrowth) {\n addIssue(context, {\n type: 'memory',\n severity: 'warning',\n message: `Potential memory leak detected (signals: ${\n context.stats.signalCount\n }, growth ${(context.stats.memoryGrowthRate * 100).toFixed(1)}%)`,\n path: 'root',\n count: 1,\n metadata: {\n signalCount: context.stats.signalCount,\n growth: context.stats.memoryGrowthRate,\n },\n });\n }\n}\n\nfunction maybeReport<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): void {\n if (context.config.reporting?.console === false) return;\n\n const report = generateReport(context);\n\n if (context.config.reporting?.customReporter) {\n context.config.reporting.customReporter(report);\n }\n\n if (context.config.reporting?.console && context.issues.length > 0) {\n reportToConsole(report, context.config.reporting.console === 'verbose');\n }\n\n // Clear issues after reporting\n context.issues = [];\n context.issueMap.clear();\n}\n\nfunction reportToConsole(report: GuardrailsReport, verbose: boolean): void {\n console.group('[Guardrails] Performance Report');\n logIssues(report.issues);\n logHotPaths(report.hotPaths);\n if (verbose) {\n logVerboseStats(report);\n }\n console.groupEnd();\n}\n\nfunction logIssues(issues: GuardrailIssue[]): void {\n if (issues.length === 0) return;\n console.warn(`${issues.length} issues detected:`);\n for (const issue of issues) {\n const prefix = getSeverityPrefix(issue.severity);\n const countSuffix = issue.count > 1 ? ` (x${issue.count})` : '';\n const message = `${prefix} [${issue.type}] ${issue.message}${countSuffix}`;\n console.log(` ${message}`);\n }\n}\n\nfunction logHotPaths(hotPaths: HotPath[]): void {\n if (hotPaths.length === 0) return;\n console.log(`\\nHot Paths (${hotPaths.length}):`);\n for (const hp of hotPaths) {\n const entry = ` đŸ”Ĩ ${hp.path}: ${hp.updatesPerSecond.toFixed(\n 1\n )}/s (heat: ${hp.heatScore.toFixed(0)})`;\n console.log(entry);\n }\n}\n\nfunction logVerboseStats(report: GuardrailsReport): void {\n console.log('\\nStats:', report.stats);\n console.log('Budgets:', report.budgets);\n}\n\nfunction getSeverityPrefix(severity: GuardrailIssue['severity']): string {\n if (severity === 'error') return '❌';\n if (severity === 'warning') return 'âš ī¸';\n return 'â„šī¸';\n}\n\nfunction generateReport<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): GuardrailsReport {\n const memoryCurrent = context.stats.signalCount;\n const memoryLimit = context.config.budgets?.maxMemory ?? 50;\n const recomputationCurrent = context.stats.recomputationsPerSecond;\n const recomputationLimit = context.config.budgets?.maxRecomputations ?? 100;\n\n const budgets: BudgetStatus = {\n updateTime: createBudgetItem(\n context.stats.avgUpdateTime,\n context.config.budgets?.maxUpdateTime || 16\n ),\n memory: createBudgetItem(memoryCurrent, memoryLimit),\n recomputations: createBudgetItem(recomputationCurrent, recomputationLimit),\n };\n\n return {\n timestamp: Date.now(),\n treeId: context.config.treeId,\n issues: Array.from(context.issueMap.values()),\n hotPaths: context.hotPaths,\n budgets,\n stats: context.stats,\n recommendations: generateRecommendations(context),\n };\n}\n\nfunction createBudgetItem(current: number, limit: number): BudgetItem {\n if (limit <= 0) {\n return {\n current,\n limit,\n usage: 0,\n status: 'ok',\n };\n }\n\n const usage = (current / limit) * 100;\n const threshold = 80;\n let status: BudgetItem['status'];\n if (usage > 100) {\n status = 'exceeded';\n } else if (usage > threshold) {\n status = 'warning';\n } else {\n status = 'ok';\n }\n return {\n current,\n limit,\n usage,\n status,\n };\n}\n\nfunction generateRecommendations<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>\n): string[] {\n const recommendations: string[] = [];\n\n if (context.hotPaths.length > 0) {\n recommendations.push(\n 'Consider batching or debouncing updates to hot paths'\n );\n }\n\n if (context.stats.avgUpdateTime > 10) {\n recommendations.push('Average update time is high - review update logic');\n }\n\n return recommendations;\n}\n\nfunction createAPI<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n teardown: () => void\n): GuardrailsAPI {\n return {\n getReport: () => generateReport(context),\n getStats: () => context.stats,\n suppress: (fn: () => void) => {\n const was = context.suppressed;\n context.suppressed = true;\n try {\n fn();\n } finally {\n context.suppressed = was;\n }\n },\n dispose: () => {\n teardown();\n const finalReport = generateReport(context);\n if (context.config.reporting?.console !== false) {\n console.log('[Guardrails] Final report on disposal:', finalReport);\n }\n if (context.config.reporting?.customReporter) {\n context.config.reporting.customReporter(finalReport);\n }\n },\n };\n}\n\nfunction extractMetadata(payload: unknown): UpdateMetadata | undefined {\n if (!isObjectLike(payload)) return undefined;\n const candidate = (payload as Record<string, unknown>)['metadata'];\n return isObjectLike(candidate) ? (candidate as UpdateMetadata) : undefined;\n}\n\nfunction collectUpdateDetails(\n payload: unknown,\n stateSnapshot: unknown\n): UpdateDetail[] {\n const details: UpdateDetail[] = [];\n\n const visit = (value: unknown, segments: string[], currentState: unknown) => {\n const path = segments.length ? segments.join('.') : 'root';\n const oldValue = captureValue(currentState);\n\n if (isObjectLike(value)) {\n details.push({\n path,\n segments: [...segments],\n newValue: value,\n oldValue,\n });\n for (const [key, child] of Object.entries(value)) {\n visit(\n child,\n [...segments, key],\n isObjectLike(currentState)\n ? (currentState as Record<string, unknown>)[key]\n : undefined\n );\n }\n return;\n }\n\n details.push({ path, segments: [...segments], newValue: value, oldValue });\n };\n\n if (isObjectLike(payload)) {\n visit(payload, [], stateSnapshot);\n } else {\n details.push({\n path: 'root',\n segments: [],\n newValue: payload,\n oldValue: captureValue(stateSnapshot),\n });\n }\n\n if (details.length === 0) {\n details.push({\n path: 'root',\n segments: [],\n newValue: payload,\n oldValue: captureValue(stateSnapshot),\n });\n }\n\n return details;\n}\n\nfunction getValueAtPath(source: unknown, segments: string[]): unknown {\n let current = source;\n for (const segment of segments) {\n if (!isObjectLike(current)) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nfunction captureValue<T>(value: T): T {\n return tryStructuredClone(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object') return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction updateTimingStats<T extends Record<string, unknown>>(\n context: GuardrailsContext<T>,\n duration: number\n): void {\n context.timings.push(duration);\n if (context.timings.length > MAX_TIMING_SAMPLES) {\n context.timings.shift();\n }\n\n context.stats.updateCount++;\n context.stats.totalUpdateTime += duration;\n context.stats.avgUpdateTime =\n context.stats.totalUpdateTime / context.stats.updateCount;\n context.stats.maxUpdateTime = Math.max(context.stats.maxUpdateTime, duration);\n\n updatePercentiles(context);\n}\n\nfunction isComparableRecord(value: unknown): value is Record<string, unknown> {\n return isPlainObject(value);\n}\n","/**\n * Prebuilt Guardrail Rules\n * @packageDocumentation\n */\n\nimport type { GuardrailRule } from './types';\n\nexport const rules = {\n /**\n * Prevents deep nesting beyond specified depth\n */\n noDeepNesting: (maxDepth = 5): GuardrailRule => ({\n name: 'no-deep-nesting',\n description: `Prevents nesting deeper than ${maxDepth} levels`,\n test: (ctx) => ctx.path.length <= maxDepth,\n message: (ctx) => `Path too deep: ${ctx.path.join('.')} (${ctx.path.length} levels, max: ${maxDepth})`,\n severity: 'warning',\n tags: ['architecture', 'complexity'],\n }),\n \n /**\n * Prevents storing functions in state (breaks serialization)\n */\n noFunctionsInState: (): GuardrailRule => ({\n name: 'no-functions',\n description: 'Functions break serialization',\n test: (ctx) => typeof ctx.value !== 'function',\n message: 'Functions cannot be stored in state (breaks serialization)',\n severity: 'error',\n tags: ['serialization', 'data'],\n }),\n \n /**\n * Prevents cache from being persisted\n */\n noCacheInPersistence: (): GuardrailRule => ({\n name: 'no-cache-persistence',\n description: 'Prevent cache from being persisted',\n test: (ctx) => {\n if (ctx.metadata?.source === 'serialization' && ctx.path.includes('cache')) {\n return false;\n }\n return true;\n },\n message: 'Cache should not be persisted',\n severity: 'warning',\n tags: ['persistence', 'cache'],\n }),\n \n /**\n * Limits payload size\n */\n maxPayloadSize: (maxKB = 100): GuardrailRule => ({\n name: 'max-payload-size',\n description: `Limit payload size to ${maxKB}KB`,\n test: (ctx) => {\n try {\n const size = JSON.stringify(ctx.value).length;\n return size < maxKB * 1024;\n } catch {\n return true; // Can't serialize, let it pass\n }\n },\n message: (ctx) => {\n const size = JSON.stringify(ctx.value).length;\n const kb = (size / 1024).toFixed(1);\n return `Payload size ${kb}KB exceeds limit of ${maxKB}KB`;\n },\n severity: 'warning',\n tags: ['performance', 'data'],\n }),\n \n /**\n * Prevents storing sensitive data\n */\n noSensitiveData: (sensitiveKeys: string[] = ['password', 'token', 'secret', 'apiKey']): GuardrailRule => ({\n name: 'no-sensitive-data',\n description: 'Prevents storing sensitive data',\n test: (ctx) => {\n return !ctx.path.some(segment => \n sensitiveKeys.some(key => \n typeof segment === 'string' && segment.toLowerCase().includes(key.toLowerCase())\n )\n );\n },\n message: (ctx) => `Sensitive data detected in path: ${ctx.path.join('.')}`,\n severity: 'error',\n tags: ['security', 'data'],\n }),\n};\n"]}
package/dist/noop.cjs DELETED
@@ -1,31 +0,0 @@
1
- 'use strict';
2
-
3
- var __defProp = Object.defineProperty;
4
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
-
6
- // src/noop.ts
7
- var noopRule = /* @__PURE__ */ __name((name) => ({
8
- name,
9
- description: "No-op guardrail",
10
- test: /* @__PURE__ */ __name(() => true, "test"),
11
- message: "",
12
- severity: "info"
13
- }), "noopRule");
14
- function withGuardrails(config) {
15
- return (tree) => {
16
- return tree;
17
- };
18
- }
19
- __name(withGuardrails, "withGuardrails");
20
- var rules = {
21
- noDeepNesting: /* @__PURE__ */ __name(() => noopRule("noop"), "noDeepNesting"),
22
- noFunctionsInState: /* @__PURE__ */ __name(() => noopRule("noop"), "noFunctionsInState"),
23
- noCacheInPersistence: /* @__PURE__ */ __name(() => noopRule("noop"), "noCacheInPersistence"),
24
- maxPayloadSize: /* @__PURE__ */ __name(() => noopRule("noop"), "maxPayloadSize"),
25
- noSensitiveData: /* @__PURE__ */ __name(() => noopRule("noop"), "noSensitiveData")
26
- };
27
-
28
- exports.rules = rules;
29
- exports.withGuardrails = withGuardrails;
30
- //# sourceMappingURL=noop.cjs.map
31
- //# sourceMappingURL=noop.cjs.map
package/dist/noop.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/noop.ts"],"names":["noopRule","name","description","test","message","severity","withGuardrails","config","tree","rules","noDeepNesting","noFunctionsInState","noCacheInPersistence","maxPayloadSize","noSensitiveData"],"mappings":";;;;;;AASA,IAAMA,QAAAA,2BAAYC,IAAAA,MAAiC;AACjDA,EAAAA,IAAAA;EACAC,WAAAA,EAAa,iBAAA;AACbC,EAAAA,IAAAA,+BAAY,IAAA,EAAN,MAAA,CAAA;EACNC,OAAAA,EAAS,EAAA;EACTC,QAAAA,EAAU;AACZ,CAAA,CAAA,EANiB,UAAA,CAAA;AAQV,SAASC,eACdC,MAAAA,EAAyB;AAEzB,EAAA,OAAO,CAACC,IAAAA,KAAAA;AAIN,IAAA,OAAOA,IAAAA;AACT,EAAA,CAAA;AACF;AATgBF,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAWT,IAAMG,KAAAA,GAAQ;EACnBC,aAAAA,kBAAe,MAAA,CAAA,MAAMV,QAAAA,CAAS,MAAA,CAAA,EAAf,eAAA,CAAA;EACfW,kBAAAA,kBAAoB,MAAA,CAAA,MAAMX,QAAAA,CAAS,MAAA,CAAA,EAAf,oBAAA,CAAA;EACpBY,oBAAAA,kBAAsB,MAAA,CAAA,MAAMZ,QAAAA,CAAS,MAAA,CAAA,EAAf,sBAAA,CAAA;EACtBa,cAAAA,kBAAgB,MAAA,CAAA,MAAMb,QAAAA,CAAS,MAAA,CAAA,EAAf,gBAAA,CAAA;EAChBc,eAAAA,kBAAiB,MAAA,CAAA,MAAMd,QAAAA,CAAS,MAAA,CAAA,EAAf,iBAAA;AACnB","file":"noop.cjs","sourcesContent":["/**\n * Production no-op module\n * This module exports empty implementations to ensure zero production cost\n */\n\nimport type { SignalTree } from '@signaltree/core';\n\nimport type { GuardrailsConfig, GuardrailRule } from './lib/types';\n\nconst noopRule = (name: string): GuardrailRule => ({\n name,\n description: 'No-op guardrail',\n test: () => true,\n message: '',\n severity: 'info',\n});\n\nexport function withGuardrails<T extends Record<string, unknown>>(\n config?: GuardrailsConfig\n): (tree: SignalTree<T>) => SignalTree<T> {\n return (tree) => {\n if (config) {\n // Production build ignores guardrail configuration\n }\n return tree;\n };\n}\n\nexport const rules = {\n noDeepNesting: () => noopRule('noop'),\n noFunctionsInState: () => noopRule('noop'),\n noCacheInPersistence: () => noopRule('noop'),\n maxPayloadSize: () => noopRule('noop'),\n noSensitiveData: () => noopRule('noop'),\n};\n\nexport type * from './lib/types';\n"]}
package/dist/noop.d.cts DELETED
@@ -1,19 +0,0 @@
1
- import { SignalTree } from '@signaltree/core';
2
- import { G as GuardrailsConfig, a as GuardrailRule } from './types-DfZ9n1yX.cjs';
3
- export { d as BudgetItem, B as BudgetStatus, c as GuardrailIssue, f as GuardrailsAPI, e as GuardrailsReport, H as HotPath, R as RuleContext, b as RuntimeStats, U as UpdateMetadata } from './types-DfZ9n1yX.cjs';
4
-
5
- /**
6
- * Production no-op module
7
- * This module exports empty implementations to ensure zero production cost
8
- */
9
-
10
- declare function withGuardrails<T extends Record<string, unknown>>(config?: GuardrailsConfig): (tree: SignalTree<T>) => SignalTree<T>;
11
- declare const rules: {
12
- noDeepNesting: () => GuardrailRule<Record<string, unknown>>;
13
- noFunctionsInState: () => GuardrailRule<Record<string, unknown>>;
14
- noCacheInPersistence: () => GuardrailRule<Record<string, unknown>>;
15
- maxPayloadSize: () => GuardrailRule<Record<string, unknown>>;
16
- noSensitiveData: () => GuardrailRule<Record<string, unknown>>;
17
- };
18
-
19
- export { GuardrailRule, GuardrailsConfig, rules, withGuardrails };
package/dist/noop.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/noop.ts"],"names":["noopRule","name","description","test","message","severity","withGuardrails","config","tree","rules","noDeepNesting","noFunctionsInState","noCacheInPersistence","maxPayloadSize","noSensitiveData"],"mappings":";;;;AASA,IAAMA,QAAAA,2BAAYC,IAAAA,MAAiC;AACjDA,EAAAA,IAAAA;EACAC,WAAAA,EAAa,iBAAA;AACbC,EAAAA,IAAAA,+BAAY,IAAA,EAAN,MAAA,CAAA;EACNC,OAAAA,EAAS,EAAA;EACTC,QAAAA,EAAU;AACZ,CAAA,CAAA,EANiB,UAAA,CAAA;AAQV,SAASC,eACdC,MAAAA,EAAyB;AAEzB,EAAA,OAAO,CAACC,IAAAA,KAAAA;AAIN,IAAA,OAAOA,IAAAA;AACT,EAAA,CAAA;AACF;AATgBF,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAWT,IAAMG,KAAAA,GAAQ;EACnBC,aAAAA,kBAAe,MAAA,CAAA,MAAMV,QAAAA,CAAS,MAAA,CAAA,EAAf,eAAA,CAAA;EACfW,kBAAAA,kBAAoB,MAAA,CAAA,MAAMX,QAAAA,CAAS,MAAA,CAAA,EAAf,oBAAA,CAAA;EACpBY,oBAAAA,kBAAsB,MAAA,CAAA,MAAMZ,QAAAA,CAAS,MAAA,CAAA,EAAf,sBAAA,CAAA;EACtBa,cAAAA,kBAAgB,MAAA,CAAA,MAAMb,QAAAA,CAAS,MAAA,CAAA,EAAf,gBAAA,CAAA;EAChBc,eAAAA,kBAAiB,MAAA,CAAA,MAAMd,QAAAA,CAAS,MAAA,CAAA,EAAf,iBAAA;AACnB","file":"noop.js","sourcesContent":["/**\n * Production no-op module\n * This module exports empty implementations to ensure zero production cost\n */\n\nimport type { SignalTree } from '@signaltree/core';\n\nimport type { GuardrailsConfig, GuardrailRule } from './lib/types';\n\nconst noopRule = (name: string): GuardrailRule => ({\n name,\n description: 'No-op guardrail',\n test: () => true,\n message: '',\n severity: 'info',\n});\n\nexport function withGuardrails<T extends Record<string, unknown>>(\n config?: GuardrailsConfig\n): (tree: SignalTree<T>) => SignalTree<T> {\n return (tree) => {\n if (config) {\n // Production build ignores guardrail configuration\n }\n return tree;\n };\n}\n\nexport const rules = {\n noDeepNesting: () => noopRule('noop'),\n noFunctionsInState: () => noopRule('noop'),\n noCacheInPersistence: () => noopRule('noop'),\n maxPayloadSize: () => noopRule('noop'),\n noSensitiveData: () => noopRule('noop'),\n};\n\nexport type * from './lib/types';\n"]}