@bagelink/workspace 1.8.0 → 1.10.0

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
@@ -268,6 +268,114 @@ bun run build
268
268
  - Third project: `http://localhost:5175`
269
269
  - etc.
270
270
 
271
+ ### Linting Setup
272
+
273
+ #### `bgl lint init`
274
+
275
+ Set up linting and formatting in your project:
276
+
277
+ ```bash
278
+ bgl lint init
279
+
280
+ ? Select configurations to set up:
281
+ ✔ ESLint
282
+ ✔ Prettier
283
+ ✔ EditorConfig
284
+ ○ Git Hooks
285
+ ? Install dependencies? › Yes
286
+
287
+ ✅ Created eslint.config.js
288
+ ✅ Created .prettierrc
289
+ ✅ Created .prettierignore
290
+ ✅ Created .editorconfig
291
+ ✅ Updated package.json with lint scripts
292
+ ```
293
+
294
+ **Creates:**
295
+ - `eslint.config.js` - ESLint configuration (Vue 3 + TypeScript)
296
+ - `.prettierrc` - Prettier configuration
297
+ - `.prettierignore` - Prettier ignore patterns
298
+ - `.editorconfig` - Editor configuration
299
+ - `.lintstagedrc` - Lint-staged configuration (if git hooks selected)
300
+
301
+ **Adds scripts:**
302
+ - `bun run lint` - Run linter
303
+ - `bun run lint:fix` - Fix linting issues
304
+ - `bun run format` - Format code
305
+ - `bun run format:check` - Check formatting
306
+
307
+ **For workspace:**
308
+ ```bash
309
+ bgl lint init --workspace
310
+ ```
311
+
312
+ Sets up linting at workspace root level for all projects.
313
+
314
+ ### SDK Generation
315
+
316
+ #### `bgl sdk generate`
317
+
318
+ Generate TypeScript SDK from OpenAPI specification:
319
+
320
+ ```bash
321
+ bgl sdk generate
322
+
323
+ ? OpenAPI spec URL: › http://localhost:8000/openapi.json
324
+ ? Output directory: › ./src/api
325
+ ? Split into organized files? › Yes
326
+
327
+ 📡 Fetching OpenAPI spec from: http://localhost:8000/openapi.json
328
+ 📁 Output directory: ./src/api
329
+
330
+ ✅ Generated types.d.ts
331
+ ✅ Generated api.ts
332
+ ✅ Generated index.ts
333
+ 🔀 Splitting into organized files...
334
+ ✅ Files organized into directories
335
+
336
+ ✅ SDK generated successfully!
337
+
338
+ Import it in your code:
339
+ import { api } from './api'
340
+ ```
341
+
342
+ **Features:**
343
+ - Auto-reads `openapi_url` from `bgl.config.ts`
344
+ - Generates TypeScript types from OpenAPI schema
345
+ - Creates type-safe API client
346
+ - Optional file organization (split by endpoints)
347
+ - Works with both local and remote OpenAPI specs
348
+
349
+ **For workspace:**
350
+ ```bash
351
+ bgl sdk generate --workspace
352
+
353
+ ? Select projects to generate SDK for:
354
+ ✔ admin
355
+ ✔ customer
356
+ ✔ mobile
357
+ ```
358
+
359
+ Generates SDK for multiple projects from their respective `openapi_url` configs.
360
+
361
+ **Generated structure:**
362
+ ```
363
+ src/api/
364
+ ├── index.ts # Main export
365
+ ├── types.d.ts # TypeScript types
366
+ └── api.ts # API client
367
+
368
+ # Or with --split:
369
+ src/api/
370
+ ├── endpoints/
371
+ │ ├── users.ts
372
+ │ ├── auth.ts
373
+ │ └── data.ts
374
+ ├── types/
375
+ │ └── index.ts
376
+ └── index.ts
377
+ ```
378
+
271
379
  ### `npx bgl --help`
272
380
 
273
381
  Show CLI help.
package/bin/bgl.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import process from 'node:process'
3
3
  import { generateWorkspaceConfig } from '../src/init.js'
4
+ import { setupLint } from '../src/lint.js'
5
+ import { generateSDK, generateSDKForWorkspace } from '../src/sdk.js'
4
6
  import { addProject, initWorkspace, listProjects } from '../src/workspace.js'
5
7
 
6
- const [,, command, ...args] = process.argv
8
+ const [,, command, subcommand, ...args] = process.argv
7
9
 
