@reliverse/dler 1.7.65 → 1.7.67

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/README.md CHANGED
@@ -904,6 +904,31 @@ bun add @reliverse/dler-sdk
904
904
 
905
905
  **usage example**: [@reliverse/rse](https://github.com/reliverse/rse-website-builder) leverages this sdk to extend its functionality.
906
906
 
907
+ ### 17. `update`
908
+
909
+ updates your project's dependencies to the latest version.
910
+
911
+ updates not only `dependencies`/`devDependencies`/`peerDependencies`/`optionalDependencies`, but also [monorepo catalogs](https://bun.sh/docs/install/catalogs).
912
+
913
+ ```bash
914
+ bun dler update
915
+ ```
916
+
917
+ **params:**
918
+
919
+ - `--with-check-script` (boolean) — runs `bun check` after updating (exclusive for bun environment at the moment)
920
+
921
+ **example package.json:**
922
+
923
+ ```json
924
+ {
925
+ "scripts": {
926
+ "latest": "bun dler update --with-check-script",
927
+ "check": "tsc --noEmit && eslint --cache --fix . && biome check --fix --unsafe . && knip"
928
+ }
929
+ }
930
+ ```
931
+
907
932
  ## related
908
933
 
909
934
  special thanks to the project that inspired `@reliverse/dler`:
@@ -17,6 +17,21 @@ declare const _default: import("@reliverse/rempts").Command<{
17
17
  description: string;
18
18
  default: false;
19
19
  };
20
+ "peer-only": {
21
+ type: "boolean";
22
+ description: string;
23
+ default: false;
24
+ };
25
+ "optional-only": {
26
+ type: "boolean";
27
+ description: string;
28
+ default: false;
29
+ };
30
+ "catalogs-only": {
31
+ type: "boolean";
32
+ description: string;
33
+ default: false;
34
+ };
20
35
  "dry-run": {
21
36
  type: "boolean";
22
37
  description: string;
@@ -27,5 +42,10 @@ declare const _default: import("@reliverse/rempts").Command<{
27
42
  description: string;
28
43
  default: number;
29
44
  };
45
+ "with-check-script": {
46
+ type: "boolean";
47
+ description: string;
48
+ default: false;
49
+ };
30
50
  }>;
31
51
  export default _default;
@@ -13,9 +13,6 @@ function isNpmAlias(versionSpec) {
13
13
  function isWorkspaceDependency(versionSpec) {
14
14
  return versionSpec.startsWith("workspace:");
15
15
  }
16
- function isCatalogDependency(versionSpec) {
17
- return versionSpec.startsWith("catalog:");
18
- }
19
16
  function isSemverCompatible(currentVersionRange, latestVersion2) {
20
17
  try {
21
18
  if (isNpmAlias(currentVersionRange)) {
@@ -24,9 +21,6 @@ function isSemverCompatible(currentVersionRange, latestVersion2) {
24
21
  if (isWorkspaceDependency(currentVersionRange)) {
25
22
  return false;
26
23
  }
27
- if (isCatalogDependency(currentVersionRange)) {
28
- return false;
29
- }
30
24
  if (!currentVersionRange.startsWith("^") && !currentVersionRange.startsWith("~")) {
31
25
  return false;
32
26
  }
@@ -81,6 +75,21 @@ export default defineCommand({
81
75
  description: "Update only dependencies (production)",
82
76
  default: false
83
77
  },
78
+ "peer-only": {
79
+ type: "boolean",
80
+ description: "Update only peerDependencies",
81
+ default: false
82
+ },
83
+ "optional-only": {
84
+ type: "boolean",
85
+ description: "Update only optionalDependencies",
86
+ default: false
87
+ },
88
+ "catalogs-only": {
89
+ type: "boolean",
90
+ description: "Update only catalog dependencies",
91
+ default: false
92
+ },
84
93
  "dry-run": {
85
94
  type: "boolean",
86
95
  description: "Show what would be updated without making changes",
@@ -90,6 +99,11 @@ export default defineCommand({
90
99
  type: "number",
91
100
  description: "Number of concurrent version checks",
92
101
  default: 5
102
+ },
103
+ "with-check-script": {
104
+ type: "boolean",
105
+ description: "Run `bun check` after updating (exclusive for bun environment at the moment)",
106
+ default: false
93
107
  }
94
108
  }),
95
109
  async run({ args }) {
@@ -103,17 +117,87 @@ export default defineCommand({
103
117
  const packageJson = await readPackageJSON();
104
118
  const dependencies = packageJson.dependencies || {};
105
119
  const devDependencies = packageJson.devDependencies || {};
120
+ const peerDependencies = packageJson.peerDependencies || {};
121
+ const optionalDependencies = packageJson.optionalDependencies || {};
122
+ const workspaces = packageJson.workspaces || {};
123
+ const catalog = workspaces.catalog || packageJson.catalog || {};
124
+ const catalogs = workspaces.catalogs || packageJson.catalogs || {};
106
125
  let targetDeps = {};
107
- if (args["dev-only"] && args["prod-only"]) {
108
- relinka("error", "Cannot specify both --dev and --prod flags");
126
+ const depSources = {};
127
+ const exclusiveFlags = [
128
+ args["dev-only"],
129
+ args["prod-only"],
130
+ args["peer-only"],
131
+ args["optional-only"],
132
+ args["catalogs-only"]
133
+ ].filter(Boolean);
134
+ if (exclusiveFlags.length > 1) {
135
+ relinka(
136
+ "error",
137
+ "Cannot specify multiple exclusive flags (--dev-only, --prod-only, --peer-only, --optional-only, --catalogs-only)"
138
+ );
109
139
  return process.exit(1);
110
140
  }
111
141
  if (args["dev-only"]) {
112
142
  targetDeps = { ...devDependencies };
143
+ Object.keys(devDependencies).forEach((dep) => {
144
+ depSources[dep] = "devDependencies";
145
+ });
113
146
  } else if (args["prod-only"]) {
114
147
  targetDeps = { ...dependencies };
148
+ Object.keys(dependencies).forEach((dep) => {
149
+ depSources[dep] = "dependencies";
150
+ });
151
+ } else if (args["peer-only"]) {
152
+ targetDeps = { ...peerDependencies };
153
+ Object.keys(peerDependencies).forEach((dep) => {
154
+ depSources[dep] = "peerDependencies";
155
+ });
156
+ } else if (args["optional-only"]) {
157
+ targetDeps = { ...optionalDependencies };
158
+ Object.keys(optionalDependencies).forEach((dep) => {
159
+ depSources[dep] = "optionalDependencies";
160
+ });
161
+ } else if (args["catalogs-only"]) {
162
+ Object.keys(catalog).forEach((dep) => {
163
+ targetDeps[dep] = catalog[dep];
164
+ depSources[dep] = "catalog";
165
+ });
166
+ Object.keys(catalogs).forEach((catalogName) => {
167
+ Object.keys(catalogs[catalogName]).forEach((dep) => {
168
+ targetDeps[dep] = catalogs[catalogName][dep];
169
+ depSources[dep] = `catalogs.${catalogName}`;
170
+ });
171
+ });
115
172
  } else {
116
- targetDeps = { ...dependencies, ...devDependencies };
173
+ targetDeps = {
174
+ ...dependencies,
175
+ ...devDependencies,
176
+ ...peerDependencies,
177
+ ...optionalDependencies
178
+ };
179
+ Object.keys(dependencies).forEach((dep) => {
180
+ depSources[dep] = "dependencies";
181
+ });
182
+ Object.keys(devDependencies).forEach((dep) => {
183
+ depSources[dep] = "devDependencies";
184
+ });
185
+ Object.keys(peerDependencies).forEach((dep) => {
186
+ depSources[dep] = "peerDependencies";
187
+ });
188
+ Object.keys(optionalDependencies).forEach((dep) => {
189
+ depSources[dep] = "optionalDependencies";
190
+ });
191
+ Object.keys(catalog).forEach((dep) => {
192
+ targetDeps[dep] = catalog[dep];
193
+ depSources[dep] = "catalog";
194
+ });
195
+ Object.keys(catalogs).forEach((catalogName) => {
196
+ Object.keys(catalogs[catalogName]).forEach((dep) => {
197
+ targetDeps[dep] = catalogs[catalogName][dep];
198
+ depSources[dep] = `catalogs.${catalogName}`;
199
+ });
200
+ });
117
201
  }
118
202
  const depsToUpdate = Object.keys(targetDeps);
119
203
  let filteredDeps = [];
@@ -150,7 +234,8 @@ export default defineCommand({
150
234
  latestVersion: "unknown",
151
235
  updated: false,
152
236
  error: "Current version not found",
153
- semverCompatible: false
237
+ semverCompatible: false,
238
+ location: depSources[dep]
154
239
  };
155
240
  }
156
241
  try {
@@ -162,7 +247,8 @@ export default defineCommand({
162
247
  currentVersion: cleanCurrent,
163
248
  latestVersion: latest,
164
249
  updated: latest !== cleanCurrent && isCompatible,
165
- semverCompatible: isCompatible
250
+ semverCompatible: isCompatible,
251
+ location: depSources[dep]
166
252
  };
167
253
  } catch (error) {
168
254
  return {
@@ -171,7 +257,8 @@ export default defineCommand({
171
257
  latestVersion: currentVersion,
172
258
  updated: false,
173
259
  error: error instanceof Error ? error.message : String(error),
174
- semverCompatible: false
260
+ semverCompatible: false,
261
+ location: depSources[dep]
175
262
  };
176
263
  }
177
264
  },
@@ -183,7 +270,7 @@ export default defineCommand({
183
270
  if (errors.length > 0) {
184
271
  relinka("warn", `Failed to check ${errors.length} dependencies:`);
185
272
  for (const error of errors) {
186
- relinka("warn", ` ${error.package}: ${error.error}`);
273
+ relinka("warn", ` ${error.package} (${error.location}): ${error.error}`);
187
274
  }
188
275
  }
189
276
  if (upToDate.length > 0) {
@@ -195,7 +282,10 @@ export default defineCommand({
195
282
  }
196
283
  relinka("info", `${toUpdate.length} dependencies can be updated:`);
197
284
  for (const update of toUpdate) {
198
- relinka("log", ` ${update.package}: ${update.currentVersion} \u2192 ${update.latestVersion}`);
285
+ relinka(
286
+ "log",
287
+ ` ${update.package} (${update.location}): ${update.currentVersion} \u2192 ${update.latestVersion}`
288
+ );
199
289
  }
200
290
  if (args["dry-run"]) {
201
291
  relinka("info", "Dry run mode - no changes were made");
@@ -206,13 +296,43 @@ export default defineCommand({
206
296
  for (const update of toUpdate) {
207
297
  const dep = update.package;
208
298
  const newVersion = `^${update.latestVersion}`;
209
- if (dependencies[dep]) {
299
+ const location = update.location;
300
+ if (location === "dependencies" && dependencies[dep]) {
210
301
  if (!updatedPackageJson.dependencies) updatedPackageJson.dependencies = {};
211
302
  updatedPackageJson.dependencies[dep] = newVersion;
212
- }
213
- if (devDependencies[dep]) {
303
+ } else if (location === "devDependencies" && devDependencies[dep]) {
214
304
  if (!updatedPackageJson.devDependencies) updatedPackageJson.devDependencies = {};
215
305
  updatedPackageJson.devDependencies[dep] = newVersion;
306
+ } else if (location === "peerDependencies" && peerDependencies[dep]) {
307
+ if (!updatedPackageJson.peerDependencies) updatedPackageJson.peerDependencies = {};
308
+ updatedPackageJson.peerDependencies[dep] = newVersion;
309
+ } else if (location === "optionalDependencies" && optionalDependencies[dep]) {
310
+ if (!updatedPackageJson.optionalDependencies)
311
+ updatedPackageJson.optionalDependencies = {};
312
+ updatedPackageJson.optionalDependencies[dep] = newVersion;
313
+ } else if (location === "catalog" && catalog[dep]) {
314
+ if (!updatedPackageJson.workspaces) updatedPackageJson.workspaces = {};
315
+ if (!updatedPackageJson.workspaces.catalog)
316
+ updatedPackageJson.workspaces.catalog = {};
317
+ updatedPackageJson.workspaces.catalog[dep] = newVersion;
318
+ if (updatedPackageJson.catalog) {
319
+ updatedPackageJson.catalog[dep] = newVersion;
320
+ }
321
+ } else if (location?.startsWith("catalogs.")) {
322
+ const catalogName = location.split(".")[1];
323
+ if (catalogName) {
324
+ if (!updatedPackageJson.workspaces)
325
+ updatedPackageJson.workspaces = {};
326
+ if (!updatedPackageJson.workspaces.catalogs)
327
+ updatedPackageJson.workspaces.catalogs = {};
328
+ if (!updatedPackageJson.workspaces.catalogs[catalogName]) {
329
+ updatedPackageJson.workspaces.catalogs[catalogName] = {};
330
+ }
331
+ updatedPackageJson.workspaces.catalogs[catalogName][dep] = newVersion;
332
+ if (updatedPackageJson.catalogs && updatedPackageJson.catalogs[catalogName]) {
333
+ updatedPackageJson.catalogs[catalogName][dep] = newVersion;
334
+ }
335
+ }
216
336
  }
217
337
  }
218
338
  await fs.writeFile(
@@ -223,7 +343,7 @@ export default defineCommand({
223
343
  relinka("success", `Updated ${toUpdate.length} dependencies in package.json`);
224
344
  if (typeof Bun !== "undefined") {
225
345
  await $`bun install`;
226
- if (packageJson.scripts?.check) {
346
+ if (packageJson.scripts?.check && args["with-check-script"]) {
227
347
  await $`bun check`;
228
348
  }
229
349
  } else {
@@ -10,14 +10,15 @@ export declare const defineConfigRse: (userConfig?: Partial<RseConfig>) => {
10
10
  projectDomain?: string | undefined;
11
11
  projectGitService?: "none" | "github" | "gitlab" | "bitbucket" | undefined;
12
12
  projectDeployService?: "none" | "vercel" | "netlify" | "railway" | "deno" | undefined;
13
- projectPackageManager?: "pnpm" | "bun" | "npm" | "yarn" | undefined;
13
+ projectPackageManager?: "npm" | "bun" | "pnpm" | "yarn" | undefined;
14
14
  projectState?: "creating" | "created" | undefined;
15
- projectCategory?: "cli" | "unknown" | "website" | "vscode" | "browser" | "library" | "mobile" | undefined;
15
+ projectCategory?: "browser" | "cli" | "unknown" | "website" | "vscode" | "library" | "mobile" | undefined;
16
16
  projectSubcategory?: "unknown" | "e-commerce" | "tool" | undefined;
17
- projectFramework?: "unknown" | "vscode" | "nextjs" | "vite" | "svelte" | "remix" | "astro" | "nuxt" | "solid" | "qwik" | "vue" | "wxt" | "lynx" | "react-native" | "expo" | "capacitor" | "ionic" | "electron" | "tauri" | "neutralino" | "rempts" | "citty" | "commander" | "cac" | "meow" | "yargs" | "webextension" | "browser-extension" | "npm-jsr" | undefined;
17
+ projectFramework?: "rempts" | "npm-jsr" | "unknown" | "vscode" | "nextjs" | "vite" | "svelte" | "remix" | "astro" | "nuxt" | "solid" | "qwik" | "vue" | "wxt" | "lynx" | "react-native" | "expo" | "capacitor" | "ionic" | "electron" | "tauri" | "neutralino" | "citty" | "commander" | "cac" | "meow" | "yargs" | "webextension" | "browser-extension" | undefined;
18
18
  projectTemplate?: "unknown" | "blefnk/relivator-nextjs-template" | "blefnk/relivator-docker-template" | "blefnk/next-react-ts-src-minimal" | "blefnk/all-in-one-nextjs-template" | "blefnk/create-t3-app" | "blefnk/create-next-app" | "blefnk/astro-starlight-template" | "blefnk/versator-nextjs-template" | "blefnk/relivator-lynxjs-template" | "blefnk/relivator-react-native-template" | "reliverse/template-browser-extension" | "microsoft/vscode-extension-samples" | "microsoft/vscode-extension-template" | "rsetarter-template" | "blefnk/deno-cli-tutorial" | undefined;
19
19
  projectTemplateDate?: string | undefined;
20
20
  features?: {
21
+ commands?: string[] | undefined;
21
22
  i18n?: boolean | undefined;
22
23
  analytics?: boolean | undefined;
23
24
  themeMode?: "light" | "dark" | "dark-light" | undefined;
@@ -27,7 +28,6 @@ export declare const defineConfigRse: (userConfig?: Partial<RseConfig>) => {
27
28
  testing?: boolean | undefined;
28
29
  docker?: boolean | undefined;
29
30
  ci?: boolean | undefined;
30
- commands?: string[] | undefined;
31
31
  webview?: string[] | undefined;
32
32
  language?: string[] | undefined;
33
33
  themes?: string[] | undefined;
@@ -37,15 +37,15 @@ export declare const defineConfigRse: (userConfig?: Partial<RseConfig>) => {
37
37
  analytics?: "unknown" | "vercel" | undefined;
38
38
  authentication?: "unknown" | "better-auth" | "clerk" | "next-auth" | "supabase-auth" | "auth0" | undefined;
39
39
  api?: "unknown" | "hono" | "trpc" | "graphql" | "rest" | undefined;
40
- testing?: "unknown" | "bun" | "vitest" | "jest" | "playwright" | "cypress" | undefined;
40
+ testing?: "bun" | "unknown" | "vitest" | "jest" | "playwright" | "cypress" | undefined;
41
41
  stateManagement?: "unknown" | "zustand" | "jotai" | "redux-toolkit" | undefined;
42
42
  formManagement?: "unknown" | "react-hook-form" | "formik" | undefined;
43
43
  styling?: "unknown" | "tailwind" | "styled-components" | "css-modules" | "sass" | undefined;
44
44
  uiComponents?: "unknown" | "shadcn-ui" | "chakra-ui" | "material-ui" | undefined;
45
45
  databaseLibrary?: "unknown" | "drizzle" | "prisma" | "supabase" | undefined;
46
46
  databaseProvider?: "unknown" | "pg" | "mysql" | "sqlite" | "mongodb" | undefined;
47
- linting?: "unknown" | "eslint" | undefined;
48
- formatting?: "unknown" | "biome" | undefined;
47
+ linting?: "eslint" | "unknown" | undefined;
48
+ formatting?: "biome" | "unknown" | undefined;
49
49
  payment?: "unknown" | "stripe" | undefined;
50
50
  monitoring?: "unknown" | "sentry" | undefined;
51
51
  logging?: "unknown" | "axiom" | undefined;
@@ -96,7 +96,7 @@ export declare const defineConfigRse: (userConfig?: Partial<RseConfig>) => {
96
96
  importSymbol?: string | undefined;
97
97
  } | undefined;
98
98
  monorepo?: {
99
- type?: "none" | "turborepo" | "nx" | "pnpm" | "bun" | undefined;
99
+ type?: "none" | "bun" | "turborepo" | "nx" | "pnpm" | undefined;
100
100
  packages?: string[] | undefined;
101
101
  sharedPackages?: string[] | undefined;
102
102
  } | undefined;
@@ -113,7 +113,7 @@ export declare const defineConfigRse: (userConfig?: Partial<RseConfig>) => {
113
113
  repoBranch?: string | undefined;
114
114
  repoPrivacy?: "unknown" | "public" | "private" | undefined;
115
115
  projectArchitecture?: "unknown" | "fullstack" | "separated" | undefined;
116
- projectRuntime?: "bun" | "deno" | "node" | undefined;
116
+ projectRuntime?: "node" | "bun" | "deno" | undefined;
117
117
  skipPromptsUseAutoBehavior?: boolean | undefined;
118
118
  deployBehavior?: "prompt" | "autoYes" | "autoNo" | undefined;
119
119
  depsBehavior?: "prompt" | "autoYes" | "autoNo" | undefined;
@@ -69,10 +69,6 @@ export async function mkdist(options = {}) {
69
69
  outputs.push(...result);
70
70
  }
71
71
  processedCount++;
72
- const shouldUpdate = processedCount % Math.max(1, Math.floor(files.length / 10)) === 0 || processedCount === files.length;
73
- if (shouldUpdate) {
74
- relinka("verbose", `Processing files: ${file.path} (${processedCount}/${files.length})`);
75
- }
76
72
  })
77
73
  );
78
74
  relinka("info", "Normalizing output extensions...");
@@ -106,9 +102,6 @@ export async function mkdist(options = {}) {
106
102
  output.errors = result.errors;
107
103
  }
108
104
  dtsProcessed++;
109
- if (dtsProcessed % Math.max(1, Math.floor(dtsOutputs.length / 5)) === 0) {
110
- relinka("verbose", `Generated declarations for ${dtsProcessed}/${dtsOutputs.length} files`);
111
- }
112
105
  }
113
106
  }
114
107
  relinka("info", "Resolving relative imports...");
@@ -172,10 +165,6 @@ export async function mkdist(options = {}) {
172
165
  });
173
166
  }
174
167
  writtenCount++;
175
- const progressUpdateInterval = Math.max(10, Math.floor(outputsToWrite.length / 10));
176
- if (writtenCount % progressUpdateInterval === 0 || writtenCount === outputsToWrite.length) {
177
- relinka("verbose", `Written ${writtenCount}/${outputsToWrite.length} files`);
178
- }
179
168
  })
180
169
  );
181
170
  const duration = Date.now() - startTime;
@@ -1,5 +1,5 @@
1
1
  import { endPrompt, startPrompt } from "@reliverse/rempts";
2
- const version = "1.7.65";
2
+ const version = "1.7.67";
3
3
  export async function showStartPrompt(isDev) {
4
4
  await startPrompt({
5
5
  titleColor: "inverse",
package/package.json CHANGED
@@ -58,7 +58,7 @@
58
58
  "license": "MIT",
59
59
  "name": "@reliverse/dler",
60
60
  "type": "module",
61
- "version": "1.7.65",
61
+ "version": "1.7.67",
62
62
  "keywords": [
63
63
  "reliverse",
64
64
  "cli",