@reliverse/dler 2.0.24 → 2.0.26

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.
@@ -109,7 +109,7 @@ const cleanCmdCfg = defineCmdCfg({
109
109
  "dler clean --presets build # Clean dist/, dev-dist/, target/",
110
110
  "dler clean --presets db # Clean _generated/",
111
111
  "dler clean --presets cms # Clean .basehub/",
112
- "dler clean --presets frontend # Clean .next/, .nuxt/, .expo/, routeTree.gen.ts",
112
+ "dler clean --presets frontend # Clean .next/, .expo/, routeTree.gen.ts",
113
113
  "dler clean --presets docs # Clean .source/",
114
114
  "dler clean --presets email # Clean .react-email/",
115
115
  "dler clean --presets build-tools # Clean .turbo/, .vercel/, .wrangler/",
@@ -65,20 +65,26 @@ const resolvePackageInfo = async (packagePath, isRoot = false) => {
65
65
  const getWorkspacePackages = async (cwd, useCwd = false) => {
66
66
  const monorepoRoot = await findMonorepoRoot(cwd, useCwd);
67
67
  if (!monorepoRoot) {
68
+ const currentDir = cwd || process.cwd();
69
+ const pkgInfo = await resolvePackageInfo(currentDir, true);
70
+ if (pkgInfo) {
71
+ return [pkgInfo];
72
+ }
68
73
  throw new Error(
69
- "\u274C No monorepo found. Ensure package.json has 'workspaces' field."
74
+ "\u274C No monorepo or valid package found. Ensure package.json has 'workspaces' field or contains a valid 'name' field."
70
75
  );
71
76
  }
72
77
  const rootPkg = await readPackageJSON(monorepoRoot);
73
78
  if (!rootPkg) {
74
79
  throw new Error("\u274C Could not read root package.json");
75
80
  }
81
+ const rootPkgInfo = await resolvePackageInfo(monorepoRoot, true);
82
+ const packages = rootPkgInfo ? [rootPkgInfo] : [];
83
+ const seenPaths = /* @__PURE__ */ new Set([monorepoRoot]);
76
84
  const patterns = getWorkspacePatterns(rootPkg);
77
85
  if (!patterns.length) {
78
- throw new Error("\u274C No workspace patterns found in package.json");
86
+ return packages;
79
87
  }
80
- const packages = [];
81
- const seenPaths = /* @__PURE__ */ new Set();
82
88
  for (const pattern of patterns) {
83
89
  if (pattern.includes("*")) {
84
90
  const glob = new Bun.Glob(pattern);
@@ -195,7 +201,7 @@ const getCategoryForPattern = (pattern) => {
195
201
  if (pattern.includes("dist")) return "build";
196
202
  if (pattern.includes("_generated")) return "db";
197
203
  if (pattern.includes(".basehub")) return "cms";
198
- if (pattern.includes(".next") || pattern.includes(".nuxt") || pattern.includes(".expo"))
204
+ if (pattern.includes(".next") || pattern.includes(".expo"))
199
205
  return "frontend";
200
206
  if (pattern.includes(".source")) return "docs";
201
207
  if (pattern.includes(".react-email")) return "email";
@@ -594,8 +600,8 @@ export const runCleanOnAllPackages = async (ignore, cwd, options = {}) => {
594
600
  (sum, r) => sum + r.files.reduce((s, f) => s + f.size, 0),
595
601
  0
596
602
  ) + lockFilesResult.deletedSize;
597
- const deletedFiles = results.reduce((sum, r) => sum + r.deletedCount, 0) + lockFilesResult.deletedCount;
598
- const deletedSize = results.reduce((sum, r) => sum + r.deletedSize, 0) + lockFilesResult.deletedSize;
603
+ const deletedFiles = totalFiles;
604
+ const deletedSize = totalSize;
599
605
  const allErrors = results.flatMap((r) => r.errors);
600
606
  const summary = {
601
607
  totalPackages: packages.length,
@@ -24,7 +24,7 @@ export const PRESET_CATEGORIES = {
24
24
  frontend: {
25
25
  name: "frontend",
26
26
  description: "Frontend framework build artifacts",
27
- patterns: [".next/", ".nuxt/", ".expo/", "routeTree.gen.ts"],
27
+ patterns: [".next/", ".expo/", "routeTree.gen.ts"],
28
28
  order: 4
29
29
  },
30
30
  // Documentation
@@ -111,7 +111,6 @@ export default config;`;
111
111
  "next.config.js",
112
112
  "next.config.ts",
113
113
  "tailwind.config.ts",
114
- "postcss.config.js",
115
114
  "tsconfig.json"
116
115
  ];
117
116
  for (const file of filesToCopy) {
@@ -68,7 +68,12 @@ const getWorkspacePackages = async (monorepoRoot) => {
68
68
  }
69
69
  }
70
70
  }
71
- return packages;
71
+ const filteredPackages = packages.filter((pkg) => {
72
+ const normalizedPkgPath = resolve(pkg.path);
73
+ const normalizedRootPath = resolve(monorepoRoot);
74
+ return normalizedPkgPath !== normalizedRootPath;
75
+ });
76
+ return filteredPackages;
72
77
  };
73
78
  const resolvePackageInfo = async (packagePath) => {
74
79
  try {
@@ -152,7 +152,6 @@ export class FileSystemAnalyzer {
152
152
  "node_modules",
153
153
  ".git",
154
154
  ".next",
155
- ".nuxt",
156
155
  ".expo",
157
156
  "dist",
158
157
  "build",
@@ -14,6 +14,7 @@ export declare class MonorepoAnalyzer {
14
14
  analyze(): Promise<MonorepoAnalysisResult>;
15
15
  private findMonorepoRoot;
16
16
  private discoverPackages;
17
+ private discoverSinglePackage;
17
18
  private resolvePackageInfo;
18
19
  private buildDependencyGraph;
19
20
  private calculateLevels;
@@ -26,14 +26,25 @@ export class MonorepoAnalyzer {
26
26
  }
27
27
  const monorepoRoot = await this.findMonorepoRoot(cwd);
28
28
  if (!monorepoRoot) {
29
- throw new Error(
30
- 'No monorepo found. Ensure package.json has "workspaces" field.'
31
- );
32
- }
33
- if (verbose) {
34
- logger.info(` Monorepo root: ${monorepoRoot}`);
29
+ const currentDir = cwd || process.cwd();
30
+ const singlePkg = await this.discoverSinglePackage(currentDir);
31
+ if (singlePkg) {
32
+ this.packages = [singlePkg];
33
+ if (verbose) {
34
+ logger.info(` Single package root: ${currentDir}`);
35
+ logger.info(" Found 1 package");
36
+ }
37
+ } else {
38
+ throw new Error(
39
+ 'No monorepo or valid package found. Ensure package.json has "workspaces" field or contains a valid "name" field.'
40
+ );
41
+ }
42
+ } else {
43
+ if (verbose) {
44
+ logger.info(` Monorepo root: ${monorepoRoot}`);
45
+ }
46
+ this.packages = await this.discoverPackages(monorepoRoot);
35
47
  }
36
- this.packages = await this.discoverPackages(monorepoRoot);
37
48
  if (verbose) {
38
49
  logger.info(` Found ${this.packages.length} packages`);
39
50
  }
@@ -98,11 +109,38 @@ export class MonorepoAnalyzer {
98
109
  }
99
110
  }
100
111
  }
112
+ const filteredPackages = packages.filter((pkg) => {
113
+ const normalizedPkgPath = resolve(pkg.path);
114
+ const normalizedRootPath = resolve(monorepoRoot);
115
+ return normalizedPkgPath !== normalizedRootPath;
116
+ });
101
117
  if (this.options.ignore) {
102
118
  const ignoreFilter = createIgnoreFilter(this.options.ignore);
103
- return ignoreFilter(packages);
119
+ return ignoreFilter(filteredPackages);
120
+ }
121
+ return filteredPackages;
122
+ }
123
+ async discoverSinglePackage(packagePath) {
124
+ try {
125
+ const pkg = await readPackageJSON(packagePath);
126
+ if (!pkg || !pkg.name) return null;
127
+ const dependencies = [
128
+ ...Object.keys(pkg.dependencies ?? {}),
129
+ ...this.options.includeDevDependencies ? Object.keys(pkg.devDependencies ?? {}) : [],
130
+ ...Object.keys(pkg.peerDependencies ?? {})
131
+ ];
132
+ return {
133
+ name: pkg.name,
134
+ path: packagePath,
135
+ dependencies,
136
+ dependents: [],
137
+ // Will be filled later
138
+ buildTime: 0,
139
+ size: 0
140
+ };
141
+ } catch {
142
+ return null;
104
143
  }
105
- return packages;
106
144
  }
107
145
  async resolvePackageInfo(packagePath) {
108
146
  const pkgJsonPath = join(packagePath, "package.json");
@@ -207,7 +207,6 @@ export class PerfAnalyzer {
207
207
  "node_modules",
208
208
  ".git",
209
209
  ".next",
210
- ".nuxt",
211
210
  "dist",
212
211
  "build"
213
212
  ]
@@ -123,14 +123,18 @@ const publishCmdArgs = defineCmdArgs({
123
123
  });
124
124
  const publishCmdCfg = defineCmdCfg({
125
125
  name: "publish",
126
- description: "Publish workspace packages to npm registry using Bun's native publish command. Automatically handles version bumping, package.json modification, and dist folder validation. Supports dler.ts configuration for per-package settings.",
126
+ description: "Publish workspace packages or single package to npm registry using Bun's native publish command. Automatically handles version bumping, package.json modification, and dist folder validation. Supports both monorepo and single-repo projects. Supports dler.ts configuration for per-package settings.",
127
127
  examples: [
128
128
  "dler publish",
129
+ "",
130
+ "# Monorepo examples:",
129
131
  'dler publish --ignore "@reliverse/*"',
130
132
  'dler publish --ignore "@reliverse/dler-colors" --ignore "@reliverse/dler-v1"',
131
133
  'dler publish --ignore "@reliverse/dler-colors @reliverse/dler-v1"',
132
134
  "dler publish --cwd /path/to/monorepo",
133
135
  "dler publish --cwd /path/to/monorepo --ignore @reliverse/*",
136
+ "",
137
+ "# Single-repo examples:",
134
138
  "dler publish --bump patch",
135
139
  "dler publish --bump minor --tag next",
136
140
  "dler publish --bump major --access public",
@@ -59,8 +59,19 @@ const getWorkspacePackages = async (cwd) => {
59
59
  const startTime = Date.now();
60
60
  const monorepoRoot = await findMonorepoRoot(cwd);
61
61
  if (!monorepoRoot) {
62
+ const currentDir = cwd || process.cwd();
63
+ const pkgInfo = await resolvePackageInfo(currentDir);
64
+ if (pkgInfo) {
65
+ return {
66
+ packages: [pkgInfo],
67
+ monorepoRoot: currentDir,
68
+ discoveryTime: Date.now() - startTime,
69
+ cacheHits: 0,
70
+ cacheMisses: 1
71
+ };
72
+ }
62
73
  throw new Error(
63
- "\u274C No monorepo found. Ensure package.json has 'workspaces' field."
74
+ "\u274C No monorepo or valid package found. Ensure package.json has 'workspaces' field or contains a valid 'name' field."
64
75
  );
65
76
  }
66
77
  const rootPkg = await readPackageJSON(monorepoRoot);
@@ -99,14 +110,19 @@ const getWorkspacePackages = async (cwd) => {
99
110
  { concurrency: DISCOVERY_CONCURRENCY }
100
111
  );
101
112
  const packages = packageResults.filter((result) => result.pkgInfo !== null).map((result) => result.pkgInfo);
113
+ const filteredPackages = packages.filter((pkg) => {
114
+ const normalizedPkgPath = resolve(pkg.path);
115
+ const normalizedRootPath = resolve(monorepoRoot);
116
+ return normalizedPkgPath !== normalizedRootPath;
117
+ });
102
118
  const discoveryTime = Date.now() - startTime;
103
119
  return {
104
- packages,
120
+ packages: filteredPackages,
105
121
  monorepoRoot,
106
122
  discoveryTime,
107
123
  cacheHits: 0,
108
124
  // Will be updated by cache layer
109
- cacheMisses: packages.length
125
+ cacheMisses: filteredPackages.length
110
126
  };
111
127
  };
112
128
  const filterPackages = (packages, ignore) => {
@@ -28,7 +28,7 @@ export async function prepareAllUpdateCandidates() {
28
28
  onlyFiles: true
29
29
  })) {
30
30
  const fullPath = path.resolve(process.cwd(), file);
31
- if (!file.includes("node_modules") && !file.includes("dist") && !file.includes("build") && !file.includes(".git") && !file.includes("coverage") && !file.includes(".next") && !file.includes(".nuxt") && !file.includes("out") && !file.includes("target") && !file.includes(".turbo")) {
31
+ if (!file.includes("node_modules") && !file.includes("dist") && !file.includes("build") && !file.includes(".git") && !file.includes("coverage") && !file.includes(".next") && !file.includes("out") && !file.includes("target") && !file.includes(".turbo")) {
32
32
  packageJsonFiles.push(fullPath);
33
33
  }
34
34
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@reliverse/dler",
3
3
  "description": "@reliverse/dler is a framework which helps TypeScript and JavaScript developers create their libraries and CLI tools. It provides ready-to-use primitives, so you don't have to write them from scratch.",
4
4
  "author": "reliverse",
5
- "version": "2.0.24",
5
+ "version": "2.0.26",
6
6
  "private": false,
7
7
  "type": "module",
8
8
  "bin": {
@@ -13,16 +13,16 @@
13
13
  "semver": "^7.7.3",
14
14
  "lookpath": "^1.2.3",
15
15
  "clipboardy": "^5.0.0",
16
- "@reliverse/dler-publish": "2.0.24",
17
- "@reliverse/dler-bump": "2.0.24",
18
- "@reliverse/dler-build": "2.0.24",
19
- "@reliverse/dler-logger": "2.0.24",
20
- "@reliverse/dler-matcher": "2.0.24",
21
- "@reliverse/dler-launcher": "2.0.24",
22
- "@reliverse/dler-prompt": "2.0.24",
23
- "@reliverse/dler-helpers": "2.0.24",
24
- "@reliverse/dler-pkg-tsc": "2.0.24",
25
- "@reliverse/dler-mapper": "2.0.24"
16
+ "@reliverse/dler-publish": "2.0.26",
17
+ "@reliverse/dler-bump": "2.0.26",
18
+ "@reliverse/dler-build": "2.0.26",
19
+ "@reliverse/dler-logger": "2.0.26",
20
+ "@reliverse/dler-matcher": "2.0.26",
21
+ "@reliverse/dler-launcher": "2.0.26",
22
+ "@reliverse/dler-prompt": "2.0.26",
23
+ "@reliverse/dler-helpers": "2.0.26",
24
+ "@reliverse/dler-pkg-tsc": "2.0.26",
25
+ "@reliverse/dler-mapper": "2.0.26"
26
26
  },
27
27
  "keywords": [
28
28
  "dler",