@snapback/cli 1.1.14 → 1.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 (45) hide show
  1. package/dist/SkippedTestDetector-5WJZKZQ3.js +5 -0
  2. package/dist/{SkippedTestDetector-B3JZUE5G.js.map → SkippedTestDetector-5WJZKZQ3.js.map} +1 -1
  3. package/dist/{analysis-C6XVLBAL.js → analysis-YI4UNUCM.js} +6 -6
  4. package/dist/{analysis-C6XVLBAL.js.map → analysis-YI4UNUCM.js.map} +1 -1
  5. package/dist/{chunk-Q5XZ3DCB.js → chunk-7JX6Y4TL.js} +135 -15
  6. package/dist/chunk-7JX6Y4TL.js.map +1 -0
  7. package/dist/{chunk-OJNDAPC2.js → chunk-ARVV3F4K.js} +5 -5
  8. package/dist/{chunk-OJNDAPC2.js.map → chunk-ARVV3F4K.js.map} +1 -1
  9. package/dist/{chunk-A3TUM7U4.js → chunk-EU2IZPOK.js} +4 -4
  10. package/dist/{chunk-A3TUM7U4.js.map → chunk-EU2IZPOK.js.map} +1 -1
  11. package/dist/{chunk-QAKFE3NE.js → chunk-FVIYXFCL.js} +4 -4
  12. package/dist/{chunk-QAKFE3NE.js.map → chunk-FVIYXFCL.js.map} +1 -1
  13. package/dist/{chunk-2TOJVUVJ.js → chunk-R7CUQ7CU.js} +4 -4
  14. package/dist/{chunk-2TOJVUVJ.js.map → chunk-R7CUQ7CU.js.map} +1 -1
  15. package/dist/{chunk-BW7RALUZ.js → chunk-RB7H4UQJ.js} +3 -3
  16. package/dist/{chunk-BW7RALUZ.js.map → chunk-RB7H4UQJ.js.map} +1 -1
  17. package/dist/{chunk-5EQLSU5B.js → chunk-SOABQWAU.js} +5 -5
  18. package/dist/{chunk-5EQLSU5B.js.map → chunk-SOABQWAU.js.map} +1 -1
  19. package/dist/{dist-RPM72FHJ.js → dist-O6EBXLN6.js} +5 -5
  20. package/dist/{dist-D2SHOZMS.js.map → dist-O6EBXLN6.js.map} +1 -1
  21. package/dist/{dist-L76VXYJ5.js → dist-PJVBBZTF.js} +5 -5
  22. package/dist/{dist-L76VXYJ5.js.map → dist-PJVBBZTF.js.map} +1 -1
  23. package/dist/index.js +7737 -7966
  24. package/dist/index.js.map +1 -1
  25. package/dist/learning-pruner-QC4CTJDX.js +5 -0
  26. package/dist/{learning-pruner-YSZSOOOC.js.map → learning-pruner-QC4CTJDX.js.map} +1 -1
  27. package/dist/{secure-credentials-A4QHHOE2.js → secure-credentials-IWQB6KU4.js} +4 -4
  28. package/dist/{secure-credentials-A4QHHOE2.js.map → secure-credentials-IWQB6KU4.js.map} +1 -1
  29. package/dist/snapback-dir-V6MWXIW4.js +5 -0
  30. package/dist/{snapback-dir-6QUSO6Y3.js.map → snapback-dir-V6MWXIW4.js.map} +1 -1
  31. package/package.json +6 -40
  32. package/dist/SkippedTestDetector-B3JZUE5G.js +0 -5
  33. package/dist/chunk-6MR2TINI.js +0 -27
  34. package/dist/chunk-6MR2TINI.js.map +0 -1
  35. package/dist/chunk-LEXNOXPV.js +0 -21621
  36. package/dist/chunk-LEXNOXPV.js.map +0 -1
  37. package/dist/chunk-Q5XZ3DCB.js.map +0 -1
  38. package/dist/chunk-QLCHTUT5.js +0 -1067
  39. package/dist/chunk-QLCHTUT5.js.map +0 -1
  40. package/dist/dist-D2SHOZMS.js +0 -8
  41. package/dist/dist-RPM72FHJ.js.map +0 -1
  42. package/dist/learning-pruner-YSZSOOOC.js +0 -7
  43. package/dist/snapback-dir-6QUSO6Y3.js +0 -6
  44. package/dist/storage-H366UNAR.js +0 -6
  45. package/dist/storage-H366UNAR.js.map +0 -1
