@shardev/vite-plugin-modular 1.2.0 → 1.2.2

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/dist/index.cjs CHANGED
@@ -43,7 +43,8 @@ function laravelModule(options) {
43
43
  name,
44
44
  vendor = "shardevcom",
45
45
  srcDir = "resources/react/src",
46
- inputs = ["main.tsx"],
46
+ input,
47
+ inputs,
47
48
  buildDir = `build/${vendor}/${name}`,
48
49
  publishedDir = `resources/react/${vendor}/${name}`
49
50
  } = options;
@@ -51,26 +52,36 @@ function laravelModule(options) {
51
52
  const moduleRoot = import_path.default.resolve(root, "packages", vendor, name);
52
53
  const relative = import_path.default.relative(moduleRoot, root);
53
54
  const isModuleRoot = !relative || relative === "." || !relative.startsWith("..");
54
- const inputPaths = {};
55
- inputs.forEach((file) => {
56
- const key = import_path.default.parse(file).name;
57
- inputPaths[key] = import_path.default.resolve(moduleRoot, srcDir, file);
58
- });
59
- const publishedPath = import_path.default.resolve(root, publishedDir);
60
- const isPublished = import_fs.default.existsSync(publishedPath);
61
- const aliasPath = isPublished ? publishedPath : import_path.default.resolve(moduleRoot, srcDir);
55
+ let normalizedInput = {};
56
+ if (input && Object.keys(input).length > 0) {
57
+ for (const [key, file] of Object.entries(input)) {
58
+ normalizedInput[key] = import_path.default.resolve(moduleRoot, file);
59
+ }
60
+ } else {
61
+ const legacyInputs = inputs ?? ["main.tsx"];
62
+ legacyInputs.forEach((file) => {
63
+ const key = import_path.default.parse(file).name;
64
+ normalizedInput[key] = import_path.default.resolve(moduleRoot, srcDir, file);
65
+ });
66
+ }
67
+ const absoluteSrcDir = import_path.default.resolve(moduleRoot, srcDir);
68
+ const absolutePublishedDir = import_path.default.resolve(root, publishedDir);
69
+ const isPublished = import_fs.default.existsSync(absolutePublishedDir);
70
+ const aliasPath = isPublished ? absolutePublishedDir : absoluteSrcDir;
62
71
  const meta = {
63
72
  name,
64
- input: inputPaths,
73
+ input: normalizedInput,
65
74
  buildDir,
66
75
  alias: {
67
76
  [`@${vendor}/${name}`]: aliasPath
68
77
  },
69
- usePublished: isPublished
78
+ usePublished: isPublished,
79
+ srcDir: absoluteSrcDir,
80
+ publishedDir: absolutePublishedDir
70
81
  };
71
82
  return {
72
83
  name: `vite-plugin-laravel-module:${name}`,
73
- // 🔥 Metadata directa para el root plugin
84
+ // 🔥 Metadata consumida por laravelModules()
74
85
  shardevMeta: meta,
75
86
  config() {
76
87
  if (isModuleRoot) {
@@ -79,7 +90,7 @@ function laravelModule(options) {
79
90
  outDir: buildDir,
80
91
  emptyOutDir: true,
81
92
  rollupOptions: {
82
- input: inputPaths
93
+ input: normalizedInput
83
94
  }
84
95
  },
85
96
  resolve: {
@@ -176,9 +187,10 @@ function laravelModules(options = {}) {
176
187
  return inputs;
177
188
  };
178
189
  const resolveWatchPath = (meta) => {
179
- const base = meta.usePublished && meta.publishedDir ? meta.publishedDir : meta.srcDir;
180
- if (!base) return null;
181
- return import_path2.default.isAbsolute(base) ? base : import_path2.default.resolve(root, base);
190
+ if (meta.usePublished && meta.publishedDir) {
191
+ return meta.publishedDir;
192
+ }
193
+ return meta.srcDir ?? null;
182
194
  };
183
195
  const handleHMR = (server, file) => {
184
196
  const module2 = server.moduleGraph.getModuleById(file);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/laravelModule.ts","../src/laravelModules.ts"],"sourcesContent":["export { default as laravelModule } from './laravelModule';\r\nexport { default as laravelModules } from './laravelModules';","import fs from 'fs'\nimport path from 'path'\nimport type { PluginOption } from 'vite'\n\nexport interface ModuleOptions {\n name: string\n vendor?: string\n srcDir?: string\n inputs?: string[]\n buildDir?: string\n publishedDir?: string\n}\n\nexport interface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n}\n\nexport default function laravelModule(options: ModuleOptions): PluginOption {\n const {\n name,\n vendor = 'shardevcom',\n srcDir = 'resources/react/src',\n inputs = ['main.tsx'],\n buildDir = `build/${vendor}/${name}`,\n publishedDir = `resources/react/${vendor}/${name}`\n } = options\n\n const root = process.cwd()\n const moduleRoot = path.resolve(root, 'packages', vendor, name)\n\n const relative = path.relative(moduleRoot, root)\n const isModuleRoot = !relative || relative === '.' || !relative.startsWith('..')\n\n const inputPaths: Record<string, string> = {}\n inputs.forEach(file => {\n const key = path.parse(file).name\n inputPaths[key] = path.resolve(moduleRoot, srcDir, file)\n })\n\n const publishedPath = path.resolve(root, publishedDir)\n const isPublished = fs.existsSync(publishedPath)\n\n const aliasPath = isPublished\n ? publishedPath\n : path.resolve(moduleRoot, srcDir)\n\n const meta: ShardevModuleMeta = {\n name,\n input: inputPaths,\n buildDir,\n alias: {\n [`@${vendor}/${name}`]: aliasPath\n },\n usePublished: isPublished\n }\n\n return {\n name: `vite-plugin-laravel-module:${name}`,\n\n // 🔥 Metadata directa para el root plugin\n shardevMeta: meta,\n\n config() {\n // 🔹 Standalone build\n if (isModuleRoot) {\n return {\n build: {\n outDir: buildDir,\n emptyOutDir: true,\n rollupOptions: {\n input: inputPaths\n }\n },\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n // 🔹 Integrated mode (root controla el build)\n return {\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n } as PluginOption\n}","import type { Plugin, UserConfig, ConfigEnv, ViteDevServer, ModuleNode } from 'vite'\nimport { mergeConfig, createServer } from 'vite'\nimport path from 'path'\nimport fs from 'fs'\n\ninterface LaravelModulesOptions {\n modulesDir?: string\n statusesFile?: string\n debug?: boolean\n useMetaCache?: boolean\n}\n\ninterface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n srcDir: string\n publishedDir?: string\n}\n\nexport default function laravelModules(\n options: LaravelModulesOptions = {}\n): Plugin {\n\n const {\n modulesDir = 'packages',\n statusesFile = 'modules.json',\n debug = false,\n useMetaCache = true\n } = options\n\n const root = process.cwd()\n const modulesPath = path.resolve(root, modulesDir)\n const statusesPath = path.resolve(root, statusesFile)\n\n let cachedMetas: ShardevModuleMeta[] = []\n let metaCacheLoaded = false\n\n const log = (...args: any[]) => {\n if (debug) console.log('[laravel-modules]', ...args)\n }\n\n const loadStatuses = (): Record<string, boolean> => {\n if (!fs.existsSync(statusesPath)) return {}\n try {\n return JSON.parse(fs.readFileSync(statusesPath, 'utf-8'))\n } catch {\n return {}\n }\n }\n\n const validateMeta = (meta: ShardevModuleMeta) => {\n if (!meta.name) throw new Error('Module meta missing name')\n if (!meta.srcDir) throw new Error(`Module ${meta.name} missing srcDir`)\n if (!meta.input) throw new Error(`Module ${meta.name} missing input`)\n }\n\n const discoverModules = async (): Promise<ShardevModuleMeta[]> => {\n\n if (useMetaCache && metaCacheLoaded) {\n log('Using cached module metas')\n return cachedMetas\n }\n\n if (!fs.existsSync(modulesPath)) return []\n\n const statuses = loadStatuses()\n const metas: ShardevModuleMeta[] = []\n\n const vendors = fs.readdirSync(modulesPath, { withFileTypes: true })\n .filter(d => d.isDirectory())\n\n for (const vendor of vendors) {\n const vendorPath = path.join(modulesPath, vendor.name)\n\n const packages = fs.readdirSync(vendorPath, { withFileTypes: true })\n .filter(d => d.isDirectory() && statuses[d.name] !== false)\n\n for (const pkg of packages) {\n\n const pkgPath = path.join(vendorPath, pkg.name)\n const viteConfigPath = path.join(pkgPath, 'vite.config.ts')\n\n if (!fs.existsSync(viteConfigPath)) continue\n\n const server = await createServer({\n configFile: viteConfigPath,\n logLevel: 'silent'\n })\n\n const plugins = (server.config.plugins || []) as Plugin[]\n\n for (const plugin of plugins) {\n if (plugin?.name?.startsWith('vite-plugin-laravel-module:')) {\n const meta = (plugin as any).shardevMeta as ShardevModuleMeta\n if (meta) {\n validateMeta(meta)\n metas.push(meta)\n }\n }\n }\n\n await server.close()\n }\n }\n\n cachedMetas = metas\n metaCacheLoaded = true\n\n log('Discovered modules:', metas.map(m => m.name))\n\n return metas\n }\n\n const generateInputs = (metas: ShardevModuleMeta[]) => {\n const inputs: Record<string, string> = {}\n metas.forEach(meta => {\n Object.entries(meta.input).forEach(([key, value]) => {\n inputs[`${meta.name}-${key}`] = value\n })\n })\n return inputs\n }\n\n const resolveWatchPath = (meta: ShardevModuleMeta): string | null => {\n const base = meta.usePublished && meta.publishedDir\n ? meta.publishedDir\n : meta.srcDir\n\n if (!base) return null\n\n return path.isAbsolute(base)\n ? base\n : path.resolve(root, base)\n }\n\n const handleHMR = (\n server: ViteDevServer,\n file: string\n ) => {\n\n const module = server.moduleGraph.getModuleById(file)\n\n if (!module) return\n\n log('HMR update:', file)\n\n const updates = [{\n type: 'js-update',\n path: module.url,\n acceptedPath: module.url,\n timestamp: Date.now()\n }]\n\n server.moduleGraph.invalidateModule(module)\n\n server.ws.send({\n type: 'update',\n updates\n })\n }\n\n return {\n name: 'laravel-modules',\n\n async config(config: UserConfig, env: ConfigEnv) {\n\n const metas = await discoverModules()\n\n const aliases: Record<string, string> = {}\n metas.forEach(meta => Object.assign(aliases, meta.alias))\n\n const rollupInputs = generateInputs(metas)\n\n return mergeConfig(config, {\n resolve: { alias: aliases },\n build: {\n rollupOptions: { input: rollupInputs }\n }\n })\n },\n\n async configureServer(server: ViteDevServer) {\n\n const metas = await discoverModules()\n\n for (const meta of metas) {\n const watchPath = resolveWatchPath(meta)\n if (watchPath && fs.existsSync(watchPath)) {\n server.watcher.add(watchPath)\n log('Watching:', watchPath)\n }\n }\n\n server.watcher.on('change', (file) => {\n\n const matched = metas.some(meta => {\n const watchPath = resolveWatchPath(meta)\n return watchPath && file.startsWith(watchPath)\n })\n\n if (!matched) return\n\n handleHMR(server, file)\n })\n }\n }\n}"],"mappings":"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","names":["path","fs","import_path","import_fs","path","fs","module"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/laravelModule.ts","../src/laravelModules.ts"],"sourcesContent":["export { laravelModule } from './laravelModule'\r\nexport { laravelModules } from './laravelModules'","import fs from 'fs'\nimport path from 'path'\nimport type { PluginOption } from 'vite'\n\nexport interface ModuleOptions {\n name: string\n vendor?: string\n srcDir?: string\n\n // ✅ Nuevo formato recomendado\n input?: Record<string, string>\n\n // ⚠ Backward compatibility\n inputs?: string[]\n\n buildDir?: string\n publishedDir?: string\n}\n\ninterface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n srcDir: string\n publishedDir?: string\n}\n\nexport function laravelModule(options: ModuleOptions): PluginOption {\n\n const {\n name,\n vendor = 'shardevcom',\n srcDir = 'resources/react/src',\n input,\n inputs,\n buildDir = `build/${vendor}/${name}`,\n publishedDir = `resources/react/${vendor}/${name}`\n } = options\n\n const root = process.cwd()\n const moduleRoot = path.resolve(root, 'packages', vendor, name)\n\n const relative = path.relative(moduleRoot, root)\n const isModuleRoot =\n !relative || relative === '.' || !relative.startsWith('..')\n\n // ---------------------------------------------------\n // 🔥 Normalización inteligente de inputs\n // ---------------------------------------------------\n\n let normalizedInput: Record<string, string> = {}\n\n if (input && Object.keys(input).length > 0) {\n // Nuevo formato recomendado\n for (const [key, file] of Object.entries(input)) {\n normalizedInput[key] = path.resolve(moduleRoot, file)\n }\n } else {\n // Backward compatibility con inputs: []\n const legacyInputs = inputs ?? ['main.tsx']\n\n legacyInputs.forEach(file => {\n const key = path.parse(file).name\n normalizedInput[key] = path.resolve(moduleRoot, srcDir, file)\n })\n }\n\n // ---------------------------------------------------\n // Published detection\n // ---------------------------------------------------\n const absoluteSrcDir = path.resolve(moduleRoot, srcDir)\n const absolutePublishedDir = path.resolve(root, publishedDir)\n\n const isPublished = fs.existsSync(absolutePublishedDir)\n\n const aliasPath = isPublished\n ? absolutePublishedDir\n : absoluteSrcDir\n\n const meta: ShardevModuleMeta = {\n name,\n input: normalizedInput,\n buildDir,\n alias: {\n [`@${vendor}/${name}`]: aliasPath\n },\n usePublished: isPublished,\n srcDir: absoluteSrcDir,\n publishedDir: absolutePublishedDir\n }\n\n return {\n name: `vite-plugin-laravel-module:${name}`,\n\n // 🔥 Metadata consumida por laravelModules()\n shardevMeta: meta,\n\n config() {\n\n // 🔹 Standalone build\n if (isModuleRoot) {\n return {\n build: {\n outDir: buildDir,\n emptyOutDir: true,\n rollupOptions: {\n input: normalizedInput\n }\n },\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n // 🔹 Integrated mode\n return {\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n } as PluginOption\n}","import type { Plugin, UserConfig, ConfigEnv, ViteDevServer, ModuleNode } from 'vite'\nimport { mergeConfig, createServer } from 'vite'\nimport path from 'path'\nimport fs from 'fs'\n\ninterface LaravelModulesOptions {\n modulesDir?: string\n statusesFile?: string\n debug?: boolean\n useMetaCache?: boolean\n}\n\ninterface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n srcDir: string\n publishedDir?: string\n}\n\nexport function laravelModules(\n options: LaravelModulesOptions = {}\n): Plugin {\n\n const {\n modulesDir = 'packages',\n statusesFile = 'modules.json',\n debug = false,\n useMetaCache = true\n } = options\n\n const root = process.cwd()\n const modulesPath = path.resolve(root, modulesDir)\n const statusesPath = path.resolve(root, statusesFile)\n\n let cachedMetas: ShardevModuleMeta[] = []\n let metaCacheLoaded = false\n\n const log = (...args: any[]) => {\n if (debug) console.log('[laravel-modules]', ...args)\n }\n\n const loadStatuses = (): Record<string, boolean> => {\n if (!fs.existsSync(statusesPath)) return {}\n try {\n return JSON.parse(fs.readFileSync(statusesPath, 'utf-8'))\n } catch {\n return {}\n }\n }\n\n const validateMeta = (meta: ShardevModuleMeta) => {\n if (!meta.name) throw new Error('Module meta missing name')\n if (!meta.srcDir) throw new Error(`Module ${meta.name} missing srcDir`)\n if (!meta.input) throw new Error(`Module ${meta.name} missing input`)\n }\n\n const discoverModules = async (): Promise<ShardevModuleMeta[]> => {\n\n if (useMetaCache && metaCacheLoaded) {\n log('Using cached module metas')\n return cachedMetas\n }\n\n if (!fs.existsSync(modulesPath)) return []\n\n const statuses = loadStatuses()\n const metas: ShardevModuleMeta[] = []\n\n const vendors = fs.readdirSync(modulesPath, { withFileTypes: true })\n .filter(d => d.isDirectory())\n\n for (const vendor of vendors) {\n const vendorPath = path.join(modulesPath, vendor.name)\n\n const packages = fs.readdirSync(vendorPath, { withFileTypes: true })\n .filter(d => d.isDirectory() && statuses[d.name] !== false)\n\n for (const pkg of packages) {\n\n const pkgPath = path.join(vendorPath, pkg.name)\n const viteConfigPath = path.join(pkgPath, 'vite.config.ts')\n\n if (!fs.existsSync(viteConfigPath)) continue\n\n const server = await createServer({\n configFile: viteConfigPath,\n logLevel: 'silent'\n })\n\n const plugins = (server.config.plugins || []) as Plugin[]\n\n for (const plugin of plugins) {\n if (plugin?.name?.startsWith('vite-plugin-laravel-module:')) {\n const meta = (plugin as any).shardevMeta as ShardevModuleMeta\n if (meta) {\n validateMeta(meta)\n metas.push(meta)\n }\n }\n }\n\n await server.close()\n }\n }\n\n cachedMetas = metas\n metaCacheLoaded = true\n\n log('Discovered modules:', metas.map(m => m.name))\n\n return metas\n }\n\n const generateInputs = (metas: ShardevModuleMeta[]) => {\n const inputs: Record<string, string> = {}\n metas.forEach(meta => {\n Object.entries(meta.input).forEach(([key, value]) => {\n inputs[`${meta.name}-${key}`] = value\n })\n })\n return inputs\n }\n\n const resolveWatchPath = (meta: ShardevModuleMeta): string | null => {\n if (meta.usePublished && meta.publishedDir) {\n return meta.publishedDir\n }\n\n return meta.srcDir ?? null\n }\n\n const handleHMR = (\n server: ViteDevServer,\n file: string\n ) => {\n\n const module = server.moduleGraph.getModuleById(file)\n\n if (!module) return\n\n log('HMR update:', file)\n\n const updates = [{\n type: 'js-update',\n path: module.url,\n acceptedPath: module.url,\n timestamp: Date.now()\n }]\n\n server.moduleGraph.invalidateModule(module)\n\n server.ws.send({\n type: 'update',\n updates\n })\n }\n\n return {\n name: 'laravel-modules',\n\n async config(config: UserConfig, env: ConfigEnv) {\n\n const metas = await discoverModules()\n\n const aliases: Record<string, string> = {}\n metas.forEach(meta => Object.assign(aliases, meta.alias))\n\n const rollupInputs = generateInputs(metas)\n\n return mergeConfig(config, {\n resolve: { alias: aliases },\n build: {\n rollupOptions: { input: rollupInputs }\n }\n })\n },\n\n async configureServer(server: ViteDevServer) {\n\n const metas = await discoverModules()\n\n for (const meta of metas) {\n const watchPath = resolveWatchPath(meta)\n if (watchPath && fs.existsSync(watchPath)) {\n server.watcher.add(watchPath)\n log('Watching:', watchPath)\n }\n }\n\n server.watcher.on('change', (file) => {\n\n const matched = metas.some(meta => {\n const watchPath = resolveWatchPath(meta)\n return watchPath && file.startsWith(watchPath)\n })\n\n if (!matched) return\n\n handleHMR(server, file)\n })\n }\n }\n}"],"mappings":"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","names":["path","fs","import_path","import_fs","path","fs","module"]}
package/dist/index.d.cts CHANGED
@@ -4,6 +4,7 @@ interface ModuleOptions {
4
4
  name: string;
5
5
  vendor?: string;
6
6
  srcDir?: string;
7
+ input?: Record<string, string>;
7
8
  inputs?: string[];
8
9
  buildDir?: string;
9
10
  publishedDir?: string;
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ interface ModuleOptions {
4
4
  name: string;
5
5
  vendor?: string;
6
6
  srcDir?: string;
7
+ input?: Record<string, string>;
7
8
  inputs?: string[];
8
9
  buildDir?: string;
9
10
  publishedDir?: string;
package/dist/index.js CHANGED
@@ -6,7 +6,8 @@ function laravelModule(options) {
6
6
  name,
7
7
  vendor = "shardevcom",
8
8
  srcDir = "resources/react/src",
9
- inputs = ["main.tsx"],
9
+ input,
10
+ inputs,
10
11
  buildDir = `build/${vendor}/${name}`,
11
12
  publishedDir = `resources/react/${vendor}/${name}`
12
13
  } = options;
@@ -14,26 +15,36 @@ function laravelModule(options) {
14
15
  const moduleRoot = path.resolve(root, "packages", vendor, name);
15
16
  const relative = path.relative(moduleRoot, root);
16
17
  const isModuleRoot = !relative || relative === "." || !relative.startsWith("..");
17
- const inputPaths = {};
18
- inputs.forEach((file) => {
19
- const key = path.parse(file).name;
20
- inputPaths[key] = path.resolve(moduleRoot, srcDir, file);
21
- });
22
- const publishedPath = path.resolve(root, publishedDir);
23
- const isPublished = fs.existsSync(publishedPath);
24
- const aliasPath = isPublished ? publishedPath : path.resolve(moduleRoot, srcDir);
18
+ let normalizedInput = {};
19
+ if (input && Object.keys(input).length > 0) {
20
+ for (const [key, file] of Object.entries(input)) {
21
+ normalizedInput[key] = path.resolve(moduleRoot, file);
22
+ }
23
+ } else {
24
+ const legacyInputs = inputs ?? ["main.tsx"];
25
+ legacyInputs.forEach((file) => {
26
+ const key = path.parse(file).name;
27
+ normalizedInput[key] = path.resolve(moduleRoot, srcDir, file);
28
+ });
29
+ }
30
+ const absoluteSrcDir = path.resolve(moduleRoot, srcDir);
31
+ const absolutePublishedDir = path.resolve(root, publishedDir);
32
+ const isPublished = fs.existsSync(absolutePublishedDir);
33
+ const aliasPath = isPublished ? absolutePublishedDir : absoluteSrcDir;
25
34
  const meta = {
26
35
  name,
27
- input: inputPaths,
36
+ input: normalizedInput,
28
37
  buildDir,
29
38
  alias: {
30
39
  [`@${vendor}/${name}`]: aliasPath
31
40
  },
32
- usePublished: isPublished
41
+ usePublished: isPublished,
42
+ srcDir: absoluteSrcDir,
43
+ publishedDir: absolutePublishedDir
33
44
  };
34
45
  return {
35
46
  name: `vite-plugin-laravel-module:${name}`,
36
- // 🔥 Metadata directa para el root plugin
47
+ // 🔥 Metadata consumida por laravelModules()
37
48
  shardevMeta: meta,
38
49
  config() {
39
50
  if (isModuleRoot) {
@@ -42,7 +53,7 @@ function laravelModule(options) {
42
53
  outDir: buildDir,
43
54
  emptyOutDir: true,
44
55
  rollupOptions: {
45
- input: inputPaths
56
+ input: normalizedInput
46
57
  }
47
58
  },
48
59
  resolve: {
@@ -139,9 +150,10 @@ function laravelModules(options = {}) {
139
150
  return inputs;
140
151
  };
141
152
  const resolveWatchPath = (meta) => {
142
- const base = meta.usePublished && meta.publishedDir ? meta.publishedDir : meta.srcDir;
143
- if (!base) return null;
144
- return path2.isAbsolute(base) ? base : path2.resolve(root, base);
153
+ if (meta.usePublished && meta.publishedDir) {
154
+ return meta.publishedDir;
155
+ }
156
+ return meta.srcDir ?? null;
145
157
  };
146
158
  const handleHMR = (server, file) => {
147
159
  const module = server.moduleGraph.getModuleById(file);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/laravelModule.ts","../src/laravelModules.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport type { PluginOption } from 'vite'\n\nexport interface ModuleOptions {\n name: string\n vendor?: string\n srcDir?: string\n inputs?: string[]\n buildDir?: string\n publishedDir?: string\n}\n\nexport interface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n}\n\nexport default function laravelModule(options: ModuleOptions): PluginOption {\n const {\n name,\n vendor = 'shardevcom',\n srcDir = 'resources/react/src',\n inputs = ['main.tsx'],\n buildDir = `build/${vendor}/${name}`,\n publishedDir = `resources/react/${vendor}/${name}`\n } = options\n\n const root = process.cwd()\n const moduleRoot = path.resolve(root, 'packages', vendor, name)\n\n const relative = path.relative(moduleRoot, root)\n const isModuleRoot = !relative || relative === '.' || !relative.startsWith('..')\n\n const inputPaths: Record<string, string> = {}\n inputs.forEach(file => {\n const key = path.parse(file).name\n inputPaths[key] = path.resolve(moduleRoot, srcDir, file)\n })\n\n const publishedPath = path.resolve(root, publishedDir)\n const isPublished = fs.existsSync(publishedPath)\n\n const aliasPath = isPublished\n ? publishedPath\n : path.resolve(moduleRoot, srcDir)\n\n const meta: ShardevModuleMeta = {\n name,\n input: inputPaths,\n buildDir,\n alias: {\n [`@${vendor}/${name}`]: aliasPath\n },\n usePublished: isPublished\n }\n\n return {\n name: `vite-plugin-laravel-module:${name}`,\n\n // 🔥 Metadata directa para el root plugin\n shardevMeta: meta,\n\n config() {\n // 🔹 Standalone build\n if (isModuleRoot) {\n return {\n build: {\n outDir: buildDir,\n emptyOutDir: true,\n rollupOptions: {\n input: inputPaths\n }\n },\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n // 🔹 Integrated mode (root controla el build)\n return {\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n } as PluginOption\n}","import type { Plugin, UserConfig, ConfigEnv, ViteDevServer, ModuleNode } from 'vite'\nimport { mergeConfig, createServer } from 'vite'\nimport path from 'path'\nimport fs from 'fs'\n\ninterface LaravelModulesOptions {\n modulesDir?: string\n statusesFile?: string\n debug?: boolean\n useMetaCache?: boolean\n}\n\ninterface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n srcDir: string\n publishedDir?: string\n}\n\nexport default function laravelModules(\n options: LaravelModulesOptions = {}\n): Plugin {\n\n const {\n modulesDir = 'packages',\n statusesFile = 'modules.json',\n debug = false,\n useMetaCache = true\n } = options\n\n const root = process.cwd()\n const modulesPath = path.resolve(root, modulesDir)\n const statusesPath = path.resolve(root, statusesFile)\n\n let cachedMetas: ShardevModuleMeta[] = []\n let metaCacheLoaded = false\n\n const log = (...args: any[]) => {\n if (debug) console.log('[laravel-modules]', ...args)\n }\n\n const loadStatuses = (): Record<string, boolean> => {\n if (!fs.existsSync(statusesPath)) return {}\n try {\n return JSON.parse(fs.readFileSync(statusesPath, 'utf-8'))\n } catch {\n return {}\n }\n }\n\n const validateMeta = (meta: ShardevModuleMeta) => {\n if (!meta.name) throw new Error('Module meta missing name')\n if (!meta.srcDir) throw new Error(`Module ${meta.name} missing srcDir`)\n if (!meta.input) throw new Error(`Module ${meta.name} missing input`)\n }\n\n const discoverModules = async (): Promise<ShardevModuleMeta[]> => {\n\n if (useMetaCache && metaCacheLoaded) {\n log('Using cached module metas')\n return cachedMetas\n }\n\n if (!fs.existsSync(modulesPath)) return []\n\n const statuses = loadStatuses()\n const metas: ShardevModuleMeta[] = []\n\n const vendors = fs.readdirSync(modulesPath, { withFileTypes: true })\n .filter(d => d.isDirectory())\n\n for (const vendor of vendors) {\n const vendorPath = path.join(modulesPath, vendor.name)\n\n const packages = fs.readdirSync(vendorPath, { withFileTypes: true })\n .filter(d => d.isDirectory() && statuses[d.name] !== false)\n\n for (const pkg of packages) {\n\n const pkgPath = path.join(vendorPath, pkg.name)\n const viteConfigPath = path.join(pkgPath, 'vite.config.ts')\n\n if (!fs.existsSync(viteConfigPath)) continue\n\n const server = await createServer({\n configFile: viteConfigPath,\n logLevel: 'silent'\n })\n\n const plugins = (server.config.plugins || []) as Plugin[]\n\n for (const plugin of plugins) {\n if (plugin?.name?.startsWith('vite-plugin-laravel-module:')) {\n const meta = (plugin as any).shardevMeta as ShardevModuleMeta\n if (meta) {\n validateMeta(meta)\n metas.push(meta)\n }\n }\n }\n\n await server.close()\n }\n }\n\n cachedMetas = metas\n metaCacheLoaded = true\n\n log('Discovered modules:', metas.map(m => m.name))\n\n return metas\n }\n\n const generateInputs = (metas: ShardevModuleMeta[]) => {\n const inputs: Record<string, string> = {}\n metas.forEach(meta => {\n Object.entries(meta.input).forEach(([key, value]) => {\n inputs[`${meta.name}-${key}`] = value\n })\n })\n return inputs\n }\n\n const resolveWatchPath = (meta: ShardevModuleMeta): string | null => {\n const base = meta.usePublished && meta.publishedDir\n ? meta.publishedDir\n : meta.srcDir\n\n if (!base) return null\n\n return path.isAbsolute(base)\n ? base\n : path.resolve(root, base)\n }\n\n const handleHMR = (\n server: ViteDevServer,\n file: string\n ) => {\n\n const module = server.moduleGraph.getModuleById(file)\n\n if (!module) return\n\n log('HMR update:', file)\n\n const updates = [{\n type: 'js-update',\n path: module.url,\n acceptedPath: module.url,\n timestamp: Date.now()\n }]\n\n server.moduleGraph.invalidateModule(module)\n\n server.ws.send({\n type: 'update',\n updates\n })\n }\n\n return {\n name: 'laravel-modules',\n\n async config(config: UserConfig, env: ConfigEnv) {\n\n const metas = await discoverModules()\n\n const aliases: Record<string, string> = {}\n metas.forEach(meta => Object.assign(aliases, meta.alias))\n\n const rollupInputs = generateInputs(metas)\n\n return mergeConfig(config, {\n resolve: { alias: aliases },\n build: {\n rollupOptions: { input: rollupInputs }\n }\n })\n },\n\n async configureServer(server: ViteDevServer) {\n\n const metas = await discoverModules()\n\n for (const meta of metas) {\n const watchPath = resolveWatchPath(meta)\n if (watchPath && fs.existsSync(watchPath)) {\n server.watcher.add(watchPath)\n log('Watching:', watchPath)\n }\n }\n\n server.watcher.on('change', (file) => {\n\n const matched = metas.some(meta => {\n const watchPath = resolveWatchPath(meta)\n return watchPath && file.startsWith(watchPath)\n })\n\n if (!matched) return\n\n handleHMR(server, file)\n })\n }\n }\n}"],"mappings":";AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAoBF,SAAR,cAA+B,SAAsC;AACxE,QAAM;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS,CAAC,UAAU;AAAA,IACpB,WAAW,SAAS,MAAM,IAAI,IAAI;AAAA,IAClC,eAAe,mBAAmB,MAAM,IAAI,IAAI;AAAA,EACpD,IAAI;AAEJ,QAAM,OAAO,QAAQ,IAAI;AACzB,QAAM,aAAa,KAAK,QAAQ,MAAM,YAAY,QAAQ,IAAI;AAE9D,QAAM,WAAW,KAAK,SAAS,YAAY,IAAI;AAC/C,QAAM,eAAe,CAAC,YAAY,aAAa,OAAO,CAAC,SAAS,WAAW,IAAI;AAE/E,QAAM,aAAqC,CAAC;AAC5C,SAAO,QAAQ,UAAQ;AACnB,UAAM,MAAM,KAAK,MAAM,IAAI,EAAE;AAC7B,eAAW,GAAG,IAAI,KAAK,QAAQ,YAAY,QAAQ,IAAI;AAAA,EAC3D,CAAC;AAED,QAAM,gBAAgB,KAAK,QAAQ,MAAM,YAAY;AACrD,QAAM,cAAc,GAAG,WAAW,aAAa;AAE/C,QAAM,YAAY,cACZ,gBACA,KAAK,QAAQ,YAAY,MAAM;AAErC,QAAM,OAA0B;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACH,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,GAAG;AAAA,IAC5B;AAAA,IACA,cAAc;AAAA,EAClB;AAEA,SAAO;AAAA,IACH,MAAM,8BAA8B,IAAI;AAAA;AAAA,IAGxC,aAAa;AAAA,IAEb,SAAS;AAEL,UAAI,cAAc;AACd,eAAO;AAAA,UACH,OAAO;AAAA,YACH,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,eAAe;AAAA,cACX,OAAO;AAAA,YACX;AAAA,UACJ;AAAA,UACA,SAAS;AAAA,YACL,OAAO,KAAK;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAGA,aAAO;AAAA,QACH,SAAS;AAAA,UACL,OAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ;AAAA,EAEJ;AACJ;;;AC3FA,SAAS,aAAa,oBAAoB;AAC1C,OAAOA,WAAU;AACjB,OAAOC,SAAQ;AAmBA,SAAR,eACH,UAAiC,CAAC,GAC5B;AAEN,QAAM;AAAA,IACF,aAAa;AAAA,IACb,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,EACnB,IAAI;AAEJ,QAAM,OAAO,QAAQ,IAAI;AACzB,QAAM,cAAcD,MAAK,QAAQ,MAAM,UAAU;AACjD,QAAM,eAAeA,MAAK,QAAQ,MAAM,YAAY;AAEpD,MAAI,cAAmC,CAAC;AACxC,MAAI,kBAAkB;AAEtB,QAAM,MAAM,IAAI,SAAgB;AAC5B,QAAI,MAAO,SAAQ,IAAI,qBAAqB,GAAG,IAAI;AAAA,EACvD;AAEA,QAAM,eAAe,MAA+B;AAChD,QAAI,CAACC,IAAG,WAAW,YAAY,EAAG,QAAO,CAAC;AAC1C,QAAI;AACA,aAAO,KAAK,MAAMA,IAAG,aAAa,cAAc,OAAO,CAAC;AAAA,IAC5D,QAAQ;AACJ,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAEA,QAAM,eAAe,CAAC,SAA4B;AAC9C,QAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,0BAA0B;AAC1D,QAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,UAAU,KAAK,IAAI,iBAAiB;AACtE,QAAI,CAAC,KAAK,MAAO,OAAM,IAAI,MAAM,UAAU,KAAK,IAAI,gBAAgB;AAAA,EACxE;AAEA,QAAM,kBAAkB,YAA0C;AAE9D,QAAI,gBAAgB,iBAAiB;AACjC,UAAI,2BAA2B;AAC/B,aAAO;AAAA,IACX;AAEA,QAAI,CAACA,IAAG,WAAW,WAAW,EAAG,QAAO,CAAC;AAEzC,UAAM,WAAW,aAAa;AAC9B,UAAM,QAA6B,CAAC;AAEpC,UAAM,UAAUA,IAAG,YAAY,aAAa,EAAE,eAAe,KAAK,CAAC,EAC9D,OAAO,OAAK,EAAE,YAAY,CAAC;AAEhC,eAAW,UAAU,SAAS;AAC1B,YAAM,aAAaD,MAAK,KAAK,aAAa,OAAO,IAAI;AAErD,YAAM,WAAWC,IAAG,YAAY,YAAY,EAAE,eAAe,KAAK,CAAC,EAC9D,OAAO,OAAK,EAAE,YAAY,KAAK,SAAS,EAAE,IAAI,MAAM,KAAK;AAE9D,iBAAW,OAAO,UAAU;AAExB,cAAM,UAAUD,MAAK,KAAK,YAAY,IAAI,IAAI;AAC9C,cAAM,iBAAiBA,MAAK,KAAK,SAAS,gBAAgB;AAE1D,YAAI,CAACC,IAAG,WAAW,cAAc,EAAG;AAEpC,cAAM,SAAS,MAAM,aAAa;AAAA,UAC9B,YAAY;AAAA,UACZ,UAAU;AAAA,QACd,CAAC;AAED,cAAM,UAAW,OAAO,OAAO,WAAW,CAAC;AAE3C,mBAAW,UAAU,SAAS;AAC1B,cAAI,QAAQ,MAAM,WAAW,6BAA6B,GAAG;AACzD,kBAAM,OAAQ,OAAe;AAC7B,gBAAI,MAAM;AACN,2BAAa,IAAI;AACjB,oBAAM,KAAK,IAAI;AAAA,YACnB;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,OAAO,MAAM;AAAA,MACvB;AAAA,IACJ;AAEA,kBAAc;AACd,sBAAkB;AAElB,QAAI,uBAAuB,MAAM,IAAI,OAAK,EAAE,IAAI,CAAC;AAEjD,WAAO;AAAA,EACX;AAEA,QAAM,iBAAiB,CAAC,UAA+B;AACnD,UAAM,SAAiC,CAAC;AACxC,UAAM,QAAQ,UAAQ;AAClB,aAAO,QAAQ,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACjD,eAAO,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI;AAAA,MACpC,CAAC;AAAA,IACL,CAAC;AACD,WAAO;AAAA,EACX;AAEA,QAAM,mBAAmB,CAAC,SAA2C;AACjE,UAAM,OAAO,KAAK,gBAAgB,KAAK,eACjC,KAAK,eACL,KAAK;AAEX,QAAI,CAAC,KAAM,QAAO;AAElB,WAAOD,MAAK,WAAW,IAAI,IACrB,OACAA,MAAK,QAAQ,MAAM,IAAI;AAAA,EACjC;AAEA,QAAM,YAAY,CACd,QACA,SACC;AAED,UAAM,SAAS,OAAO,YAAY,cAAc,IAAI;AAEpD,QAAI,CAAC,OAAQ;AAEb,QAAI,eAAe,IAAI;AAEvB,UAAM,UAAU,CAAC;AAAA,MACb,MAAM;AAAA,MACN,MAAM,OAAO;AAAA,MACb,cAAc,OAAO;AAAA,MACrB,WAAW,KAAK,IAAI;AAAA,IACxB,CAAC;AAED,WAAO,YAAY,iBAAiB,MAAM;AAE1C,WAAO,GAAG,KAAK;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO;AAAA,IACH,MAAM;AAAA,IAEN,MAAM,OAAO,QAAoB,KAAgB;AAE7C,YAAM,QAAQ,MAAM,gBAAgB;AAEpC,YAAM,UAAkC,CAAC;AACzC,YAAM,QAAQ,UAAQ,OAAO,OAAO,SAAS,KAAK,KAAK,CAAC;AAExD,YAAM,eAAe,eAAe,KAAK;AAEzC,aAAO,YAAY,QAAQ;AAAA,QACvB,SAAS,EAAE,OAAO,QAAQ;AAAA,QAC1B,OAAO;AAAA,UACH,eAAe,EAAE,OAAO,aAAa;AAAA,QACzC;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,IAEA,MAAM,gBAAgB,QAAuB;AAEzC,YAAM,QAAQ,MAAM,gBAAgB;AAEpC,iBAAW,QAAQ,OAAO;AACtB,cAAM,YAAY,iBAAiB,IAAI;AACvC,YAAI,aAAaC,IAAG,WAAW,SAAS,GAAG;AACvC,iBAAO,QAAQ,IAAI,SAAS;AAC5B,cAAI,aAAa,SAAS;AAAA,QAC9B;AAAA,MACJ;AAEA,aAAO,QAAQ,GAAG,UAAU,CAAC,SAAS;AAElC,cAAM,UAAU,MAAM,KAAK,UAAQ;AAC/B,gBAAM,YAAY,iBAAiB,IAAI;AACvC,iBAAO,aAAa,KAAK,WAAW,SAAS;AAAA,QACjD,CAAC;AAED,YAAI,CAAC,QAAS;AAEd,kBAAU,QAAQ,IAAI;AAAA,MAC1B,CAAC;AAAA,IACL;AAAA,EACJ;AACJ;","names":["path","fs"]}
1
+ {"version":3,"sources":["../src/laravelModule.ts","../src/laravelModules.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport type { PluginOption } from 'vite'\n\nexport interface ModuleOptions {\n name: string\n vendor?: string\n srcDir?: string\n\n // ✅ Nuevo formato recomendado\n input?: Record<string, string>\n\n // ⚠ Backward compatibility\n inputs?: string[]\n\n buildDir?: string\n publishedDir?: string\n}\n\ninterface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n srcDir: string\n publishedDir?: string\n}\n\nexport function laravelModule(options: ModuleOptions): PluginOption {\n\n const {\n name,\n vendor = 'shardevcom',\n srcDir = 'resources/react/src',\n input,\n inputs,\n buildDir = `build/${vendor}/${name}`,\n publishedDir = `resources/react/${vendor}/${name}`\n } = options\n\n const root = process.cwd()\n const moduleRoot = path.resolve(root, 'packages', vendor, name)\n\n const relative = path.relative(moduleRoot, root)\n const isModuleRoot =\n !relative || relative === '.' || !relative.startsWith('..')\n\n // ---------------------------------------------------\n // 🔥 Normalización inteligente de inputs\n // ---------------------------------------------------\n\n let normalizedInput: Record<string, string> = {}\n\n if (input && Object.keys(input).length > 0) {\n // Nuevo formato recomendado\n for (const [key, file] of Object.entries(input)) {\n normalizedInput[key] = path.resolve(moduleRoot, file)\n }\n } else {\n // Backward compatibility con inputs: []\n const legacyInputs = inputs ?? ['main.tsx']\n\n legacyInputs.forEach(file => {\n const key = path.parse(file).name\n normalizedInput[key] = path.resolve(moduleRoot, srcDir, file)\n })\n }\n\n // ---------------------------------------------------\n // Published detection\n // ---------------------------------------------------\n const absoluteSrcDir = path.resolve(moduleRoot, srcDir)\n const absolutePublishedDir = path.resolve(root, publishedDir)\n\n const isPublished = fs.existsSync(absolutePublishedDir)\n\n const aliasPath = isPublished\n ? absolutePublishedDir\n : absoluteSrcDir\n\n const meta: ShardevModuleMeta = {\n name,\n input: normalizedInput,\n buildDir,\n alias: {\n [`@${vendor}/${name}`]: aliasPath\n },\n usePublished: isPublished,\n srcDir: absoluteSrcDir,\n publishedDir: absolutePublishedDir\n }\n\n return {\n name: `vite-plugin-laravel-module:${name}`,\n\n // 🔥 Metadata consumida por laravelModules()\n shardevMeta: meta,\n\n config() {\n\n // 🔹 Standalone build\n if (isModuleRoot) {\n return {\n build: {\n outDir: buildDir,\n emptyOutDir: true,\n rollupOptions: {\n input: normalizedInput\n }\n },\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n // 🔹 Integrated mode\n return {\n resolve: {\n alias: meta.alias\n }\n }\n }\n\n } as PluginOption\n}","import type { Plugin, UserConfig, ConfigEnv, ViteDevServer, ModuleNode } from 'vite'\nimport { mergeConfig, createServer } from 'vite'\nimport path from 'path'\nimport fs from 'fs'\n\ninterface LaravelModulesOptions {\n modulesDir?: string\n statusesFile?: string\n debug?: boolean\n useMetaCache?: boolean\n}\n\ninterface ShardevModuleMeta {\n name: string\n input: Record<string, string>\n buildDir: string\n alias: Record<string, string>\n usePublished: boolean\n srcDir: string\n publishedDir?: string\n}\n\nexport function laravelModules(\n options: LaravelModulesOptions = {}\n): Plugin {\n\n const {\n modulesDir = 'packages',\n statusesFile = 'modules.json',\n debug = false,\n useMetaCache = true\n } = options\n\n const root = process.cwd()\n const modulesPath = path.resolve(root, modulesDir)\n const statusesPath = path.resolve(root, statusesFile)\n\n let cachedMetas: ShardevModuleMeta[] = []\n let metaCacheLoaded = false\n\n const log = (...args: any[]) => {\n if (debug) console.log('[laravel-modules]', ...args)\n }\n\n const loadStatuses = (): Record<string, boolean> => {\n if (!fs.existsSync(statusesPath)) return {}\n try {\n return JSON.parse(fs.readFileSync(statusesPath, 'utf-8'))\n } catch {\n return {}\n }\n }\n\n const validateMeta = (meta: ShardevModuleMeta) => {\n if (!meta.name) throw new Error('Module meta missing name')\n if (!meta.srcDir) throw new Error(`Module ${meta.name} missing srcDir`)\n if (!meta.input) throw new Error(`Module ${meta.name} missing input`)\n }\n\n const discoverModules = async (): Promise<ShardevModuleMeta[]> => {\n\n if (useMetaCache && metaCacheLoaded) {\n log('Using cached module metas')\n return cachedMetas\n }\n\n if (!fs.existsSync(modulesPath)) return []\n\n const statuses = loadStatuses()\n const metas: ShardevModuleMeta[] = []\n\n const vendors = fs.readdirSync(modulesPath, { withFileTypes: true })\n .filter(d => d.isDirectory())\n\n for (const vendor of vendors) {\n const vendorPath = path.join(modulesPath, vendor.name)\n\n const packages = fs.readdirSync(vendorPath, { withFileTypes: true })\n .filter(d => d.isDirectory() && statuses[d.name] !== false)\n\n for (const pkg of packages) {\n\n const pkgPath = path.join(vendorPath, pkg.name)\n const viteConfigPath = path.join(pkgPath, 'vite.config.ts')\n\n if (!fs.existsSync(viteConfigPath)) continue\n\n const server = await createServer({\n configFile: viteConfigPath,\n logLevel: 'silent'\n })\n\n const plugins = (server.config.plugins || []) as Plugin[]\n\n for (const plugin of plugins) {\n if (plugin?.name?.startsWith('vite-plugin-laravel-module:')) {\n const meta = (plugin as any).shardevMeta as ShardevModuleMeta\n if (meta) {\n validateMeta(meta)\n metas.push(meta)\n }\n }\n }\n\n await server.close()\n }\n }\n\n cachedMetas = metas\n metaCacheLoaded = true\n\n log('Discovered modules:', metas.map(m => m.name))\n\n return metas\n }\n\n const generateInputs = (metas: ShardevModuleMeta[]) => {\n const inputs: Record<string, string> = {}\n metas.forEach(meta => {\n Object.entries(meta.input).forEach(([key, value]) => {\n inputs[`${meta.name}-${key}`] = value\n })\n })\n return inputs\n }\n\n const resolveWatchPath = (meta: ShardevModuleMeta): string | null => {\n if (meta.usePublished && meta.publishedDir) {\n return meta.publishedDir\n }\n\n return meta.srcDir ?? null\n }\n\n const handleHMR = (\n server: ViteDevServer,\n file: string\n ) => {\n\n const module = server.moduleGraph.getModuleById(file)\n\n if (!module) return\n\n log('HMR update:', file)\n\n const updates = [{\n type: 'js-update',\n path: module.url,\n acceptedPath: module.url,\n timestamp: Date.now()\n }]\n\n server.moduleGraph.invalidateModule(module)\n\n server.ws.send({\n type: 'update',\n updates\n })\n }\n\n return {\n name: 'laravel-modules',\n\n async config(config: UserConfig, env: ConfigEnv) {\n\n const metas = await discoverModules()\n\n const aliases: Record<string, string> = {}\n metas.forEach(meta => Object.assign(aliases, meta.alias))\n\n const rollupInputs = generateInputs(metas)\n\n return mergeConfig(config, {\n resolve: { alias: aliases },\n build: {\n rollupOptions: { input: rollupInputs }\n }\n })\n },\n\n async configureServer(server: ViteDevServer) {\n\n const metas = await discoverModules()\n\n for (const meta of metas) {\n const watchPath = resolveWatchPath(meta)\n if (watchPath && fs.existsSync(watchPath)) {\n server.watcher.add(watchPath)\n log('Watching:', watchPath)\n }\n }\n\n server.watcher.on('change', (file) => {\n\n const matched = metas.some(meta => {\n const watchPath = resolveWatchPath(meta)\n return watchPath && file.startsWith(watchPath)\n })\n\n if (!matched) return\n\n handleHMR(server, file)\n })\n }\n }\n}"],"mappings":";AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AA4BV,SAAS,cAAc,SAAsC;AAEhE,QAAM;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,WAAW,SAAS,MAAM,IAAI,IAAI;AAAA,IAClC,eAAe,mBAAmB,MAAM,IAAI,IAAI;AAAA,EACpD,IAAI;AAEJ,QAAM,OAAO,QAAQ,IAAI;AACzB,QAAM,aAAa,KAAK,QAAQ,MAAM,YAAY,QAAQ,IAAI;AAE9D,QAAM,WAAW,KAAK,SAAS,YAAY,IAAI;AAC/C,QAAM,eACF,CAAC,YAAY,aAAa,OAAO,CAAC,SAAS,WAAW,IAAI;AAM9D,MAAI,kBAA0C,CAAC;AAE/C,MAAI,SAAS,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AAExC,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC7C,sBAAgB,GAAG,IAAI,KAAK,QAAQ,YAAY,IAAI;AAAA,IACxD;AAAA,EACJ,OAAO;AAEH,UAAM,eAAe,UAAU,CAAC,UAAU;AAE1C,iBAAa,QAAQ,UAAQ;AACzB,YAAM,MAAM,KAAK,MAAM,IAAI,EAAE;AAC7B,sBAAgB,GAAG,IAAI,KAAK,QAAQ,YAAY,QAAQ,IAAI;AAAA,IAChE,CAAC;AAAA,EACL;AAKA,QAAM,iBAAiB,KAAK,QAAQ,YAAY,MAAM;AACtD,QAAM,uBAAuB,KAAK,QAAQ,MAAM,YAAY;AAE5D,QAAM,cAAc,GAAG,WAAW,oBAAoB;AAEtD,QAAM,YAAY,cACZ,uBACA;AAEN,QAAM,OAA0B;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACH,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,GAAG;AAAA,IAC5B;AAAA,IACA,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,cAAc;AAAA,EAClB;AAEA,SAAO;AAAA,IACH,MAAM,8BAA8B,IAAI;AAAA;AAAA,IAGxC,aAAa;AAAA,IAEb,SAAS;AAGL,UAAI,cAAc;AACd,eAAO;AAAA,UACH,OAAO;AAAA,YACH,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,eAAe;AAAA,cACX,OAAO;AAAA,YACX;AAAA,UACJ;AAAA,UACA,SAAS;AAAA,YACL,OAAO,KAAK;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAGA,aAAO;AAAA,QACH,SAAS;AAAA,UACL,OAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ;AAAA,EAEJ;AACJ;;;AC7HA,SAAS,aAAa,oBAAoB;AAC1C,OAAOA,WAAU;AACjB,OAAOC,SAAQ;AAmBR,SAAS,eACZ,UAAiC,CAAC,GAC5B;AAEN,QAAM;AAAA,IACF,aAAa;AAAA,IACb,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,EACnB,IAAI;AAEJ,QAAM,OAAO,QAAQ,IAAI;AACzB,QAAM,cAAcD,MAAK,QAAQ,MAAM,UAAU;AACjD,QAAM,eAAeA,MAAK,QAAQ,MAAM,YAAY;AAEpD,MAAI,cAAmC,CAAC;AACxC,MAAI,kBAAkB;AAEtB,QAAM,MAAM,IAAI,SAAgB;AAC5B,QAAI,MAAO,SAAQ,IAAI,qBAAqB,GAAG,IAAI;AAAA,EACvD;AAEA,QAAM,eAAe,MAA+B;AAChD,QAAI,CAACC,IAAG,WAAW,YAAY,EAAG,QAAO,CAAC;AAC1C,QAAI;AACA,aAAO,KAAK,MAAMA,IAAG,aAAa,cAAc,OAAO,CAAC;AAAA,IAC5D,QAAQ;AACJ,aAAO,CAAC;AAAA,IACZ;AAAA,EACJ;AAEA,QAAM,eAAe,CAAC,SAA4B;AAC9C,QAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,0BAA0B;AAC1D,QAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,UAAU,KAAK,IAAI,iBAAiB;AACtE,QAAI,CAAC,KAAK,MAAO,OAAM,IAAI,MAAM,UAAU,KAAK,IAAI,gBAAgB;AAAA,EACxE;AAEA,QAAM,kBAAkB,YAA0C;AAE9D,QAAI,gBAAgB,iBAAiB;AACjC,UAAI,2BAA2B;AAC/B,aAAO;AAAA,IACX;AAEA,QAAI,CAACA,IAAG,WAAW,WAAW,EAAG,QAAO,CAAC;AAEzC,UAAM,WAAW,aAAa;AAC9B,UAAM,QAA6B,CAAC;AAEpC,UAAM,UAAUA,IAAG,YAAY,aAAa,EAAE,eAAe,KAAK,CAAC,EAC9D,OAAO,OAAK,EAAE,YAAY,CAAC;AAEhC,eAAW,UAAU,SAAS;AAC1B,YAAM,aAAaD,MAAK,KAAK,aAAa,OAAO,IAAI;AAErD,YAAM,WAAWC,IAAG,YAAY,YAAY,EAAE,eAAe,KAAK,CAAC,EAC9D,OAAO,OAAK,EAAE,YAAY,KAAK,SAAS,EAAE,IAAI,MAAM,KAAK;AAE9D,iBAAW,OAAO,UAAU;AAExB,cAAM,UAAUD,MAAK,KAAK,YAAY,IAAI,IAAI;AAC9C,cAAM,iBAAiBA,MAAK,KAAK,SAAS,gBAAgB;AAE1D,YAAI,CAACC,IAAG,WAAW,cAAc,EAAG;AAEpC,cAAM,SAAS,MAAM,aAAa;AAAA,UAC9B,YAAY;AAAA,UACZ,UAAU;AAAA,QACd,CAAC;AAED,cAAM,UAAW,OAAO,OAAO,WAAW,CAAC;AAE3C,mBAAW,UAAU,SAAS;AAC1B,cAAI,QAAQ,MAAM,WAAW,6BAA6B,GAAG;AACzD,kBAAM,OAAQ,OAAe;AAC7B,gBAAI,MAAM;AACN,2BAAa,IAAI;AACjB,oBAAM,KAAK,IAAI;AAAA,YACnB;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,OAAO,MAAM;AAAA,MACvB;AAAA,IACJ;AAEA,kBAAc;AACd,sBAAkB;AAElB,QAAI,uBAAuB,MAAM,IAAI,OAAK,EAAE,IAAI,CAAC;AAEjD,WAAO;AAAA,EACX;AAEA,QAAM,iBAAiB,CAAC,UAA+B;AACnD,UAAM,SAAiC,CAAC;AACxC,UAAM,QAAQ,UAAQ;AAClB,aAAO,QAAQ,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACjD,eAAO,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,IAAI;AAAA,MACpC,CAAC;AAAA,IACL,CAAC;AACD,WAAO;AAAA,EACX;AAEA,QAAM,mBAAmB,CAAC,SAA2C;AACjE,QAAI,KAAK,gBAAgB,KAAK,cAAc;AACxC,aAAO,KAAK;AAAA,IAChB;AAEA,WAAO,KAAK,UAAU;AAAA,EAC1B;AAEA,QAAM,YAAY,CACd,QACA,SACC;AAED,UAAM,SAAS,OAAO,YAAY,cAAc,IAAI;AAEpD,QAAI,CAAC,OAAQ;AAEb,QAAI,eAAe,IAAI;AAEvB,UAAM,UAAU,CAAC;AAAA,MACb,MAAM;AAAA,MACN,MAAM,OAAO;AAAA,MACb,cAAc,OAAO;AAAA,MACrB,WAAW,KAAK,IAAI;AAAA,IACxB,CAAC;AAED,WAAO,YAAY,iBAAiB,MAAM;AAE1C,WAAO,GAAG,KAAK;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO;AAAA,IACH,MAAM;AAAA,IAEN,MAAM,OAAO,QAAoB,KAAgB;AAE7C,YAAM,QAAQ,MAAM,gBAAgB;AAEpC,YAAM,UAAkC,CAAC;AACzC,YAAM,QAAQ,UAAQ,OAAO,OAAO,SAAS,KAAK,KAAK,CAAC;AAExD,YAAM,eAAe,eAAe,KAAK;AAEzC,aAAO,YAAY,QAAQ;AAAA,QACvB,SAAS,EAAE,OAAO,QAAQ;AAAA,QAC1B,OAAO;AAAA,UACH,eAAe,EAAE,OAAO,aAAa;AAAA,QACzC;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,IAEA,MAAM,gBAAgB,QAAuB;AAEzC,YAAM,QAAQ,MAAM,gBAAgB;AAEpC,iBAAW,QAAQ,OAAO;AACtB,cAAM,YAAY,iBAAiB,IAAI;AACvC,YAAI,aAAaA,IAAG,WAAW,SAAS,GAAG;AACvC,iBAAO,QAAQ,IAAI,SAAS;AAC5B,cAAI,aAAa,SAAS;AAAA,QAC9B;AAAA,MACJ;AAEA,aAAO,QAAQ,GAAG,UAAU,CAAC,SAAS;AAElC,cAAM,UAAU,MAAM,KAAK,UAAQ;AAC/B,gBAAM,YAAY,iBAAiB,IAAI;AACvC,iBAAO,aAAa,KAAK,WAAW,SAAS;AAAA,QACjD,CAAC;AAED,YAAI,CAAC,QAAS;AAEd,kBAAU,QAAQ,IAAI;AAAA,MAC1B,CAAC;AAAA,IACL;AAAA,EACJ;AACJ;","names":["path","fs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shardev/vite-plugin-modular",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "author": "Elbert Tous",
5
5
  "description": "Advanced Laravel Modules support for Vite (monorepo + namespace resolver)",
6
6
  "license": "MIT",