@rudderjs/cli 4.12.0 → 4.14.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/dist/commands/fresh.d.ts +18 -0
- package/dist/commands/fresh.d.ts.map +1 -0
- package/dist/commands/fresh.js +75 -0
- package/dist/commands/fresh.js.map +1 -0
- package/dist/commands/maintenance.d.ts +22 -0
- package/dist/commands/maintenance.d.ts.map +1 -0
- package/dist/commands/maintenance.js +67 -0
- package/dist/commands/maintenance.js.map +1 -0
- package/dist/commands/make/_shared.d.ts +7 -0
- package/dist/commands/make/_shared.d.ts.map +1 -1
- package/dist/commands/make/_shared.js +36 -0
- package/dist/commands/make/_shared.js.map +1 -1
- package/dist/commands/make/cast.d.ts +4 -0
- package/dist/commands/make/cast.d.ts.map +1 -0
- package/dist/commands/make/cast.js +37 -0
- package/dist/commands/make/cast.js.map +1 -0
- package/dist/commands/make/command.d.ts.map +1 -1
- package/dist/commands/make/command.js +1 -0
- package/dist/commands/make/command.js.map +1 -1
- package/dist/commands/make/controller.d.ts.map +1 -1
- package/dist/commands/make/controller.js +1 -0
- package/dist/commands/make/controller.js.map +1 -1
- package/dist/commands/make/event.d.ts.map +1 -1
- package/dist/commands/make/event.js +1 -0
- package/dist/commands/make/event.js.map +1 -1
- package/dist/commands/make/exception.d.ts +6 -0
- package/dist/commands/make/exception.d.ts.map +1 -0
- package/dist/commands/make/exception.js +53 -0
- package/dist/commands/make/exception.js.map +1 -0
- package/dist/commands/make/job.d.ts.map +1 -1
- package/dist/commands/make/job.js +1 -0
- package/dist/commands/make/job.js.map +1 -1
- package/dist/commands/make/listener.d.ts.map +1 -1
- package/dist/commands/make/listener.js +1 -0
- package/dist/commands/make/listener.js.map +1 -1
- package/dist/commands/make/mail.d.ts.map +1 -1
- package/dist/commands/make/mail.js +1 -0
- package/dist/commands/make/mail.js.map +1 -1
- package/dist/commands/make/middleware.d.ts.map +1 -1
- package/dist/commands/make/middleware.js +1 -0
- package/dist/commands/make/middleware.js.map +1 -1
- package/dist/commands/make/model.d.ts.map +1 -1
- package/dist/commands/make/model.js +1 -0
- package/dist/commands/make/model.js.map +1 -1
- package/dist/commands/make/notification.d.ts +4 -0
- package/dist/commands/make/notification.d.ts.map +1 -0
- package/dist/commands/make/notification.js +39 -0
- package/dist/commands/make/notification.js.map +1 -0
- package/dist/commands/make/observer.d.ts +4 -0
- package/dist/commands/make/observer.d.ts.map +1 -0
- package/dist/commands/make/observer.js +45 -0
- package/dist/commands/make/observer.js.map +1 -0
- package/dist/commands/make/policy.d.ts +4 -0
- package/dist/commands/make/policy.d.ts.map +1 -0
- package/dist/commands/make/policy.js +56 -0
- package/dist/commands/make/policy.js.map +1 -0
- package/dist/commands/make/provider.d.ts.map +1 -1
- package/dist/commands/make/provider.js +1 -0
- package/dist/commands/make/provider.js.map +1 -1
- package/dist/commands/make/request.d.ts.map +1 -1
- package/dist/commands/make/request.js +1 -0
- package/dist/commands/make/request.js.map +1 -1
- package/dist/commands/make/test-stubs.d.ts +24 -0
- package/dist/commands/make/test-stubs.d.ts.map +1 -0
- package/dist/commands/make/test-stubs.js +50 -0
- package/dist/commands/make/test-stubs.js.map +1 -0
- package/dist/commands/make/test.d.ts +2 -14
- package/dist/commands/make/test.d.ts.map +1 -1
- package/dist/commands/make/test.js +2 -41
- package/dist/commands/make/test.js.map +1 -1
- package/dist/commands/make.d.ts.map +1 -1
- package/dist/commands/make.js +10 -0
- package/dist/commands/make.js.map +1 -1
- package/dist/commands/optimize-clear.d.ts +28 -0
- package/dist/commands/optimize-clear.d.ts.map +1 -0
- package/dist/commands/optimize-clear.js +50 -0
- package/dist/commands/optimize-clear.js.map +1 -0
- package/dist/index.js +30 -2
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../src/commands/make/notification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAyB9C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUvD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { registerMake } from './_shared.js';
|
|
2
|
+
export function stub(className) {
|
|
3
|
+
return `import { Notification, type Notifiable } from '@rudderjs/notification'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Notification. Send it with notify(user, new ${className}()).
|
|
7
|
+
* Declare the channels in via(), then implement the matching builder
|
|
8
|
+
* (toMail / toDatabase / toBroadcast).
|
|
9
|
+
*/
|
|
10
|
+
export class ${className} extends Notification {
|
|
11
|
+
via(_notifiable: Notifiable): string[] {
|
|
12
|
+
// TODO: choose channels — 'mail', 'database', 'broadcast'
|
|
13
|
+
return ['database']
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
toDatabase(_notifiable: Notifiable): Record<string, unknown> {
|
|
17
|
+
return {
|
|
18
|
+
// TODO: the data to persist for this notification
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// toMail(notifiable: Notifiable) {
|
|
23
|
+
// return new SomeMailable()
|
|
24
|
+
// }
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
export function makeNotification(program) {
|
|
29
|
+
registerMake(program, {
|
|
30
|
+
command: 'make:notification',
|
|
31
|
+
description: 'Create a new notification class',
|
|
32
|
+
label: 'Notification created',
|
|
33
|
+
suffix: 'Notification',
|
|
34
|
+
directory: 'app/Notifications',
|
|
35
|
+
testKind: 'unit',
|
|
36
|
+
stub,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=notification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../src/commands/make/notification.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;iDAGwC,SAAS;;;;eAI3C,SAAS;;;;;;;;;;;;;;;;CAgBvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,mBAAmB;QAChC,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAQ,sBAAsB;QACnC,MAAM,EAAO,cAAc;QAC3B,SAAS,EAAI,mBAAmB;QAChC,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/commands/make/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA+B9C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUnD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { registerMake } from './_shared.js';
|
|
2
|
+
export function stub(className) {
|
|
3
|
+
return `import type { ModelObserver } from '@rudderjs/orm'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Model observer. Register it on a model (e.g. in a provider's boot()):
|
|
7
|
+
*
|
|
8
|
+
* Post.observe(${className})
|
|
9
|
+
*
|
|
10
|
+
* Implement any subset of the lifecycle hooks below — 'creating'/'updating'/
|
|
11
|
+
* 'saving' may return a (possibly mutated) attributes object; 'deleting'/
|
|
12
|
+
* 'updating'/'restoring' may return false to cancel the operation.
|
|
13
|
+
*/
|
|
14
|
+
export class ${className} implements ModelObserver {
|
|
15
|
+
creating(data: Record<string, unknown>): Record<string, unknown> | void {
|
|
16
|
+
// TODO: inspect/mutate attributes before the row is inserted
|
|
17
|
+
return data
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
created(_record: Record<string, unknown>): void {
|
|
21
|
+
// TODO: react after the row is inserted
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
updating(_id: string | number, data: Record<string, unknown>): Record<string, unknown> | false | void {
|
|
25
|
+
return data
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
updated(_record: Record<string, unknown>): void {}
|
|
29
|
+
|
|
30
|
+
deleted(_id: string | number): void {}
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
}
|
|
34
|
+
export function makeObserver(program) {
|
|
35
|
+
registerMake(program, {
|
|
36
|
+
command: 'make:observer',
|
|
37
|
+
description: 'Create a new model observer class',
|
|
38
|
+
label: 'Observer created',
|
|
39
|
+
suffix: 'Observer',
|
|
40
|
+
directory: 'app/Observers',
|
|
41
|
+
testKind: 'unit',
|
|
42
|
+
stub,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/commands/make/observer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;;;oBAKW,SAAS;;;;;;eAMd,SAAS;;;;;;;;;;;;;;;;;;CAkBvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,eAAe;QAC5B,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAQ,kBAAkB;QAC/B,MAAM,EAAO,UAAU;QACvB,SAAS,EAAI,eAAe;QAC5B,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/commands/make/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA0C9C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUjD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { registerMake } from './_shared.js';
|
|
2
|
+
export function stub(className) {
|
|
3
|
+
return `import type { Authenticatable } from '@rudderjs/auth'
|
|
4
|
+
import { Policy } from '@rudderjs/auth'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Authorization policy. Register it against a model in a provider's boot():
|
|
8
|
+
*
|
|
9
|
+
* Gate.policy(Post, ${className})
|
|
10
|
+
*
|
|
11
|
+
* then authorize with Gate.allows('update', post) / Gate.authorize(...).
|
|
12
|
+
* Each method below is an "ability" — return true to allow, false to deny.
|
|
13
|
+
*/
|
|
14
|
+
export class ${className} extends Policy {
|
|
15
|
+
/**
|
|
16
|
+
* Runs before every ability. Return true/false to short-circuit (e.g. grant
|
|
17
|
+
* admins everything), or null/undefined to fall through to the ability below.
|
|
18
|
+
*/
|
|
19
|
+
// before(user: Authenticatable) {
|
|
20
|
+
// return null
|
|
21
|
+
// }
|
|
22
|
+
|
|
23
|
+
viewAny(_user: Authenticatable): boolean {
|
|
24
|
+
return true
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
view(_user: Authenticatable, _model: unknown): boolean {
|
|
28
|
+
return true
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
create(_user: Authenticatable): boolean {
|
|
32
|
+
return true
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
update(_user: Authenticatable, _model: unknown): boolean {
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
delete(_user: Authenticatable, _model: unknown): boolean {
|
|
40
|
+
return false
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
`;
|
|
44
|
+
}
|
|
45
|
+
export function makePolicy(program) {
|
|
46
|
+
registerMake(program, {
|
|
47
|
+
command: 'make:policy',
|
|
48
|
+
description: 'Create a new authorization policy class',
|
|
49
|
+
label: 'Policy created',
|
|
50
|
+
suffix: 'Policy',
|
|
51
|
+
directory: 'app/Policies',
|
|
52
|
+
testKind: 'unit',
|
|
53
|
+
stub,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/commands/make/policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;;;;yBAMgB,SAAS;;;;;eAKnB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,aAAa;QAC1B,WAAW,EAAE,yCAAyC;QACtD,KAAK,EAAQ,gBAAgB;QAC7B,MAAM,EAAO,QAAQ;QACrB,SAAS,EAAI,cAAc;QAC3B,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/commands/make/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAc9C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/commands/make/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAc9C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/commands/make/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;CAUvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,eAAe;QAC5B,WAAW,EAAE,qCAAqC;QAClD,KAAK,EAAQ,kBAAkB;QAC/B,MAAM,EAAO,iBAAiB;QAC9B,SAAS,EAAI,eAAe;QAC5B,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/commands/make/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;CAUvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,eAAe;QAC5B,WAAW,EAAE,qCAAqC;QAClD,KAAK,EAAQ,kBAAkB;QAC/B,MAAM,EAAO,iBAAiB;QAC9B,SAAS,EAAI,eAAe;QAC5B,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/commands/make/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAuC9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/commands/make/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAuC9C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUlD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/commands/make/request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,cAAc;QAC3B,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAQ,iBAAiB;QAC9B,MAAM,EAAO,SAAS;QACtB,SAAS,EAAI,mBAAmB;QAChC,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/commands/make/request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,cAAc;QAC3B,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAQ,iBAAiB;QAC9B,MAAM,EAAO,SAAS;QACtB,SAAS,EAAI,mBAAmB;QAChC,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-file stubs shared by `make:test` and the `--with-test` flag on the
|
|
3
|
+
* other `make:*` generators. Kept import-free so `_shared.ts` (the generator
|
|
4
|
+
* harness) and `test.ts` (the make:test command) can both use them without a
|
|
5
|
+
* module cycle.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Feature test — boots the app via `AppTestCase` and exercises HTTP / DB /
|
|
9
|
+
* services. The convention assumed here matches `docs/guide/testing.md`:
|
|
10
|
+
* apps export `class AppTestCase extends TestCase` from `tests/TestCase.ts`.
|
|
11
|
+
* The generated file uses Node's built-in `node:test` runner (the documented
|
|
12
|
+
* runner — runs via `tsx --test tests/**\/*.test.ts`).
|
|
13
|
+
*
|
|
14
|
+
* @param sourceRel — when set (the `--with-test` flow), a `// Covers …`
|
|
15
|
+
* comment points the test back at the file it was generated alongside.
|
|
16
|
+
*/
|
|
17
|
+
export declare function featureStub(testName: string, sourceRel?: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Unit test — plain `node:test` + `assert`. No app boot, no TestCase,
|
|
20
|
+
* no `@rudderjs/testing`. The right shape for pure functions, validators,
|
|
21
|
+
* domain logic, or anything that shouldn't pay the boot cost.
|
|
22
|
+
*/
|
|
23
|
+
export declare function unitStub(testName: string, sourceRel?: string): string;
|
|
24
|
+
//# sourceMappingURL=test-stubs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-stubs.d.ts","sourceRoot":"","sources":["../../../src/commands/make/test-stubs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBxE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAUrE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-file stubs shared by `make:test` and the `--with-test` flag on the
|
|
3
|
+
* other `make:*` generators. Kept import-free so `_shared.ts` (the generator
|
|
4
|
+
* harness) and `test.ts` (the make:test command) can both use them without a
|
|
5
|
+
* module cycle.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Feature test — boots the app via `AppTestCase` and exercises HTTP / DB /
|
|
9
|
+
* services. The convention assumed here matches `docs/guide/testing.md`:
|
|
10
|
+
* apps export `class AppTestCase extends TestCase` from `tests/TestCase.ts`.
|
|
11
|
+
* The generated file uses Node's built-in `node:test` runner (the documented
|
|
12
|
+
* runner — runs via `tsx --test tests/**\/*.test.ts`).
|
|
13
|
+
*
|
|
14
|
+
* @param sourceRel — when set (the `--with-test` flow), a `// Covers …`
|
|
15
|
+
* comment points the test back at the file it was generated alongside.
|
|
16
|
+
*/
|
|
17
|
+
export function featureStub(testName, sourceRel) {
|
|
18
|
+
return `import { describe, it, before, after } from 'node:test'
|
|
19
|
+
import { AppTestCase } from './TestCase.js'
|
|
20
|
+
${sourceRel ? `\n// Covers ${sourceRel}` : ''}
|
|
21
|
+
describe('${testName}', () => {
|
|
22
|
+
let t: AppTestCase
|
|
23
|
+
|
|
24
|
+
before(async () => { t = await AppTestCase.create() })
|
|
25
|
+
after (async () => { await t.teardown() })
|
|
26
|
+
|
|
27
|
+
it('does something', async () => {
|
|
28
|
+
const res = await t.get('/')
|
|
29
|
+
res.assertOk()
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Unit test — plain `node:test` + `assert`. No app boot, no TestCase,
|
|
36
|
+
* no `@rudderjs/testing`. The right shape for pure functions, validators,
|
|
37
|
+
* domain logic, or anything that shouldn't pay the boot cost.
|
|
38
|
+
*/
|
|
39
|
+
export function unitStub(testName, sourceRel) {
|
|
40
|
+
return `import { describe, it } from 'node:test'
|
|
41
|
+
import assert from 'node:assert/strict'
|
|
42
|
+
${sourceRel ? `\n// Covers ${sourceRel}` : ''}
|
|
43
|
+
describe('${testName}', () => {
|
|
44
|
+
it('does something', () => {
|
|
45
|
+
assert.equal(1 + 1, 2)
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
`;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=test-stubs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-stubs.js","sourceRoot":"","sources":["../../../src/commands/make/test-stubs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,SAAkB;IAC9D,OAAO;;EAEP,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;YACjC,QAAQ;;;;;;;;;;;CAWnB,CAAA;AACD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,SAAkB;IAC3D,OAAO;;EAEP,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;YACjC,QAAQ;;;;;CAKnB,CAAA;AACD,CAAC"}
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* services. The convention assumed here matches `docs/guide/testing.md`:
|
|
5
|
-
* apps export `class AppTestCase extends TestCase` from `tests/TestCase.ts`.
|
|
6
|
-
* The generated file uses Node's built-in `node:test` runner (the documented
|
|
7
|
-
* runner — runs via `tsx --test tests/**\/*.test.ts`).
|
|
8
|
-
*/
|
|
9
|
-
export declare function featureStub(testName: string): string;
|
|
10
|
-
/**
|
|
11
|
-
* Unit test — plain `node:test` + `assert`. No app boot, no TestCase,
|
|
12
|
-
* no `@rudderjs/testing`. The right shape for pure functions, validators,
|
|
13
|
-
* domain logic, or anything that shouldn't pay the boot cost.
|
|
14
|
-
*/
|
|
15
|
-
export declare function unitStub(testName: string): string;
|
|
2
|
+
import { featureStub, unitStub } from './test-stubs.js';
|
|
3
|
+
export { featureStub, unitStub };
|
|
16
4
|
export declare function makeTest(program: Command): void;
|
|
17
5
|
//# sourceMappingURL=test.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAGxC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAEvD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;AAqBhC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB/C"}
|
|
@@ -2,47 +2,8 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { registerMake } from './_shared.js';
|
|
5
|
-
|
|
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
|
-
}
|
|
5
|
+
import { featureStub, unitStub } from './test-stubs.js';
|
|
6
|
+
export { featureStub, unitStub };
|
|
46
7
|
// ── Helpers ───────────────────────────────────────────────────
|
|
47
8
|
/**
|
|
48
9
|
* Trim a trailing `.test` so `make:test User` produces a `describe('User', …)`
|
|
@@ -1 +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;
|
|
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;AAC3C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAEvD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;AAEhC,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;
|
|
1
|
+
{"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoBxC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmClD"}
|
package/dist/commands/make.js
CHANGED
|
@@ -8,9 +8,14 @@ import { makeRequest } from './make/request.js';
|
|
|
8
8
|
import { makeProvider } from './make/provider.js';
|
|
9
9
|
import { makeCommandCmd } from './make/command.js';
|
|
10
10
|
import { makeEvent } from './make/event.js';
|
|
11
|
+
import { makeException } from './make/exception.js';
|
|
11
12
|
import { makeListener } from './make/listener.js';
|
|
12
13
|
import { makeMail } from './make/mail.js';
|
|
13
14
|
import { makeTest } from './make/test.js';
|
|
15
|
+
import { makePolicy } from './make/policy.js';
|
|
16
|
+
import { makeObserver } from './make/observer.js';
|
|
17
|
+
import { makeCast } from './make/cast.js';
|
|
18
|
+
import { makeNotification } from './make/notification.js';
|
|
14
19
|
export function makeCommand(program) {
|
|
15
20
|
// CLI-owned generic scaffolders
|
|
16
21
|
makeController(program);
|
|
@@ -21,9 +26,14 @@ export function makeCommand(program) {
|
|
|
21
26
|
makeProvider(program);
|
|
22
27
|
makeCommandCmd(program);
|
|
23
28
|
makeEvent(program);
|
|
29
|
+
makeException(program);
|
|
24
30
|
makeListener(program);
|
|
25
31
|
makeMail(program);
|
|
26
32
|
makeTest(program);
|
|
33
|
+
makePolicy(program);
|
|
34
|
+
makeObserver(program);
|
|
35
|
+
makeCast(program);
|
|
36
|
+
makeNotification(program);
|
|
27
37
|
// Package-contributed scaffolders (registered via registerMakeSpecs)
|
|
28
38
|
for (const spec of getMakeSpecs()) {
|
|
29
39
|
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;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"make.js","sourceRoot":"","sources":["../../src/commands/make.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
interface ClearResult {
|
|
3
|
+
/** Path relative to the app root, e.g. `bootstrap/cache/` */
|
|
4
|
+
target: string;
|
|
5
|
+
/** What the target holds — shown next to the checkmark */
|
|
6
|
+
label: string;
|
|
7
|
+
cleared: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Remove the framework's filesystem caches. Everything here is regenerated
|
|
11
|
+
* automatically: the provider manifest self-heals at boot, and Vite rebuilds
|
|
12
|
+
* its dep-optimizer cache on the next dev server start.
|
|
13
|
+
*
|
|
14
|
+
* Deliberately NOT cleared: `.rudder/types/` and `pages/__view/` (committed,
|
|
15
|
+
* regenerated by scanners — wiping them breaks a fresh-clone typecheck) and
|
|
16
|
+
* `dist/` (build output, that's `pnpm clean`'s job).
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearFrameworkCaches(cwd: string): ClearResult[];
|
|
19
|
+
/** Print one line per target — ✔ cleared / dim already-empty. */
|
|
20
|
+
export declare function reportClearResults(results: ClearResult[]): void;
|
|
21
|
+
/**
|
|
22
|
+
* `rudder optimize:clear` — Laravel-parity name for "wipe the framework's
|
|
23
|
+
* filesystem caches". Skip-boot: it must work when a corrupt cache is the
|
|
24
|
+
* reason the app can't boot.
|
|
25
|
+
*/
|
|
26
|
+
export declare function optimizeClearCommand(program: Command): void;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=optimize-clear.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize-clear.d.ts","sourceRoot":"","sources":["../../src/commands/optimize-clear.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,UAAU,WAAW;IACnB,6DAA6D;IAC7D,MAAM,EAAG,MAAM,CAAA;IACf,0DAA0D;IAC1D,KAAK,EAAI,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAY/D;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAQ/D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO3D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { rmSync, existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
/**
|
|
5
|
+
* Remove the framework's filesystem caches. Everything here is regenerated
|
|
6
|
+
* automatically: the provider manifest self-heals at boot, and Vite rebuilds
|
|
7
|
+
* its dep-optimizer cache on the next dev server start.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately NOT cleared: `.rudder/types/` and `pages/__view/` (committed,
|
|
10
|
+
* regenerated by scanners — wiping them breaks a fresh-clone typecheck) and
|
|
11
|
+
* `dist/` (build output, that's `pnpm clean`'s job).
|
|
12
|
+
*/
|
|
13
|
+
export function clearFrameworkCaches(cwd) {
|
|
14
|
+
const targets = [
|
|
15
|
+
{ target: 'bootstrap/cache/', label: 'provider manifest (self-heals at boot)' },
|
|
16
|
+
{ target: 'node_modules/.vite/', label: 'Vite dep-optimizer cache' },
|
|
17
|
+
];
|
|
18
|
+
return targets.map(({ target, label }) => {
|
|
19
|
+
const abs = path.join(cwd, target);
|
|
20
|
+
if (!existsSync(abs))
|
|
21
|
+
return { target, label, cleared: false };
|
|
22
|
+
rmSync(abs, { recursive: true, force: true });
|
|
23
|
+
return { target, label, cleared: true };
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** Print one line per target — ✔ cleared / dim already-empty. */
|
|
27
|
+
export function reportClearResults(results) {
|
|
28
|
+
for (const r of results) {
|
|
29
|
+
if (r.cleared) {
|
|
30
|
+
console.log(chalk.green(' ✔ Cleared:'), chalk.cyan(r.target), chalk.dim(`— ${r.label}`));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.log(chalk.dim(` - ${r.target} already empty`));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* `rudder optimize:clear` — Laravel-parity name for "wipe the framework's
|
|
39
|
+
* filesystem caches". Skip-boot: it must work when a corrupt cache is the
|
|
40
|
+
* reason the app can't boot.
|
|
41
|
+
*/
|
|
42
|
+
export function optimizeClearCommand(program) {
|
|
43
|
+
program
|
|
44
|
+
.command('optimize:clear')
|
|
45
|
+
.description('Remove framework filesystem caches (provider manifest, Vite dep-optimizer cache)')
|
|
46
|
+
.action(() => {
|
|
47
|
+
reportClearResults(clearFrameworkCaches(process.cwd()));
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=optimize-clear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimize-clear.js","sourceRoot":"","sources":["../../src/commands/optimize-clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,OAAO,GAAwC;QACnD,EAAE,MAAM,EAAE,kBAAkB,EAAK,KAAK,EAAE,wCAAwC,EAAE;QAClF,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;KACrE,CAAA;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC9D,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACzC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,kBAAkB,CAAC,OAAsB;IACvD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC3F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,GAAG,EAAE;QACX,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;AACN,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,9 @@ import { aboutCommand } from './commands/about.js';
|
|
|
17
17
|
import { testCommand } from './commands/test.js';
|
|
18
18
|
import { doctorCommand } from './commands/doctor.js';
|
|
19
19
|
import { tinkerCommand } from './commands/tinker.js';
|
|
20
|
+
import { optimizeClearCommand } from './commands/optimize-clear.js';
|
|
21
|
+
import { freshCommand } from './commands/fresh.js';
|
|
22
|
+
import { downCommand, upCommand } from './commands/maintenance.js';
|
|
20
23
|
import { rudder, parseSignature, CancelledError, commandObservers } from '@rudderjs/console';
|
|
21
24
|
import { CliError } from './errors.js';
|
|
22
25
|
// The `rudder` CLI's own version, read from its package.json at runtime — works
|
|
@@ -215,8 +218,9 @@ async function loadPackageCommands() {
|
|
|
215
218
|
const register = mod['registerSchemaTypesCommand'];
|
|
216
219
|
register(rudder, { bootApp });
|
|
217
220
|
},
|
|
218
|
-
// @rudderjs/orm → db:show, db:table.
|
|
219
|
-
// bootApp on demand, like schema:types)
|
|
221
|
+
// @rudderjs/orm → db:show, db:table, db:query. The inspect pair resolves
|
|
222
|
+
// the native engine (via bootApp on demand, like schema:types); db:query
|
|
223
|
+
// rides the DB facade on whatever adapter the app runs.
|
|
220
224
|
async () => {
|
|
221
225
|
const mod = await tryImport('@rudderjs/orm', 'commands/db-inspect');
|
|
222
226
|
const register = mod['registerDbInspectCommands'];
|
|
@@ -249,6 +253,12 @@ async function loadPackageCommands() {
|
|
|
249
253
|
const register = mod['registerRouteListCommand'];
|
|
250
254
|
register(rudder);
|
|
251
255
|
},
|
|
256
|
+
// @rudderjs/openapi → openapi:generate
|
|
257
|
+
async () => {
|
|
258
|
+
const mod = await tryImport('@rudderjs/openapi', 'commands/openapi-generate');
|
|
259
|
+
const register = mod['registerOpenApiGenerateCommand'];
|
|
260
|
+
register(rudder);
|
|
261
|
+
},
|
|
252
262
|
// @rudderjs/core → event:list
|
|
253
263
|
async () => {
|
|
254
264
|
const mod = await tryImport('@rudderjs/core', 'commands/event-list');
|
|
@@ -289,6 +299,12 @@ async function loadPackageCommands() {
|
|
|
289
299
|
const register = mod['registerEnvSyncCommand'];
|
|
290
300
|
register(rudder);
|
|
291
301
|
},
|
|
302
|
+
// @rudderjs/vite → config:sync
|
|
303
|
+
async () => {
|
|
304
|
+
const mod = await tryImport('@rudderjs/vite', 'commands/config-sync');
|
|
305
|
+
const register = mod['registerConfigSyncCommand'];
|
|
306
|
+
register(rudder);
|
|
307
|
+
},
|
|
292
308
|
];
|
|
293
309
|
await Promise.all(loaders.map(fn => fn().catch(() => { })));
|
|
294
310
|
}
|
|
@@ -366,6 +382,10 @@ async function main() {
|
|
|
366
382
|
testCommand(program);
|
|
367
383
|
doctorCommand(program, { bootApp });
|
|
368
384
|
tinkerCommand(program);
|
|
385
|
+
optimizeClearCommand(program);
|
|
386
|
+
freshCommand(program);
|
|
387
|
+
downCommand(program);
|
|
388
|
+
upCommand(program);
|
|
369
389
|
// Commands that scan files / manage tooling state must work even when the
|
|
370
390
|
// app cannot boot (e.g. fresh clone, missing manifest, broken provider config).
|
|
371
391
|
// List them here to skip the bootApp() phase entirely.
|
|
@@ -391,11 +411,19 @@ async function main() {
|
|
|
391
411
|
// - `remove` uninstalls a package — the about-to-be-deleted provider
|
|
392
412
|
// may still be in node_modules but is being torn out; booting would
|
|
393
413
|
// be wasted work at best and surface confusing errors at worst.
|
|
414
|
+
// - `optimize:clear` must work when a corrupt cache is the reason the
|
|
415
|
+
// app can't boot. `fresh` is an orchestrator — each step that needs
|
|
416
|
+
// the app boots its own child process, so `fresh` itself never holds
|
|
417
|
+
// connections to the database it is about to drop.
|
|
394
418
|
const NO_BOOT_EXACT = new Set([
|
|
395
419
|
'providers:discover', 'module:publish', 'view:sync', 'routes:sync', 'env:sync',
|
|
396
420
|
'db:generate', 'db:push',
|
|
397
421
|
'migrate', 'migrate:fresh', 'migrate:status', 'migrate:rollback', 'migrate:refresh',
|
|
398
422
|
'add', 'remove', 'upgrade', 'key:generate', 'about', 'test',
|
|
423
|
+
'optimize:clear', 'fresh',
|
|
424
|
+
// `down`/`up` just write/remove the storage/framework/down flag file — no
|
|
425
|
+
// app context needed (and the app may be down because it can't boot).
|
|
426
|
+
'down', 'up',
|
|
399
427
|
// `doctor` fast-path runs filesystem/env checks only. `--deep` is handled
|
|
400
428
|
// inside the command's handler, which boots the app on demand (Phase 4).
|
|
401
429
|
'doctor',
|