@reliverse/dler 1.7.0 → 1.7.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.
Files changed (96) hide show
  1. package/README.md +62 -37
  2. package/bin/app/build/cmd.js +1 -1
  3. package/bin/app/build/impl.js +1 -1
  4. package/bin/app/check/cmd.js +29 -9
  5. package/bin/app/copy/cmd.d.ts +26 -0
  6. package/bin/app/copy/cmd.js +143 -0
  7. package/bin/app/deps/cmd.js +2 -2
  8. package/bin/app/migrate/cmd.d.ts +12 -0
  9. package/bin/app/migrate/cmd.js +51 -16
  10. package/bin/app/migrate/codemods/{anything-to-bun.js → anything-bun.js} +9 -6
  11. package/bin/app/migrate/codemods/console-relinka.d.ts +3 -0
  12. package/bin/app/migrate/codemods/console-relinka.js +157 -0
  13. package/bin/app/migrate/codemods/readdir-glob.d.ts +8 -0
  14. package/bin/app/migrate/codemods/readdir-glob.js +144 -0
  15. package/bin/app/pub/cmd.js +1 -1
  16. package/bin/app/rempts/migrate/impl/commander.js +2 -8
  17. package/bin/cli.js +35 -9
  18. package/bin/libs/sdk/sdk-impl/{config → cfg}/info.js +1 -1
  19. package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/dler-config-health}/dler-config-health.d.ts +1 -1
  20. package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/dler-config-health}/dler-config-health.js +1 -1
  21. package/bin/libs/sdk/sdk-impl/rules/reliverse/file-extensions/file-extensions.d.ts +2 -0
  22. package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/file-extensions}/file-extensions.js +2 -2
  23. package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/analyzer.js +15 -1
  24. package/bin/libs/sdk/sdk-impl/rules/reliverse/missing-deps/deps-mod.d.ts +2 -0
  25. package/bin/libs/sdk/sdk-impl/{check/rules/missing-deps.js → rules/reliverse/missing-deps/deps-mod.js} +2 -2
  26. package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/deps-types.d.ts +2 -0
  27. package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/filesystem.js +2 -3
  28. package/bin/libs/sdk/sdk-impl/rules/reliverse/missing-deps/formatter.js +113 -0
  29. package/bin/libs/sdk/sdk-impl/rules/reliverse/no-index-files/no-index-files.d.ts +2 -0
  30. package/bin/libs/sdk/sdk-impl/rules/reliverse/no-index-files/no-index-files.js +31 -0
  31. package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/package-json-health}/package-json-health.d.ts +1 -1
  32. package/bin/libs/sdk/sdk-impl/rules/reliverse/path-extensions/path-extensions.d.ts +2 -0
  33. package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/path-extensions}/path-extensions.js +2 -2
  34. package/bin/libs/sdk/sdk-impl/rules/reliverse/self-include/self-include.d.ts +2 -0
  35. package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/self-include}/self-include.js +2 -2
  36. package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/tsconfig-health}/tsconfig-health.d.ts +1 -1
  37. package/bin/libs/sdk/sdk-impl/{check/check-mod.js → rules/rules-mod.js} +10 -0
  38. package/bin/libs/sdk/sdk-impl/{check/check-utils.d.ts → rules/rules-utils.d.ts} +1 -1
  39. package/bin/libs/sdk/sdk-impl/utils/utils-pkg-json-libs.js +26 -5
  40. package/bin/libs/sdk/sdk-types.d.ts +2 -2
  41. package/bin/mod.d.ts +1 -1
  42. package/bin/mod.js +1 -1
  43. package/package.json +1 -3
  44. package/bin/app/relifso/cmd.d.ts +0 -11
  45. package/bin/app/relifso/cmd.js +0 -47
  46. package/bin/app/relinka/cmd.d.ts +0 -18
  47. package/bin/app/relinka/cmd.js +0 -149
  48. package/bin/libs/sdk/sdk-impl/check/rules/deps/formatter.js +0 -64
  49. package/bin/libs/sdk/sdk-impl/check/rules/file-extensions.d.ts +0 -2
  50. package/bin/libs/sdk/sdk-impl/check/rules/missing-deps.d.ts +0 -2
  51. package/bin/libs/sdk/sdk-impl/check/rules/path-extensions.d.ts +0 -2
  52. package/bin/libs/sdk/sdk-impl/check/rules/self-include.d.ts +0 -2
  53. /package/bin/app/{relifso/init → init}/cmd.d.ts +0 -0
  54. /package/bin/app/{relifso/init → init}/cmd.js +0 -0
  55. /package/bin/app/{relifso/init → init}/init-const.d.ts +0 -0
  56. /package/bin/app/{relifso/init → init}/init-const.js +0 -0
  57. /package/bin/app/{relifso/init → init}/init-impl.d.ts +0 -0
  58. /package/bin/app/{relifso/init → init}/init-impl.js +0 -0
  59. /package/bin/app/{relifso/init → init}/init-types.d.ts +0 -0
  60. /package/bin/app/{relifso/init → init}/init-types.js +0 -0
  61. /package/bin/app/{relifso/init → init}/templates/t-gitignore.d.ts +0 -0
  62. /package/bin/app/{relifso/init → init}/templates/t-gitignore.js +0 -0
  63. /package/bin/app/{relifso/init → init}/templates/t-license.d.ts +0 -0
  64. /package/bin/app/{relifso/init → init}/templates/t-license.js +0 -0
  65. /package/bin/app/{relifso/init → init}/templates/t-readme.d.ts +0 -0
  66. /package/bin/app/{relifso/init → init}/templates/t-readme.js +0 -0
  67. /package/bin/app/migrate/codemods/{anything-to-bun.d.ts → anything-bun.d.ts} +0 -0
  68. /package/bin/app/migrate/codemods/{fs-to-relifso.d.ts → fs-relifso.d.ts} +0 -0
  69. /package/bin/app/migrate/codemods/{fs-to-relifso.js → fs-relifso.js} +0 -0
  70. /package/bin/app/migrate/codemods/{module-resolution.d.ts → nodenext-bundler.d.ts} +0 -0
  71. /package/bin/app/migrate/codemods/{module-resolution.js → nodenext-bundler.js} +0 -0
  72. /package/bin/app/migrate/codemods/{path-to-pathkit.d.ts → path-pathkit.d.ts} +0 -0
  73. /package/bin/app/migrate/codemods/{path-to-pathkit.js → path-pathkit.js} +0 -0
  74. /package/bin/app/{relifso/rename → rename}/cmd.d.ts +0 -0
  75. /package/bin/app/{relifso/rename → rename}/cmd.js +0 -0
  76. /package/bin/libs/sdk/sdk-impl/{config → cfg}/default.d.ts +0 -0
  77. /package/bin/libs/sdk/sdk-impl/{config → cfg}/default.js +0 -0
  78. /package/bin/libs/sdk/sdk-impl/{config → cfg}/define.d.ts +0 -0
  79. /package/bin/libs/sdk/sdk-impl/{config → cfg}/define.js +0 -0
  80. /package/bin/libs/sdk/sdk-impl/{config → cfg}/info.d.ts +0 -0
  81. /package/bin/libs/sdk/sdk-impl/{config → cfg}/init.d.ts +0 -0
  82. /package/bin/libs/sdk/sdk-impl/{config → cfg}/init.js +0 -0
  83. /package/bin/libs/sdk/sdk-impl/{config → cfg}/load.d.ts +0 -0
  84. /package/bin/libs/sdk/sdk-impl/{config → cfg}/load.js +0 -0
  85. /package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/analyzer.d.ts +0 -0
  86. /package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/deps-types.js +0 -0
  87. /package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/filesystem.d.ts +0 -0
  88. /package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/formatter.d.ts +0 -0
  89. /package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/parser.d.ts +0 -0
  90. /package/bin/libs/sdk/sdk-impl/{check/rules/deps → rules/reliverse/missing-deps}/parser.js +0 -0
  91. /package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/package-json-health}/package-json-health.js +0 -0
  92. /package/bin/libs/sdk/sdk-impl/{check/rules → rules/reliverse/tsconfig-health}/tsconfig-health.js +0 -0
  93. /package/bin/libs/sdk/sdk-impl/{check/check-consts.d.ts → rules/rules-consts.d.ts} +0 -0
  94. /package/bin/libs/sdk/sdk-impl/{check/check-consts.js → rules/rules-consts.js} +0 -0
  95. /package/bin/libs/sdk/sdk-impl/{check/check-mod.d.ts → rules/rules-mod.d.ts} +0 -0
  96. /package/bin/libs/sdk/sdk-impl/{check/check-utils.js → rules/rules-utils.js} +0 -0
