@mgvdev/nestkit-cli 0.1.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.
Files changed (59) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/commands/add.d.ts +18 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +67 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/build.d.ts +12 -0
  7. package/dist/commands/build.d.ts.map +1 -0
  8. package/dist/commands/build.js +20 -0
  9. package/dist/commands/build.js.map +1 -0
  10. package/dist/commands/clean.d.ts +8 -0
  11. package/dist/commands/clean.d.ts.map +1 -0
  12. package/dist/commands/clean.js +18 -0
  13. package/dist/commands/clean.js.map +1 -0
  14. package/dist/commands/dev.d.ts +21 -0
  15. package/dist/commands/dev.d.ts.map +1 -0
  16. package/dist/commands/dev.js +60 -0
  17. package/dist/commands/dev.js.map +1 -0
  18. package/dist/commands/generate.d.ts +33 -0
  19. package/dist/commands/generate.d.ts.map +1 -0
  20. package/dist/commands/generate.js +158 -0
  21. package/dist/commands/generate.js.map +1 -0
  22. package/dist/commands/graph.d.ts +7 -0
  23. package/dist/commands/graph.d.ts.map +1 -0
  24. package/dist/commands/graph.js +38 -0
  25. package/dist/commands/graph.js.map +1 -0
  26. package/dist/commands/init.d.ts +7 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +49 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/install.d.ts +2 -0
  31. package/dist/commands/install.d.ts.map +1 -0
  32. package/dist/commands/install.js +30 -0
  33. package/dist/commands/install.js.map +1 -0
  34. package/dist/commands/migrate.d.ts +7 -0
  35. package/dist/commands/migrate.d.ts.map +1 -0
  36. package/dist/commands/migrate.js +70 -0
  37. package/dist/commands/migrate.js.map +1 -0
  38. package/dist/commands/sync.d.ts +2 -0
  39. package/dist/commands/sync.d.ts.map +1 -0
  40. package/dist/commands/sync.js +20 -0
  41. package/dist/commands/sync.js.map +1 -0
  42. package/dist/commands/typecheck.d.ts +2 -0
  43. package/dist/commands/typecheck.d.ts.map +1 -0
  44. package/dist/commands/typecheck.js +12 -0
  45. package/dist/commands/typecheck.js.map +1 -0
  46. package/dist/env.d.ts +4 -0
  47. package/dist/env.d.ts.map +1 -0
  48. package/dist/env.js +30 -0
  49. package/dist/env.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +38 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/templates.d.ts +6 -0
  55. package/dist/templates.d.ts.map +1 -0
  56. package/dist/templates.js +155 -0
  57. package/dist/templates.js.map +1 -0
  58. package/package.json +47 -0
  59. package/skills/nestkit/SKILL.md +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const graphCommand: import("citty").CommandDef<{
2
+ json: {
3
+ type: "boolean";
4
+ description: string;
5
+ };
6
+ }>;
7
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;;;;EAoCvB,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { c, loadWorkspaceGraph, logger, topoSort } from '@mgvdev/nestkit-core';
2
+ import { defineCommand } from 'citty';
3
+ export const graphCommand = defineCommand({
4
+ meta: { name: 'graph', description: 'Print the project graph and build order.' },
5
+ args: {
6
+ json: { type: 'boolean', description: 'Output the graph as JSON.' },
7
+ },
8
+ run({ args }) {
9
+ const { graph } = loadWorkspaceGraph(process.cwd());
10
+ const { order, levels } = topoSort(graph);
11
+ if (args.json) {
12
+ const out = {
13
+ order,
14
+ levels,
15
+ nodes: [...graph.nodes.values()].map((p) => ({
16
+ name: p.name,
17
+ type: p.type,
18
+ managed: p.managed,
19
+ compiler: p.compiler,
20
+ localDeps: p.localDeps,
21
+ })),
22
+ };
23
+ process.stdout.write(`${JSON.stringify(out, null, 2)}\n`);
24
+ return;
25
+ }
26
+ logger.info(`${graph.nodes.size} project(s), ${levels.length} build level(s):`);
27
+ levels.forEach((level, i) => {
28
+ logger.log(c.dim(` level ${i}:`));
29
+ for (const name of level) {
30
+ const p = graph.nodes.get(name);
31
+ const tag = p.managed ? c.green(p.type ?? '?') : c.dim('unmanaged');
32
+ const deps = p.localDeps.length ? c.dim(` → ${p.localDeps.join(', ')}`) : '';
33
+ logger.log(` ${c.bold(name)} ${tag}${deps}`);
34
+ }
35
+ });
36
+ },
37
+ });
38
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,0CAA0C,EAAE;IAChF,IAAI,EAAE;QACJ,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,2BAA2B,EAAE;KACpE;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACV,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QACnD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,GAAG,GAAG;gBACV,KAAK;gBACL,MAAM;gBACN,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3C,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,CAAC,CAAC;aACJ,CAAA;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,gBAAgB,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAA;QAC/E,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAA;gBAChC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACnE,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC5E,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,CAAA;YACjD,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const initCommand: import("citty").CommandDef<{
2
+ dry: {
3
+ type: "boolean";
4
+ description: string;
5
+ };
6
+ }>;
7
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,WAAW;;;;;EAiCtB,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { c, discoverWorkspace, logger, } from '@mgvdev/nestkit-core';
4
+ import { defineCommand } from 'citty';
5
+ function hasDep(pkg, name) {
6
+ return Boolean(pkg.dependencies?.[name] ?? pkg.devDependencies?.[name] ?? pkg.peerDependencies?.[name]);
7
+ }
8
+ /** Infer a project descriptor from a package's shape. */
9
+ function inferConfig(dir, pkg) {
10
+ if (hasDep(pkg, 'vite') || hasDep(pkg, 'react') || hasDep(pkg, 'vue')) {
11
+ return { type: 'app-frontend', adapter: 'vite' };
12
+ }
13
+ const isNestApp = hasDep(pkg, '@nestjs/core') && existsSync(join(dir, 'src', 'main.ts'));
14
+ if (isNestApp)
15
+ return { type: 'app', entry: 'src/main.ts' };
16
+ return { type: 'lib' };
17
+ }
18
+ export const initCommand = defineCommand({
19
+ meta: {
20
+ name: 'init',
21
+ description: 'Generate nestkit.json for workspace packages (writes by default; use --dry to preview).',
22
+ },
23
+ args: {
24
+ dry: { type: 'boolean', description: 'Preview changes without writing files.' },
25
+ },
26
+ run({ args }) {
27
+ const ws = discoverWorkspace(process.cwd());
28
+ logger.info(`Detected ${c.bold(ws.packageManager)} workspace with ${ws.packages.length} package(s).`);
29
+ let created = 0;
30
+ for (const pkg of ws.packages) {
31
+ if (pkg.config) {
32
+ logger.log(` ${c.dim('skip')} ${pkg.name} (already has nestkit.json)`);
33
+ continue;
34
+ }
35
+ const cfg = inferConfig(pkg.dir, pkg.packageJson);
36
+ const file = join(pkg.dir, 'nestkit.json');
37
+ logger.log(` ${c.green('+')} ${pkg.name} → ${c.cyan(cfg.type)}`);
38
+ if (!args.dry) {
39
+ writeFileSync(file, `${JSON.stringify(cfg, null, 2)}\n`);
40
+ created++;
41
+ }
42
+ }
43
+ if (args.dry)
44
+ logger.info('Dry run. Re-run without --dry to create these files.');
45
+ else
46
+ logger.success(`Wrote ${created} nestkit.json file(s).`);
47
+ },
48
+ });
49
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAGL,CAAC,EACD,iBAAiB,EACjB,MAAM,GACP,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,SAAS,MAAM,CAAC,GAAgB,EAAE,IAAY;IAC5C,OAAO,OAAO,CACZ,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CACxF,CAAA;AACH,CAAC;AAED,yDAAyD;AACzD,SAAS,WAAW,CAAC,GAAW,EAAE,GAAgB;IAChD,IAAI,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAClD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;IACxF,IAAI,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;IAC3D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,yFAAyF;KAC5F;IACD,IAAI,EAAE;QACJ,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wCAAwC,EAAE;KAChF;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACV,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3C,MAAM,CAAC,IAAI,CACT,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,MAAM,cAAc,CACzF,CAAA;QAED,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,6BAA6B,CAAC,CAAA;gBACvE,SAAQ;YACV,CAAC;YACD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;YAC1C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACjE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;gBACxD,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,GAAG;YAAE,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;;YAC5E,MAAM,CAAC,OAAO,CAAC,SAAS,OAAO,wBAAwB,CAAC,CAAA;IAC/D,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const installCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,cAAc,qDAoBzB,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { c, detectPackageManager, logger } from '@mgvdev/nestkit-core';
3
+ import { defineCommand } from 'citty';
4
+ const INSTALL_CMD = {
5
+ npm: ['npm', 'install'],
6
+ pnpm: ['pnpm', 'install'],
7
+ yarn: ['yarn', 'install'],
8
+ bun: ['bun', 'install'],
9
+ };
10
+ export const installCommand = defineCommand({
11
+ meta: {
12
+ name: 'install',
13
+ description: 'Install workspace dependencies for all apps and packages (runs the PM at the root).',
14
+ },
15
+ run({ rawArgs }) {
16
+ const root = process.cwd();
17
+ const pm = detectPackageManager(root);
18
+ // Forward any extra args straight to the package manager (e.g. --frozen-lockfile).
19
+ const cmd = [...INSTALL_CMD[pm], ...rawArgs];
20
+ logger.info(`Installing with ${c.bold(pm)} — ${c.dim(cmd.join(' '))}`);
21
+ const res = spawnSync(cmd[0], cmd.slice(1), { cwd: root, stdio: 'inherit' });
22
+ if (res.status !== 0) {
23
+ logger.error('Install failed.');
24
+ process.exitCode = res.status ?? 1;
25
+ return;
26
+ }
27
+ logger.success('Dependencies installed.');
28
+ },
29
+ });
30
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,CAAC,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,WAAW,GAA6B;IAC5C,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;IACvB,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;IACzB,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;IACzB,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;CACxB,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EACT,qFAAqF;KACxF;IACD,GAAG,CAAC,EAAE,OAAO,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QAC1B,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACrC,mFAAmF;QACnF,MAAM,GAAG,GAAG,CAAC,GAAG,WAAW,CAAC,EAAE,CAAE,EAAE,GAAG,OAAO,CAAC,CAAA;QAC7C,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;QACtE,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAC7E,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC/B,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAA;YAClC,OAAM;QACR,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;IAC3C,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const migrateCommand: import("citty").CommandDef<{
2
+ write: {
3
+ type: "boolean";
4
+ description: string;
5
+ };
6
+ }>;
7
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAoCA,eAAO,MAAM,cAAc;;;;;EAyDzB,CAAA"}
@@ -0,0 +1,70 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join, relative } from 'node:path';
3
+ import { c, logger } from '@mgvdev/nestkit-core';
4
+ import { defineCommand } from 'citty';
5
+ /** Translate one nest-cli project entry into a nestkit descriptor + its target dir. */
6
+ function mapProject(root, name, p) {
7
+ const projectRoot = join(root, p.root ?? '.');
8
+ const type = p.type === 'library' ? 'lib' : 'app';
9
+ const config = { type, compiler: 'swc' };
10
+ if (type === 'app') {
11
+ const sourceRoot = join(root, p.sourceRoot ?? join(p.root ?? '.', 'src'));
12
+ const entryAbs = join(sourceRoot, `${p.entryFile ?? 'main'}.ts`);
13
+ config.entry = relative(projectRoot, entryAbs);
14
+ }
15
+ return { dir: projectRoot, config };
16
+ }
17
+ export const migrateCommand = defineCommand({
18
+ meta: {
19
+ name: 'migrate-from-nest-cli',
20
+ description: 'Generate nestkit.json files from an existing nest-cli.json (dry-run by default).',
21
+ },
22
+ args: {
23
+ write: { type: 'boolean', description: 'Write files instead of just previewing.' },
24
+ },
25
+ run({ args }) {
26
+ const root = process.cwd();
27
+ const nestCliPath = join(root, 'nest-cli.json');
28
+ if (!existsSync(nestCliPath)) {
29
+ logger.error('No nest-cli.json found in the current directory.');
30
+ process.exitCode = 1;
31
+ return;
32
+ }
33
+ const nestCli = JSON.parse(readFileSync(nestCliPath, 'utf8'));
34
+ if (nestCli.compilerOptions?.webpack) {
35
+ logger.warn('nest-cli.json uses webpack — nestkit will replace it with SWC (no Webpack).');
36
+ }
37
+ const projects = nestCli.projects
38
+ ? Object.entries(nestCli.projects).map(([name, p]) => ({
39
+ name,
40
+ ...mapProject(root, name, p),
41
+ }))
42
+ : [
43
+ {
44
+ name: 'app',
45
+ ...mapProject(root, 'app', {
46
+ type: 'application',
47
+ root: '.',
48
+ sourceRoot: nestCli.sourceRoot ?? 'src',
49
+ entryFile: nestCli.entryFile,
50
+ }),
51
+ },
52
+ ];
53
+ logger.info(`Found ${projects.length} project(s) in nest-cli.json:`);
54
+ let written = 0;
55
+ for (const { name, dir, config } of projects) {
56
+ const file = join(dir, 'nestkit.json');
57
+ const exists = existsSync(file);
58
+ logger.log(` ${exists ? c.yellow('~') : c.green('+')} ${c.bold(name)} → ${relative(root, file)} ${c.dim(JSON.stringify(config))}`);
59
+ if (args.write && !exists) {
60
+ writeFileSync(file, `${JSON.stringify(config, null, 2)}\n`);
61
+ written++;
62
+ }
63
+ }
64
+ if (args.write)
65
+ logger.success(`Wrote ${written} nestkit.json file(s). Review tsconfig references next.`);
66
+ else
67
+ logger.info('Dry run. Re-run with --write to create these files.');
68
+ },
69
+ });
70
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const syncCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,qDAmBtB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { relative } from 'node:path';
2
+ import { c, logger, syncTsconfigPaths } from '@mgvdev/nestkit-core';
3
+ import { defineCommand } from 'citty';
4
+ export const syncCommand = defineCommand({
5
+ meta: {
6
+ name: 'sync',
7
+ description: 'Generate tsconfig.base.json path aliases so libs import by name with autocompletion.',
8
+ },
9
+ run() {
10
+ const root = process.cwd();
11
+ const res = syncTsconfigPaths(root);
12
+ logger.success(`Wrote ${res.aliases} lib alias(es) to ${c.cyan(relative(root, res.baseFile) || 'tsconfig.base.json')}`);
13
+ if (res.extended.length)
14
+ logger.info(`Extended: ${res.extended.join(', ')}`);
15
+ if (res.skipped.length) {
16
+ logger.warn(`Skipped (unparseable or already extend another config): ${res.skipped.join(', ')} — add the extends manually.`);
17
+ }
18
+ },
19
+ });
20
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,sFAAsF;KACzF;IACD,GAAG;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QAC1B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,CAAC,OAAO,CACZ,SAAS,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,EAAE,CACxG,CAAA;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5E,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,2DAA2D,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAChH,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const typecheckCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=typecheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typecheck.d.ts","sourceRoot":"","sources":["../../src/commands/typecheck.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,qDAM3B,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { typecheckWorkspace } from '@mgvdev/nestkit-core';
2
+ import { defineCommand } from 'citty';
3
+ import { createBuildEnv } from '../env.js';
4
+ export const typecheckCommand = defineCommand({
5
+ meta: { name: 'typecheck', description: 'Type-check all managed projects with tsc --noEmit.' },
6
+ async run() {
7
+ const ok = await typecheckWorkspace(process.cwd(), createBuildEnv());
8
+ if (!ok)
9
+ process.exitCode = 1;
10
+ },
11
+ });
12
+ //# sourceMappingURL=typecheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typecheck.js","sourceRoot":"","sources":["../../src/commands/typecheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,oDAAoD,EAAE;IAC9F,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IAC/B,CAAC;CACF,CAAC,CAAA"}
package/dist/env.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { BuildEnv } from '@mgvdev/nestkit-core';
2
+ /** Wire the built-in adapters into a BuildEnv for the orchestrator. */
3
+ export declare function createBuildEnv(): BuildEnv;
4
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAoC,MAAM,sBAAsB,CAAA;AAWtF,uEAAuE;AACvE,wBAAgB,cAAc,IAAI,QAAQ,CAezC"}
package/dist/env.js ADDED
@@ -0,0 +1,30 @@
1
+ import { viteAdapter } from '@mgvdev/nestkit-adapter-vite';
2
+ import { swcCompiler } from '@mgvdev/nestkit-compiler-swc';
3
+ import { tscCompiler, tscDtsBuilder, tscTypeChecker } from '@mgvdev/nestkit-compiler-tsc';
4
+ const compilers = {
5
+ swc: swcCompiler,
6
+ tsc: tscCompiler,
7
+ };
8
+ const frontendAdapters = {
9
+ vite: viteAdapter,
10
+ };
11
+ /** Wire the built-in adapters into a BuildEnv for the orchestrator. */
12
+ export function createBuildEnv() {
13
+ return {
14
+ getCompiler(name) {
15
+ const compiler = compilers[name];
16
+ if (!compiler)
17
+ throw new Error(`Unknown compiler: "${name}"`);
18
+ return compiler;
19
+ },
20
+ getDtsBuilder: () => tscDtsBuilder,
21
+ getTypeChecker: () => tscTypeChecker,
22
+ getFrontendAdapter(name) {
23
+ const adapter = frontendAdapters[name];
24
+ if (!adapter)
25
+ throw new Error(`Unknown frontend adapter: "${name}"`);
26
+ return adapter;
27
+ },
28
+ };
29
+ }
30
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAGzF,MAAM,SAAS,GAAoC;IACjD,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;CACjB,CAAA;AAED,MAAM,gBAAgB,GAAoC;IACxD,IAAI,EAAE,WAAW;CAClB,CAAA;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,WAAW,CAAC,IAAI;YACd,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,GAAG,CAAC,CAAA;YAC7D,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,aAAa,EAAE,GAAG,EAAE,CAAC,aAAa;QAClC,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc;QACpC,kBAAkB,CAAC,IAAI;YACrB,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;YACtC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,GAAG,CAAC,CAAA;YACpE,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ import { defineCommand, runMain } from 'citty';
3
+ import { addCommand } from './commands/add.js';
4
+ import { buildCommand } from './commands/build.js';
5
+ import { cleanCommand } from './commands/clean.js';
6
+ import { devCommand } from './commands/dev.js';
7
+ import { generateCommand } from './commands/generate.js';
8
+ import { graphCommand } from './commands/graph.js';
9
+ import { initCommand } from './commands/init.js';
10
+ import { installCommand } from './commands/install.js';
11
+ import { migrateCommand } from './commands/migrate.js';
12
+ import { syncCommand } from './commands/sync.js';
13
+ import { typecheckCommand } from './commands/typecheck.js';
14
+ const main = defineCommand({
15
+ meta: {
16
+ name: 'nestkit',
17
+ version: '0.1.0',
18
+ description: 'Modern, package-manager-agnostic NestJS workspace engine (SWC, no Webpack).',
19
+ },
20
+ subCommands: {
21
+ init: initCommand,
22
+ install: installCommand,
23
+ i: installCommand,
24
+ generate: generateCommand,
25
+ g: generateCommand,
26
+ new: generateCommand,
27
+ graph: graphCommand,
28
+ build: buildCommand,
29
+ add: addCommand,
30
+ dev: devCommand,
31
+ typecheck: typecheckCommand,
32
+ sync: syncCommand,
33
+ clean: cleanCommand,
34
+ 'migrate-from-nest-cli': migrateCommand,
35
+ },
36
+ });
37
+ runMain(main);
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,6EAA6E;KAC3F;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;QACvB,CAAC,EAAE,cAAc;QACjB,QAAQ,EAAE,eAAe;QACzB,CAAC,EAAE,eAAe;QAClB,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,UAAU;QACf,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,uBAAuB,EAAE,cAAc;KACxC;CACF,CAAC,CAAA;AAEF,OAAO,CAAC,IAAI,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { ProjectType } from '@mgvdev/nestkit-core';
2
+ /** A set of files to write, keyed by path relative to the new package dir. */
3
+ export type FileMap = Record<string, string>;
4
+ /** Build the file map for a given project kind. */
5
+ export declare function templateFor(kind: ProjectType, name: string): FileMap;
6
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,8EAA8E;AAC9E,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AA2J5C,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIpE"}
@@ -0,0 +1,155 @@
1
+ const j = (o) => `${JSON.stringify(o, null, 2)}\n`;
2
+ const APP_TSCONFIG = {
3
+ compilerOptions: {
4
+ target: 'ES2022',
5
+ module: 'NodeNext',
6
+ moduleResolution: 'NodeNext',
7
+ strict: true,
8
+ esModuleInterop: true,
9
+ skipLibCheck: true,
10
+ experimentalDecorators: true,
11
+ emitDecoratorMetadata: true,
12
+ outDir: 'dist',
13
+ // No rootDir: TS path aliases pull lib sources into the program, and the
14
+ // dts/tsc compilers set rootDir explicitly. Setting it here triggers TS6059.
15
+ },
16
+ include: ['src/**/*.ts'],
17
+ };
18
+ const LIB_TSCONFIG = {
19
+ compilerOptions: { ...APP_TSCONFIG.compilerOptions, declaration: true },
20
+ include: ['src/**/*.ts'],
21
+ };
22
+ function appFiles(name) {
23
+ return {
24
+ 'package.json': j({
25
+ name,
26
+ version: '1.0.0',
27
+ private: true,
28
+ main: './dist/main.js',
29
+ dependencies: {
30
+ '@nestjs/common': '^10.4.15',
31
+ '@nestjs/core': '^10.4.15',
32
+ '@nestjs/platform-express': '^10.4.15',
33
+ 'reflect-metadata': '^0.2.2',
34
+ rxjs: '^7.8.1',
35
+ },
36
+ devDependencies: {
37
+ '@types/node': '^22.10.0',
38
+ },
39
+ }),
40
+ 'nestkit.json': j({ type: 'app', entry: 'src/main.ts' }),
41
+ 'tsconfig.json': j(APP_TSCONFIG),
42
+ 'src/app.controller.ts': `import { Controller, Get } from '@nestjs/common'
43
+
44
+ @Controller()
45
+ export class AppController {
46
+ @Get()
47
+ index(): { message: string } {
48
+ return { message: 'hello from ${name}' }
49
+ }
50
+ }
51
+ `,
52
+ 'src/app.module.ts': `import { Module } from '@nestjs/common'
53
+ import { AppController } from './app.controller'
54
+
55
+ @Module({ controllers: [AppController] })
56
+ export class AppModule {}
57
+ `,
58
+ 'src/main.ts': `import 'reflect-metadata'
59
+ import { NestFactory } from '@nestjs/core'
60
+ import { AppModule } from './app.module'
61
+
62
+ async function bootstrap() {
63
+ const app = await NestFactory.create(AppModule)
64
+ await app.listen(process.env.PORT ?? 3000)
65
+ console.log('[${name}] listening')
66
+ }
67
+
68
+ bootstrap()
69
+ `,
70
+ };
71
+ }
72
+ /** Convert a package name into a PascalCase base (`@app/user-profile` -> `UserProfile`). */
73
+ function pascalCase(name) {
74
+ const base = name.split('/').pop() ?? name;
75
+ return base
76
+ .split(/[^a-zA-Z0-9]+/)
77
+ .filter(Boolean)
78
+ .map((w) => w[0].toUpperCase() + w.slice(1))
79
+ .join('');
80
+ }
81
+ function libFiles(name) {
82
+ const base = (name.split('/').pop() ?? name).replace(/[^a-zA-Z0-9]+/g, '-').toLowerCase();
83
+ const pascal = pascalCase(name);
84
+ const service = `${pascal}Service`;
85
+ const module = `${pascal}Module`;
86
+ return {
87
+ 'package.json': j({
88
+ name,
89
+ version: '1.0.0',
90
+ private: true,
91
+ main: './dist/index.js',
92
+ types: './dist/index.d.ts',
93
+ dependencies: { '@nestjs/common': '^10.4.15' },
94
+ }),
95
+ 'nestkit.json': j({ type: 'lib' }),
96
+ 'tsconfig.json': j(LIB_TSCONFIG),
97
+ [`src/${base}.service.ts`]: `import { Injectable } from '@nestjs/common'
98
+
99
+ @Injectable()
100
+ export class ${service} {
101
+ hello(): string {
102
+ return 'hello from ${name}'
103
+ }
104
+ }
105
+ `,
106
+ [`src/${base}.module.ts`]: `import { Module } from '@nestjs/common'
107
+ import { ${service} } from './${base}.service'
108
+
109
+ @Module({
110
+ providers: [${service}],
111
+ exports: [${service}],
112
+ })
113
+ export class ${module} {}
114
+ `,
115
+ 'src/index.ts': `export * from './${base}.service'
116
+ export * from './${base}.module'
117
+ `,
118
+ };
119
+ }
120
+ function frontendFiles(name) {
121
+ return {
122
+ 'package.json': j({
123
+ name,
124
+ version: '1.0.0',
125
+ private: true,
126
+ scripts: { dev: 'vite', build: 'vite build' },
127
+ devDependencies: { vite: '^6.0.0' },
128
+ }),
129
+ 'nestkit.json': j({ type: 'app-frontend', adapter: 'vite' }),
130
+ 'index.html': `<!doctype html>
131
+ <html lang="en">
132
+ <head>
133
+ <meta charset="UTF-8" />
134
+ <title>${name}</title>
135
+ </head>
136
+ <body>
137
+ <div id="app"></div>
138
+ <script type="module" src="/src/main.ts"></script>
139
+ </body>
140
+ </html>
141
+ `,
142
+ 'src/main.ts': `const el = document.getElementById('app')
143
+ if (el) el.textContent = 'hello from ${name}'
144
+ `,
145
+ };
146
+ }
147
+ /** Build the file map for a given project kind. */
148
+ export function templateFor(kind, name) {
149
+ if (kind === 'app')
150
+ return appFiles(name);
151
+ if (kind === 'lib')
152
+ return libFiles(name);
153
+ return frontendFiles(name);
154
+ }
155
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}