@fractary/core 0.1.1 → 0.3.1

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 (49) hide show
  1. package/dist/common/config.d.ts +22 -6
  2. package/dist/common/config.d.ts.map +1 -1
  3. package/dist/common/config.js +43 -14
  4. package/dist/common/config.js.map +1 -1
  5. package/dist/common/exec-file-no-throw.d.ts +42 -0
  6. package/dist/common/exec-file-no-throw.d.ts.map +1 -0
  7. package/dist/common/exec-file-no-throw.js +54 -0
  8. package/dist/common/exec-file-no-throw.js.map +1 -0
  9. package/dist/common/types.d.ts +15 -0
  10. package/dist/common/types.d.ts.map +1 -1
  11. package/dist/common/yaml-config.d.ts +227 -0
  12. package/dist/common/yaml-config.d.ts.map +1 -0
  13. package/dist/common/yaml-config.js +323 -0
  14. package/dist/common/yaml-config.js.map +1 -0
  15. package/dist/common/yaml-config.test.d.ts +5 -0
  16. package/dist/common/yaml-config.test.d.ts.map +1 -0
  17. package/dist/common/yaml-config.test.js +551 -0
  18. package/dist/common/yaml-config.test.js.map +1 -0
  19. package/dist/repo/config.d.ts +112 -0
  20. package/dist/repo/config.d.ts.map +1 -0
  21. package/dist/repo/config.js +202 -0
  22. package/dist/repo/config.js.map +1 -0
  23. package/dist/repo/config.test.d.ts +7 -0
  24. package/dist/repo/config.test.d.ts.map +1 -0
  25. package/dist/repo/config.test.js +173 -0
  26. package/dist/repo/config.test.js.map +1 -0
  27. package/dist/repo/manager.d.ts +20 -1
  28. package/dist/repo/manager.d.ts.map +1 -1
  29. package/dist/repo/manager.js +68 -2
  30. package/dist/repo/manager.js.map +1 -1
  31. package/dist/repo/organization.d.ts +46 -0
  32. package/dist/repo/organization.d.ts.map +1 -0
  33. package/dist/repo/organization.js +119 -0
  34. package/dist/repo/organization.js.map +1 -0
  35. package/dist/repo/organization.test.d.ts +7 -0
  36. package/dist/repo/organization.test.d.ts.map +1 -0
  37. package/dist/repo/organization.test.js +241 -0
  38. package/dist/repo/organization.test.js.map +1 -0
  39. package/dist/repo/path-generator.d.ts +53 -0
  40. package/dist/repo/path-generator.d.ts.map +1 -0
  41. package/dist/repo/path-generator.js +126 -0
  42. package/dist/repo/path-generator.js.map +1 -0
  43. package/dist/repo/path-generator.test.d.ts +7 -0
  44. package/dist/repo/path-generator.test.d.ts.map +1 -0
  45. package/dist/repo/path-generator.test.js +278 -0
  46. package/dist/repo/path-generator.test.js.map +1 -0
  47. package/dist/spec/manager.js +1 -1
  48. package/dist/spec/manager.js.map +1 -1
  49. package/package.json +3 -2
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ /**
3
+ * Unified YAML Configuration Loader
4
+ *
5
+ * Loads and parses `.fractary/core/config.yaml` with environment variable substitution.
6
+ * Provides a single source of truth for all plugin configurations.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.loadYamlConfig = loadYamlConfig;
43
+ exports.writeYamlConfig = writeYamlConfig;
44
+ exports.substituteEnvVars = substituteEnvVars;
45
+ exports.findProjectRoot = findProjectRoot;
46
+ exports.configExists = configExists;
47
+ exports.getConfigPath = getConfigPath;
48
+ exports.getCoreDir = getCoreDir;
49
+ exports.validateEnvVars = validateEnvVars;
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const yaml = __importStar(require("js-yaml"));
53
+ /**
54
+ * Load and parse `.fractary/core/config.yaml` with environment variable substitution
55
+ *
56
+ * @param options Configuration loading options
57
+ * @returns Parsed configuration object or null if not found
58
+ * @throws Error if config is invalid or throwIfMissing is true and file doesn't exist
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const config = loadYamlConfig();
63
+ * if (config?.work) {
64
+ * console.log('Work config:', config.work);
65
+ * }
66
+ * ```
67
+ */
68
+ function loadYamlConfig(options = {}) {
69
+ const { projectRoot, warnMissingEnvVars = true, throwIfMissing = false, } = options;
70
+ const root = projectRoot || findProjectRoot();
71
+ // Try new location first (.fractary/config.yaml)
72
+ const newConfigPath = path.join(root, '.fractary', 'config.yaml');
73
+ const oldConfigPath = path.join(root, '.fractary', 'core', 'config.yaml');
74
+ let configPath;
75
+ if (fs.existsSync(newConfigPath)) {
76
+ configPath = newConfigPath;
77
+ }
78
+ else if (fs.existsSync(oldConfigPath)) {
79
+ configPath = oldConfigPath;
80
+ console.warn(`Warning: Using deprecated config location: ${oldConfigPath}\n` +
81
+ `Please move to: ${newConfigPath}`);
82
+ }
83
+ else {
84
+ if (throwIfMissing) {
85
+ throw new Error(`Configuration file not found at:\n` +
86
+ ` - ${newConfigPath} (preferred)\n` +
87
+ ` - ${oldConfigPath} (deprecated)\n` +
88
+ `Run 'fractary-core:init' to create it.`);
89
+ }
90
+ return null;
91
+ }
92
+ try {
93
+ const content = fs.readFileSync(configPath, 'utf-8');
94
+ const substituted = substituteEnvVars(content, warnMissingEnvVars);
95
+ const parsed = yaml.load(substituted);
96
+ // Validate basic structure
97
+ if (!parsed || typeof parsed !== 'object') {
98
+ throw new Error('Invalid configuration: must be a YAML object');
99
+ }
100
+ if (!parsed.version) {
101
+ console.warn(`Warning: Configuration missing version field in ${configPath}`);
102
+ }
103
+ return parsed;
104
+ }
105
+ catch (error) {
106
+ if (error instanceof Error) {
107
+ throw new Error(`Failed to load config from ${configPath}: ${error.message}`);
108
+ }
109
+ throw error;
110
+ }
111
+ }
112
+ /**
113
+ * Write unified configuration to `.fractary/core/config.yaml`
114
+ *
115
+ * @param config Configuration object to write
116
+ * @param projectRoot Project root directory (auto-detected if not provided)
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * writeYamlConfig({
121
+ * version: '2.0',
122
+ * work: {
123
+ * active_handler: 'github',
124
+ * handlers: { ... }
125
+ * }
126
+ * });
127
+ * ```
128
+ */
129
+ function writeYamlConfig(config, projectRoot) {
130
+ const root = projectRoot || findProjectRoot();
131
+ const fractaryDir = path.join(root, '.fractary');
132
+ const configPath = path.join(fractaryDir, 'config.yaml');
133
+ // Ensure directory exists
134
+ if (!fs.existsSync(fractaryDir)) {
135
+ fs.mkdirSync(fractaryDir, { recursive: true });
136
+ }
137
+ // Convert to YAML with proper formatting
138
+ const yamlContent = yaml.dump(config, {
139
+ indent: 2,
140
+ lineWidth: 100,
141
+ noRefs: true,
142
+ sortKeys: false,
143
+ });
144
+ fs.writeFileSync(configPath, yamlContent, 'utf-8');
145
+ }
146
+ /**
147
+ * Substitute ${ENV_VAR} placeholders with actual environment variables
148
+ *
149
+ * Supports:
150
+ * - ${VAR_NAME} - Replace with env var value
151
+ * - ${VAR_NAME:-default} - Replace with env var value or default if not set
152
+ *
153
+ * Security: Default values are limited to 1000 characters to prevent abuse.
154
+ * Variable names must match pattern: [A-Z_][A-Z0-9_]*
155
+ *
156
+ * @param content Content with environment variable placeholders
157
+ * @param warnMissing Whether to warn about missing environment variables
158
+ * @returns Content with substituted values
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * const content = 'token: ${GITHUB_TOKEN}';
163
+ * const result = substituteEnvVars(content);
164
+ * // result: 'token: ghp_xxxxx'
165
+ * ```
166
+ */
167
+ function substituteEnvVars(content, warnMissing = true) {
168
+ // Input validation
169
+ if (typeof content !== 'string') {
170
+ throw new TypeError('Content must be a string');
171
+ }
172
+ // Maximum length for default values to prevent abuse
173
+ const MAX_DEFAULT_LENGTH = 1000;
174
+ return content.replace(/\$\{([A-Z_][A-Z0-9_]*)(:-([^}]+))?\}/g, (match, varName, _, defaultValue) => {
175
+ // Validate variable name format
176
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(varName)) {
177
+ console.warn(`Warning: Invalid environment variable name: ${varName}`);
178
+ return match;
179
+ }
180
+ const value = process.env[varName];
181
+ if (value !== undefined) {
182
+ return value;
183
+ }
184
+ if (defaultValue !== undefined) {
185
+ // Validate default value length
186
+ if (defaultValue.length > MAX_DEFAULT_LENGTH) {
187
+ console.warn(`Warning: Default value for ${varName} exceeds maximum length (${MAX_DEFAULT_LENGTH} chars). ` +
188
+ `Truncating to prevent abuse.`);
189
+ return defaultValue.substring(0, MAX_DEFAULT_LENGTH);
190
+ }
191
+ return defaultValue;
192
+ }
193
+ if (warnMissing) {
194
+ console.warn(`Warning: Environment variable ${varName} not set. ` +
195
+ `Using placeholder value.`);
196
+ }
197
+ // Keep original placeholder if no value found
198
+ return match;
199
+ });
200
+ }
201
+ /**
202
+ * Find project root by looking for .fractary directory or .git
203
+ *
204
+ * Walks up the directory tree from startDir until it finds:
205
+ * - A directory containing `.fractary/`
206
+ * - A directory containing `.git/`
207
+ * - The filesystem root
208
+ *
209
+ * Security: Normalizes paths and prevents traversal outside filesystem boundaries.
210
+ * Maximum of 100 directory levels to prevent infinite loops.
211
+ *
212
+ * @param startDir Directory to start searching from (default: current working directory)
213
+ * @returns Project root directory (normalized absolute path)
214
+ */
215
+ function findProjectRoot(startDir = process.cwd()) {
216
+ // Input validation and normalization
217
+ if (typeof startDir !== 'string') {
218
+ throw new TypeError('startDir must be a string');
219
+ }
220
+ // Normalize and resolve to absolute path to prevent path traversal
221
+ let currentDir = path.resolve(path.normalize(startDir));
222
+ // Get filesystem root for comparison
223
+ const fsRoot = path.parse(currentDir).root;
224
+ // Safety limit: maximum 100 directory levels to prevent infinite loops
225
+ const MAX_LEVELS = 100;
226
+ let levels = 0;
227
+ while (currentDir !== fsRoot && levels < MAX_LEVELS) {
228
+ try {
229
+ // Check for .fractary directory
230
+ if (fs.existsSync(path.join(currentDir, '.fractary'))) {
231
+ return currentDir;
232
+ }
233
+ // Check for .git directory
234
+ if (fs.existsSync(path.join(currentDir, '.git'))) {
235
+ return currentDir;
236
+ }
237
+ // Move up one directory
238
+ const parentDir = path.dirname(currentDir);
239
+ // Safety check: ensure we're actually moving up
240
+ if (parentDir === currentDir) {
241
+ // Reached filesystem root
242
+ break;
243
+ }
244
+ currentDir = parentDir;
245
+ levels++;
246
+ }
247
+ catch (error) {
248
+ // Handle permission errors or invalid paths gracefully
249
+ console.warn(`Warning: Error accessing directory ${currentDir}: ${error}`);
250
+ break;
251
+ }
252
+ }
253
+ if (levels >= MAX_LEVELS) {
254
+ console.warn(`Warning: Exceeded maximum directory depth (${MAX_LEVELS} levels) while searching for project root`);
255
+ }
256
+ // If no marker found, return the normalized starting directory
257
+ return path.resolve(path.normalize(startDir));
258
+ }
259
+ /**
260
+ * Check if a valid configuration file exists
261
+ *
262
+ * @param projectRoot Project root directory (auto-detected if not provided)
263
+ * @returns true if config exists at either new or old location
264
+ */
265
+ function configExists(projectRoot) {
266
+ const root = projectRoot || findProjectRoot();
267
+ const newConfigPath = path.join(root, '.fractary', 'config.yaml');
268
+ const oldConfigPath = path.join(root, '.fractary', 'core', 'config.yaml');
269
+ return fs.existsSync(newConfigPath) || fs.existsSync(oldConfigPath);
270
+ }
271
+ /**
272
+ * Get the configuration file path
273
+ *
274
+ * @param projectRoot Project root directory (auto-detected if not provided)
275
+ * @returns Full path to configuration file (prefers new location)
276
+ */
277
+ function getConfigPath(projectRoot) {
278
+ const root = projectRoot || findProjectRoot();
279
+ const newConfigPath = path.join(root, '.fractary', 'config.yaml');
280
+ const oldConfigPath = path.join(root, '.fractary', 'core', 'config.yaml');
281
+ if (fs.existsSync(newConfigPath)) {
282
+ return newConfigPath;
283
+ }
284
+ else if (fs.existsSync(oldConfigPath)) {
285
+ return oldConfigPath;
286
+ }
287
+ // Return new path if neither exists (for creation)
288
+ return newConfigPath;
289
+ }
290
+ /**
291
+ * Get the .fractary/core directory path
292
+ *
293
+ * @param projectRoot Project root directory (auto-detected if not provided)
294
+ * @returns Full path to .fractary/core directory
295
+ */
296
+ function getCoreDir(projectRoot) {
297
+ const root = projectRoot || findProjectRoot();
298
+ return path.join(root, '.fractary', 'core');
299
+ }
300
+ /**
301
+ * Validate that environment variables referenced in config exist
302
+ *
303
+ * @param config Configuration object to validate
304
+ * @returns Array of missing environment variable names
305
+ */
306
+ function validateEnvVars(config) {
307
+ const content = yaml.dump(config);
308
+ const missing = [];
309
+ // Find all ${VAR_NAME} references
310
+ const matches = content.matchAll(/\$\{([A-Z_][A-Z0-9_]*)(:-[^}]+)?\}/g);
311
+ for (const match of matches) {
312
+ const varName = match[1];
313
+ const hasDefault = match[2] !== undefined;
314
+ // Only check if no default value provided
315
+ if (!hasDefault && process.env[varName] === undefined) {
316
+ if (!missing.includes(varName)) {
317
+ missing.push(varName);
318
+ }
319
+ }
320
+ }
321
+ return missing;
322
+ }
323
+ //# sourceMappingURL=yaml-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-config.js","sourceRoot":"","sources":["../../src/common/yaml-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for unified YAML configuration loader
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=yaml-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-config.test.d.ts","sourceRoot":"","sources":["../../src/common/yaml-config.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}