@rudderjs/cli 4.7.1 → 4.9.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 (55) hide show
  1. package/dist/commands/about.d.ts +36 -0
  2. package/dist/commands/about.d.ts.map +1 -0
  3. package/dist/commands/about.js +190 -0
  4. package/dist/commands/about.js.map +1 -0
  5. package/dist/commands/add.d.ts.map +1 -1
  6. package/dist/commands/add.js +8 -3
  7. package/dist/commands/add.js.map +1 -1
  8. package/dist/commands/doctor.d.ts.map +1 -1
  9. package/dist/commands/doctor.js +3 -0
  10. package/dist/commands/doctor.js.map +1 -1
  11. package/dist/commands/key-generate.d.ts +34 -0
  12. package/dist/commands/key-generate.d.ts.map +1 -0
  13. package/dist/commands/key-generate.js +137 -0
  14. package/dist/commands/key-generate.js.map +1 -0
  15. package/dist/commands/make/_shared.d.ts.map +1 -1
  16. package/dist/commands/make/_shared.js +13 -7
  17. package/dist/commands/make/_shared.js.map +1 -1
  18. package/dist/commands/make/test.d.ts +17 -0
  19. package/dist/commands/make/test.d.ts.map +1 -0
  20. package/dist/commands/make/test.js +94 -0
  21. package/dist/commands/make/test.js.map +1 -0
  22. package/dist/commands/make.d.ts.map +1 -1
  23. package/dist/commands/make.js +2 -0
  24. package/dist/commands/make.js.map +1 -1
  25. package/dist/commands/module/make.d.ts.map +1 -1
  26. package/dist/commands/module/make.js +17 -10
  27. package/dist/commands/module/make.js.map +1 -1
  28. package/dist/commands/module/publish.d.ts.map +1 -1
  29. package/dist/commands/module/publish.js +12 -8
  30. package/dist/commands/module/publish.js.map +1 -1
  31. package/dist/commands/test.d.ts +34 -0
  32. package/dist/commands/test.d.ts.map +1 -0
  33. package/dist/commands/test.js +111 -0
  34. package/dist/commands/test.js.map +1 -0
  35. package/dist/commands/upgrade.d.ts +79 -0
  36. package/dist/commands/upgrade.d.ts.map +1 -1
  37. package/dist/commands/upgrade.js +315 -3
  38. package/dist/commands/upgrade.js.map +1 -1
  39. package/dist/doctor/built-in/env-vars.js +2 -2
  40. package/dist/doctor/built-in/env-vars.js.map +1 -1
  41. package/dist/doctor/built-in/index.d.ts +1 -0
  42. package/dist/doctor/built-in/index.d.ts.map +1 -1
  43. package/dist/doctor/built-in/index.js +1 -0
  44. package/dist/doctor/built-in/index.js.map +1 -1
  45. package/dist/doctor/built-in/production.d.ts +2 -0
  46. package/dist/doctor/built-in/production.d.ts.map +1 -0
  47. package/dist/doctor/built-in/production.js +218 -0
  48. package/dist/doctor/built-in/production.js.map +1 -0
  49. package/dist/doctor/orchestrator.d.ts +5 -0
  50. package/dist/doctor/orchestrator.d.ts.map +1 -1
  51. package/dist/doctor/orchestrator.js +4 -0
  52. package/dist/doctor/orchestrator.js.map +1 -1
  53. package/dist/index.js +7 -1
  54. package/dist/index.js.map +1 -1
  55. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/commands/make/test.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMxC;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBpD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUjD;AAqBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB/C"}