8
10
  async function main() {
9
11
  if (command === 'init') {
@@ -31,22 +33,60 @@ async function main() {
31
33
  }
32
34
  else {
33
35
  console.log('\nProjects:')
34
- projects.forEach(p => console.log(` - ${p}`))
36
+ projects.forEach((p) => { console.log(` - ${p}`) })
35
37
  console.log('')
36
38
  }
37
39
  }
40
+ else if (command === 'lint') {
41
+ if (subcommand === 'init') {
42
+ const isWorkspace = args.includes('--workspace') || args.includes('-w')
43
+ await setupLint(process.cwd(), isWorkspace)
44
+ }
45
+ else {
46
+ console.log(`
47
+ Lint Commands:
48
+ bgl lint init Set up linting in current project
49
+ bgl lint init --workspace Set up linting for workspace root
50
+ `)
51
+ process.exit(1)
52
+ }
53
+ }
54
+ else if (command === 'sdk') {
55
+ if (subcommand === 'generate') {
56
+ const isWorkspace = args.includes('--workspace') || args.includes('-w')
57
+ if (isWorkspace) {
58
+ await generateSDKForWorkspace()
59
+ }
60
+ else {
61
+ const projectName = args.find(arg => !arg.startsWith('-'))
62
+ await generateSDK(process.cwd(), projectName)
63
+ }
64
+ }
65
+ else {
66
+ console.log(`
67
+ SDK Commands:
68
+ bgl sdk generate Generate SDK from OpenAPI spec
69
+ bgl sdk generate --workspace Generate SDK for all workspace projects
70
+ `)
71
+ process.exit(1)
72
+ }
73
+ }
38
74
  else {
39
75
  console.log(`
40
76
  Bagel Workspace CLI
41
77
 
42
78
  Usage:
43
- bgl init Generate bgl.config.ts for single project
44
- bgl init --workspace Create a new workspace with multiple projects
45
- bgl add <name> Add a new project to workspace
46
- bgl list List all projects in workspace
79
+ bgl init Generate bgl.config.ts for single project
80
+ bgl init --workspace Create a new workspace with multiple projects
81
+ bgl add <name> Add a new project to workspace
82
+ bgl list List all projects in workspace
83
+ bgl lint init Set up linting in current project
84
+ bgl lint init --workspace Set up linting for workspace root
85
+ bgl sdk generate Generate SDK from OpenAPI spec
86
+ bgl sdk generate --workspace Generate SDK for all workspace projects
47
87
 
48
88
  Options:
49
- --help, -h Show this help message
89
+ --help, -h Show this help message
50
90
  `)
51
91
  process.exit(command === '--help' || command === '-h' ? 0 : 1)
52
92
  }
package/dist/bin/bgl.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  const process = require('node:process');
5
- const workspace = require('../shared/workspace.Bwsdwbt-.cjs');
5
+ const workspace = require('../shared/workspace.dQE-K3dI.cjs');
6
6
  require('node:fs');
7
7
  require('node:path');
8
8
  require('prompts');
@@ -11,7 +11,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
11
11
 
12
12
  const process__default = /*#__PURE__*/_interopDefaultCompat(process);
13
13
 
14
- const [, , command, ...args] = process__default.argv;
14
+ const [, , command, subcommand, ...args] = process__default.argv;
15
15
  async function main() {
16
16
  if (command === "init") {
17
17
  const isWorkspace = args.includes("--workspace") || args.includes("-w");
@@ -34,21 +34,56 @@ async function main() {
34
34
  console.log("No projects found");
35
35
  } else {
36
36
  console.log("\nProjects:");
37
- projects.forEach((p) => console.log(` - ${p}`));
37
+ projects.forEach((p) => {
38
+ console.log(` - ${p}`);
39
+ });
38
40
  console.log("");
39
41
  }
42
+ } else if (command === "lint") {
43
+ if (subcommand === "init") {
44
+ const isWorkspace = args.includes("--workspace") || args.includes("-w");
45
+ await workspace.setupLint(process__default.cwd(), isWorkspace);
46
+ } else {
47
+ console.log(`
48
+ Lint Commands:
49
+ bgl lint init Set up linting in current project
50
+ bgl lint init --workspace Set up linting for workspace root
51
+ `);
52
+ process__default.exit(1);
53
+ }
54
+ } else if (command === "sdk") {
55
+ if (subcommand === "generate") {
56
+ const isWorkspace = args.includes("--workspace") || args.includes("-w");
57
+ if (isWorkspace) {
58
+ await workspace.generateSDKForWorkspace();
59
+ } else {
60
+ args.find((arg) => !arg.startsWith("-"));
61
+ await workspace.generateSDK(process__default.cwd());
62
+ }
63
+ } else {
64
+ console.log(`
65
+ SDK Commands:
66
+ bgl sdk generate Generate SDK from OpenAPI spec
67
+ bgl sdk generate --workspace Generate SDK for all workspace projects
68
+ `);
69
+ process__default.exit(1);
70
+ }
40
71
  } else {
41
72
  console.log(`
42
73
  Bagel Workspace CLI
43
74
 
44
75
  Usage:
45
- bgl init Generate bgl.config.ts for single project
46
- bgl init --workspace Create a new workspace with multiple projects
47
- bgl add <name> Add a new project to workspace
48
- bgl list List all projects in workspace
76
+ bgl init Generate bgl.config.ts for single project
77
+ bgl init --workspace Create a new workspace with multiple projects
78
+ bgl add <name> Add a new project to workspace
79
+ bgl list List all projects in workspace
80
+ bgl lint init Set up linting in current project
81
+ bgl lint init --workspace Set up linting for workspace root
82
+ bgl sdk generate Generate SDK from OpenAPI spec
83
+ bgl sdk generate --workspace Generate SDK for all workspace projects
49
84
 
50
85
  Options:
51
- --help, -h Show this help message
86
+ --help, -h Show this help message
52
87
  `);
53
88
  process__default.exit(command === "--help" || command === "-h" ? 0 : 1);
54
89
  }
package/dist/bin/bgl.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import process from 'node:process';
3
- import { i as initWorkspace, g as generateWorkspaceConfig, d as addProject, l as listProjects } from '../shared/workspace.Dq-27S1f.mjs';
3
+ import { i as initWorkspace, g as generateWorkspaceConfig, h as addProject, l as listProjects, d as setupLint, f as generateSDKForWorkspace, e as generateSDK } from '../shared/workspace.CTMBmbXa.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:path';
6
6
  import 'prompts';
7
7
 
8
- const [, , command, ...args] = process.argv;
8
+ const [, , command, subcommand, ...args] = process.argv;
9
9
  async function main() {
10
10
  if (command === "init") {
11
11
  const isWorkspace = args.includes("--workspace") || args.includes("-w");
@@ -28,21 +28,56 @@ async function main() {
28
28
  console.log("No projects found");
29
29
  } else {
30
30
  console.log("\nProjects:");
31
- projects.forEach((p) => console.log(` - ${p}`));
31
+ projects.forEach((p) => {
32
+ console.log(` - ${p}`);
33
+ });
32
34
  console.log("");
33
35
  }
36
+ } else if (command === "lint") {
37
+ if (subcommand === "init") {
38
+ const isWorkspace = args.includes("--workspace") || args.includes("-w");
39
+ await setupLint(process.cwd(), isWorkspace);
40
+ } else {
41
+ console.log(`
42
+ Lint Commands:
43
+ bgl lint init Set up linting in current project
44
+ bgl lint init --workspace Set up linting for workspace root
45
+ `);
46
+ process.exit(1);
47
+ }
48
+ } else if (command === "sdk") {
49
+ if (subcommand === "generate") {
50
+ const isWorkspace = args.includes("--workspace") || args.includes("-w");
51
+ if (isWorkspace) {
52
+ await generateSDKForWorkspace();
53
+ } else {
54
+ args.find((arg) => !arg.startsWith("-"));
55
+ await generateSDK(process.cwd());
56
+ }
57
+ } else {
58
+ console.log(`
59
+ SDK Commands:
60
+ bgl sdk generate Generate SDK from OpenAPI spec
61
+ bgl sdk generate --workspace Generate SDK for all workspace projects
62
+ `);
63
+ process.exit(1);
64
+ }
34
65
  } else {
35
66
  console.log(`
36
67
  Bagel Workspace CLI
37
68
 
38
69
  Usage:
39
- bgl init Generate bgl.config.ts for single project
40
- bgl init --workspace Create a new workspace with multiple projects
41
- bgl add <name> Add a new project to workspace
42
- bgl list List all projects in workspace
70
+ bgl init Generate bgl.config.ts for single project
71
+ bgl init --workspace Create a new workspace with multiple projects
72
+ bgl add <name> Add a new project to workspace
73
+ bgl list List all projects in workspace
74
+ bgl lint init Set up linting in current project
75
+ bgl lint init --workspace Set up linting for workspace root
76
+ bgl sdk generate Generate SDK from OpenAPI spec
77
+ bgl sdk generate --workspace Generate SDK for all workspace projects
43
78
 
44
79
  Options:
45
- --help, -h Show this help message
80
+ --help, -h Show this help message
46
81
  `);
47
82
  process.exit(command === "--help" || command === "-h" ? 0 : 1);
48
83
  }
package/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  const node_fs = require('node:fs');
4
4
  const node_path = require('node:path');
5
5
  const process = require('node:process');
6
- const workspace = require('./shared/workspace.Bwsdwbt-.cjs');
6
+ const workspace = require('./shared/workspace.dQE-K3dI.cjs');
7
7
  require('prompts');
8
8
 
9
9
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
@@ -151,11 +151,14 @@ function createWorkspace(options = {}) {
151
151
  exports.addProject = workspace.addProject;
152
152
  exports.generateNetlifyConfig = workspace.generateNetlifyConfig;
153
153
  exports.generateNetlifyRedirect = workspace.generateNetlifyRedirect;
154
+ exports.generateSDK = workspace.generateSDK;
155
+ exports.generateSDKForWorkspace = workspace.generateSDKForWorkspace;
154
156
  exports.generateWorkspaceConfig = workspace.generateWorkspaceConfig;
155
157
  exports.generateWorkspaceConfigSync = workspace.generateWorkspaceConfigSync;
156
158
  exports.initWorkspace = workspace.initWorkspace;
157
159
  exports.listProjects = workspace.listProjects;
158
160
  exports.setBuildEnvVars = workspace.setBuildEnvVars;
161
+ exports.setupLint = workspace.setupLint;
159
162
  exports.writeNetlifyConfig = workspace.writeNetlifyConfig;
160
163
  exports.createCustomProxy = createCustomProxy;
161
164
  exports.createViteProxy = createViteProxy;
package/dist/index.d.cts CHANGED
@@ -91,6 +91,20 @@ declare function createCustomProxy(paths: string[], target: string, options?: {
91
91
  secure?: boolean;
92
92
  }): ProxyConfig;
93
93
 
94
+ /**
95
+ * Set up linting in a project
96
+ */
97
+ declare function setupLint(root?: string, isWorkspace?: boolean): Promise<void>;
98
+
99
+ /**
100
+ * Generate SDK from OpenAPI spec
101
+ */
102
+ declare function generateSDK(root?: string, projectName?: string): Promise<void>;
103
+ /**
104
+ * Generate SDK for all projects in workspace
105
+ */
106
+ declare function generateSDKForWorkspace(root?: string): Promise<void>;
107
+
94
108
  /**
95
109
  * Initialize a new workspace with flat structure
96
110
  */
@@ -136,5 +150,5 @@ declare function createWorkspace(options?: WorkspaceOptions): {
136
150
  clearCache(): void;
137
151
  };
138
152
 
139
- export { addProject, createCustomProxy, createViteProxy, createWorkspace, defineWorkspace, generateNetlifyConfig, generateNetlifyRedirect, generateWorkspaceConfig, generateWorkspaceConfigSync, initWorkspace, listProjects, mergeConfigs, resolveConfig, setBuildEnvVars, writeNetlifyConfig };
153
+ export { addProject, createCustomProxy, createViteProxy, createWorkspace, defineWorkspace, generateNetlifyConfig, generateNetlifyRedirect, generateSDK, generateSDKForWorkspace, generateWorkspaceConfig, generateWorkspaceConfigSync, initWorkspace, listProjects, mergeConfigs, resolveConfig, setBuildEnvVars, setupLint, writeNetlifyConfig };
140
154
  export type { ProxyConfig, WorkspaceConfig, WorkspaceEnvironment, WorkspaceOptions };
package/dist/index.d.mts CHANGED
@@ -91,6 +91,20 @@ declare function createCustomProxy(paths: string[], target: string, options?: {
91
91
  secure?: boolean;
92
92
  }): ProxyConfig;
93
93
 
94
+ /**
95
+ * Set up linting in a project
96
+ */
97
+ declare function setupLint(root?: string, isWorkspace?: boolean): Promise<void>;
98
+
99
+ /**
100
+ * Generate SDK from OpenAPI spec
101
+ */
102
+ declare function generateSDK(root?: string, projectName?: string): Promise<void>;
103
+ /**
104
+ * Generate SDK for all projects in workspace
105
+ */
106
+ declare function generateSDKForWorkspace(root?: string): Promise<void>;
107
+
94
108
  /**
95
109
  * Initialize a new workspace with flat structure
96
110
  */
@@ -136,5 +150,5 @@ declare function createWorkspace(options?: WorkspaceOptions): {
136
150
  clearCache(): void;
137
151
  };
138
152
 
139
- export { addProject, createCustomProxy, createViteProxy, createWorkspace, defineWorkspace, generateNetlifyConfig, generateNetlifyRedirect, generateWorkspaceConfig, generateWorkspaceConfigSync, initWorkspace, listProjects, mergeConfigs, resolveConfig, setBuildEnvVars, writeNetlifyConfig };
153
+ export { addProject, createCustomProxy, createViteProxy, createWorkspace, defineWorkspace, generateNetlifyConfig, generateNetlifyRedirect, generateSDK, generateSDKForWorkspace, generateWorkspaceConfig, generateWorkspaceConfigSync, initWorkspace, listProjects, mergeConfigs, resolveConfig, setBuildEnvVars, setupLint, writeNetlifyConfig };
140
154
  export type { ProxyConfig, WorkspaceConfig, WorkspaceEnvironment, WorkspaceOptions };
package/dist/index.d.ts CHANGED
@@ -91,6 +91,20 @@ declare function createCustomProxy(paths: string[], target: string, options?: {
91
91
  secure?: boolean;
92
92
  }): ProxyConfig;
93
93
 
94
+ /**
95
+ * Set up linting in a project
96
+ */
97
+ declare function setupLint(root?: string, isWorkspace?: boolean): Promise<void>;
98
+
99
+ /**
100
+ * Generate SDK from OpenAPI spec
101
+ */
102
+ declare function generateSDK(root?: string, projectName?: string): Promise<void>;
103
+ /**
104
+ * Generate SDK for all projects in workspace
105
+ */
106
+ declare function generateSDKForWorkspace(root?: string): Promise<void>;
107
+
94
108
  /**
95
109
  * Initialize a new workspace with flat structure
96
110
  */
@@ -136,5 +150,5 @@ declare function createWorkspace(options?: WorkspaceOptions): {
136
150
  clearCache(): void;
137
151
  };
138
152
 
139
- export { addProject, createCustomProxy, createViteProxy, createWorkspace, defineWorkspace, generateNetlifyConfig, generateNetlifyRedirect, generateWorkspaceConfig, generateWorkspaceConfigSync, initWorkspace, listProjects, mergeConfigs, resolveConfig, setBuildEnvVars, writeNetlifyConfig };
153
+ export { addProject, createCustomProxy, createViteProxy, createWorkspace, defineWorkspace, generateNetlifyConfig, generateNetlifyRedirect, generateSDK, generateSDKForWorkspace, generateWorkspaceConfig, generateWorkspaceConfigSync, initWorkspace, listProjects, mergeConfigs, resolveConfig, setBuildEnvVars, setupLint, writeNetlifyConfig };
140
154
  export type { ProxyConfig, WorkspaceConfig, WorkspaceEnvironment, WorkspaceOptions };
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { resolve, join } from 'node:path';
3
3
  import process from 'node:process';
4
- import { g as generateWorkspaceConfig, s as setBuildEnvVars, w as writeNetlifyConfig } from './shared/workspace.Dq-27S1f.mjs';
5
- export { d as addProject, a as generateNetlifyConfig, b as generateNetlifyRedirect, c as generateWorkspaceConfigSync, i as initWorkspace, l as listProjects } from './shared/workspace.Dq-27S1f.mjs';
4
+ import { g as generateWorkspaceConfig, s as setBuildEnvVars, w as writeNetlifyConfig } from './shared/workspace.CTMBmbXa.mjs';
5
+ export { h as addProject, a as generateNetlifyConfig, b as generateNetlifyRedirect, e as generateSDK, f as generateSDKForWorkspace, c as generateWorkspaceConfigSync, i as initWorkspace, l as listProjects, d as setupLint } from './shared/workspace.CTMBmbXa.mjs';
6
6
  import 'prompts';
7
7
 
8
8
  async function resolveConfig(mode = "development", options = {}) {