faf-cli 4.3.2 → 4.4.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.
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ /**
3
+ * 🏁 PREVENTIVE FIXES for @faf/core Extraction
4
+ * These adapters prevent breakage BEFORE we extract
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.ScoreCache = exports.ScoreCommand = exports.ChalkFormatter = exports.PlainFormatter = exports.FafContext = void 0;
41
+ exports.calculateFafScoreOLD = calculateFafScoreOLD;
42
+ exports.calculateScorePure = calculateScorePure;
43
+ exports.calculateScoreCLI = calculateScoreCLI;
44
+ exports.parseFafCore = parseFafCore;
45
+ exports.parseFafCLI = parseFafCLI;
46
+ exports.validateFaf = validateFaf;
47
+ exports.getDefaultFafPath = getDefaultFafPath;
48
+ exports.getCachedScore = getCachedScore;
49
+ // ===============================================
50
+ // PROBLEM 1: Score calculation uses file I/O
51
+ // WHY IT BREAKS: calculateFafScore() reads files directly
52
+ // FIX: Create pure function that takes data, not paths
53
+ // ===============================================
54
+ const fs = __importStar(require("fs/promises"));
55
+ const path = __importStar(require("path"));
56
+ const colors_1 = require("./fix-once/colors");
57
+ const YAML = __importStar(require("yaml"));
58
+ // OLD WAY (will break in core):
59
+ async function calculateFafScoreOLD(fafPath) {
60
+ const content = await fs.readFile(fafPath, 'utf-8'); // ❌ File I/O
61
+ console.log(colors_1.chalk.cyan('Calculating...')); // ❌ Console output
62
+ const homeDir = process.env.HOME; // ❌ Environment dependency
63
+ // ... calculation
64
+ }
65
+ function calculateScorePure(input) {
66
+ // Pure calculation - no I/O, no console, no env
67
+ let score = 0;
68
+ // Handle null/undefined input
69
+ if (!input || !input.fafData) {
70
+ return 0;
71
+ }
72
+ if (input.fafData.version)
73
+ score += 10;
74
+ if (input.fafData.project?.name)
75
+ score += 10;
76
+ if (input.fafData.project?.description)
77
+ score += 15;
78
+ if (input.projectStats?.hasTests)
79
+ score += 20;
80
+ return Math.min(score, 100);
81
+ }
82
+ // CLI Adapter (stays in CLI package):
83
+ async function calculateScoreCLI(fafPath) {
84
+ // CLI handles all I/O
85
+ const content = await fs.readFile(fafPath, 'utf-8');
86
+ const fafData = parseFaf(content);
87
+ // CLI handles console output
88
+ console.log(colors_1.chalk.cyan('Calculating score...'));
89
+ // Call pure function
90
+ const score = calculateScorePure({ fafData });
91
+ // CLI handles display
92
+ console.log(colors_1.chalk.green(`Score: ${score}%`));
93
+ return score;
94
+ }
95
+ // ===============================================
96
+ // PROBLEM 2: findFafFile() will break imports
97
+ // WHY: Deep imports like require('faf-cli/dist/utils/file-utils')
98
+ // FIX: Create public API surface
99
+ // ===============================================
100
+ // Before extraction - add to src/index.ts:
101
+ // export { findFafFile } from './utils/file-utils';
102
+ // export { calculateFafScore } from './scoring/score-calculator';
103
+ // export { FafData, ProjectInfo } from './schema/faf-schema';
104
+ // So users can migrate from:
105
+ // const { findFafFile } = require('faf-cli/dist/utils/file-utils');
106
+ // To:
107
+ // const { findFafFile } = require('faf-cli');
108
+ // ===============================================
109
+ // PROBLEM 3: Commands will lose shared context
110
+ // WHY: They share state through imports
111
+ // FIX: Create context manager
112
+ // ===============================================
113
+ class FafContext {
114
+ static instance;
115
+ fafPath;
116
+ fafData;
117
+ score;
118
+ static getInstance() {
119
+ if (!this.instance) {
120
+ this.instance = new FafContext();
121
+ }
122
+ return this.instance;
123
+ }
124
+ // Shared state that commands need
125
+ setCurrentFaf(path, data) {
126
+ this.fafPath = path;
127
+ this.fafData = data;
128
+ }
129
+ getCachedScore() {
130
+ return this.score;
131
+ }
132
+ setCachedScore(score) {
133
+ this.score = score;
134
+ }
135
+ }
136
+ exports.FafContext = FafContext;
137
+ // Core version (no chalk):
138
+ function parseFafCore(content) {
139
+ try {
140
+ const data = YAML.parse(content);
141
+ return { success: true, data };
142
+ }
143
+ catch (error) {
144
+ const errorMessage = error instanceof Error ? error.message : String(error);
145
+ return {
146
+ success: false,
147
+ error: {
148
+ code: 'INVALID_YAML',
149
+ line: extractLineNumber(error),
150
+ message: errorMessage
151
+ }
152
+ };
153
+ }
154
+ }
155
+ // CLI version (with chalk):
156
+ function parseFafCLI(content) {
157
+ const result = parseFafCore(content);
158
+ if (!result.success && result.error) {
159
+ const errorMsg = result.error.line
160
+ ? colors_1.chalk.red(`❌ Invalid YAML at line ${result.error.line}`)
161
+ : colors_1.chalk.red(`❌ Invalid YAML: ${result.error.message}`);
162
+ throw new Error(errorMsg);
163
+ }
164
+ return result.data;
165
+ }
166
+ // Core version (no formatting):
167
+ class PlainFormatter {
168
+ success(msg) { return `✓ ${msg}`; }
169
+ error(msg) { return `✗ ${msg}`; }
170
+ info(msg) { return `ℹ ${msg}`; }
171
+ }
172
+ exports.PlainFormatter = PlainFormatter;
173
+ // CLI version (with chalk):
174
+ class ChalkFormatter {
175
+ success(msg) { return colors_1.chalk.green(`✓ ${msg}`); }
176
+ error(msg) { return colors_1.chalk.red(`✗ ${msg}`); }
177
+ info(msg) { return colors_1.chalk.cyan(`ℹ ${msg}`); }
178
+ }
179
+ exports.ChalkFormatter = ChalkFormatter;
180
+ // Injectable formatting:
181
+ function validateFaf(data, formatter = new PlainFormatter()) {
182
+ if (!data.version) {
183
+ return formatter.error('Missing version field');
184
+ }
185
+ return formatter.success('Valid .faf file');
186
+ }
187
+ // ===============================================
188
+ // PROBLEM 7: Path resolution will break
189
+ // WHY: Core can't use process.cwd() or __dirname
190
+ // FIX: Pass paths explicitly
191
+ // ===============================================
192
+ // OLD (breaks in core):
193
+ function getDefaultFafPathOLD() {
194
+ return path.join(process.cwd(), '.faf'); // ❌ process.cwd()
195
+ }
196
+ // NEW (extraction-ready):
197
+ function getDefaultFafPath(projectDir) {
198
+ return path.join(projectDir, '.faf'); // ✅ Explicit path
199
+ }
200
+ // Commands depend on interfaces, not implementations
201
+ class ScoreCommand {
202
+ scoreProvider;
203
+ fileProvider;
204
+ constructor(scoreProvider, fileProvider) {
205
+ this.scoreProvider = scoreProvider;
206
+ this.fileProvider = fileProvider;
207
+ }
208
+ async execute(filePath) {
209
+ const fafPath = filePath || await this.fileProvider.findFaf('.');
210
+ if (!fafPath) {
211
+ throw new Error('No .faf file found');
212
+ }
213
+ const data = await this.fileProvider.readFaf(fafPath);
214
+ return this.scoreProvider.calculateScore(data);
215
+ }
216
+ }
217
+ exports.ScoreCommand = ScoreCommand;
218
+ // ===============================================
219
+ // PROBLEM 9: Global state in utilities
220
+ // WHY: Some utils use module-level variables
221
+ // FIX: Make everything functional or class-based
222
+ // ===============================================
223
+ // OLD (stateful):
224
+ let cachedScore = null;
225
+ function getCachedScore() {
226
+ return cachedScore; // ❌ Global state
227
+ }
228
+ // NEW (stateless):
229
+ class ScoreCache {
230
+ cache = new Map();
231
+ get(path) {
232
+ return this.cache.get(path);
233
+ }
234
+ set(path, score) {
235
+ this.cache.set(path, score);
236
+ }
237
+ }
238
+ exports.ScoreCache = ScoreCache;
239
+ // ===============================================
240
+ // PROBLEM 10: Import paths will change
241
+ // WHY: @faf/core vs faf-cli imports
242
+ // FIX: Create compatibility layer
243
+ // ===============================================
244
+ // In faf-cli after extraction, re-export everything:
245
+ // src/compat.ts
246
+ // export * from '@faf/core';
247
+ // export * from '@faf/core/types';
248
+ // Old code can still do:
249
+ // import { FafData } from 'faf-cli/compat';
250
+ // Instead of breaking with:
251
+ // import { FafData } from '@faf/core';
252
+ function extractLineNumber(error) {
253
+ // Extract line number from YAML error
254
+ const match = error.message?.match(/line (\d+)/);
255
+ return match ? parseInt(match[1]) : undefined;
256
+ }
257
+ function parseFaf(content) {
258
+ // Parse YAML content
259
+ return YAML.parse(content);
260
+ }
261
+ //# sourceMappingURL=core-extraction-fixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-extraction-fixes.js","sourceRoot":"","sources":["../src/core-extraction-fixes.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -15,4 +15,6 @@ export { generateFafFromProject } from './generators/faf-generator-championship'
15
15
  export { FafCompiler } from './compiler/faf-compiler';
16
16
  export type { CompilationResult } from './compiler/faf-compiler';
17
17
  export type { FafSchema, ValidationResult } from './schema/faf-schema';
18
+ export type { FafData, ProjectInfo, InstantContext, KeyFileInfo, ScoreInput } from './types';
19
+ export { calculateScorePure, parseFafCore, parseFafCLI, FafContext, PlainFormatter, ChalkFormatter, ScoreCache, ScoreCommand, validateFaf } from './core-extraction-fixes';
18
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAGjF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAGjF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG7F,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Universal AI Context Format Tooling
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.FafCompiler = exports.generateFafFromProject = exports.validateSchema = exports.detectProjectType = exports.findFafFile = exports.lintFafFile = exports.auditFafFile = exports.syncFafFile = exports.scoreFafFile = exports.initFafFile = exports.validateFafFile = exports.program = void 0;
7
+ exports.validateFaf = exports.ScoreCommand = exports.ScoreCache = exports.ChalkFormatter = exports.PlainFormatter = exports.FafContext = exports.parseFafCLI = exports.parseFafCore = exports.calculateScorePure = exports.FafCompiler = exports.generateFafFromProject = exports.validateSchema = exports.detectProjectType = exports.findFafFile = exports.lintFafFile = exports.auditFafFile = exports.syncFafFile = exports.scoreFafFile = exports.initFafFile = exports.validateFafFile = exports.program = void 0;
8
8
  // Export main CLI function
9
9
  var cli_1 = require("./cli");
10
10
  Object.defineProperty(exports, "program", { enumerable: true, get: function () { return cli_1.program; } });
@@ -32,4 +32,15 @@ Object.defineProperty(exports, "generateFafFromProject", { enumerable: true, get
32
32
  // Export compiler (Mk3)
33
33
  var faf_compiler_1 = require("./compiler/faf-compiler");
34
34
  Object.defineProperty(exports, "FafCompiler", { enumerable: true, get: function () { return faf_compiler_1.FafCompiler; } });
35
+ // Export core extraction fixes (for prevention tests)
36
+ var core_extraction_fixes_1 = require("./core-extraction-fixes");
37
+ Object.defineProperty(exports, "calculateScorePure", { enumerable: true, get: function () { return core_extraction_fixes_1.calculateScorePure; } });
38
+ Object.defineProperty(exports, "parseFafCore", { enumerable: true, get: function () { return core_extraction_fixes_1.parseFafCore; } });
39
+ Object.defineProperty(exports, "parseFafCLI", { enumerable: true, get: function () { return core_extraction_fixes_1.parseFafCLI; } });
40
+ Object.defineProperty(exports, "FafContext", { enumerable: true, get: function () { return core_extraction_fixes_1.FafContext; } });
41
+ Object.defineProperty(exports, "PlainFormatter", { enumerable: true, get: function () { return core_extraction_fixes_1.PlainFormatter; } });
42
+ Object.defineProperty(exports, "ChalkFormatter", { enumerable: true, get: function () { return core_extraction_fixes_1.ChalkFormatter; } });
43
+ Object.defineProperty(exports, "ScoreCache", { enumerable: true, get: function () { return core_extraction_fixes_1.ScoreCache; } });
44
+ Object.defineProperty(exports, "ScoreCommand", { enumerable: true, get: function () { return core_extraction_fixes_1.ScoreCommand; } });
45
+ Object.defineProperty(exports, "validateFaf", { enumerable: true, get: function () { return core_extraction_fixes_1.validateFaf; } });
35
46
  //# 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;;;GAGG;;;AAEH,2BAA2B;AAC3B,6BAAgC;AAAvB,8FAAA,OAAO,OAAA;AAEhB,iDAAiD;AACjD,gDAAsD;AAA7C,2GAAA,eAAe,OAAA;AACxB,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AACpB,0CAAgD;AAAvC,qGAAA,YAAY,OAAA;AACrB,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AACpB,0CAAgD;AAAvC,qGAAA,YAAY,OAAA;AACrB,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AAEpB,mBAAmB;AACnB,iDAAoE;AAA3D,yGAAA,WAAW,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AACvC,kDAAqD;AAA5C,4GAAA,cAAc,OAAA;AACvB,sFAAiF;AAAxE,oIAAA,sBAAsB,OAAA;AAE/B,wBAAwB;AACxB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2BAA2B;AAC3B,6BAAgC;AAAvB,8FAAA,OAAO,OAAA;AAEhB,iDAAiD;AACjD,gDAAsD;AAA7C,2GAAA,eAAe,OAAA;AACxB,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AACpB,0CAAgD;AAAvC,qGAAA,YAAY,OAAA;AACrB,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AACpB,0CAAgD;AAAvC,qGAAA,YAAY,OAAA;AACrB,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AAEpB,mBAAmB;AACnB,iDAAoE;AAA3D,yGAAA,WAAW,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AACvC,kDAAqD;AAA5C,4GAAA,cAAc,OAAA;AACvB,sFAAiF;AAAxE,oIAAA,sBAAsB,OAAA;AAE/B,wBAAwB;AACxB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AAOpB,sDAAsD;AACtD,iEAUiC;AAT/B,2HAAA,kBAAkB,OAAA;AAClB,qHAAA,YAAY,OAAA;AACZ,oHAAA,WAAW,OAAA;AACX,mHAAA,UAAU,OAAA;AACV,uHAAA,cAAc,OAAA;AACd,uHAAA,cAAc,OAAA;AACd,mHAAA,UAAU,OAAA;AACV,qHAAA,YAAY,OAAA;AACZ,oHAAA,WAAW,OAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Central type exports for @faf/core extraction
3
+ * All types available from one location
4
+ */
5
+ export interface FafData {
6
+ version: string;
7
+ project: ProjectInfo;
8
+ instant_context?: InstantContext;
9
+ key_files?: KeyFileInfo[];
10
+ faf_score?: number;
11
+ }
12
+ export interface ProjectInfo {
13
+ name: string;
14
+ description?: string;
15
+ type?: string;
16
+ goal?: string;
17
+ main_language?: string;
18
+ }
19
+ export interface InstantContext {
20
+ what_building?: string;
21
+ main_language?: string;
22
+ key_files?: string[];
23
+ }
24
+ export interface KeyFileInfo {
25
+ path: string;
26
+ purpose?: string;
27
+ }
28
+ export interface ScoreInput {
29
+ fafData: any;
30
+ projectStats?: {
31
+ fileCount?: number;
32
+ hasTests?: boolean;
33
+ hasCI?: boolean;
34
+ };
35
+ }
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,GAAG,CAAC;IACb,YAAY,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;CACH"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Central type exports for @faf/core extraction
4
+ * All types available from one location
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * 🏎️ FAFb Compiler Wrapper
3
+ * Wraps xai-faf-rust compiler for .faf → .fafb compilation
4
+ */
5
+ export interface CompileOptions {
6
+ input?: string;
7
+ output?: string;
8
+ verbose?: boolean;
9
+ watch?: boolean;
10
+ }
11
+ export interface CompileResult {
12
+ success: boolean;
13
+ input: string;
14
+ output: string;
15
+ size: number;
16
+ compressionRatio: number;
17
+ time: number;
18
+ error?: string;
19
+ }
20
+ export interface BenchmarkResult {
21
+ fafParseTime: number;
22
+ fafbParseTime: number;
23
+ speedup: number;
24
+ fafSize: number;
25
+ fafbSize: number;
26
+ compressionRatio: number;
27
+ }
28
+ /**
29
+ * Check if xai-faf-rust compiler is available
30
+ */
31
+ export declare function checkCompilerAvailable(): Promise<{
32
+ available: boolean;
33
+ path?: string;
34
+ error?: string;
35
+ }>;
36
+ /**
37
+ * Compile .faf to .fafb
38
+ */
39
+ export declare function compileFAF(options?: CompileOptions): Promise<CompileResult>;
40
+ /**
41
+ * Decompile .fafb to .faf (for debugging)
42
+ */
43
+ export declare function decompileFAFb(input: string, output?: string): Promise<CompileResult>;
44
+ /**
45
+ * Benchmark .faf vs .fafb parsing speed
46
+ */
47
+ export declare function benchmarkParsing(fafPath?: string, fafbPath?: string): Promise<BenchmarkResult>;
48
+ /**
49
+ * Watch .faf file and auto-recompile on changes
50
+ */
51
+ export declare function watchAndCompile(input: string, output?: string): Promise<void>;
52
+ /**
53
+ * Auto-compile after .faf generation
54
+ * Used by init, auto, go, sync commands
55
+ */
56
+ export declare function autoCompile(fafPath: string, quiet?: boolean): Promise<boolean>;
57
+ /**
58
+ * Detect if file is .faf or .fafb
59
+ */
60
+ export declare function detectFormat(filePath: string): Promise<'faf' | 'fafb' | 'unknown'>;
61
+ //# sourceMappingURL=fafb-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fafb-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/fafb-compiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB7G;AAaD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqDrF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiD1F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAyBpG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BnF;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAwB3F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC,CAuBxF"}