@@ -0,0 +1,94 @@
1
+ import { existsSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { registerMake } from './_shared.js';
5
+ // ── Stubs ─────────────────────────────────────────────────────
6
+ /**
7
+ * Feature test — boots the app via `AppTestCase` and exercises HTTP / DB /
8
+ * services. The convention assumed here matches `docs/guide/testing.md`:
9
+ * apps export `class AppTestCase extends TestCase` from `tests/TestCase.ts`.
10
+ * The generated file uses Node's built-in `node:test` runner (the documented
11
+ * runner — runs via `tsx --test tests/**\/*.test.ts`).
12
+ */
13
+ export function featureStub(testName) {
14
+ return `import { describe, it, before, after } from 'node:test'
15
+ import { AppTestCase } from './TestCase.js'
16
+
17
+ describe('${testName}', () => {
18
+ let t: AppTestCase
19
+
20
+ before(async () => { t = await AppTestCase.create() })
21
+ after (async () => { await t.teardown() })
22
+
23
+ it('does something', async () => {
24
+ const res = await t.get('/')
25
+ res.assertOk()
26
+ })
27
+ })
28
+ `;
29
+ }
30
+ /**
31
+ * Unit test — plain `node:test` + `assert`. No app boot, no TestCase,
32
+ * no `@rudderjs/testing`. The right shape for pure functions, validators,
33
+ * domain logic, or anything that shouldn't pay the boot cost.
34
+ */
35
+ export function unitStub(testName) {
36
+ return `import { describe, it } from 'node:test'
37
+ import assert from 'node:assert/strict'
38
+
39
+ describe('${testName}', () => {
40
+ it('does something', () => {
41
+ assert.equal(1 + 1, 2)
42
+ })
43
+ })
44
+ `;
45
+ }
46
+ // ── Helpers ───────────────────────────────────────────────────
47
+ /**
48
+ * Trim a trailing `.test` so `make:test User` produces a `describe('User', …)`
49
+ * label even though the file lives at `tests/User.test.ts`. The `.test`
50
+ * suffix is forced into the filename via `MakeSpec.suffix` so the
51
+ * generated file matches the documented `tests/**\/*.test.ts` glob.
52
+ */
53
+ function stripTestSuffix(name) {
54
+ return name.endsWith('.test') ? name.slice(0, -'.test'.length) : name;
55
+ }
56
+ function pickStub(className, opts) {
57
+ const testName = stripTestSuffix(className);
58
+ return opts['unit'] ? unitStub(testName) : featureStub(testName);
59
+ }
60
+ // ── Command ───────────────────────────────────────────────────
61
+ export function makeTest(program) {
62
+ registerMake(program, {
63
+ command: 'make:test',
64
+ description: 'Create a new test file (feature by default; --unit for plain node:test without app boot)',
65
+ label: 'Test created',
66
+ // `suffix: '.test'` produces `<name>.test.ts` so the file matches the
67
+ // documented `tsx --test tests/**\/*.test.ts` glob. registerMake's
68
+ // existing logic appends the suffix when not already present.
69
+ suffix: '.test',
70
+ directory: 'tests',
71
+ stub: pickStub,
72
+ extraOptions: [
73
+ { flags: '-u, --unit', description: 'Generate a unit test (plain node:test, no app boot, no TestCase)' },
74
+ ],
75
+ afterCreate: async (_className, _relPath, opts) => {
76
+ // Hint when feature-test convention isn't set up yet. Unit tests don't
77
+ // need TestCase.ts — only the default (feature) flow does.
78
+ if (opts['unit'])
79
+ return;
80
+ const testCasePath = path.resolve(process.cwd(), 'tests', 'TestCase.ts');
81
+ if (!existsSync(testCasePath)) {
82
+ console.log(chalk.yellow(' ! tests/TestCase.ts is missing — see docs/guide/testing.md for the setup snippet.'));
83
+ }
84
+ },
85
+ });
86
+ }
87
+ /** @internal — exposed for unit tests */
88
+ export const _internal = {
89
+ featureStub,
90
+ unitStub,
91
+ stripTestSuffix,
92
+ pickStub,
93
+ };
94
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/make/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,iEAAiE;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO;;;YAGG,QAAQ;;;;;;;;;;;CAWnB,CAAA;AACD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,OAAO;;;YAGG,QAAQ;;;;;CAKnB,CAAA;AACD,CAAC;AAED,iEAAiE;AAEjE;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACvE,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB,EAAE,IAA6B;IAChE,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;IAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;AAClE,CAAC;AAED,iEAAiE;AAEjE,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,WAAW;QACxB,WAAW,EAAE,0FAA0F;QACvG,KAAK,EAAQ,cAAc;QAC3B,sEAAsE;QACtE,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,EAAO,OAAO;QACpB,SAAS,EAAI,OAAO;QACpB,IAAI,EAAS,QAAQ;QACrB,YAAY,EAAE;YACZ,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kEAAkE,EAAE;SACzG;QACD,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;YAChD,uEAAuE;YACvE,2DAA2D;YAC3D,IAAI,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAM;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;YACxE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uFAAuF,CAAC,CAAC,CAAA;YACpH,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,yCAAyC;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW;IACX,QAAQ;IACR,eAAe;IACf,QAAQ;CACT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcxC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6BlD"}
1
+ {"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAexC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8BlD"}
@@ -10,6 +10,7 @@ import { makeCommandCmd } from './make/command.js';
10
10
  import { makeEvent } from './make/event.js';
11
11
  import { makeListener } from './make/listener.js';
12
12
  import { makeMail } from './make/mail.js';
13
+ import { makeTest } from './make/test.js';
13
14
  export function makeCommand(program) {
14
15
  // CLI-owned generic scaffolders
15
16
  makeController(program);
@@ -22,6 +23,7 @@ export function makeCommand(program) {
22
23
  makeEvent(program);
23
24
  makeListener(program);
24
25
  makeMail(program);
26
+ makeTest(program);
25
27
  // Package-contributed scaffolders (registered via registerMakeSpecs)
26
28
  for (const spec of getMakeSpecs()) {
27
29
  program
@@ -1 +1 @@
1
- {"version":3,"file":"make.js","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,gCAAgC;IAChC,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,SAAS,CAAC,OAAO,CAAC,CAAA;IAClB,OAAO,CAAC,OAAO,CAAC,CAAA;IAChB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,WAAW,CAAC,OAAO,CAAC,CAAA;IACpB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,SAAS,CAAC,OAAO,CAAC,CAAA;IAClB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,CAAA;IAEjB,qEAAqE;IACrE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,EAAE,CAAC;QAClC,OAAO;aACJ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC;aACjC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;aAC7B,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;aACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;gBACzD,OAAM;YACR,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;IACN,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"make.js","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,gCAAgC;IAChC,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,SAAS,CAAC,OAAO,CAAC,CAAA;IAClB,OAAO,CAAC,OAAO,CAAC,CAAA;IAChB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,WAAW,CAAC,OAAO,CAAC,CAAA;IACpB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,SAAS,CAAC,OAAO,CAAC,CAAA;IAClB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,CAAA;IACjB,QAAQ,CAAC,OAAO,CAAC,CAAA;IAEjB,qEAAqE;IACrE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,EAAE,CAAC;QAClC,OAAO;aACJ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC;aACjC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;aAC7B,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;aACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;gBACzD,OAAM;YACR,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;IACN,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../../src/commands/module/make.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBhD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiCjD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAID,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CnF;AAID,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6CjD"}
1
+ {"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../../src/commands/module/make.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBhD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiCjD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAID,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CnF;AAID,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkDjD"}
@@ -1,5 +1,4 @@
1
1
  import { writeFile, mkdir, readFile } from 'node:fs/promises';
2
- import { existsSync } from 'node:fs';
3
2
  import { resolve, dirname } from 'node:path';
4
3
  import { intro, outro, spinner, log } from '@clack/prompts';
5
4
  // ─── File stubs ────────────────────────────────────────────
@@ -118,13 +117,15 @@ import type { Application } from '@rudderjs/core'
118
117
 
119
118
  export const providers: (new (app: Application) => ServiceProvider)[] = []\n`;
120
119
  let content;
121
- if (!existsSync(bootstrapPath)) {
120
+ try {
121
+ content = await readFile(bootstrapPath, 'utf8');
122
+ }
123
+ catch (err) {
124
+ if (err.code !== 'ENOENT')
125
+ throw err;
122
126
  await mkdir(dirname(bootstrapPath), { recursive: true });
123
127
  content = template;
124
128
  }
125
- else {
126
- content = await readFile(bootstrapPath, 'utf8');
127
- }
128
129
  // Skip if already registered
129
130
  if (content.includes(`${name}ServiceProvider`))
130
131
  return;
@@ -166,12 +167,18 @@ export function makeModule(program) {
166
167
  s.start('Generating files');
167
168
  await mkdir(moduleDir, { recursive: true });
168
169
  for (const file of files) {
169
- if (existsSync(file.path) && !opts.force) {
170
- s.stop('Aborted');
171
- log.error(`File already exists: ${file.path}\nUse --force to overwrite.`);
172
- return;
170
+ try {
171
+ // `wx` makes "create unless exists" atomic; `--force` truncates.
172
+ await writeFile(file.path, file.content, { flag: opts.force ? 'w' : 'wx' });
173
+ }
174
+ catch (err) {
175
+ if (err.code === 'EEXIST') {
176
+ s.stop('Aborted');
177
+ log.error(`File already exists: ${file.path}\nUse --force to overwrite.`);
178
+ return;
179
+ }
180
+ throw err;
173
181
  }
174
- await writeFile(file.path, file.content);
175
182
  log.success(`Created ${file.path.replace(process.cwd() + '/', '')}`);
176
183
  }
177
184
  s.stop('Files generated');
@@ -1 +1 @@
1
- {"version":3,"file":"make.js","sourceRoot":"","sources":["../../../src/commands/module/make.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"make.js","sourceRoot":"","sources":["../../../src/commands/module/make.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/module/publish.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,UAAU,QAAsE,CAAA;AAI7F,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAsBlJ;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAMzG;AAeD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4EpD"}
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/module/publish.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,UAAU,QAAsE,CAAA;AAI7F,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAsBlJ;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAMzG;AAeD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+EpD"}
@@ -71,14 +71,18 @@ export function publishModule(program) {
71
71
  }
72
72
  const mergedBlock = buildMergedBlock(shards);
73
73
  let schema;
74
- if (existsSync(schemaPath)) {
75
- schema = await readFile(schemaPath, 'utf8');
76
- if (MARKERS_RE.test(schema)) {
77
- schema = schema.replace(MARKERS_RE, mergedBlock);
78
- }
79
- else {
80
- schema = schema.trimEnd() + '\n\n' + mergedBlock + '\n';
81
- }
74
+ let existing = null;
75
+ try {
76
+ existing = await readFile(schemaPath, 'utf8');
77
+ }
78
+ catch (err) {
79
+ if (err.code !== 'ENOENT')
80
+ throw err;
81
+ }
82
+ if (existing !== null) {
83
+ schema = MARKERS_RE.test(existing)
84
+ ? existing.replace(MARKERS_RE, mergedBlock)
85
+ : existing.trimEnd() + '\n\n' + mergedBlock + '\n';
82
86
  }
83
87
  else {
84
88
  schema = mergedBlock + '\n';
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/module/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/module/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Command } from 'commander';
2
+ export interface TestOptions {
3
+ watch?: boolean;
4
+ bail?: boolean;
5
+ coverage?: boolean;
6
+ only?: boolean;
7
+ reporter?: string;
8
+ filter?: string;
9
+ }
10
+ /**
11
+ * Locate the `tsx` binary the app uses to run TypeScript. Most Rudder apps
12
+ * already have it (the `pnpm rudder` script itself runs through tsx). We
13
+ * walk from `cwd` upward so monorepo-hoisted deps surface too — same shape
14
+ * as how doctor finds the user's tooling.
15
+ *
16
+ * Returns `null` when not found; the caller prints an install hint.
17
+ */
18
+ export declare function findTsx(cwd: string): string | null;
19
+ /**
20
+ * Translate the rudder-level positional + flags into the `tsx --test ...`
21
+ * argv that Node's built-in runner expects. Kept pure (no I/O) so it can
22
+ * be unit-tested without spawning a subprocess.
23
+ *
24
+ * Positional arg semantics:
25
+ * - Ends in `.ts` / `.test.ts` → treated as a file path; Node runs that
26
+ * file directly, ignoring directory discovery.
27
+ * - Anything else → passed to `--test-name-pattern` (matches `describe`
28
+ * and `it` labels), and Node discovers tests under `tests/`.
29
+ *
30
+ * When no positional is provided, Node discovers everything under `tests/`.
31
+ */
32
+ export declare function buildTestArgs(positional: string | undefined, opts: TestOptions): string[];
33
+ export declare function testCommand(program: Command): void;
34
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAK,OAAO,CAAA;IAClB,IAAI,CAAC,EAAM,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAM,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAI,MAAM,CAAA;CAClB;AAID;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUlD;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CA8BzF;AAID,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgClD"}
@@ -0,0 +1,111 @@
1
+ import { existsSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { spawn } from 'node:child_process';
4
+ // ── tsx resolution ────────────────────────────────────────────
5
+ /**
6
+ * Locate the `tsx` binary the app uses to run TypeScript. Most Rudder apps
7
+ * already have it (the `pnpm rudder` script itself runs through tsx). We
8
+ * walk from `cwd` upward so monorepo-hoisted deps surface too — same shape
9
+ * as how doctor finds the user's tooling.
10
+ *
11
+ * Returns `null` when not found; the caller prints an install hint.
12
+ */
13
+ export function findTsx(cwd) {
14
+ let dir = cwd;
15
+ while (dir) {
16
+ const candidate = path.join(dir, 'node_modules', '.bin', 'tsx');
17
+ if (existsSync(candidate))
18
+ return candidate;
19
+ const parent = path.dirname(dir);
20
+ if (parent === dir)
21
+ break;
22
+ dir = parent;
23
+ }
24
+ return null;
25
+ }
26
+ // ── Argument builder ──────────────────────────────────────────
27
+ /**
28
+ * Translate the rudder-level positional + flags into the `tsx --test ...`
29
+ * argv that Node's built-in runner expects. Kept pure (no I/O) so it can
30
+ * be unit-tested without spawning a subprocess.
31
+ *
32
+ * Positional arg semantics:
33
+ * - Ends in `.ts` / `.test.ts` → treated as a file path; Node runs that
34
+ * file directly, ignoring directory discovery.
35
+ * - Anything else → passed to `--test-name-pattern` (matches `describe`
36
+ * and `it` labels), and Node discovers tests under `tests/`.
37
+ *
38
+ * When no positional is provided, Node discovers everything under `tests/`.
39
+ */
40
+ export function buildTestArgs(positional, opts) {
41
+ const out = ['--test'];
42
+ if (opts.watch)
43
+ out.push('--watch');
44
+ if (opts.coverage)
45
+ out.push('--experimental-test-coverage');
46
+ if (opts.only)
47
+ out.push('--test-only');
48
+ if (opts.bail)
49
+ out.push('--test-force-exit'); // stops the process on first failure
50
+ if (opts.reporter)
51
+ out.push(`--test-reporter=${opts.reporter}`);
52
+ // `--filter` is an alias for `--test-name-pattern`. Both can be used,
53
+ // explicit `--filter` wins when also passed alongside a positional.
54
+ let namePattern = opts.filter;
55
+ let pathArg;
56
+ if (positional) {
57
+ if (/\.ts$/.test(positional)) {
58
+ pathArg = positional;
59
+ }
60
+ else if (!namePattern) {
61
+ namePattern = positional;
62
+ }
63
+ }
64
+ if (namePattern)
65
+ out.push(`--test-name-pattern=${namePattern}`);
66
+ // Always end with the path arg (specific file) OR the `tests/` directory
67
+ // so Node has something to discover. Without this Node walks cwd and
68
+ // discovers unrelated test files (e.g. inside node_modules) — slow + wrong.
69
+ out.push(pathArg ?? 'tests');
70
+ return out;
71
+ }
72
+ // ── Command ───────────────────────────────────────────────────
73
+ export function testCommand(program) {
74
+ program
75
+ .command('test [filter]')
76
+ .description('Run the app\'s test suite (wraps `tsx --test tests/`)')
77
+ .option('-w, --watch', 're-run tests on file changes')
78
+ .option('-b, --bail', 'stop on first failure')
79
+ .option('--coverage', 'collect test coverage (Node --experimental-test-coverage)')
80
+ .option('--only', 'run only tests marked with .only()')
81
+ .option('--filter <pattern>', 'filter by test name (regex passed to Node --test-name-pattern)')
82
+ .option('--reporter <name>', 'Node test reporter name (spec / dot / tap / junit)')
83
+ .action((positional, opts) => {
84
+ const cwd = process.cwd();
85
+ const tsx = findTsx(cwd);
86
+ if (!tsx) {
87
+ console.error('[rudder test] tsx not found in node_modules/.bin.');
88
+ console.error(' Run `pnpm add -D tsx` (or yarn/npm/bun equivalent) and re-try.');
89
+ process.exit(1);
90
+ }
91
+ const args = buildTestArgs(positional, opts);
92
+ const child = spawn(tsx, args, {
93
+ cwd,
94
+ stdio: 'inherit',
95
+ // Windows can't exec node_modules/.bin/tsx (a .CMD shim) without a
96
+ // shell. Other platforms execute the script directly.
97
+ shell: process.platform === 'win32',
98
+ });
99
+ child.on('close', (code) => process.exit(code ?? 0));
100
+ child.on('error', (err) => {
101
+ console.error('[rudder test] failed to spawn tsx:', err.message);
102
+ process.exit(1);
103
+ });
104
+ });
105
+ }
106
+ /** @internal — exposed for unit tests */
107
+ export const _internal = {
108
+ findTsx,
109
+ buildTestArgs,
110
+ };
111
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,82 @@
1
1
  import type { Command } from 'commander';
2
+ interface ParsedVersion {
3
+ major: number;
4
+ minor: number;
5
+ patch: number;
6
+ }
7
+ interface NpmManifest {
8
+ version: string;
9
+ peerDependencies?: Record<string, string>;
10
+ }
11
+ /**
12
+ * Per-version entry parsed from a changesets-style CHANGELOG.md. `headline` is
13
+ * the first meaningful bullet (changesets cite-prefix `abc1234: ` is stripped;
14
+ * "Updated dependencies" lines are skipped); empty string when no usable line
15
+ * exists.
16
+ */
17
+ export interface ChangelogEntry {
18
+ version: string;
19
+ parsed: ParsedVersion;
20
+ headline: string;
21
+ }
22
+ /**
23
+ * Walk a changesets-format CHANGELOG.md, returning one entry per `## X.Y.Z`
24
+ * header whose version is in `(from, to]`. Entries are returned in the order
25
+ * they appear in the file (newest first, since changesets prepends).
26
+ */
27
+ export declare function parseChangelog(md: string, from: ParsedVersion, to: ParsedVersion): ChangelogEntry[];
28
+ interface ConsumerPeer {
29
+ range: string;
30
+ section: 'dependencies' | 'devDependencies' | 'peerDependencies';
31
+ }
32
+ /**
33
+ * Read every consumer-side dep into a flat map for peer-dep lookups. Used to
34
+ * answer: "does the consumer's `vite` range satisfy `@rudderjs/vite@2.7`'s
35
+ * `peerDependencies.vite` requirement?". A `peer` appearing in multiple
36
+ * sections (rare but possible) resolves with `dependencies` ≻
37
+ * `devDependencies` ≻ `peerDependencies` precedence — what npm picks at
38
+ * install time.
39
+ */
40
+ export declare function readConsumerPeers(pkg: Record<string, unknown>): Map<string, ConsumerPeer>;
41
+ interface PeerMismatch {
42
+ peer: string;
43
+ causedBy: string;
44
+ consumerRange: string;
45
+ consumerSection: ConsumerPeer['section'] | null;
46
+ requiredRange: string;
47
+ reason: string;
48
+ }
49
+ type FetchManifestFn = (pkg: string, version: string) => Promise<NpmManifest | null>;
50
+ /**
51
+ * Walk every bump in the plan, fetch its manifest at the target version, and
52
+ * collect any peerDependencies that disagree with the consumer's declared
53
+ * ranges. Same peer triggered by multiple framework packages dedups on the
54
+ * first one found.
55
+ *
56
+ * Network: one extra registry call per bumped package, in parallel — but
57
+ * the `fetcher` argument is pluggable so tests can drive it with synthetic
58
+ * manifests.
59
+ */
60
+ export declare function collectPeerMismatches(rows: PlanRow[], consumer: Map<string, ConsumerPeer>, fetcher: FetchManifestFn): Promise<PeerMismatch[]>;
61
+ interface DepEntry {
62
+ name: string;
63
+ range: string;
64
+ section: 'dependencies' | 'devDependencies' | 'peerDependencies';
65
+ }
66
+ interface PlanRow {
67
+ name: string;
68
+ section: DepEntry['section'];
69
+ current: ParsedVersion;
70
+ latest: ParsedVersion;
71
+ target: ParsedVersion;
72
+ newRange: string;
73
+ }
74
+ type FetchChangelogFn = (pkg: string) => Promise<string | null>;
75
+ /**
76
+ * Walk the plan, fetch + parse each package's CHANGELOG in parallel, return a
77
+ * map of `pkgName → entries-in-range`. Pluggable fetcher for testability.
78
+ */
79
+ export declare function collectChangelogs(rows: PlanRow[], fetcher: FetchChangelogFn): Promise<Map<string, ChangelogEntry[]>>;
2
80
  export declare function upgradeCommand(program: Command): void;
81
+ export {};
3
82
  //# sourceMappingURL=upgrade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsMxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsIrD"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6BxC,UAAU,aAAa;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAyGvE,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC1C;AA8CD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAG,MAAM,CAAA;IAChB,MAAM,EAAI,aAAa,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAyBD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAI,MAAM,EACZ,IAAI,EAAE,aAAa,EACnB,EAAE,EAAI,aAAa,GAClB,cAAc,EAAE,CAuBlB;AA2BD,UAAU,YAAY;IACpB,KAAK,EAAI,MAAM,CAAA;IACf,OAAO,EAAE,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;CACjE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAUzF;AAED,UAAU,YAAY;IACpB,IAAI,EAAa,MAAM,CAAA;IACvB,QAAQ,EAAS,MAAM,CAAA;IACvB,aAAa,EAAI,MAAM,CAAA;IACvB,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IAC/C,aAAa,EAAI,MAAM,CAAA;IACvB,MAAM,EAAW,MAAM,CAAA;CACxB;AAED,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;AAEpF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAM,OAAO,EAAE,EACnB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACnC,OAAO,EAAG,eAAe,GACxB,OAAO,CAAC,YAAY,EAAE,CAAC,CA+BzB;AAMD,UAAU,QAAQ;IAChB,IAAI,EAAK,MAAM,CAAA;IACf,KAAK,EAAI,MAAM,CAAA;IACf,OAAO,EAAE,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;CACjE;AAED,UAAU,OAAO;IACf,IAAI,EAAM,MAAM,CAAA;IAChB,OAAO,EAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC7B,OAAO,EAAG,aAAa,CAAA;IACvB,MAAM,EAAI,aAAa,CAAA;IACvB,MAAM,EAAI,aAAa,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAoED,KAAK,gBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAE/D;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAK,OAAO,EAAE,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CASxC;AAiCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuLrD"}