@@ -1,5 +1,5 @@
1
- #!/usr/bin/env node
2
- import { __name } from './chunk-BW7RALUZ.js';
1
+ #!/usr/bin/env node --no-warnings=ExperimentalWarning
2
+ import { __name } from './chunk-RB7H4UQJ.js';
3
3
  import { parse } from '@babel/parser';
4
4
 
5
5
  function detectSkippedTests(code, filePath) {
@@ -105,5 +105,5 @@ function getSkippedTestSummary(results) {
105
105
  __name(getSkippedTestSummary, "getSkippedTestSummary");
106
106
 
107
107
  export { analyzeSkippedTests, detectSkippedTests, getSkippedTestSummary };
108
- //# sourceMappingURL=chunk-QAKFE3NE.js.map
109
- //# sourceMappingURL=chunk-QAKFE3NE.js.map
108
+ //# sourceMappingURL=chunk-FVIYXFCL.js.map
109
+ //# sourceMappingURL=chunk-FVIYXFCL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/dist/analysis/static/SkippedTestDetector.js"],"names":["detectSkippedTests","code","filePath","skipped","visit","node","type","callee","property","name","object","testType","arguments","length","firstArg","value","quasis","raw","push","line","loc","start","column","file","key","Object","keys","Array","isArray","item","ast","parse","sourceType","plugins","errorRecovery","program","parsed","error","Error","message","String","analyzeSkippedTests","files","results","content","includes","getSkippedTestSummary","summary","totalSkipped","byType","describe","it","test","filesWithSkipped","result"],"mappings":"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","file":"chunk-QAKFE3NE.js","sourcesContent":["/**\n * Skipped Test Detector\n *\n * Uses @babel/parser to detect skipped tests (describe.skip, it.skip, test.skip)\n * in test files. This helps AI agents identify RED PHASE TDD tests that may\n * be ready to enable.\n *\n * @module analysis/static/SkippedTestDetector\n */\nimport { parse } from \"@babel/parser\";\n/**\n * Detect skipped tests in a file's source code\n *\n * @param code - Source code to analyze\n * @param filePath - Path to file (for error reporting)\n * @returns Detection result with skipped tests\n *\n * @example\n * ```typescript\n * const result = detectSkippedTests(`\n * describe.skip(\"Feature\", () => {\n * it(\"should work\", () => {});\n * });\n * `, \"feature.test.ts\");\n *\n * // result.skipped = [{ type: \"describe\", name: \"Feature\", line: 2, ... }]\n * ```\n */\nexport function detectSkippedTests(code, filePath) {\n const skipped = [];\n try {\n const ast = parse(code, {\n sourceType: \"module\",\n plugins: [\"typescript\", \"jsx\"],\n errorRecovery: true,\n });\n // Simple AST traversal without @babel/traverse (to avoid extra dependency in MCP)\n function visit(node) {\n if (node.type === \"CallExpression\") {\n const callee = node.callee;\n // Check for .skip pattern: describe.skip, it.skip, test.skip\n if (callee.type === \"MemberExpression\" &&\n callee.property.type === \"Identifier\" &&\n callee.property.name === \"skip\" &&\n callee.object.type === \"Identifier\") {\n const testType = callee.object.name;\n if (testType === \"describe\" || testType === \"it\" || testType === \"test\") {\n // Try to extract test name from first argument\n let name;\n if (node.arguments.length > 0) {\n const firstArg = node.arguments[0];\n if (firstArg.type === \"StringLiteral\") {\n name = firstArg.value;\n }\n else if (firstArg.type === \"TemplateLiteral\" && firstArg.quasis.length === 1) {\n name = firstArg.quasis[0].value.raw;\n }\n }\n skipped.push({\n type: testType,\n name,\n line: node.loc?.start.line ?? 0,\n column: node.loc?.start.column ?? 0,\n file: filePath,\n });\n }\n }\n // Also check for skip() as method call: describe(\"name\", () => {}).skip\n // This is less common but supported by some frameworks\n }\n // Recursively visit all properties that could contain nodes\n for (const key of Object.keys(node)) {\n const value = node[key];\n if (value && typeof value === \"object\") {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === \"object\" && \"type\" in item) {\n visit(item);\n }\n }\n }\n else if (\"type\" in value) {\n visit(value);\n }\n }\n }\n }\n visit(ast.program);\n return { file: filePath, skipped, parsed: true };\n }\n catch (error) {\n return {\n file: filePath,\n skipped: [],\n parsed: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n/**\n * Analyze multiple files for skipped tests\n *\n * @param files - Map of file path to content\n * @returns Array of results for each file\n */\nexport function analyzeSkippedTests(files) {\n const results = [];\n for (const [filePath, content] of files) {\n // Only analyze test files\n if (filePath.includes(\".test.\") || filePath.includes(\".spec.\") || filePath.includes(\"__tests__\")) {\n results.push(detectSkippedTests(content, filePath));\n }\n }\n return results;\n}\n/**\n * Get summary of skipped tests across all files\n */\nexport function getSkippedTestSummary(results) {\n const summary = {\n totalSkipped: 0,\n byType: { describe: 0, it: 0, test: 0 },\n filesWithSkipped: [],\n };\n for (const result of results) {\n if (result.skipped.length > 0) {\n summary.filesWithSkipped.push(result.file);\n summary.totalSkipped += result.skipped.length;\n for (const test of result.skipped) {\n summary.byType[test.type]++;\n }\n }\n }\n return summary;\n}\n"]}
1
+ {"version":3,"sources":["../../../packages/core/dist/analysis/static/SkippedTestDetector.js"],"names":["detectSkippedTests","code","filePath","skipped","visit","node","type","callee","property","name","object","testType","arguments","length","firstArg","value","quasis","raw","push","line","loc","start","column","file","key","Object","keys","Array","isArray","item","ast","parse","sourceType","plugins","errorRecovery","program","parsed","error","Error","message","String","analyzeSkippedTests","files","results","content","includes","getSkippedTestSummary","summary","totalSkipped","byType","describe","it","test","filesWithSkipped","result"],"mappings":"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","file":"chunk-FVIYXFCL.js","sourcesContent":["/**\n * Skipped Test Detector\n *\n * Uses @babel/parser to detect skipped tests (describe.skip, it.skip, test.skip)\n * in test files. This helps AI agents identify RED PHASE TDD tests that may\n * be ready to enable.\n *\n * @module analysis/static/SkippedTestDetector\n */\nimport { parse } from \"@babel/parser\";\n/**\n * Detect skipped tests in a file's source code\n *\n * @param code - Source code to analyze\n * @param filePath - Path to file (for error reporting)\n * @returns Detection result with skipped tests\n *\n * @example\n * ```typescript\n * const result = detectSkippedTests(`\n * describe.skip(\"Feature\", () => {\n * it(\"should work\", () => {});\n * });\n * `, \"feature.test.ts\");\n *\n * // result.skipped = [{ type: \"describe\", name: \"Feature\", line: 2, ... }]\n * ```\n */\nexport function detectSkippedTests(code, filePath) {\n const skipped = [];\n try {\n const ast = parse(code, {\n sourceType: \"module\",\n plugins: [\"typescript\", \"jsx\"],\n errorRecovery: true,\n });\n // Simple AST traversal without @babel/traverse (to avoid extra dependency in MCP)\n function visit(node) {\n if (node.type === \"CallExpression\") {\n const callee = node.callee;\n // Check for .skip pattern: describe.skip, it.skip, test.skip\n if (callee.type === \"MemberExpression\" &&\n callee.property.type === \"Identifier\" &&\n callee.property.name === \"skip\" &&\n callee.object.type === \"Identifier\") {\n const testType = callee.object.name;\n if (testType === \"describe\" || testType === \"it\" || testType === \"test\") {\n // Try to extract test name from first argument\n let name;\n if (node.arguments.length > 0) {\n const firstArg = node.arguments[0];\n if (firstArg.type === \"StringLiteral\") {\n name = firstArg.value;\n }\n else if (firstArg.type === \"TemplateLiteral\" && firstArg.quasis.length === 1) {\n name = firstArg.quasis[0].value.raw;\n }\n }\n skipped.push({\n type: testType,\n name,\n line: node.loc?.start.line ?? 0,\n column: node.loc?.start.column ?? 0,\n file: filePath,\n });\n }\n }\n // Also check for skip() as method call: describe(\"name\", () => {}).skip\n // This is less common but supported by some frameworks\n }\n // Recursively visit all properties that could contain nodes\n for (const key of Object.keys(node)) {\n const value = node[key];\n if (value && typeof value === \"object\") {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === \"object\" && \"type\" in item) {\n visit(item);\n }\n }\n }\n else if (\"type\" in value) {\n visit(value);\n }\n }\n }\n }\n visit(ast.program);\n return { file: filePath, skipped, parsed: true };\n }\n catch (error) {\n return {\n file: filePath,\n skipped: [],\n parsed: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n/**\n * Analyze multiple files for skipped tests\n *\n * @param files - Map of file path to content\n * @returns Array of results for each file\n */\nexport function analyzeSkippedTests(files) {\n const results = [];\n for (const [filePath, content] of files) {\n // Only analyze test files\n if (filePath.includes(\".test.\") || filePath.includes(\".spec.\") || filePath.includes(\"__tests__\")) {\n results.push(detectSkippedTests(content, filePath));\n }\n }\n return results;\n}\n/**\n * Get summary of skipped tests across all files\n */\nexport function getSkippedTestSummary(results) {\n const summary = {\n totalSkipped: 0,\n byType: { describe: 0, it: 0, test: 0 },\n filesWithSkipped: [],\n };\n for (const result of results) {\n if (result.skipped.length > 0) {\n summary.filesWithSkipped.push(result.file);\n summary.totalSkipped += result.skipped.length;\n for (const test of result.skipped) {\n summary.byType[test.type]++;\n }\n }\n }\n return summary;\n}\n"]}
@@ -1,5 +1,5 @@
1
- #!/usr/bin/env node
2
- import { __name } from './chunk-BW7RALUZ.js';
1
+ #!/usr/bin/env node --no-warnings=ExperimentalWarning
2
+ import { __name } from './chunk-RB7H4UQJ.js';
3
3
  import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
4
4
  import { homedir, platform } from 'os';
5
5
  import { join, resolve, dirname } from 'path';
@@ -1419,5 +1419,5 @@ __name(findCliPath, "findCliPath");
1419
1419
  __name2(findCliPath, "findCliPath");
1420
1420
 
1421
1421
  export { createManagedMetadata, detectAIClients, detectMCPProcesses, detectWorkspaceConfig, getClient, getClientConfigPath, getConfiguredClients, getOrCreateIdentity, getServerKey, getSnapbackConfigDir, getSnapbackMCPConfig, injectWorkspacePath, isCommandExecutable2, isOwnedByThisInstall, isSnapbackMCPRunning, readClientConfig, removeSnapbackConfig, repairClientConfig, resetIdentityCache, resolveNodePath, validateClientConfig, validateConfig, validateWorkspacePath, writeClientConfig };
1422
- //# sourceMappingURL=chunk-2TOJVUVJ.js.map
1423
- //# sourceMappingURL=chunk-2TOJVUVJ.js.map
1422
+ //# sourceMappingURL=chunk-R7CUQ7CU.js.map
1423
+ //# sourceMappingURL=chunk-R7CUQ7CU.js.map