@flexireact/core 4.0.0 → 4.1.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.
@@ -0,0 +1,165 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * FlexiReact Configuration System
5
+ * Handles loading, validation, and merging of configuration
6
+ */
7
+
8
+ declare const FlexiReactConfigSchema: z.ZodObject<{
9
+ pagesDir: z.ZodDefault<z.ZodString>;
10
+ layoutsDir: z.ZodDefault<z.ZodString>;
11
+ publicDir: z.ZodDefault<z.ZodString>;
12
+ outDir: z.ZodDefault<z.ZodString>;
13
+ build: z.ZodDefault<z.ZodObject<{
14
+ target: z.ZodDefault<z.ZodString>;
15
+ minify: z.ZodDefault<z.ZodBoolean>;
16
+ sourcemap: z.ZodDefault<z.ZodBoolean>;
17
+ splitting: z.ZodDefault<z.ZodBoolean>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ target: string;
20
+ minify: boolean;
21
+ sourcemap: boolean;
22
+ splitting: boolean;
23
+ }, {
24
+ target?: string | undefined;
25
+ minify?: boolean | undefined;
26
+ sourcemap?: boolean | undefined;
27
+ splitting?: boolean | undefined;
28
+ }>>;
29
+ server: z.ZodDefault<z.ZodObject<{
30
+ port: z.ZodDefault<z.ZodNumber>;
31
+ host: z.ZodDefault<z.ZodString>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ port: number;
34
+ host: string;
35
+ }, {
36
+ port?: number | undefined;
37
+ host?: string | undefined;
38
+ }>>;
39
+ ssg: z.ZodDefault<z.ZodObject<{
40
+ enabled: z.ZodDefault<z.ZodBoolean>;
41
+ paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ enabled: boolean;
44
+ paths: string[];
45
+ }, {
46
+ enabled?: boolean | undefined;
47
+ paths?: string[] | undefined;
48
+ }>>;
49
+ islands: z.ZodDefault<z.ZodObject<{
50
+ enabled: z.ZodDefault<z.ZodBoolean>;
51
+ directive: z.ZodDefault<z.ZodString>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ enabled: boolean;
54
+ directive: string;
55
+ }, {
56
+ enabled?: boolean | undefined;
57
+ directive?: string | undefined;
58
+ }>>;
59
+ rsc: z.ZodDefault<z.ZodObject<{
60
+ enabled: z.ZodDefault<z.ZodBoolean>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ enabled: boolean;
63
+ }, {
64
+ enabled?: boolean | undefined;
65
+ }>>;
66
+ plugins: z.ZodDefault<z.ZodArray<z.ZodObject<{
67
+ name: z.ZodString;
68
+ setup: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
69
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
70
+ name: z.ZodString;
71
+ setup: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
72
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
73
+ name: z.ZodString;
74
+ setup: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
75
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
76
+ styles: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
77
+ scripts: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
78
+ favicon: z.ZodDefault<z.ZodNullable<z.ZodString>>;
79
+ }, "strip", z.ZodTypeAny, {
80
+ pagesDir: string;
81
+ layoutsDir: string;
82
+ publicDir: string;
83
+ outDir: string;
84
+ build: {
85
+ target: string;
86
+ minify: boolean;
87
+ sourcemap: boolean;
88
+ splitting: boolean;
89
+ };
90
+ server: {
91
+ port: number;
92
+ host: string;
93
+ };
94
+ ssg: {
95
+ enabled: boolean;
96
+ paths: string[];
97
+ };
98
+ islands: {
99
+ enabled: boolean;
100
+ directive: string;
101
+ };
102
+ rsc: {
103
+ enabled: boolean;
104
+ };
105
+ plugins: z.objectOutputType<{
106
+ name: z.ZodString;
107
+ setup: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
108
+ }, z.ZodTypeAny, "passthrough">[];
109
+ styles: string[];
110
+ scripts: string[];
111
+ favicon: string | null;
112
+ }, {
113
+ pagesDir?: string | undefined;
114
+ layoutsDir?: string | undefined;
115
+ publicDir?: string | undefined;
116
+ outDir?: string | undefined;
117
+ build?: {
118
+ target?: string | undefined;
119
+ minify?: boolean | undefined;
120
+ sourcemap?: boolean | undefined;
121
+ splitting?: boolean | undefined;
122
+ } | undefined;
123
+ server?: {
124
+ port?: number | undefined;
125
+ host?: string | undefined;
126
+ } | undefined;
127
+ ssg?: {
128
+ enabled?: boolean | undefined;
129
+ paths?: string[] | undefined;
130
+ } | undefined;
131
+ islands?: {
132
+ enabled?: boolean | undefined;
133
+ directive?: string | undefined;
134
+ } | undefined;
135
+ rsc?: {
136
+ enabled?: boolean | undefined;
137
+ } | undefined;
138
+ plugins?: z.objectInputType<{
139
+ name: z.ZodString;
140
+ setup: z.ZodOptional<z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>>;
141
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
142
+ styles?: string[] | undefined;
143
+ scripts?: string[] | undefined;
144
+ favicon?: string | null | undefined;
145
+ }>;
146
+ type FlexiReactConfig = z.infer<typeof FlexiReactConfigSchema>;
147
+ /**
148
+ * Default configuration
149
+ */
150
+ declare const defaultConfig: FlexiReactConfig;
151
+ /**
152
+ * Helper function to define configuration with full type support
153
+ * Use this in your flexireact.config.ts file
154
+ */
155
+ declare function defineConfig(config: Partial<FlexiReactConfig>): Partial<FlexiReactConfig>;
156
+ /**
157
+ * Loads and validates configuration from the project root
158
+ */
159
+ declare function loadConfig(projectRoot: string): Promise<FlexiReactConfig>;
160
+ /**
161
+ * Resolves all paths in config relative to project root
162
+ */
163
+ declare function resolvePaths(config: any, projectRoot: string): any;
164
+
165
+ export { type FlexiReactConfig, FlexiReactConfigSchema, defaultConfig, defineConfig, loadConfig, resolvePaths };
@@ -2,46 +2,62 @@
2
2
  import fs from "fs";
3
3
  import path from "path";
4
4
  import { pathToFileURL } from "url";
5
- var defaultConfig = {
5
+ import { z } from "zod";
6
+ import pc from "picocolors";
7
+ var BuildConfigSchema = z.object({
8
+ target: z.string().default("es2022"),
9
+ minify: z.boolean().default(true),
10
+ sourcemap: z.boolean().default(true),
11
+ splitting: z.boolean().default(true)
12
+ }).default({});
13
+ var ServerConfigSchema = z.object({
14
+ port: z.number().min(1).max(65535).default(3e3),
15
+ host: z.string().default("localhost")
16
+ }).default({});
17
+ var SSGConfigSchema = z.object({
18
+ enabled: z.boolean().default(false),
19
+ paths: z.array(z.string()).default([])
20
+ }).default({});
21
+ var IslandsConfigSchema = z.object({
22
+ enabled: z.boolean().default(true),
23
+ directive: z.string().default("use island")
24
+ }).default({});
25
+ var RSCConfigSchema = z.object({
26
+ enabled: z.boolean().default(true)
27
+ }).default({});
28
+ var PluginSchema = z.object({
29
+ name: z.string(),
30
+ setup: z.function().optional()
31
+ }).passthrough();
32
+ var FlexiReactConfigSchema = z.object({
6
33
  // Directories
7
- pagesDir: "pages",
8
- layoutsDir: "layouts",
9
- publicDir: "public",
10
- outDir: ".flexi",
34
+ pagesDir: z.string().default("pages"),
35
+ layoutsDir: z.string().default("layouts"),
36
+ publicDir: z.string().default("public"),
37
+ outDir: z.string().default(".flexi"),
11
38
  // Build options
12
- build: {
13
- target: "es2022",
14
- minify: true,
15
- sourcemap: true,
16
- splitting: true
17
- },
39
+ build: BuildConfigSchema,
18
40
  // Server options
19
- server: {
20
- port: 3e3,
21
- host: "localhost"
22
- },
41
+ server: ServerConfigSchema,
23
42
  // SSG options
24
- ssg: {
25
- enabled: false,
26
- paths: []
27
- },
43
+ ssg: SSGConfigSchema,
28
44
  // Islands (partial hydration)
29
- islands: {
30
- enabled: true
31
- },
45
+ islands: IslandsConfigSchema,
32
46
  // RSC options
33
- rsc: {
34
- enabled: true
35
- },
47
+ rsc: RSCConfigSchema,
36
48
  // Plugins
37
- plugins: [],
49
+ plugins: z.array(PluginSchema).default([]),
38
50
  // Styles (CSS files to include)
39
- styles: [],
51
+ styles: z.array(z.string()).default([]),
40
52
  // Scripts (JS files to include)
41
- scripts: [],
53
+ scripts: z.array(z.string()).default([]),
42
54
  // Favicon path
43
- favicon: null
44
- };
55
+ favicon: z.string().nullable().default(null)
56
+ });
57
+ var defaultConfig = FlexiReactConfigSchema.parse({});
58
+ function defineConfig(config) {
59
+ return config;
60
+ }
45
61
  async function loadConfig(projectRoot) {
46
62
  const configPathTs = path.join(projectRoot, "flexireact.config.ts");
47
63
  const configPathJs = path.join(projectRoot, "flexireact.config.js");
@@ -53,10 +69,22 @@ async function loadConfig(projectRoot) {
53
69
  const module = await import(`${configUrl}?t=${Date.now()}`);
54
70
  userConfig = module.default || module;
55
71
  } catch (error) {
56
- console.warn("Warning: Failed to load flexireact config:", error.message);
72
+ console.warn(pc.yellow(`\u26A0 Failed to load config: ${error.message}`));
73
+ }
74
+ }
75
+ const merged = deepMerge(defaultConfig, userConfig);
76
+ try {
77
+ return FlexiReactConfigSchema.parse(merged);
78
+ } catch (err) {
79
+ if (err instanceof z.ZodError) {
80
+ console.error(pc.red("\u2716 Configuration validation failed:"));
81
+ for (const issue of err.issues) {
82
+ console.error(pc.dim(` - ${issue.path.join(".")}: ${issue.message}`));
83
+ }
84
+ process.exit(1);
57
85
  }
86
+ throw err;
58
87
  }
59
- return deepMerge(defaultConfig, userConfig);
60
88
  }
61
89
  function deepMerge(target, source) {
62
90
  const result = { ...target };
@@ -79,7 +107,9 @@ function resolvePaths(config, projectRoot) {
79
107
  };
80
108
  }
81
109
  export {
110
+ FlexiReactConfigSchema,
82
111
  defaultConfig,
112
+ defineConfig,
83
113
  loadConfig,
84
114
  resolvePaths
85
115
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../core/config.ts"],"sourcesContent":["/**\r\n * FlexiReact Configuration System\r\n * Handles loading and merging of configuration from flexireact.config.js\r\n */\r\n\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport { pathToFileURL } from 'url';\r\n\r\n// Default configuration\r\nexport const defaultConfig = {\r\n // Directories\r\n pagesDir: 'pages',\r\n layoutsDir: 'layouts',\r\n publicDir: 'public',\r\n outDir: '.flexi',\r\n \r\n // Build options\r\n build: {\r\n target: 'es2022',\r\n minify: true,\r\n sourcemap: true,\r\n splitting: true\r\n },\r\n \r\n // Server options\r\n server: {\r\n port: 3000,\r\n host: 'localhost'\r\n },\r\n \r\n // SSG options\r\n ssg: {\r\n enabled: false,\r\n paths: []\r\n },\r\n \r\n // Islands (partial hydration)\r\n islands: {\r\n enabled: true\r\n },\r\n \r\n // RSC options\r\n rsc: {\r\n enabled: true\r\n },\r\n \r\n // Plugins\r\n plugins: [],\r\n \r\n // Styles (CSS files to include)\r\n styles: [],\r\n \r\n // Scripts (JS files to include)\r\n scripts: [],\r\n \r\n // Favicon path\r\n favicon: null\r\n};\r\n\r\n/**\r\n * Loads configuration from the project root\r\n * @param {string} projectRoot - Path to project root\r\n * @returns {Object} Merged configuration\r\n */\r\nexport async function loadConfig(projectRoot: string) {\r\n // Try .ts first, then .js\r\n const configPathTs = path.join(projectRoot, 'flexireact.config.ts');\r\n const configPathJs = path.join(projectRoot, 'flexireact.config.js');\r\n const configPath = fs.existsSync(configPathTs) ? configPathTs : configPathJs;\r\n \r\n let userConfig = {};\r\n \r\n if (fs.existsSync(configPath)) {\r\n try {\r\n const configUrl = pathToFileURL(configPath).href;\r\n const module = await import(`${configUrl}?t=${Date.now()}`);\r\n userConfig = module.default || module;\r\n } catch (error: any) {\r\n console.warn('Warning: Failed to load flexireact config:', error.message);\r\n }\r\n }\r\n \r\n // Deep merge configs\r\n return deepMerge(defaultConfig, userConfig);\r\n}\r\n\r\n/**\r\n * Deep merge two objects\r\n */\r\nfunction deepMerge(target, source) {\r\n const result = { ...target };\r\n \r\n for (const key in source) {\r\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\r\n result[key] = deepMerge(target[key] || {}, source[key]);\r\n } else {\r\n result[key] = source[key];\r\n }\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Resolves all paths in config relative to project root\r\n */\r\nexport function resolvePaths(config, projectRoot) {\r\n return {\r\n ...config,\r\n pagesDir: path.resolve(projectRoot, config.pagesDir),\r\n layoutsDir: path.resolve(projectRoot, config.layoutsDir),\r\n publicDir: path.resolve(projectRoot, config.publicDir),\r\n outDir: path.resolve(projectRoot, config.outDir)\r\n };\r\n}\r\n"],"mappings":";AAKA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAGvB,IAAM,gBAAgB;AAAA;AAAA,EAE3B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA;AAAA,EAGR,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA;AAAA,EAGA,KAAK;AAAA,IACH,SAAS;AAAA,IACT,OAAO,CAAC;AAAA,EACV;AAAA;AAAA,EAGA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA;AAAA,EAGA,KAAK;AAAA,IACH,SAAS;AAAA,EACX;AAAA;AAAA,EAGA,SAAS,CAAC;AAAA;AAAA,EAGV,QAAQ,CAAC;AAAA;AAAA,EAGT,SAAS,CAAC;AAAA;AAAA,EAGV,SAAS;AACX;AAOA,eAAsB,WAAW,aAAqB;AAEpD,QAAM,eAAe,KAAK,KAAK,aAAa,sBAAsB;AAClE,QAAM,eAAe,KAAK,KAAK,aAAa,sBAAsB;AAClE,QAAM,aAAa,GAAG,WAAW,YAAY,IAAI,eAAe;AAEhE,MAAI,aAAa,CAAC;AAElB,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,QAAI;AACF,YAAM,YAAY,cAAc,UAAU,EAAE;AAC5C,YAAM,SAAS,MAAM,OAAO,GAAG,SAAS,MAAM,KAAK,IAAI,CAAC;AACxD,mBAAa,OAAO,WAAW;AAAA,IACjC,SAAS,OAAY;AACnB,cAAQ,KAAK,8CAA8C,MAAM,OAAO;AAAA,IAC1E;AAAA,EACF;AAGA,SAAO,UAAU,eAAe,UAAU;AAC5C;AAKA,SAAS,UAAU,QAAQ,QAAQ;AACjC,QAAM,SAAS,EAAE,GAAG,OAAO;AAE3B,aAAW,OAAO,QAAQ;AACxB,QAAI,OAAO,GAAG,KAAK,OAAO,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AACjF,aAAO,GAAG,IAAI,UAAU,OAAO,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC;AAAA,IACxD,OAAO;AACL,aAAO,GAAG,IAAI,OAAO,GAAG;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,aAAa,QAAQ,aAAa;AAChD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,KAAK,QAAQ,aAAa,OAAO,QAAQ;AAAA,IACnD,YAAY,KAAK,QAAQ,aAAa,OAAO,UAAU;AAAA,IACvD,WAAW,KAAK,QAAQ,aAAa,OAAO,SAAS;AAAA,IACrD,QAAQ,KAAK,QAAQ,aAAa,OAAO,MAAM;AAAA,EACjD;AACF;","names":[]}
1
+ {"version":3,"sources":["../../core/config.ts"],"sourcesContent":["/**\r\n * FlexiReact Configuration System\r\n * Handles loading, validation, and merging of configuration\r\n */\r\n\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport { pathToFileURL } from 'url';\r\nimport { z } from 'zod';\r\nimport pc from 'picocolors';\r\n\r\n/**\r\n * Configuration Schema (Zod validation)\r\n */\r\nconst BuildConfigSchema = z.object({\r\n target: z.string().default('es2022'),\r\n minify: z.boolean().default(true),\r\n sourcemap: z.boolean().default(true),\r\n splitting: z.boolean().default(true)\r\n}).default({});\r\n\r\nconst ServerConfigSchema = z.object({\r\n port: z.number().min(1).max(65535).default(3000),\r\n host: z.string().default('localhost')\r\n}).default({});\r\n\r\nconst SSGConfigSchema = z.object({\r\n enabled: z.boolean().default(false),\r\n paths: z.array(z.string()).default([])\r\n}).default({});\r\n\r\nconst IslandsConfigSchema = z.object({\r\n enabled: z.boolean().default(true),\r\n directive: z.string().default('use island')\r\n}).default({});\r\n\r\nconst RSCConfigSchema = z.object({\r\n enabled: z.boolean().default(true)\r\n}).default({});\r\n\r\nconst PluginSchema = z.object({\r\n name: z.string(),\r\n setup: z.function().optional()\r\n}).passthrough();\r\n\r\nexport const FlexiReactConfigSchema = z.object({\r\n // Directories\r\n pagesDir: z.string().default('pages'),\r\n layoutsDir: z.string().default('layouts'),\r\n publicDir: z.string().default('public'),\r\n outDir: z.string().default('.flexi'),\r\n \r\n // Build options\r\n build: BuildConfigSchema,\r\n \r\n // Server options\r\n server: ServerConfigSchema,\r\n \r\n // SSG options\r\n ssg: SSGConfigSchema,\r\n \r\n // Islands (partial hydration)\r\n islands: IslandsConfigSchema,\r\n \r\n // RSC options\r\n rsc: RSCConfigSchema,\r\n \r\n // Plugins\r\n plugins: z.array(PluginSchema).default([]),\r\n \r\n // Styles (CSS files to include)\r\n styles: z.array(z.string()).default([]),\r\n \r\n // Scripts (JS files to include)\r\n scripts: z.array(z.string()).default([]),\r\n \r\n // Favicon path\r\n favicon: z.string().nullable().default(null)\r\n});\r\n\r\nexport type FlexiReactConfig = z.infer<typeof FlexiReactConfigSchema>;\r\n\r\n/**\r\n * Default configuration\r\n */\r\nexport const defaultConfig: FlexiReactConfig = FlexiReactConfigSchema.parse({});\r\n\r\n/**\r\n * Helper function to define configuration with full type support\r\n * Use this in your flexireact.config.ts file\r\n */\r\nexport function defineConfig(config: Partial<FlexiReactConfig>): Partial<FlexiReactConfig> {\r\n return config;\r\n}\r\n\r\n/**\r\n * Loads and validates configuration from the project root\r\n */\r\nexport async function loadConfig(projectRoot: string): Promise<FlexiReactConfig> {\r\n const configPathTs = path.join(projectRoot, 'flexireact.config.ts');\r\n const configPathJs = path.join(projectRoot, 'flexireact.config.js');\r\n const configPath = fs.existsSync(configPathTs) ? configPathTs : configPathJs;\r\n \r\n let userConfig: Partial<FlexiReactConfig> = {};\r\n \r\n if (fs.existsSync(configPath)) {\r\n try {\r\n const configUrl = pathToFileURL(configPath).href;\r\n const module = await import(`${configUrl}?t=${Date.now()}`);\r\n userConfig = module.default || module;\r\n } catch (error: any) {\r\n console.warn(pc.yellow(`⚠ Failed to load config: ${error.message}`));\r\n }\r\n }\r\n \r\n // Merge and validate with Zod\r\n const merged = deepMerge(defaultConfig, userConfig);\r\n \r\n try {\r\n return FlexiReactConfigSchema.parse(merged);\r\n } catch (err: unknown) {\r\n if (err instanceof z.ZodError) {\r\n console.error(pc.red('✖ Configuration validation failed:'));\r\n for (const issue of err.issues) {\r\n console.error(pc.dim(` - ${issue.path.join('.')}: ${issue.message}`));\r\n }\r\n process.exit(1);\r\n }\r\n throw err;\r\n }\r\n}\r\n\r\n/**\r\n * Deep merge two objects\r\n */\r\nfunction deepMerge(target: Record<string, any>, source: Record<string, any>): Record<string, any> {\r\n const result = { ...target };\r\n \r\n for (const key in source) {\r\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\r\n result[key] = deepMerge(target[key] || {}, source[key]);\r\n } else {\r\n result[key] = source[key];\r\n }\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Resolves all paths in config relative to project root\r\n */\r\nexport function resolvePaths(config: any, projectRoot: string): any {\r\n return {\r\n ...config,\r\n pagesDir: path.resolve(projectRoot, config.pagesDir),\r\n layoutsDir: path.resolve(projectRoot, config.layoutsDir),\r\n publicDir: path.resolve(projectRoot, config.publicDir),\r\n outDir: path.resolve(projectRoot, config.outDir)\r\n };\r\n}\r\n"],"mappings":"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","names":[]}