@reverso/core 0.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.
Files changed (66) hide show
  1. package/README.md +45 -0
  2. package/dist/config/defaults.d.ts +35 -0
  3. package/dist/config/defaults.d.ts.map +1 -0
  4. package/dist/config/defaults.js +104 -0
  5. package/dist/config/defaults.js.map +1 -0
  6. package/dist/config/define-config.d.ts +40 -0
  7. package/dist/config/define-config.d.ts.map +1 -0
  8. package/dist/config/define-config.js +44 -0
  9. package/dist/config/define-config.js.map +1 -0
  10. package/dist/config/index.d.ts +8 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +8 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/config/loader.d.ts +41 -0
  15. package/dist/config/loader.d.ts.map +1 -0
  16. package/dist/config/loader.js +99 -0
  17. package/dist/config/loader.js.map +1 -0
  18. package/dist/config/validation.d.ts +325 -0
  19. package/dist/config/validation.d.ts.map +1 -0
  20. package/dist/config/validation.js +185 -0
  21. package/dist/config/validation.js.map +1 -0
  22. package/dist/constants.d.ts +84 -0
  23. package/dist/constants.d.ts.map +1 -0
  24. package/dist/constants.js +120 -0
  25. package/dist/constants.js.map +1 -0
  26. package/dist/index.d.ts +29 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +37 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/types/config.d.ts +285 -0
  31. package/dist/types/config.d.ts.map +1 -0
  32. package/dist/types/config.js +5 -0
  33. package/dist/types/config.js.map +1 -0
  34. package/dist/types/content.d.ts +288 -0
  35. package/dist/types/content.d.ts.map +1 -0
  36. package/dist/types/content.js +6 -0
  37. package/dist/types/content.js.map +1 -0
  38. package/dist/types/fields.d.ts +187 -0
  39. package/dist/types/fields.d.ts.map +1 -0
  40. package/dist/types/fields.js +6 -0
  41. package/dist/types/fields.js.map +1 -0
  42. package/dist/types/index.d.ts +8 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +5 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/types/schema.d.ts +193 -0
  47. package/dist/types/schema.d.ts.map +1 -0
  48. package/dist/types/schema.js +6 -0
  49. package/dist/types/schema.js.map +1 -0
  50. package/dist/utils/index.d.ts +7 -0
  51. package/dist/utils/index.d.ts.map +1 -0
  52. package/dist/utils/index.js +10 -0
  53. package/dist/utils/index.js.map +1 -0
  54. package/dist/utils/naming.d.ts +122 -0
  55. package/dist/utils/naming.d.ts.map +1 -0
  56. package/dist/utils/naming.js +302 -0
  57. package/dist/utils/naming.js.map +1 -0
  58. package/dist/utils/path.d.ts +79 -0
  59. package/dist/utils/path.d.ts.map +1 -0
  60. package/dist/utils/path.js +219 -0
  61. package/dist/utils/path.js.map +1 -0
  62. package/dist/utils/validation.d.ts +256 -0
  63. package/dist/utils/validation.d.ts.map +1 -0
  64. package/dist/utils/validation.js +245 -0
  65. package/dist/utils/validation.js.map +1 -0
  66. package/package.json +58 -0
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # @reverso/core
2
+
3
+ Core types, utilities, and configuration system for Reverso CMS.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @reverso/core
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```typescript
14
+ import { defineConfig, FieldType, parsePath, formatLabel } from '@reverso/core';
15
+
16
+ // Define CMS configuration
17
+ const config = defineConfig({
18
+ database: {
19
+ type: 'sqlite',
20
+ path: './data/reverso.db',
21
+ },
22
+ });
23
+
24
+ // Parse field paths
25
+ const { page, section, field } = parsePath('home.hero.title');
26
+
27
+ // Format field labels
28
+ const label = formatLabel('heroTitle'); // "Hero Title"
29
+ ```
30
+
31
+ ## Features
32
+
33
+ - **35+ Field Types**: text, wysiwyg, image, repeater, flexible, and more
34
+ - **Configuration System**: defineConfig helper with validation
35
+ - **Path Utilities**: Parse and build field paths
36
+ - **Naming Utilities**: Format labels, slugify, camelCase
37
+ - **Validation**: Zod schemas for all types
38
+
39
+ ## Documentation
40
+
41
+ See [https://reverso.dev/docs/packages/core](https://reverso.dev/docs/packages/core)
42
+
43
+ ## License
44
+
45
+ MIT
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Default configuration values for Reverso CMS.
3
+ */
4
+ import type { AdminConfig, ApiConfig, DatabaseConfig, ReversoConfig, ScannerConfig } from '../types/config.js';
5
+ /**
6
+ * Default database configuration (SQLite for development).
7
+ */
8
+ export declare const defaultDatabaseConfig: DatabaseConfig;
9
+ /**
10
+ * Default scanner configuration.
11
+ */
12
+ export declare const defaultScannerConfig: Required<ScannerConfig>;
13
+ /**
14
+ * Default admin configuration.
15
+ */
16
+ export declare const defaultAdminConfig: Required<AdminConfig>;
17
+ /**
18
+ * Default API configuration.
19
+ */
20
+ export declare const defaultApiConfig: Required<Omit<ApiConfig, 'rateLimit' | 'apiKey'>> & Pick<ApiConfig, 'rateLimit' | 'apiKey'>;
21
+ /**
22
+ * Default development configuration.
23
+ */
24
+ export declare const defaultDevConfig: Required<NonNullable<ReversoConfig['dev']>>;
25
+ /**
26
+ * Complete default configuration.
27
+ */
28
+ export declare const defaultConfig: Omit<ReversoConfig, 'database'> & {
29
+ database: DatabaseConfig;
30
+ };
31
+ /**
32
+ * Merge user config with defaults.
33
+ */
34
+ export declare function mergeWithDefaults(userConfig: ReversoConfig): ReversoConfig;
35
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAKnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,aAAa,CASxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAQpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC,GAC9E,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,QAAQ,CAOvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAGxE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,EAAE,cAAc,CAAA;CAavF,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,aAAa,GAAG,aAAa,CA0B1E"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Default configuration values for Reverso CMS.
3
+ */
4
+ import { DEFAULT_ADMIN_PATH, DEFAULT_API_PATH, DEFAULT_DEV_PORT, DEFAULT_EXCLUDE_PATTERNS, DEFAULT_INCLUDE_PATTERNS, DEFAULT_OUTPUT_DIR, DEFAULT_SRC_DIR, DEFAULT_WATCH_DEBOUNCE, } from '../constants.js';
5
+ /**
6
+ * Default database configuration (SQLite for development).
7
+ */
8
+ export const defaultDatabaseConfig = {
9
+ provider: 'sqlite',
10
+ url: '.reverso/reverso.db',
11
+ autoMigrate: true,
12
+ logging: false,
13
+ };
14
+ /**
15
+ * Default scanner configuration.
16
+ */
17
+ export const defaultScannerConfig = {
18
+ srcDir: DEFAULT_SRC_DIR,
19
+ include: [...DEFAULT_INCLUDE_PATTERNS],
20
+ exclude: [...DEFAULT_EXCLUDE_PATTERNS],
21
+ outputDir: DEFAULT_OUTPUT_DIR,
22
+ watch: {
23
+ enabled: true,
24
+ debounce: DEFAULT_WATCH_DEBOUNCE,
25
+ },
26
+ };
27
+ /**
28
+ * Default admin configuration.
29
+ */
30
+ export const defaultAdminConfig = {
31
+ path: DEFAULT_ADMIN_PATH,
32
+ title: 'Reverso',
33
+ logo: '',
34
+ primaryColor: '#6366f1',
35
+ darkMode: true,
36
+ favicon: '',
37
+ disabled: false,
38
+ };
39
+ /**
40
+ * Default API configuration.
41
+ */
42
+ export const defaultApiConfig = {
43
+ path: DEFAULT_API_PATH,
44
+ graphql: true,
45
+ rest: true,
46
+ cors: true,
47
+ rateLimit: undefined,
48
+ apiKey: undefined,
49
+ };
50
+ /**
51
+ * Default development configuration.
52
+ */
53
+ export const defaultDevConfig = {
54
+ port: DEFAULT_DEV_PORT,
55
+ hotReload: true,
56
+ };
57
+ /**
58
+ * Complete default configuration.
59
+ */
60
+ export const defaultConfig = {
61
+ name: 'Reverso',
62
+ srcDir: DEFAULT_SRC_DIR,
63
+ outputDir: DEFAULT_OUTPUT_DIR,
64
+ database: defaultDatabaseConfig,
65
+ auth: undefined,
66
+ uploads: undefined,
67
+ admin: defaultAdminConfig,
68
+ api: defaultApiConfig,
69
+ scanner: defaultScannerConfig,
70
+ plugins: [],
71
+ hooks: undefined,
72
+ dev: defaultDevConfig,
73
+ };
74
+ /**
75
+ * Merge user config with defaults.
76
+ */
77
+ export function mergeWithDefaults(userConfig) {
78
+ return {
79
+ name: userConfig.name ?? defaultConfig.name,
80
+ srcDir: userConfig.srcDir ?? defaultConfig.srcDir,
81
+ outputDir: userConfig.outputDir ?? defaultConfig.outputDir,
82
+ database: {
83
+ ...defaultDatabaseConfig,
84
+ ...userConfig.database,
85
+ },
86
+ auth: userConfig.auth,
87
+ uploads: userConfig.uploads,
88
+ admin: userConfig.admin ? { ...defaultAdminConfig, ...userConfig.admin } : defaultAdminConfig,
89
+ api: userConfig.api ? { ...defaultApiConfig, ...userConfig.api } : defaultApiConfig,
90
+ scanner: userConfig.scanner
91
+ ? {
92
+ ...defaultScannerConfig,
93
+ ...userConfig.scanner,
94
+ watch: userConfig.scanner.watch
95
+ ? { ...defaultScannerConfig.watch, ...userConfig.scanner.watch }
96
+ : defaultScannerConfig.watch,
97
+ }
98
+ : defaultScannerConfig,
99
+ plugins: userConfig.plugins ?? [],
100
+ hooks: userConfig.hooks,
101
+ dev: userConfig.dev ? { ...defaultDevConfig, ...userConfig.dev } : defaultDevConfig,
102
+ };
103
+ }
104
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Configuration helper for type-safe Reverso configuration.
3
+ */
4
+ import type { ReversoConfig } from '../types/config.js';
5
+ /**
6
+ * Define a Reverso configuration with full TypeScript support.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * // reverso.config.ts
11
+ * import { defineConfig } from '@reverso/core';
12
+ *
13
+ * export default defineConfig({
14
+ * database: {
15
+ * provider: 'sqlite',
16
+ * url: '.reverso/dev.db',
17
+ * },
18
+ * auth: {
19
+ * enabled: true,
20
+ * provider: 'better-auth',
21
+ * secret: process.env.AUTH_SECRET!,
22
+ * },
23
+ * });
24
+ * ```
25
+ */
26
+ export declare function defineConfig(config: ReversoConfig): ReversoConfig;
27
+ /**
28
+ * Type helper for configuration objects.
29
+ * Use this when you need to define partial configuration that will be merged later.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const dbConfig = configPartial<DatabaseConfig>({
34
+ * provider: 'postgresql',
35
+ * url: process.env.DATABASE_URL!,
36
+ * });
37
+ * ```
38
+ */
39
+ export declare function configPartial<T extends Record<string, unknown>>(config: T): T;
40
+ //# sourceMappingURL=define-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAEjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAE7E"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Configuration helper for type-safe Reverso configuration.
3
+ */
4
+ import { mergeWithDefaults } from './defaults.js';
5
+ /**
6
+ * Define a Reverso configuration with full TypeScript support.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * // reverso.config.ts
11
+ * import { defineConfig } from '@reverso/core';
12
+ *
13
+ * export default defineConfig({
14
+ * database: {
15
+ * provider: 'sqlite',
16
+ * url: '.reverso/dev.db',
17
+ * },
18
+ * auth: {
19
+ * enabled: true,
20
+ * provider: 'better-auth',
21
+ * secret: process.env.AUTH_SECRET!,
22
+ * },
23
+ * });
24
+ * ```
25
+ */
26
+ export function defineConfig(config) {
27
+ return mergeWithDefaults(config);
28
+ }
29
+ /**
30
+ * Type helper for configuration objects.
31
+ * Use this when you need to define partial configuration that will be merged later.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const dbConfig = configPartial<DatabaseConfig>({
36
+ * provider: 'postgresql',
37
+ * url: process.env.DATABASE_URL!,
38
+ * });
39
+ * ```
40
+ */
41
+ export function configPartial(config) {
42
+ return config;
43
+ }
44
+ //# sourceMappingURL=define-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../../src/config/define-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqB;IAChD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAoC,MAAS;IACxE,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Configuration exports for @reverso/core
3
+ */
4
+ export { defineConfig, configPartial } from './define-config.js';
5
+ export { defaultConfig, defaultDatabaseConfig, defaultScannerConfig, defaultAdminConfig, defaultApiConfig, defaultDevConfig, mergeWithDefaults, } from './defaults.js';
6
+ export { loadConfig, loadConfigSync, findConfigFile, type LoadConfigOptions, type LoadConfigResult, } from './loader.js';
7
+ export { configSchema, databaseConfigSchema, authConfigSchema, uploadsConfigSchema, adminConfigSchema, apiConfigSchema, scannerConfigSchema, pluginConfigSchema, hooksConfigSchema, devConfigSchema, type ValidatedConfig, } from './validation.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Configuration exports for @reverso/core
3
+ */
4
+ export { defineConfig, configPartial } from './define-config.js';
5
+ export { defaultConfig, defaultDatabaseConfig, defaultScannerConfig, defaultAdminConfig, defaultApiConfig, defaultDevConfig, mergeWithDefaults, } from './defaults.js';
6
+ export { loadConfig, loadConfigSync, findConfigFile, } from './loader.js';
7
+ export { configSchema, databaseConfigSchema, authConfigSchema, uploadsConfigSchema, adminConfigSchema, apiConfigSchema, scannerConfigSchema, pluginConfigSchema, hooksConfigSchema, devConfigSchema, } from './validation.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAEhB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Configuration loader for Reverso CMS.
3
+ * Loads and validates reverso.config.ts files.
4
+ */
5
+ import type { ReversoConfig } from '../types/config.js';
6
+ /**
7
+ * Options for loading configuration.
8
+ */
9
+ export interface LoadConfigOptions {
10
+ /** Working directory to search for config file */
11
+ cwd?: string;
12
+ /** Explicit config file path */
13
+ configFile?: string;
14
+ /** Skip validation */
15
+ skipValidation?: boolean;
16
+ }
17
+ /**
18
+ * Result of loading configuration.
19
+ */
20
+ export interface LoadConfigResult {
21
+ /** Loaded and merged configuration */
22
+ config: ReversoConfig;
23
+ /** Path to the config file that was loaded */
24
+ configPath: string | null;
25
+ /** Whether the config file exists */
26
+ exists: boolean;
27
+ }
28
+ /**
29
+ * Find the configuration file in the given directory.
30
+ */
31
+ export declare function findConfigFile(cwd: string): string | null;
32
+ /**
33
+ * Load configuration from a file.
34
+ */
35
+ export declare function loadConfig(options?: LoadConfigOptions): Promise<LoadConfigResult>;
36
+ /**
37
+ * Load configuration synchronously (blocking).
38
+ * Use loadConfig() when possible for better performance.
39
+ */
40
+ export declare function loadConfigSync(options?: LoadConfigOptions): LoadConfigResult;
41
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQzD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmD3F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CA0BhF"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Configuration loader for Reverso CMS.
3
+ * Loads and validates reverso.config.ts files.
4
+ */
5
+ import { existsSync } from 'node:fs';
6
+ import { join, resolve } from 'node:path';
7
+ import { pathToFileURL } from 'node:url';
8
+ import { CONFIG_FILE_NAMES } from '../constants.js';
9
+ import { mergeWithDefaults } from './defaults.js';
10
+ import { configSchema } from './validation.js';
11
+ /**
12
+ * Find the configuration file in the given directory.
13
+ */
14
+ export function findConfigFile(cwd) {
15
+ for (const fileName of CONFIG_FILE_NAMES) {
16
+ const filePath = join(cwd, fileName);
17
+ if (existsSync(filePath)) {
18
+ return filePath;
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+ /**
24
+ * Load configuration from a file.
25
+ */
26
+ export async function loadConfig(options = {}) {
27
+ const cwd = options.cwd ?? process.cwd();
28
+ // Find config file
29
+ const configPath = options.configFile ? resolve(cwd, options.configFile) : findConfigFile(cwd);
30
+ // If no config file, return defaults
31
+ if (!configPath || !existsSync(configPath)) {
32
+ return {
33
+ config: mergeWithDefaults({
34
+ database: {
35
+ provider: 'sqlite',
36
+ url: '.reverso/reverso.db',
37
+ },
38
+ }),
39
+ configPath: null,
40
+ exists: false,
41
+ };
42
+ }
43
+ // Load the config file
44
+ try {
45
+ const fileUrl = pathToFileURL(configPath).href;
46
+ const module = await import(fileUrl);
47
+ const userConfig = module.default;
48
+ // Validate if not skipped
49
+ if (!options.skipValidation) {
50
+ const result = configSchema.safeParse(userConfig);
51
+ if (!result.success) {
52
+ const errors = result.error.issues
53
+ .map((e) => ` - ${e.path.join('.')}: ${e.message}`)
54
+ .join('\n');
55
+ throw new Error(`Invalid configuration:\n${errors}`);
56
+ }
57
+ }
58
+ // Merge with defaults
59
+ const config = mergeWithDefaults(userConfig);
60
+ return {
61
+ config,
62
+ configPath,
63
+ exists: true,
64
+ };
65
+ }
66
+ catch (error) {
67
+ if (error instanceof Error) {
68
+ throw new Error(`Failed to load config from ${configPath}: ${error.message}`);
69
+ }
70
+ throw error;
71
+ }
72
+ }
73
+ /**
74
+ * Load configuration synchronously (blocking).
75
+ * Use loadConfig() when possible for better performance.
76
+ */
77
+ export function loadConfigSync(options = {}) {
78
+ const cwd = options.cwd ?? process.cwd();
79
+ // Find config file
80
+ const configPath = options.configFile ? resolve(cwd, options.configFile) : findConfigFile(cwd);
81
+ // If no config file, return defaults
82
+ if (!configPath || !existsSync(configPath)) {
83
+ return {
84
+ config: mergeWithDefaults({
85
+ database: {
86
+ provider: 'sqlite',
87
+ url: '.reverso/reverso.db',
88
+ },
89
+ }),
90
+ configPath: null,
91
+ exists: false,
92
+ };
93
+ }
94
+ // For sync loading, we need to use require for .js files
95
+ // TypeScript files need to be compiled first
96
+ throw new Error('Synchronous config loading is not supported for TypeScript config files. ' +
97
+ 'Use loadConfig() instead, or compile your config to .js first.');
98
+ }
99
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}