@@ -1,5 +1,5 @@
1
- import { analyzeDependencies } from "./deps/analyzer.js";
2
- import { IGNORE_PATTERNS } from "../../constants.js";
1
+ import { IGNORE_PATTERNS } from "../../../constants.js";
2
+ import { analyzeDependencies } from "./analyzer.js";
3
3
  export async function checkMissingDependencies(options) {
4
4
  const startTime = Date.now();
5
5
  const issues = [];
@@ -23,4 +23,6 @@ export type DependencyResult = {
23
23
  allDependencies: string[];
24
24
  listedDependencies: string[];
25
25
  builtinModules: string[];
26
+ devOnlyDependencies: string[];
27
+ duplicateDependencies: string[];
26
28
  };
@@ -1,6 +1,6 @@
1
1
  import fs from "@reliverse/relifso";
2
- import { glob } from "glob";
3
2
  import path from "node:path";
3
+ import { glob } from "tinyglobby";
4
4
  export const findSourceFiles = async (directory, ignorePatterns) => {
5
5
  const pattern = `${directory}/**/*.{js,jsx,ts,tsx}`;
6
6
  const defaultIgnores = [
@@ -16,8 +16,7 @@ export const findSourceFiles = async (directory, ignorePatterns) => {
16
16
  const allIgnores = [...defaultIgnores, ...ignorePatterns];
17
17
  return await glob(pattern, {
18
18
  ignore: allIgnores,
19
- absolute: true,
20
- nodir: true
19
+ absolute: true
21
20
  });
22
21
  };
23
22
  export const readFile = async (filePath) => {
@@ -0,0 +1,113 @@
1
+ import { re } from "@reliverse/relico";
2
+ export const formatOutput = (result, options) => {
3
+ if (options.json) {
4
+ return JSON.stringify(result, null, 2);
5
+ }
6
+ let output = "";
7
+ output += re.bluePastel("\nMissing Dependencies Finder Results\n");
8
+ output += re.gray("---------------------------------------\n\n");
9
+ output += re.bold("Statistics:\n");
10
+ output += `${re.gray("\u2022 ")}Total dependencies found: ${result.allDependencies.length}
11
+ `;
12
+ output += `${re.gray("\u2022 ")}Listed in package.json: ${result.listedDependencies.length}
13
+ `;
14
+ output += `${re.gray("\u2022 ")}Missing from package.json: ${result.missingDependencies.length}
15
+ `;
16
+ if (options.builtins) {
17
+ output += `${re.gray("\u2022 ")}Node.js built-in modules: ${result.builtinModules.length}
18
+ `;
19
+ }
20
+ output += `${re.gray("\u2022 ")}Dev-only dependencies used in production: ${result.devOnlyDependencies.length}
21
+ `;
22
+ output += `${re.gray("\u2022 ")}Duplicate dependencies: ${result.duplicateDependencies.length}
23
+ `;
24
+ output += "\n";
25
+ if (result.duplicateDependencies.length > 0) {
26
+ output += re.yellowPastel("\u26A0\uFE0F Duplicate Dependencies Found:\n");
27
+ output += re.yellow(
28
+ "These packages are listed in both dependencies and devDependencies.\n"
29
+ );
30
+ output += re.yellow(
31
+ "This can cause confusion and potential issues. Consider keeping them in only one section.\n\n"
32
+ );
33
+ for (const dep of result.duplicateDependencies) {
34
+ output += `${re.gray("\u2022 ")}${re.yellow(dep)}
35
+ `;
36
+ }
37
+ output += "\n";
38
+ }
39
+ if (result.devOnlyDependencies.length > 0) {
40
+ output += re.yellowPastel(
41
+ "\u26A0\uFE0F Dev-only Dependencies Used in Production Code:\n"
42
+ );
43
+ output += re.yellow(
44
+ "These packages are only in devDependencies but are imported in your code.\n"
45
+ );
46
+ output += re.yellow(
47
+ "They will cause errors in production after bundling!\n\n"
48
+ );
49
+ for (const dep of result.devOnlyDependencies) {
50
+ output += `${re.gray("\u2022 ")}${re.yellow(dep)}
51
+ `;
52
+ }
53
+ output += "\n";
54
+ output += re.gray("To fix, move these to dependencies:\n");
55
+ output += re.cyan(
56
+ `npm install ${result.devOnlyDependencies.join(" ")} --save
57
+ `
58
+ );
59
+ }
60
+ if (result.missingDependencies.length > 0) {
61
+ output += re.redPastel("Missing Dependencies:\n");
62
+ for (const dep of result.missingDependencies) {
63
+ output += `${re.gray("\u2022 ")}${re.yellow(dep)}
64
+ `;
65
+ }
66
+ output += "\n";
67
+ output += re.gray("To install, run:\n");
68
+ output += re.cyan(
69
+ `npm install ${result.missingDependencies.join(" ")}
70
+ `
71
+ );
72
+ } else {
73
+ output += re.greenPastel("No missing dependencies found! \u{1F389}\n\n");
74
+ }
75
+ if (options.builtins && result.builtinModules.length > 0) {
76
+ output += re.bluePastel("Node.js Built-in Modules Used:\n");
77
+ for (const dep of result.builtinModules) {
78
+ output += `${re.gray("\u2022 ")}${re.blue(dep)}
79
+ `;
80
+ }
81
+ output += "\n";
82
+ }
83
+ if (options.showAll) {
84
+ output += re.bold("All Dependencies:\n");
85
+ output += re.gray(
86
+ "(\u2713 = listed in package.json, \u2717 = missing, \u26A0\uFE0F = dev-only, \u{1F504} = duplicate)\n"
87
+ );
88
+ for (const dep of result.allDependencies) {
89
+ const isListed = result.listedDependencies.includes(dep);
90
+ const isBuiltin = result.builtinModules.includes(dep);
91
+ const isDevOnly = result.devOnlyDependencies.includes(dep);
92
+ const isDuplicate = result.duplicateDependencies.includes(dep);
93
+ if (isDuplicate) {
94
+ output += `${re.gray("\u2022 ")}${re.yellow("\u{1F504} ")}${re.yellow(dep)}${re.gray(" (duplicate)")}
95
+ `;
96
+ } else if (isListed && !isDevOnly) {
97
+ output += `${re.gray("\u2022 ") + re.green("\u2713 ") + dep}
98
+ `;
99
+ } else if (isBuiltin) {
100
+ output += `${re.gray("\u2022 ")}${re.blue("\u26A1 ")}${dep}${re.gray(" (built-in)")}
101
+ `;
102
+ } else if (isDevOnly) {
103
+ output += `${re.gray("\u2022 ")}${re.yellow("\u26A0\uFE0F ")}${re.yellow(dep)}${re.gray(" (dev-only)")}
104
+ `;
105
+ } else {
106
+ output += `${re.gray("\u2022 ")}${re.red("\u2717 ")}${re.yellow(dep)}
107
+ `;
108
+ }
109
+ }
110
+ output += "\n";
111
+ }
112
+ return output;
113
+ };
@@ -0,0 +1,2 @@
1
+ import type { CheckResult, RulesCheckOptions } from "../../../../sdk-types.js";
2
+ export declare function checkNoIndexFiles(options: RulesCheckOptions): Promise<CheckResult>;
@@ -0,0 +1,31 @@
1
+ import path from "node:path";
2
+ import { glob } from "tinyglobby";
3
+ export async function checkNoIndexFiles(options) {
4
+ const { directory } = options;
5
+ const startTime = Date.now();
6
+ const indexFiles = await glob("**/index.{ts,js}", {
7
+ cwd: directory,
8
+ ignore: ["node_modules/**", "dist/**", ".git/**"]
9
+ });
10
+ const issues = [];
11
+ const stats = {
12
+ filesChecked: indexFiles.length,
13
+ importsChecked: 0,
14
+ timeElapsed: Date.now() - startTime
15
+ };
16
+ for (const file of indexFiles) {
17
+ const fullPath = path.join(directory, file);
18
+ const dirName = path.basename(path.dirname(file));
19
+ issues.push({
20
+ type: "no-index-files",
21
+ file: fullPath,
22
+ line: 1,
23
+ message: `Avoid using index.{ts,js} file names. Use descriptive names like mod.{ts,js} or ${dirName}-mod.{ts,js} instead. This reduces confusion, especially since TypeScript can resolve index files implicitly depending on the module resolution strategy.`
24
+ });
25
+ }
26
+ return {
27
+ success: issues.length === 0,
28
+ issues,
29
+ stats
30
+ };
31
+ }
@@ -1,2 +1,2 @@
1
- import type { CheckResult } from "../../../sdk-types.js";
1
+ import type { CheckResult } from "../../../../sdk-types.js";
2
2
  export declare function checkPackageJsonHealth(): Promise<CheckResult>;
@@ -0,0 +1,2 @@
1
+ import type { CheckResult, RulesCheckOptions } from "../../../../sdk-types.js";
2
+ export declare function checkPathExtensions(options: RulesCheckOptions): Promise<CheckResult>;
@@ -4,11 +4,11 @@ import { relinka } from "@reliverse/relinka";
4
4
  import {
5
5
  ALLOWED_IMPORT_EXTENSIONS,
6
6
  STRICT_IMPORT_EXTENSIONS
7
- } from "../check-consts.js";
7
+ } from "../../rules-consts.js";
8
8
  import {
9
9
  getAllFiles,
10
10
  getLineNumber
11
- } from "../check-utils.js";
11
+ } from "../../rules-utils.js";
12
12
  function getAllowedImportExtensions(directory, strict) {
13
13
  if (strict) {
14
14
  return STRICT_IMPORT_EXTENSIONS[directory];
@@ -0,0 +1,2 @@
1
+ import type { CheckResult, RulesCheckOptions } from "../../../../sdk-types.js";
2
+ export declare function checkSelfInclude(options: RulesCheckOptions): Promise<CheckResult>;
@@ -1,11 +1,11 @@
1
1
  import { getFileImportsExports, extname } from "@reliverse/pathkit";
2
2
  import fs from "@reliverse/relifso";
3
3
  import { relinka } from "@reliverse/relinka";
4
+ import { loadConfig } from "../../../cfg/load.js";
4
5
  import {
5
6
  getAllFiles,
6
7
  getLineNumber
7
- } from "../check-utils.js";
8
- import { loadConfig } from "../../config/load.js";
8
+ } from "../../rules-utils.js";
9
9
  export async function checkSelfInclude(options) {
10
10
  const startTime = Date.now();
11
11
  const issues = [];
@@ -1,2 +1,2 @@
1
- import type { CheckResult } from "../../../sdk-types.js";
1
+ import type { CheckResult } from "../../../../sdk-types.js";
2
2
  export declare function checkTsConfigHealth(): Promise<CheckResult>;
@@ -22,6 +22,7 @@ export function displayCheckResults(checkType, directory, result) {
22
22
  (i) => i.type === "dler-config-health"
23
23
  );
24
24
  const selfIncludeIssues = issues.filter((i) => i.type === "self-include");
25
+ const noIndexIssues = issues.filter((i) => i.type === "no-index-files");
25
26
  if (fileIssues.length > 0) {
26
27
  relinka("error", ` file extension issues (${fileIssues.length}):`);
27
28
  for (const issue of fileIssues.slice(0, 10)) {
@@ -79,6 +80,15 @@ export function displayCheckResults(checkType, directory, result) {
79
80
  relinka("error", ` ... and ${selfIncludeIssues.length - 10} more`);
80
81
  }
81
82
  }
83
+ if (noIndexIssues.length > 0) {
84
+ relinka("error", ` index file issues (${noIndexIssues.length}):`);
85
+ for (const issue of noIndexIssues.slice(0, 10)) {
86
+ relinka("error", ` ${issue.file}: ${issue.message}`);
87
+ }
88
+ if (noIndexIssues.length > 10) {
89
+ relinka("error", ` ... and ${noIndexIssues.length - 10} more`);
90
+ }
91
+ }
82
92
  relinka(
83
93
  "info",
84
94
  ` stats: ${stats.filesChecked} files, ${stats.importsChecked} imports, ${stats.timeElapsed}ms`
@@ -1,4 +1,4 @@
1
- import type { AllowedFileExtensionsType } from "./check-consts";
1
+ import type { AllowedFileExtensionsType } from "./rules-consts";
2
2
  export declare function validateDirectory(dir: string): Promise<boolean>;
3
3
  export declare function shouldIgnoreFile(filePath: string): boolean;
4
4
  export declare function getAllFiles(dir: AllowedFileExtensionsType, onProgress?: (current: number, total: number, file: string) => void): Promise<string[]>;
@@ -103,9 +103,12 @@ async function library_getlibPkgKeepDeps(libName, originalDeps, outDirBin, isJsr
103
103
  const devDeps = originalDeps === originalPkg.devDependencies;
104
104
  const patterns = /* @__PURE__ */ new Set();
105
105
  const addPatterns = /* @__PURE__ */ new Set();
106
+ const negPatterns = /* @__PURE__ */ new Set();
106
107
  for (const pattern of config.filterDepsPatterns.global) {
107
108
  if (pattern.startsWith("+")) {
108
109
  addPatterns.add(pattern.slice(1));
110
+ } else if (pattern.startsWith("!")) {
111
+ negPatterns.add(pattern.slice(1));
109
112
  } else {
110
113
  patterns.add(pattern);
111
114
  }
@@ -114,6 +117,8 @@ async function library_getlibPkgKeepDeps(libName, originalDeps, outDirBin, isJsr
114
117
  for (const pattern of config.filterDepsPatterns["dist-npm"]) {
115
118
  if (pattern.startsWith("+")) {
116
119
  addPatterns.add(pattern.slice(1));
120
+ } else if (pattern.startsWith("!")) {
121
+ negPatterns.add(pattern.slice(1));
117
122
  } else {
118
123
  patterns.add(pattern);
119
124
  }
@@ -123,6 +128,8 @@ async function library_getlibPkgKeepDeps(libName, originalDeps, outDirBin, isJsr
123
128
  for (const pattern of config.filterDepsPatterns["dist-jsr"]) {
124
129
  if (pattern.startsWith("+")) {
125
130
  addPatterns.add(pattern.slice(1));
131
+ } else if (pattern.startsWith("!")) {
132
+ negPatterns.add(pattern.slice(1));
126
133
  } else {
127
134
  patterns.add(pattern);
128
135
  }
@@ -134,6 +141,8 @@ async function library_getlibPkgKeepDeps(libName, originalDeps, outDirBin, isJsr
134
141
  for (const pattern of libPatterns.npm) {
135
142
  if (pattern.startsWith("+")) {
136
143
  addPatterns.add(pattern.slice(1));
144
+ } else if (pattern.startsWith("!")) {
145
+ negPatterns.add(pattern.slice(1));
137
146
  } else {
138
147
  patterns.add(pattern);
139
148
  }
@@ -143,6 +152,8 @@ async function library_getlibPkgKeepDeps(libName, originalDeps, outDirBin, isJsr
143
152
  for (const pattern of libPatterns.jsr) {
144
153
  if (pattern.startsWith("+")) {
145
154
  addPatterns.add(pattern.slice(1));
155
+ } else if (pattern.startsWith("!")) {
156
+ negPatterns.add(pattern.slice(1));
146
157
  } else {
147
158
  patterns.add(pattern);
148
159
  }
@@ -151,8 +162,16 @@ async function library_getlibPkgKeepDeps(libName, originalDeps, outDirBin, isJsr
151
162
  }
152
163
  const result2 = Object.entries(originalDeps).reduce(
153
164
  (acc, [k, v]) => {
165
+ const depNameLower = k.toLowerCase();
166
+ const isNegated = Array.from(negPatterns).some(
167
+ (pattern) => depNameLower.includes(pattern.toLowerCase())
168
+ );
169
+ if (isNegated) {
170
+ acc[k] = v;
171
+ return acc;
172
+ }
154
173
  const shouldExclude = devDeps || Array.from(patterns).some(
155
- (pattern) => k.toLowerCase().includes(pattern.toLowerCase())
174
+ (pattern) => depNameLower.includes(pattern.toLowerCase())
156
175
  );
157
176
  if (!shouldExclude) {
158
177
  acc[k] = v;
@@ -257,7 +276,9 @@ async function library_writeJsrPackageJSON(libName, outDirBin, pkgJsonDir, origi
257
276
  "package.json",
258
277
  "README.md",
259
278
  "LICENSE"
260
- ]
279
+ ],
280
+ main: `./bin/${path.basename(libsList[libName].libMainFile)}`,
281
+ module: `./bin/${path.basename(libsList[libName].libMainFile)}`
261
282
  });
262
283
  const pkgPath = path.join(pkgJsonDir, "package.json");
263
284
  await fs.ensureDir(path.dirname(pkgPath));
@@ -300,7 +321,7 @@ async function library_writeNpmLibPackageJSON(libName, outDirBin, pkgJsonDir, or
300
321
  libName
301
322
  ),
302
323
  exports: {
303
- ".": `./bin/${libsList[libName].libMainFile.replace(/\.ts$/, `.${unifiedBundlerOutExt}`)}`
324
+ ".": `./bin/${path.basename(libsList[libName].libMainFile).replace(/\.ts$/, `.${unifiedBundlerOutExt}`)}`
304
325
  },
305
326
  files: config.publishArtifacts?.global || [
306
327
  "bin",
@@ -308,8 +329,8 @@ async function library_writeNpmLibPackageJSON(libName, outDirBin, pkgJsonDir, or
308
329
  "README.md",
309
330
  "LICENSE"
310
331
  ],
311
- main: `./bin/${libsList[libName].libMainFile.replace(/\.ts$/, `.${unifiedBundlerOutExt}`)}`,
312
- module: `./bin/${libsList[libName].libMainFile.replace(/\.ts$/, `.${unifiedBundlerOutExt}`)}`,
332
+ main: `./bin/${path.basename(libsList[libName].libMainFile).replace(/\.ts$/, `.${unifiedBundlerOutExt}`)}`,
333
+ module: `./bin/${path.basename(libsList[libName].libMainFile).replace(/\.ts$/, `.${unifiedBundlerOutExt}`)}`,
313
334
  publishConfig: { access: "public" }
314
335
  });
315
336
  const pkgPath = path.join(pkgJsonDir, "package.json");
@@ -851,7 +851,7 @@ export type PerfTimer = {
851
851
  /** Options common to both NPM and JSR build targets */
852
852
  /** Options specific to the transpilation/bundling process */
853
853
  type DirectoryType = "src" | "dist-npm" | "dist-jsr" | "dist-libs/npm" | "dist-libs/jsr";
854
- export type FileCheckOptions = {
854
+ export type RulesCheckOptions = {
855
855
  directory: DirectoryType;
856
856
  strict: boolean;
857
857
  moduleResolution: "bundler" | "nodenext";
@@ -865,7 +865,7 @@ export type FileCheckOptions = {
865
865
  depth?: number;
866
866
  };
867
867
  export type CheckIssue = {
868
- type: "file-extension" | "path-extension" | "missing-dependency" | "builtin-module" | "dler-config-health" | "self-include" | "tsconfig-health";
868
+ type: "file-extension" | "path-extension" | "missing-dependency" | "builtin-module" | "dler-config-health" | "self-include" | "tsconfig-health" | "no-index-files";
869
869
  message: string;
870
870
  file: string;
871
871
  line?: number;
package/bin/mod.d.ts CHANGED
@@ -1 +1 @@
1
- export { defineConfig } from "./libs/sdk/sdk-impl/config/define";
1
+ export { defineConfig } from "./libs/sdk/sdk-impl/cfg/define";
package/bin/mod.js CHANGED
@@ -1 +1 @@
1
- export { defineConfig } from "./libs/sdk/sdk-impl/config/define.js";
1
+ export { defineConfig } from "./libs/sdk/sdk-impl/cfg/define.js";
package/package.json CHANGED
@@ -13,12 +13,10 @@
13
13
  "@rollup/plugin-node-resolve": "^16.0.1",
14
14
  "@rollup/plugin-replace": "^6.0.2",
15
15
  "@rollup/pluginutils": "^5.1.4",
16
- "chalk": "^5.4.1",
17
16
  "defu": "^6.1.4",
18
17
  "esbuild": "^0.25.5",
19
18
  "execa": "^9.6.0",
20
19
  "fix-dts-default-cjs-exports": "^1.0.1",
21
- "glob": "^11.0.2",
22
20
  "hookable": "^5.5.3",
23
21
  "jiti": "^2.4.2",
24
22
  "magic-string": "^0.30.17",
@@ -41,7 +39,7 @@
41
39
  "license": "MIT",
42
40
  "name": "@reliverse/dler",
43
41
  "type": "module",
44
- "version": "1.7.0",
42
+ "version": "1.7.2",
45
43
  "keywords": [
46
44
  "reliverse",
47
45
  "cli",
@@ -1,11 +0,0 @@
1
- declare const _default: import("@reliverse/rempts").Command<{
2
- dev: {
3
- type: "boolean";
4
- description: string;
5
- };
6
- cwd: {
7
- type: "string";
8
- description: string;
9
- };
10
- }>;
11
- export default _default;
@@ -1,47 +0,0 @@
1
- import { relinka } from "@reliverse/relinka";
2
- import { defineCommand, runCmd, selectPrompt } from "@reliverse/rempts";
3
- import { getCmdRelifsoInit, getCmdRelifsoRename } from "../cmds.js";
4
- export default defineCommand({
5
- meta: {
6
- name: "relifso",
7
- description: "Runs the Relifso helper interactive menu (displays list of available commands)"
8
- },
9
- args: {
10
- dev: {
11
- type: "boolean",
12
- description: "Runs the CLI in dev mode"
13
- },
14
- cwd: {
15
- type: "string",
16
- description: "The working directory to run the CLI in"
17
- }
18
- },
19
- run: async ({ args }) => {
20
- const isDev = args.dev;
21
- relinka("verbose", `Running in ${isDev ? "dev" : "prod"} mode`);
22
- const cmd = await selectPrompt({
23
- title: "Select a command",
24
- options: [
25
- {
26
- value: "init",
27
- label: "Initialize files"
28
- },
29
- {
30
- value: "rename-prepare",
31
- label: "My project is a bootstrapper CLI (apply rename optimizations)"
32
- },
33
- {
34
- value: "rename-prepare-revert",
35
- label: "Revert rename CLI files optimizations"
36
- }
37
- ]
38
- });
39
- if (cmd === "init") {
40
- await runCmd(await getCmdRelifsoInit(), []);
41
- } else if (cmd === "rename-prepare") {
42
- await runCmd(await getCmdRelifsoRename(), ["--prepareMyCLI"]);
43
- } else if (cmd === "rename-prepare-revert") {
44
- await runCmd(await getCmdRelifsoRename(), ["--prepareMyCLI", "--revert"]);
45
- }
46
- }
47
- });
@@ -1,18 +0,0 @@
1
- declare const _default: import("@reliverse/rempts").Command<{
2
- input: {
3
- type: "string";
4
- required: true;
5
- description: string;
6
- };
7
- from: {
8
- type: "string";
9
- required: true;
10
- description: string;
11
- };
12
- to: {
13
- type: "string";
14
- required: true;
15
- description: string;
16
- };
17
- }>;
18
- export default _default;
@@ -1,149 +0,0 @@
1
- import fs from "@reliverse/relifso";
2
- import { relinka } from "@reliverse/relinka";
3
- import { defineArgs, defineCommand } from "@reliverse/rempts";
4
- export default defineCommand({
5
- meta: {
6
- name: "relinka",
7
- version: "1.0.0",
8
- description: "Convert between different logging formats (console, consola method/object, relinka function/method/object)."
9
- },
10
- args: defineArgs({
11
- input: {
12
- type: "string",
13
- required: true,
14
- description: "Input file or directory path"
15
- },
16
- from: {
17
- type: "string",
18
- required: true,
19
- description: "Source format (console, consolaMethod, consolaObject, relinkaFunction, relinkaMethod, relinkaObject)"
20
- },
21
- to: {
22
- type: "string",
23
- required: true,
24
- description: "Target format (console, consolaMethod, consolaObject, relinkaFunction, relinkaMethod, relinkaObject)"
25
- }
26
- }),
27
- async run({ args }) {
28
- const { input, from, to } = args;
29
- if (!await fs.pathExists(input)) {
30
- relinka("error", `\u274C Input path does not exist: ${input}`);
31
- return;
32
- }
33
- let content = await fs.readFile(input, "utf-8");
34
- let changes = false;
35
- const levels = [
36
- "log",
37
- "info",
38
- "warn",
39
- "error",
40
- "debug",
41
- "verbose",
42
- "success",
43
- "ready",
44
- "start",
45
- "box",
46
- "trace"
47
- ];
48
- const getSourcePattern = (level, format) => {
49
- switch (format) {
50
- case "console":
51
- return new RegExp(`console\\.${level}\\((.*?)(?:,\\s*(.*))?\\)`, "g");
52
- case "consolaMethod":
53
- if (level === "box") {
54
- return /consola\.box\(\s*{\s*title:\s*"([^"]*)",\s*message:\s*"([^"]*)"\s*\}\s*\)/g;
55
- }
56
- return new RegExp(`consola\\.${level}\\((.*?)(?:,\\s*(.*))?\\)`, "g");
57
- case "consolaObject":
58
- return new RegExp(
59
- `consola\\({level:\\s*"${level}",\\s*message:\\s*(.*?)(?:,\\s*title:\\s*"([^"]*)")?\\s*\\}\\)`,
60
- "g"
61
- );
62
- case "relinkaFunction":
63
- return new RegExp(
64
- `relinka\\("${level}",\\s*(.*?)(?:,\\s*(.*))?\\)`,
65
- "g"
66
- );
67
- case "relinkaMethod":
68
- return new RegExp(`relinka\\.${level}\\((.*?)(?:,\\s*(.*))?\\)`, "g");
69
- case "relinkaObject":
70
- return new RegExp(
71
- `relinka\\({level:\\s*"${level}",\\s*message:\\s*(.*?)(?:,\\s*title:\\s*"([^"]*)")?\\s*\\}\\)`,
72
- "g"
73
- );
74
- default:
75
- throw new Error(`Invalid source format: ${format}`);
76
- }
77
- };
78
- const createReplacement = (level, message, title, args2) => {
79
- switch (to) {
80
- case "console":
81
- return `console.${level}(${message}${args2 ? `, ${args2}` : ""})`;
82
- case "consolaMethod":
83
- if (level === "box" && title) {
84
- return `consola.box({ title: "${title}", message: "${message}" })`;
85
- }
86
- return `consola.${level}(${message}${args2 ? `, ${args2}` : ""})`;
87
- case "consolaObject": {
88
- const obj = {
89
- level: `"${level}"`,
90
- message,
91
- ...title && { title: `"${title}"` },
92
- ...args2 && { args: `[${args2}]` }
93
- };
94
- return `consola(${JSON.stringify(obj).replace(/"([^"]+)":/g, "$1:")})`;
95
- }
96
- case "relinkaFunction":
97
- if (level === "box" && title) {
98
- return `relinka("${level}", "${title}\\n${message}"${args2 ? `, ${args2}` : ""})`;
99
- }
100
- return `relinka("${level}", ${message}${args2 ? `, ${args2}` : ""})`;
101
- case "relinkaMethod":
102
- if (level === "box" && title) {
103
- return `relinka.${level}("${title}\\n${message}"${args2 ? `, ${args2}` : ""})`;
104
- }
105
- return `relinka.${level}(${message}${args2 ? `, ${args2}` : ""})`;
106
- case "relinkaObject": {
107
- const obj = {
108
- level: `"${level}"`,
109
- message,
110
- ...title && { title: `"${title}"` },
111
- ...args2 && { args: `[${args2}]` }
112
- };
113
- return `relinka(${JSON.stringify(obj).replace(/"([^"]+)":/g, "$1:")})`;
114
- }
115
- default:
116
- throw new Error(`Invalid target format: ${to}`);
117
- }
118
- };
119
- for (const level of levels) {
120
- const pattern = getSourcePattern(level, from);
121
- const newContent = content.replace(
122
- pattern,
123
- (_, message, titleOrArgs, args2) => {
124
- changes = true;
125
- if ((from === "consolaMethod" || from === "relinkaMethod") && level === "box") {
126
- return createReplacement(level, message, titleOrArgs, args2);
127
- }
128
- return createReplacement(level, message, void 0, titleOrArgs);
129
- }
130
- );
131
- if (newContent !== content) {
132
- content = newContent;
133
- relinka(
134
- "log",
135
- `\u2705 Converted ${level} calls from ${from} to ${to} format`
136
- );
137
- }
138
- }
139
- if (!changes) {
140
- relinka("warn", "\u26A0\uFE0F No matching calls found to convert");
141
- } else {
142
- await fs.writeFile(input, content, "utf-8");
143
- relinka(
144
- "success",
145
- "\u2728 Successfully converted all logging calls to the target format"
146
- );
147
- }
148
- }
149
- });