@weconjs/core 0.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,115 @@
1
+ /**
2
+ * @weconjs/core - Socket.IO Integration
3
+ *
4
+ * Provides Socket.IO server setup, handler discovery, and middleware loading.
5
+ * Auto-discovers `*.socket.ts` files from module directories.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // src/modules/chat/socket/chat.socket.ts
10
+ * import { SocketHandler } from '@weconjs/core';
11
+ *
12
+ * const chatHandler: SocketHandler = (io, socket) => {
13
+ * socket.on('message', (data) => {
14
+ * io.emit('message', data);
15
+ * });
16
+ * };
17
+ *
18
+ * export default chatHandler;
19
+ * ```
20
+ */
21
+ import type { Server as HttpServer } from "http";
22
+ import type { Server as HttpsServer } from "https";
23
+ /**
24
+ * Socket.IO Server instance type
25
+ */
26
+ export type SocketServer = import("socket.io").Server;
27
+ /**
28
+ * Socket.IO Socket instance type
29
+ */
30
+ export type SocketInstance = import("socket.io").Socket;
31
+ /**
32
+ * Socket handler function signature
33
+ *
34
+ * Called when a client connects. Use this to set up event listeners.
35
+ */
36
+ export type SocketHandler = (io: SocketServer, socket: SocketInstance) => void;
37
+ /**
38
+ * Socket middleware function signature
39
+ *
40
+ * Called before the connection handler. Can be used for authentication.
41
+ */
42
+ export type SocketMiddleware = (socket: SocketInstance, next: (err?: Error) => void) => void;
43
+ /**
44
+ * Discovered socket handler with metadata
45
+ */
46
+ export interface DiscoveredSocketHandler {
47
+ name: string;
48
+ namespace: string;
49
+ handler: SocketHandler;
50
+ }
51
+ /**
52
+ * Socket configuration options
53
+ */
54
+ export interface SocketOptions {
55
+ /**
56
+ * Enable Socket.IO
57
+ */
58
+ enabled?: boolean;
59
+ /**
60
+ * CORS configuration
61
+ */
62
+ cors?: {
63
+ origin: string | string[];
64
+ methods?: string[];
65
+ credentials?: boolean;
66
+ };
67
+ /**
68
+ * Path for the Socket.IO endpoint
69
+ */
70
+ path?: string;
71
+ }
72
+ /**
73
+ * Create a Socket.IO server attached to an HTTP server
74
+ *
75
+ * @param httpServer - The HTTP/HTTPS server to attach to
76
+ * @param options - Socket configuration options
77
+ * @returns Socket.IO server instance
78
+ */
79
+ export declare function createSocketServer(httpServer: HttpServer | HttpsServer, options?: SocketOptions): Promise<SocketServer>;
80
+ /**
81
+ * Discover socket handlers in module directories
82
+ *
83
+ * Scans for `socket/*.socket.ts` files in each module.
84
+ *
85
+ * @param modulesDir - Path to the modules directory
86
+ * @returns Array of discovered socket handlers
87
+ */
88
+ export declare function discoverSocketHandlers(modulesDir: string): Promise<DiscoveredSocketHandler[]>;
89
+ /**
90
+ * Discover socket middleware in module directories
91
+ *
92
+ * Looks for `socket/socket.middleware.ts` in each module.
93
+ *
94
+ * @param modulesDir - Path to the modules directory
95
+ * @returns Array of socket middleware functions
96
+ */
97
+ export declare function discoverSocketMiddleware(modulesDir: string): Promise<SocketMiddleware[]>;
98
+ /**
99
+ * Initialize Socket.IO with discovered handlers and middleware
100
+ *
101
+ * @param io - Socket.IO server instance
102
+ * @param handlers - Discovered socket handlers
103
+ * @param middleware - Socket middleware functions
104
+ */
105
+ export declare function initializeSocket(io: SocketServer, handlers: DiscoveredSocketHandler[], middleware?: SocketMiddleware[]): void;
106
+ /**
107
+ * Full Socket.IO setup for a Wecon application
108
+ *
109
+ * @param httpServer - HTTP server to attach to
110
+ * @param modulesDir - Path to modules directory
111
+ * @param options - Socket configuration
112
+ * @returns Socket.IO server instance
113
+ */
114
+ export declare function setupSocketIO(httpServer: HttpServer | HttpsServer, modulesDir: string, options?: SocketOptions): Promise<SocketServer | null>;
115
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAInD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,WAAW,EAAE,MAAM,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,WAAW,EAAE,MAAM,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AAE/E;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,KACxB,IAAI,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IAEF;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,GAAG,WAAW,EACpC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAavB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CA2CpC;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAiC7B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,uBAAuB,EAAE,EACnC,UAAU,GAAE,gBAAgB,EAAO,GAClC,IAAI,CAyBN;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,GAAG,WAAW,EACpC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmB9B"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * @weconjs/core - Socket.IO Integration
3
+ *
4
+ * Provides Socket.IO server setup, handler discovery, and middleware loading.
5
+ * Auto-discovers `*.socket.ts` files from module directories.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // src/modules/chat/socket/chat.socket.ts
10
+ * import { SocketHandler } from '@weconjs/core';
11
+ *
12
+ * const chatHandler: SocketHandler = (io, socket) => {
13
+ * socket.on('message', (data) => {
14
+ * io.emit('message', data);
15
+ * });
16
+ * };
17
+ *
18
+ * export default chatHandler;
19
+ * ```
20
+ */
21
+ import { glob } from "glob";
22
+ import { basename, dirname } from "path";
23
+ /**
24
+ * Create a Socket.IO server attached to an HTTP server
25
+ *
26
+ * @param httpServer - The HTTP/HTTPS server to attach to
27
+ * @param options - Socket configuration options
28
+ * @returns Socket.IO server instance
29
+ */
30
+ export async function createSocketServer(httpServer, options = {}) {
31
+ // Dynamic import to avoid bundling issues
32
+ const { Server } = await import("socket.io");
33
+ const io = new Server(httpServer, {
34
+ path: options.path || "/socket.io",
35
+ cors: options.cors || {
36
+ origin: "*",
37
+ methods: ["GET", "POST"],
38
+ },
39
+ });
40
+ return io;
41
+ }
42
+ /**
43
+ * Discover socket handlers in module directories
44
+ *
45
+ * Scans for `socket/*.socket.ts` files in each module.
46
+ *
47
+ * @param modulesDir - Path to the modules directory
48
+ * @returns Array of discovered socket handlers
49
+ */
50
+ export async function discoverSocketHandlers(modulesDir) {
51
+ const handlers = [];
52
+ try {
53
+ // Find all *.socket.ts files
54
+ const files = await glob("**/socket/*.socket.{ts,js}", {
55
+ cwd: modulesDir,
56
+ absolute: true,
57
+ });
58
+ for (const file of files) {
59
+ try {
60
+ const module = await import(file);
61
+ const handler = module.default;
62
+ if (typeof handler !== "function") {
63
+ console.warn(`[Wecon] Socket file ${basename(file)} must export a default function`);
64
+ continue;
65
+ }
66
+ // Extract handler name and module namespace
67
+ const fileName = basename(file).replace(/\.socket\.(ts|js)$/, "");
68
+ const moduleDir = dirname(dirname(file)); // Go up from socket/
69
+ const namespace = basename(moduleDir);
70
+ handlers.push({
71
+ name: fileName,
72
+ namespace,
73
+ handler,
74
+ });
75
+ console.log(`[Wecon] Discovered socket handler: ${namespace}/${fileName}`);
76
+ }
77
+ catch (err) {
78
+ console.error(`[Wecon] Failed to load socket handler ${file}:`, err);
79
+ }
80
+ }
81
+ }
82
+ catch (err) {
83
+ console.warn("[Wecon] Failed to discover socket handlers:", err);
84
+ }
85
+ return handlers;
86
+ }
87
+ /**
88
+ * Discover socket middleware in module directories
89
+ *
90
+ * Looks for `socket/socket.middleware.ts` in each module.
91
+ *
92
+ * @param modulesDir - Path to the modules directory
93
+ * @returns Array of socket middleware functions
94
+ */
95
+ export async function discoverSocketMiddleware(modulesDir) {
96
+ const middleware = [];
97
+ try {
98
+ // Find all socket.middleware.ts files
99
+ const files = await glob("**/socket/socket.middleware.{ts,js}", {
100
+ cwd: modulesDir,
101
+ absolute: true,
102
+ });
103
+ for (const file of files) {
104
+ try {
105
+ const module = await import(file);
106
+ const mw = module.default;
107
+ if (Array.isArray(mw)) {
108
+ middleware.push(...mw.filter((m) => typeof m === "function"));
109
+ }
110
+ else if (typeof mw === "function") {
111
+ middleware.push(mw);
112
+ }
113
+ else {
114
+ console.warn(`[Wecon] ${file} must export a middleware function or array`);
115
+ }
116
+ }
117
+ catch (err) {
118
+ // File doesn't exist or error - skip
119
+ }
120
+ }
121
+ }
122
+ catch (err) {
123
+ console.warn("[Wecon] Failed to discover socket middleware:", err);
124
+ }
125
+ return middleware;
126
+ }
127
+ /**
128
+ * Initialize Socket.IO with discovered handlers and middleware
129
+ *
130
+ * @param io - Socket.IO server instance
131
+ * @param handlers - Discovered socket handlers
132
+ * @param middleware - Socket middleware functions
133
+ */
134
+ export function initializeSocket(io, handlers, middleware = []) {
135
+ // Apply middleware
136
+ for (const mw of middleware) {
137
+ io.use(mw);
138
+ }
139
+ // Set up connection handler
140
+ io.on("connection", (socket) => {
141
+ console.log(`[Wecon] Socket connected: ${socket.id}`);
142
+ // Call all discovered handlers
143
+ for (const { handler, namespace, name } of handlers) {
144
+ try {
145
+ handler(io, socket);
146
+ }
147
+ catch (err) {
148
+ console.error(`[Wecon] Error in socket handler ${namespace}/${name}:`, err);
149
+ }
150
+ }
151
+ socket.on("disconnect", () => {
152
+ console.log(`[Wecon] Socket disconnected: ${socket.id}`);
153
+ });
154
+ });
155
+ console.log(`[Wecon] Socket.IO initialized with ${handlers.length} handlers`);
156
+ }
157
+ /**
158
+ * Full Socket.IO setup for a Wecon application
159
+ *
160
+ * @param httpServer - HTTP server to attach to
161
+ * @param modulesDir - Path to modules directory
162
+ * @param options - Socket configuration
163
+ * @returns Socket.IO server instance
164
+ */
165
+ export async function setupSocketIO(httpServer, modulesDir, options = {}) {
166
+ if (options.enabled === false) {
167
+ console.log("[Wecon] Socket.IO disabled");
168
+ return null;
169
+ }
170
+ // Create Socket.IO server
171
+ const io = await createSocketServer(httpServer, options);
172
+ // Discover handlers and middleware
173
+ const [handlers, middleware] = await Promise.all([
174
+ discoverSocketHandlers(modulesDir),
175
+ discoverSocketMiddleware(modulesDir),
176
+ ]);
177
+ // Initialize
178
+ initializeSocket(io, handlers, middleware);
179
+ return io;
180
+ }
181
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,294 @@
1
+ /**
2
+ * @wecon/core - Core Types
3
+ *
4
+ * Type definitions for the Wecon framework configuration and modules.
5
+ */
6
+ import type { Application, Request, Response, NextFunction } from "express";
7
+ import type { Server, Socket } from "socket.io";
8
+ import type { z } from "zod";
9
+ /**
10
+ * App metadata configuration
11
+ */
12
+ export interface AppConfig {
13
+ name: string;
14
+ version?: string;
15
+ }
16
+ /**
17
+ * Database configuration
18
+ */
19
+ export interface DatabaseConfig {
20
+ debug?: boolean;
21
+ mongoose?: {
22
+ protocol?: string;
23
+ host?: string;
24
+ port?: number;
25
+ database?: string;
26
+ auth?: {
27
+ username?: string;
28
+ password?: string;
29
+ };
30
+ };
31
+ }
32
+ /**
33
+ * Logging configuration
34
+ */
35
+ export interface LoggingConfig {
36
+ level?: "debug" | "info" | "warn" | "error";
37
+ format?: string;
38
+ enableConsole?: boolean;
39
+ enableFile?: boolean;
40
+ filePath?: string;
41
+ }
42
+ /**
43
+ * HTTPS configuration
44
+ */
45
+ export interface HttpsConfig {
46
+ enabled?: boolean;
47
+ port?: number;
48
+ keyPath?: string;
49
+ certPath?: string;
50
+ }
51
+ /**
52
+ * Socket configuration
53
+ */
54
+ export interface SocketConfig {
55
+ enabled?: boolean;
56
+ path?: string;
57
+ cors?: {
58
+ origin?: string | string[];
59
+ methods?: string[];
60
+ credentials?: boolean;
61
+ };
62
+ }
63
+ /**
64
+ * Feature flags configuration
65
+ */
66
+ export interface FeaturesConfig {
67
+ fieldShield?: {
68
+ enabled?: boolean;
69
+ strict?: boolean;
70
+ };
71
+ i18n?: {
72
+ enabled?: boolean;
73
+ defaultLocale?: string;
74
+ supported?: string[];
75
+ };
76
+ swagger?: {
77
+ enabled?: boolean;
78
+ path?: string;
79
+ };
80
+ socket?: SocketConfig;
81
+ }
82
+ /**
83
+ * Mode-specific configuration
84
+ */
85
+ export interface ModeConfig {
86
+ extends?: string;
87
+ port?: number;
88
+ database?: DatabaseConfig;
89
+ logging?: LoggingConfig;
90
+ https?: HttpsConfig;
91
+ [key: string]: unknown;
92
+ }
93
+ /**
94
+ * Lifecycle hooks
95
+ */
96
+ export interface WeconHooks {
97
+ onBoot?: (app: Application, ctx: WeconContext) => Promise<void> | void;
98
+ onShutdown?: (ctx: WeconContext) => Promise<void> | void;
99
+ onModuleInit?: (moduleName: string, ctx: WeconContext) => Promise<void> | void;
100
+ }
101
+ /**
102
+ * Main Wecon configuration
103
+ */
104
+ export interface WeconConfig {
105
+ app: AppConfig;
106
+ modes?: Record<string, ModeConfig>;
107
+ modules?: string[];
108
+ features?: FeaturesConfig;
109
+ hooks?: WeconHooks;
110
+ }
111
+ /**
112
+ * Resolved configuration (after mode merging)
113
+ */
114
+ export interface ResolvedConfig {
115
+ app: Required<AppConfig>;
116
+ mode: string;
117
+ port: number;
118
+ database: DatabaseConfig;
119
+ logging: LoggingConfig;
120
+ https: HttpsConfig;
121
+ features: FeaturesConfig;
122
+ modules: string[];
123
+ }
124
+ /**
125
+ * Module-specific configuration with Zod schema
126
+ */
127
+ export interface ModuleConfigDefinition<T extends z.ZodType = z.ZodType> {
128
+ schema: T;
129
+ defaults?: Partial<z.infer<T>>;
130
+ }
131
+ /**
132
+ * Module definition input
133
+ */
134
+ export interface ModuleDefinition {
135
+ name: string;
136
+ namespace?: string;
137
+ description?: string;
138
+ config?: ModuleConfigDefinition;
139
+ routes?: unknown;
140
+ imports?: string[];
141
+ exports?: string[];
142
+ onInit?: (ctx: WeconContext) => Promise<void> | void;
143
+ onDestroy?: (ctx: WeconContext) => Promise<void> | void;
144
+ }
145
+ /**
146
+ * Registered module (with computed defaults)
147
+ */
148
+ export interface WeconModule extends ModuleDefinition {
149
+ namespace: string;
150
+ description: string;
151
+ socketHandlers?: SocketHandler[];
152
+ socketMiddleware?: SocketMiddleware[];
153
+ }
154
+ /**
155
+ * Socket handler function signature
156
+ */
157
+ export type SocketHandler = (socket: Socket, ctx: WeconContext) => void;
158
+ /**
159
+ * Socket middleware function signature
160
+ */
161
+ export type SocketMiddleware = (socket: Socket, next: (err?: Error) => void, ctx: WeconContext) => void | Promise<void>;
162
+ /**
163
+ * Logger interface
164
+ */
165
+ export interface WeconLogger {
166
+ debug(message: string, meta?: Record<string, unknown>): void;
167
+ info(message: string, meta?: Record<string, unknown>): void;
168
+ warn(message: string, meta?: Record<string, unknown>): void;
169
+ error(message: string, meta?: Record<string, unknown>): void;
170
+ }
171
+ /**
172
+ * Services container
173
+ */
174
+ export interface WeconServices {
175
+ [key: string]: unknown;
176
+ }
177
+ /**
178
+ * Application context passed to handlers, middleware, and hooks
179
+ */
180
+ export interface WeconContext {
181
+ /** Resolved configuration */
182
+ config: ResolvedConfig;
183
+ /** Logger instance */
184
+ logger: WeconLogger;
185
+ /** Registered services */
186
+ services: WeconServices;
187
+ /** Express application */
188
+ app: Application;
189
+ /** Socket.IO server (if enabled) */
190
+ io?: Server;
191
+ /** Get a specific service */
192
+ getService<T>(name: string): T | undefined;
193
+ /** Register a service */
194
+ registerService(name: string, service: unknown): void;
195
+ }
196
+ /**
197
+ * Base interface for all authenticable models.
198
+ *
199
+ * Any model that can be used for authentication (User, Admin, ServiceAccount, etc.)
200
+ * must implement this interface.
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * interface User extends Authenticable {
205
+ * email: string;
206
+ * name: { first: string; last: string };
207
+ * }
208
+ *
209
+ * interface Admin extends Authenticable {
210
+ * permissions: string[];
211
+ * department: string;
212
+ * }
213
+ * ```
214
+ */
215
+ export interface Authenticable {
216
+ /** Unique identifier (MongoDB ObjectId or string) */
217
+ _id: unknown;
218
+ /** Primary role of the user */
219
+ role: string;
220
+ /** All roles assigned to the user */
221
+ roles: string[];
222
+ /** Model name for role-agnostic auth (e.g., 'User', 'Admin') */
223
+ __modelName?: string;
224
+ }
225
+ /**
226
+ * Authentication configuration for features
227
+ */
228
+ export interface AuthConfig {
229
+ /** List of authenticable model names */
230
+ authenticables?: string[];
231
+ /** Default model to use for authentication */
232
+ defaultModel?: string;
233
+ /** JWT configuration */
234
+ jwt?: {
235
+ secret?: string;
236
+ expiresIn?: number;
237
+ algorithm?: string;
238
+ };
239
+ /** Session configuration */
240
+ session?: {
241
+ name?: string;
242
+ maxAge?: number;
243
+ secure?: boolean;
244
+ };
245
+ }
246
+ /**
247
+ * Extended Express Request with Wecon context and typed user.
248
+ *
249
+ * The `TUser` generic parameter allows type-safe access to the authenticated user.
250
+ *
251
+ * @example
252
+ * ```typescript
253
+ * // Single model
254
+ * app.get('/profile', (req: WeconRequest<User>, res) => {
255
+ * req.user?.email; // ✅ TypeScript knows about email
256
+ * });
257
+ *
258
+ * // Multiple models (union type)
259
+ * type AuthUser = User | Admin;
260
+ * app.get('/dashboard', (req: WeconRequest<AuthUser>, res) => {
261
+ * if (req.user && 'permissions' in req.user) {
262
+ * // It's an Admin
263
+ * }
264
+ * });
265
+ * ```
266
+ */
267
+ export interface WeconRequest<TUser extends Authenticable = Authenticable> extends Request {
268
+ /** Wecon application context */
269
+ ctx: WeconContext;
270
+ /** Authenticated user (typed based on TUser generic) */
271
+ user?: TUser;
272
+ /** i18n translation function */
273
+ t: (key: string, options?: Record<string, unknown>) => string;
274
+ }
275
+ /**
276
+ * Extended Express Response with helpers
277
+ */
278
+ export interface WeconResponse extends Response {
279
+ respond: (data: {
280
+ data?: unknown;
281
+ message?: string;
282
+ status?: number;
283
+ meta?: Record<string, unknown>;
284
+ }) => void;
285
+ }
286
+ /**
287
+ * Route handler type with generic user
288
+ */
289
+ export type RouteHandler<TUser extends Authenticable = Authenticable> = (req: WeconRequest<TUser>, res: WeconResponse, next: NextFunction) => void | Promise<void>;
290
+ /**
291
+ * Middleware type with generic user
292
+ */
293
+ export type WeconMiddleware<TUser extends Authenticable = Authenticable> = (req: WeconRequest<TUser>, res: WeconResponse, next: NextFunction) => void | Promise<void>;
294
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @wecon/core - Core Types
3
+ *
4
+ * Type definitions for the Wecon framework configuration and modules.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@weconjs/core",
3
+ "version": "0.1.1",
4
+ "description": "Wecon Framework Core - defineConfig, defineModule, and runtime utilities",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "clean": "rm -rf dist",
18
+ "test": "vitest run",
19
+ "test:watch": "vitest",
20
+ "test:coverage": "vitest run --coverage"
21
+ },
22
+ "dependencies": {
23
+ "glob": "^10.3.10",
24
+ "zod": "^3.22.4"
25
+ },
26
+ "devDependencies": {
27
+ "@types/express": "^5.0.6",
28
+ "@types/node": "^20.10.0",
29
+ "express": "^5.0.1",
30
+ "mongoose": "^8.0.0",
31
+ "socket.io": "^4.8.1",
32
+ "typescript": "^5.3.3",
33
+ "vitest": "^4.0.15"
34
+ },
35
+ "peerDependencies": {
36
+ "express": "^5.0.0",
37
+ "mongoose": "^8.0.0",
38
+ "socket.io": "^4.6.0"
39
+ },
40
+ "peerDependenciesMeta": {
41
+ "socket.io": {
42
+ "optional": true
43
+ }
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "README.md"
48
+ ],
49
+ "keywords": [
50
+ "wecon",
51
+ "framework",
52
+ "express",
53
+ "typescript",
54
+ "modular"
55
+ ],
56
+ "author": "kemora13conf",
57
+ "license": "MIT",
58
+ "repository": {
59
+ "type": "git",
60
+ "url": "git+https://github.com/weconjs/core.git"
61
+ },
62
+ "homepage": "https://github.com/weconjs/core#readme",
63
+ "bugs": {
64
+ "url": "https://github.com/weconjs/core/issues"
65
+ }
66
+ }