spidersan 0.4.2 β 0.4.3
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.
- package/README.md +33 -8
- package/dist/bin/spidersan.d.ts.map +1 -1
- package/dist/bin/spidersan.js +4 -1
- package/dist/bin/spidersan.js.map +1 -1
- package/dist/commands/auto.d.ts +8 -0
- package/dist/commands/auto.d.ts.map +1 -0
- package/dist/commands/auto.js +206 -0
- package/dist/commands/auto.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +325 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/ecosystem-loader.d.ts.map +1 -1
- package/dist/commands/ecosystem-loader.js +12 -0
- package/dist/commands/ecosystem-loader.js.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +6 -2
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +17 -4
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/welcome.d.ts +5 -0
- package/dist/commands/welcome.d.ts.map +1 -1
- package/dist/commands/welcome.js +27 -34
- package/dist/commands/welcome.js.map +1 -1
- package/dist/lib/config.d.ts +28 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +111 -26
- package/dist/lib/config.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/welcome.js
CHANGED
|
@@ -1,57 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan welcome
|
|
3
|
+
*
|
|
4
|
+
* Friendly onboarding and quick start for core CLI.
|
|
5
|
+
*/
|
|
1
6
|
import { Command } from 'commander';
|
|
2
7
|
import { existsSync } from 'fs';
|
|
3
8
|
import { join } from 'path';
|
|
4
|
-
// ANSI color codes for terminal output
|
|
5
9
|
const colors = {
|
|
6
10
|
reset: '\x1b[0m',
|
|
7
11
|
bright: '\x1b[1m',
|
|
8
12
|
dim: '\x1b[2m',
|
|
9
|
-
red: '\x1b[31m',
|
|
10
|
-
green: '\x1b[32m',
|
|
11
13
|
yellow: '\x1b[33m',
|
|
12
|
-
blue: '\x1b[34m',
|
|
13
14
|
magenta: '\x1b[35m',
|
|
14
15
|
cyan: '\x1b[36m',
|
|
16
|
+
green: '\x1b[32m',
|
|
15
17
|
};
|
|
16
18
|
const c = colors;
|
|
17
19
|
function sleep(ms) {
|
|
18
20
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
19
21
|
}
|
|
20
22
|
async function runWelcome() {
|
|
21
|
-
// The grand entrance
|
|
22
23
|
console.log(`
|
|
23
24
|
${c.bright}${c.magenta}π·οΈ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
24
25
|
${c.bright}${c.magenta} SPIDERSAN WELCOMES YOU TO THE WEB${c.reset}
|
|
25
26
|
${c.bright}${c.magenta}βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
26
27
|
`);
|
|
27
|
-
await sleep(
|
|
28
|
+
await sleep(500);
|
|
28
29
|
console.log(`${c.cyan} You are not alone in this codebase.${c.reset}`);
|
|
29
|
-
await sleep(
|
|
30
|
+
await sleep(450);
|
|
30
31
|
console.log(`${c.cyan} Other agents weave alongside you.${c.reset}`);
|
|
31
|
-
await sleep(
|
|
32
|
+
await sleep(450);
|
|
32
33
|
console.log(`${c.cyan} The web keeps you from colliding.${c.reset}`);
|
|
33
|
-
await sleep(
|
|
34
|
-
console.log(`
|
|
35
|
-
${c.dim}βββββββββββββββββββββββββββββββββββ${c.reset}
|
|
36
|
-
${c.dim}β${c.reset} ${c.bright}${c.yellow}"Claim your threads${c.reset} ${c.dim}β${c.reset}
|
|
37
|
-
${c.dim}β${c.reset} ${c.bright}${c.yellow}before you weave."${c.reset} ${c.dim}β${c.reset}
|
|
38
|
-
${c.dim}βββββββββββββββββββββββββββββββββββ${c.reset}
|
|
39
|
-
`);
|
|
40
|
-
await sleep(1200);
|
|
41
|
-
// Check initialization status
|
|
34
|
+
await sleep(700);
|
|
42
35
|
const initialized = existsSync(join(process.cwd(), '.spidersan', 'registry.json'));
|
|
43
36
|
if (!initialized) {
|
|
44
|
-
console.log(`${c.yellow}πΈοΈ FIRST TIME HERE?${c.reset}`);
|
|
45
37
|
console.log(`
|
|
38
|
+
${c.yellow}πΈοΈ FIRST TIME HERE?${c.reset}
|
|
46
39
|
${c.bright}Step 1:${c.reset} Initialize the web in your project
|
|
47
40
|
${c.green}$ spidersan init${c.reset}
|
|
48
41
|
`);
|
|
49
42
|
}
|
|
50
43
|
else {
|
|
51
|
-
console.log(
|
|
44
|
+
console.log(`
|
|
45
|
+
${c.green}β Web initialized in this project${c.reset}
|
|
52
46
|
`);
|
|
53
47
|
}
|
|
54
|
-
console.log(`${c.cyan}πΈοΈ QUICK
|
|
48
|
+
console.log(`${c.cyan}πΈοΈ QUICK START:${c.reset}
|
|
55
49
|
|
|
56
50
|
${c.bright}Register your branch:${c.reset}
|
|
57
51
|
${c.green}$ spidersan register --files "src/myfile.ts" --agent myname${c.reset}
|
|
@@ -62,24 +56,23 @@ ${c.bright}${c.magenta}βββββββββββββββββββ
|
|
|
62
56
|
${c.bright}When done:${c.reset}
|
|
63
57
|
${c.green}$ spidersan merged${c.reset}
|
|
64
58
|
`);
|
|
65
|
-
await sleep(
|
|
66
|
-
console.log(`${c.bright}${c.
|
|
67
|
-
|
|
68
|
-
Let Spidersan watch your files automatically:
|
|
69
|
-
${c.green}$ spidersan watch --agent myname${c.reset}
|
|
59
|
+
await sleep(600);
|
|
60
|
+
console.log(`${c.bright}${c.cyan}βοΈ CONFIG SETUP${c.reset}
|
|
70
61
|
|
|
71
|
-
${c.dim}
|
|
62
|
+
${c.dim}Set your default agent + storage in a guided wizard:${c.reset}
|
|
63
|
+
${c.green}$ spidersan config wizard${c.reset}
|
|
72
64
|
`);
|
|
73
|
-
await sleep(
|
|
74
|
-
console.log(`${c.
|
|
75
|
-
|
|
76
|
-
${c.bright}π¬ WANT TO SEE THE WEB'S POWER?${c.reset}
|
|
77
|
-
|
|
78
|
-
${c.cyan}$ spidersan demo${c.reset}
|
|
65
|
+
await sleep(600);
|
|
66
|
+
console.log(`${c.bright}${c.cyan}β‘ AUTO-WATCH${c.reset}
|
|
79
67
|
|
|
80
|
-
${c.dim}
|
|
68
|
+
${c.dim}Start a background watcher from config paths:${c.reset}
|
|
69
|
+
${c.green}$ spidersan auto start${c.reset}
|
|
81
70
|
|
|
82
|
-
${c.
|
|
71
|
+
${c.dim}Or run a foreground watcher:${c.reset}
|
|
72
|
+
${c.green}$ spidersan watch --agent myname${c.reset}
|
|
73
|
+
`);
|
|
74
|
+
await sleep(600);
|
|
75
|
+
console.log(`${c.magenta}βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
83
76
|
${c.bright}${c.magenta} The web sees all. The web protects all.${c.reset}
|
|
84
77
|
${c.bright}${c.magenta}π·οΈ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
85
78
|
`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
* Loads and validates .spidersanrc configuration file.
|
|
5
5
|
*/
|
|
6
6
|
export interface SpidersanConfig {
|
|
7
|
+
ecosystem: {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
};
|
|
10
|
+
agent: {
|
|
11
|
+
name?: string;
|
|
12
|
+
};
|
|
13
|
+
autoWatch: {
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
paths: string[];
|
|
16
|
+
hub: boolean;
|
|
17
|
+
hubSync: boolean;
|
|
18
|
+
quiet: boolean;
|
|
19
|
+
legacy: boolean;
|
|
20
|
+
};
|
|
7
21
|
readyCheck: {
|
|
8
22
|
enableWipDetection: boolean;
|
|
9
23
|
wipPatterns: string[];
|
|
@@ -25,9 +39,23 @@ export interface SpidersanConfig {
|
|
|
25
39
|
supabaseKeyStaging?: string;
|
|
26
40
|
};
|
|
27
41
|
}
|
|
42
|
+
export declare const CONFIG_FILES: string[];
|
|
43
|
+
interface ValidationError {
|
|
44
|
+
path: string;
|
|
45
|
+
message: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function getConfigPaths(basePath?: string, includeGlobal?: boolean): string[];
|
|
48
|
+
export declare function loadConfigWithSources(basePath?: string, options?: {
|
|
49
|
+
includeGlobal?: boolean;
|
|
50
|
+
}): Promise<{
|
|
51
|
+
config: SpidersanConfig;
|
|
52
|
+
sources: string[];
|
|
53
|
+
errors: ValidationError[];
|
|
54
|
+
}>;
|
|
28
55
|
export declare function loadConfig(basePath?: string): Promise<SpidersanConfig>;
|
|
29
56
|
export declare function getWipPatterns(config: SpidersanConfig): RegExp[];
|
|
30
57
|
export declare function getExcludePatterns(config: SpidersanConfig): string[];
|
|
31
58
|
export declare function getHighSeverityPatterns(config: SpidersanConfig): RegExp[];
|
|
32
59
|
export declare function getMediumSeverityPatterns(config: SpidersanConfig): RegExp[];
|
|
60
|
+
export {};
|
|
33
61
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,KAAK,EAAE;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,EAAE,OAAO,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACR,kBAAkB,EAAE,OAAO,CAAC;QAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,2BAA2B,EAAE,OAAO,CAAC;QACrC,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,gBAAgB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE;QACP,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,sBAAsB,EAAE,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,OAAO,EAAE;QACL,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;QAC3B,WAAW,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;QACjD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACL;AAmCD,eAAO,MAAM,YAAY,UAAkE,CAAC;AAE5F,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAqGD,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,EAAE,aAAa,GAAE,OAAc,GAAG,MAAM,EAAE,CAUxG;AAED,wBAAsB,qBAAqB,CACvC,QAAQ,GAAE,MAAsB,EAChC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CA8BpF;AAED,wBAAsB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAO3F;AAmBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAEzE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAE3E"}
|
package/dist/lib/config.js
CHANGED
|
@@ -6,7 +6,22 @@
|
|
|
6
6
|
import { readFile } from 'fs/promises';
|
|
7
7
|
import { existsSync } from 'fs';
|
|
8
8
|
import { join } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
9
10
|
const DEFAULT_CONFIG = {
|
|
11
|
+
ecosystem: {
|
|
12
|
+
enabled: true,
|
|
13
|
+
},
|
|
14
|
+
agent: {
|
|
15
|
+
name: '',
|
|
16
|
+
},
|
|
17
|
+
autoWatch: {
|
|
18
|
+
enabled: false,
|
|
19
|
+
paths: [],
|
|
20
|
+
hub: false,
|
|
21
|
+
hubSync: false,
|
|
22
|
+
quiet: false,
|
|
23
|
+
legacy: false,
|
|
24
|
+
},
|
|
10
25
|
readyCheck: {
|
|
11
26
|
enableWipDetection: true,
|
|
12
27
|
wipPatterns: ['TODO', 'FIXME', 'WIP', 'HACK', 'XXX'],
|
|
@@ -24,7 +39,7 @@ const DEFAULT_CONFIG = {
|
|
|
24
39
|
environment: 'production',
|
|
25
40
|
},
|
|
26
41
|
};
|
|
27
|
-
const CONFIG_FILES = ['.spidersanrc', '.spidersanrc.json', '.spidersan.config.json'];
|
|
42
|
+
export const CONFIG_FILES = ['.spidersanrc', '.spidersanrc.json', '.spidersan.config.json'];
|
|
28
43
|
function validateConfig(config) {
|
|
29
44
|
const errors = [];
|
|
30
45
|
if (typeof config !== 'object' || config === null) {
|
|
@@ -32,6 +47,18 @@ function validateConfig(config) {
|
|
|
32
47
|
return errors;
|
|
33
48
|
}
|
|
34
49
|
const obj = config;
|
|
50
|
+
// Validate ecosystem
|
|
51
|
+
if (obj.ecosystem !== undefined) {
|
|
52
|
+
if (typeof obj.ecosystem !== 'object' || obj.ecosystem === null) {
|
|
53
|
+
errors.push({ path: 'ecosystem', message: 'Must be an object' });
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const eco = obj.ecosystem;
|
|
57
|
+
if (eco.enabled !== undefined && typeof eco.enabled !== 'boolean') {
|
|
58
|
+
errors.push({ path: 'ecosystem.enabled', message: 'Must be a boolean' });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
35
62
|
// Validate readyCheck
|
|
36
63
|
if (obj.readyCheck !== undefined) {
|
|
37
64
|
if (typeof obj.readyCheck !== 'object' || obj.readyCheck === null) {
|
|
@@ -50,6 +77,47 @@ function validateConfig(config) {
|
|
|
50
77
|
}
|
|
51
78
|
}
|
|
52
79
|
}
|
|
80
|
+
// Validate agent
|
|
81
|
+
if (obj.agent !== undefined) {
|
|
82
|
+
if (typeof obj.agent !== 'object' || obj.agent === null) {
|
|
83
|
+
errors.push({ path: 'agent', message: 'Must be an object' });
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const agent = obj.agent;
|
|
87
|
+
if (agent.name !== undefined && typeof agent.name !== 'string') {
|
|
88
|
+
errors.push({ path: 'agent.name', message: 'Must be a string' });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Validate autoWatch
|
|
93
|
+
if (obj.autoWatch !== undefined) {
|
|
94
|
+
if (typeof obj.autoWatch !== 'object' || obj.autoWatch === null) {
|
|
95
|
+
errors.push({ path: 'autoWatch', message: 'Must be an object' });
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const aw = obj.autoWatch;
|
|
99
|
+
if (aw.enabled !== undefined && typeof aw.enabled !== 'boolean') {
|
|
100
|
+
errors.push({ path: 'autoWatch.enabled', message: 'Must be a boolean' });
|
|
101
|
+
}
|
|
102
|
+
if (aw.paths !== undefined) {
|
|
103
|
+
if (!Array.isArray(aw.paths) || !aw.paths.every((p) => typeof p === 'string')) {
|
|
104
|
+
errors.push({ path: 'autoWatch.paths', message: 'Must be an array of strings' });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (aw.hub !== undefined && typeof aw.hub !== 'boolean') {
|
|
108
|
+
errors.push({ path: 'autoWatch.hub', message: 'Must be a boolean' });
|
|
109
|
+
}
|
|
110
|
+
if (aw.hubSync !== undefined && typeof aw.hubSync !== 'boolean') {
|
|
111
|
+
errors.push({ path: 'autoWatch.hubSync', message: 'Must be a boolean' });
|
|
112
|
+
}
|
|
113
|
+
if (aw.quiet !== undefined && typeof aw.quiet !== 'boolean') {
|
|
114
|
+
errors.push({ path: 'autoWatch.quiet', message: 'Must be a boolean' });
|
|
115
|
+
}
|
|
116
|
+
if (aw.legacy !== undefined && typeof aw.legacy !== 'boolean') {
|
|
117
|
+
errors.push({ path: 'autoWatch.legacy', message: 'Must be a boolean' });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
53
121
|
// Validate storage
|
|
54
122
|
if (obj.storage !== undefined) {
|
|
55
123
|
if (typeof obj.storage !== 'object' || obj.storage === null) {
|
|
@@ -67,35 +135,52 @@ function validateConfig(config) {
|
|
|
67
135
|
}
|
|
68
136
|
return errors;
|
|
69
137
|
}
|
|
70
|
-
export
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
138
|
+
export function getConfigPaths(basePath = process.cwd(), includeGlobal = true) {
|
|
139
|
+
const paths = [];
|
|
140
|
+
if (includeGlobal) {
|
|
141
|
+
const home = homedir();
|
|
142
|
+
CONFIG_FILES.forEach((filename) => paths.push(join(home, filename)));
|
|
143
|
+
}
|
|
144
|
+
CONFIG_FILES.forEach((filename) => paths.push(join(basePath, filename)));
|
|
145
|
+
return paths;
|
|
146
|
+
}
|
|
147
|
+
export async function loadConfigWithSources(basePath = process.cwd(), options = {}) {
|
|
148
|
+
const includeGlobal = options.includeGlobal !== false;
|
|
149
|
+
const sources = [];
|
|
150
|
+
const errors = [];
|
|
151
|
+
let merged = DEFAULT_CONFIG;
|
|
152
|
+
const configPaths = getConfigPaths(basePath, includeGlobal);
|
|
153
|
+
for (const configPath of configPaths) {
|
|
154
|
+
if (!existsSync(configPath))
|
|
155
|
+
continue;
|
|
156
|
+
try {
|
|
157
|
+
const content = await readFile(configPath, 'utf-8');
|
|
158
|
+
const userConfig = JSON.parse(content);
|
|
159
|
+
const validationErrors = validateConfig(userConfig);
|
|
160
|
+
if (validationErrors.length > 0) {
|
|
161
|
+
errors.push(...validationErrors.map(err => ({ ...err, path: `${configPath}:${err.path || ''}`.replace(/:$/, '') })));
|
|
85
162
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
163
|
+
merged = deepMerge(merged, userConfig);
|
|
164
|
+
sources.push(configPath);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
if (error instanceof SyntaxError) {
|
|
168
|
+
errors.push({ path: configPath, message: `Invalid JSON: ${error.message}` });
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
errors.push({ path: configPath, message: 'Failed to read config file' });
|
|
94
172
|
}
|
|
95
173
|
}
|
|
96
174
|
}
|
|
97
|
-
|
|
98
|
-
|
|
175
|
+
return { config: merged, sources, errors };
|
|
176
|
+
}
|
|
177
|
+
export async function loadConfig(basePath = process.cwd()) {
|
|
178
|
+
const result = await loadConfigWithSources(basePath);
|
|
179
|
+
if (result.errors.length > 0) {
|
|
180
|
+
console.warn('β οΈ Config validation warnings:');
|
|
181
|
+
result.errors.forEach(e => console.warn(` ${e.path}: ${e.message}`));
|
|
182
|
+
}
|
|
183
|
+
return result.config;
|
|
99
184
|
}
|
|
100
185
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
101
186
|
function deepMerge(target, source) {
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|