silgi 0.8.27 → 0.8.29

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.
@@ -1,4 +1,4 @@
1
- const version = "0.8.27";
1
+ const version = "0.8.29";
2
2
  const devDependencies = {
3
3
  "@antfu/eslint-config": "^4.2.0",
4
4
  "@fastify/deepmerge": "^2.0.2",
@@ -1060,10 +1060,17 @@ function createDependencyGraph(modules) {
1060
1060
  return;
1061
1061
  const beforeDeps = module.meta?.beforeDependencies || [];
1062
1062
  const afterDeps = module.meta?.afterDependencies || [];
1063
- const missingDeps = [...beforeDeps, ...afterDeps].filter((dep) => !graph.has(dep));
1064
- if (missingDeps.length > 0) {
1065
- logger$1.error(`Module ${key} has missing dependencies: ${missingDeps.join(", ")}`);
1063
+ const conflicts = beforeDeps.filter((dep) => afterDeps.includes(dep));
1064
+ if (conflicts.length > 0) {
1065
+ logger$1.error(`Module ${key} has conflicting dependencies: ${conflicts.join(", ")}`);
1066
+ return;
1066
1067
  }
1068
+ logger$1.debug(`
1069
+ Module ${key} dependencies:`);
1070
+ if (beforeDeps.length)
1071
+ logger$1.debug(` Must run after: ${beforeDeps.join(", ")}`);
1072
+ if (afterDeps.length)
1073
+ logger$1.debug(` Must run before: ${afterDeps.join(", ")}`);
1067
1074
  });
1068
1075
  modules.forEach((module) => {
1069
1076
  const key = module.meta?.configKey;
@@ -1071,26 +1078,29 @@ function createDependencyGraph(modules) {
1071
1078
  return;
1072
1079
  const beforeDeps = module.meta?.beforeDependencies || [];
1073
1080
  const afterDeps = module.meta?.afterDependencies || [];
1074
- logger$1.debug(`
1075
- Analyzing dependencies for module ${key}:`);
1076
1081
  beforeDeps.forEach((dep) => {
1077
- if (graph.has(dep)) {
1078
- graph.get(dep)?.add(key);
1079
- inDegree.set(key, (inDegree.get(key) || 0) + 1);
1080
- logger$1.debug(` ${key} must run after ${dep}`);
1082
+ if (!graph.has(dep)) {
1083
+ logger$1.warn(`Missing module: ${dep} required by ${key}`);
1084
+ return;
1081
1085
  }
1086
+ graph.get(dep)?.add(key);
1087
+ inDegree.set(key, (inDegree.get(key) || 0) + 1);
1088
+ logger$1.debug(`${key} depends on ${dep}`);
1082
1089
  });
1083
1090
  afterDeps.forEach((dep) => {
1084
- if (graph.has(dep)) {
1085
- graph.get(key)?.add(dep);
1086
- inDegree.set(dep, (inDegree.get(dep) || 0) + 1);
1087
- logger$1.debug(` ${key} must run before ${dep}`);
1091
+ if (!graph.has(key)) {
1092
+ logger$1.warn(`Missing module: ${key} required by ${dep}`);
1093
+ return;
1088
1094
  }
1095
+ graph.get(key)?.add(dep);
1096
+ inDegree.set(dep, (inDegree.get(dep) || 0) + 1);
1097
+ logger$1.debug(`${dep} depends on ${key}`);
1089
1098
  });
1090
1099
  });
1091
1100
  logger$1.debug("\nDependency Graph:");
1092
1101
  for (const [module, deps] of graph.entries()) {
1093
- logger$1.debug(`${module} -> ${Array.from(deps).join(", ")} (in-degree: ${inDegree.get(module)})`);
1102
+ const depsStr = Array.from(deps).join(", ");
1103
+ logger$1.debug(`${module} -> [${depsStr}] (in-degree: ${inDegree.get(module)})`);
1094
1104
  }
1095
1105
  return { graph, inDegree };
1096
1106
  }
@@ -91,5 +91,13 @@ declare function toArray<T>(value: T | T[]): T[];
91
91
  */
92
92
  declare function filterInPlace<T>(array: T[], predicate: (item: T, index: number, arr: T[]) => unknown): T[];
93
93
  declare const MODE_RE: RegExp;
94
+ /**
95
+ * Check if a Silgi module is installed by name.
96
+ *
97
+ * This will check both the installed modules and the modules to be installed. Note
98
+ * that it cannot detect if a module is _going to be_ installed programmatically by another module.
99
+ */
100
+ declare function hasSilgiModule(moduleKey: string, silgi?: SilgiCLI): boolean;
101
+ declare function hasInstalledModule(moduleKey: string, silgi?: SilgiCLI): boolean;
94
102
 
95
- export { MODE_RE, addTemplate, createResolver, defineSilgiModule, defineSilgiPreset, filterInPlace, isDirectory, isH3, isNitro, isNuxt, normalizeTemplate, prettyPath, relativeWithDot, resolveAlias, resolvePath, resolveSilgiModule, resolveSilgiPath, toArray, tryResolveModule, useLogger, writeFile };
103
+ export { MODE_RE, addTemplate, createResolver, defineSilgiModule, defineSilgiPreset, filterInPlace, hasInstalledModule, hasSilgiModule, isDirectory, isH3, isNitro, isNuxt, normalizeTemplate, prettyPath, relativeWithDot, resolveAlias, resolvePath, resolveSilgiModule, resolveSilgiPath, toArray, tryResolveModule, useLogger, writeFile };
@@ -91,5 +91,13 @@ declare function toArray<T>(value: T | T[]): T[];
91
91
  */
92
92
  declare function filterInPlace<T>(array: T[], predicate: (item: T, index: number, arr: T[]) => unknown): T[];
93
93
  declare const MODE_RE: RegExp;
94
+ /**
95
+ * Check if a Silgi module is installed by name.
96
+ *
97
+ * This will check both the installed modules and the modules to be installed. Note
98
+ * that it cannot detect if a module is _going to be_ installed programmatically by another module.
99
+ */
100
+ declare function hasSilgiModule(moduleKey: string, silgi?: SilgiCLI): boolean;
101
+ declare function hasInstalledModule(moduleKey: string, silgi?: SilgiCLI): boolean;
94
102
 
95
- export { MODE_RE, addTemplate, createResolver, defineSilgiModule, defineSilgiPreset, filterInPlace, isDirectory, isH3, isNitro, isNuxt, normalizeTemplate, prettyPath, relativeWithDot, resolveAlias, resolvePath, resolveSilgiModule, resolveSilgiPath, toArray, tryResolveModule, useLogger, writeFile };
103
+ export { MODE_RE, addTemplate, createResolver, defineSilgiModule, defineSilgiPreset, filterInPlace, hasInstalledModule, hasSilgiModule, isDirectory, isH3, isNitro, isNuxt, normalizeTemplate, prettyPath, relativeWithDot, resolveAlias, resolvePath, resolveSilgiModule, resolveSilgiPath, toArray, tryResolveModule, useLogger, writeFile };
@@ -255,6 +255,13 @@ function filterInPlace(array, predicate) {
255
255
  return array;
256
256
  }
257
257
  const MODE_RE = /\.(server|client)(\.\w+)*$/;
258
+ function hasSilgiModule(moduleKey, silgi = useSilgiCLI()) {
259
+ return silgi.scanModules.some(({ meta }) => meta.configKey === moduleKey) || Object.keys(silgi.scanModules).includes(moduleKey);
260
+ }
261
+ function hasInstalledModule(moduleKey, silgi = useSilgiCLI()) {
262
+ const find = silgi.scanModules.find(({ meta }) => meta.configKey === moduleKey);
263
+ return find?.installed ?? false;
264
+ }
258
265
 
259
266
  function addTemplate(_template) {
260
267
  const silgi = useSilgiCLI();
@@ -298,4 +305,4 @@ function normalizeTemplate(template, buildDir) {
298
305
  return template;
299
306
  }
300
307
 
301
- export { MODE_RE, addTemplate, createResolver, defineSilgiModule, defineSilgiPreset, filterInPlace, isDirectory$1 as isDirectory, isH3, isNitro, isNuxt, normalizeTemplate, prettyPath, relativeWithDot, resolveAlias, resolvePath, resolveSilgiModule, resolveSilgiPath, toArray, tryResolveModule, useLogger, writeFile };
308
+ export { MODE_RE, addTemplate, createResolver, defineSilgiModule, defineSilgiPreset, filterInPlace, hasInstalledModule, hasSilgiModule, isDirectory$1 as isDirectory, isH3, isNitro, isNuxt, normalizeTemplate, prettyPath, relativeWithDot, resolveAlias, resolvePath, resolveSilgiModule, resolveSilgiPath, toArray, tryResolveModule, useLogger, writeFile };
@@ -1,4 +1,4 @@
1
- const version = "0.8.27";
1
+ const version = "0.8.29";
2
2
  const devDependencies = {
3
3
  "@antfu/eslint-config": "^4.2.0",
4
4
  "@fastify/deepmerge": "^2.0.2",
@@ -1,4 +1,4 @@
1
- const version = "0.8.27";
1
+ const version = "0.8.29";
2
2
  const devDependencies = {
3
3
  "@antfu/eslint-config": "^4.2.0",
4
4
  "@fastify/deepmerge": "^2.0.2",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "silgi",
3
3
  "type": "module",
4
- "version": "0.8.27",
4
+ "version": "0.8.29",
5
5
  "private": false,
6
6
  "sideEffects": false,
7
7
  "exports": {