@sonisoft/now-sdk-ext-cli 1.1.0-alpha.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4587 -197
- package/dist/commands/aggregate/count.d.ts +16 -0
- package/dist/commands/aggregate/count.d.ts.map +1 -0
- package/dist/commands/aggregate/count.js +67 -0
- package/dist/commands/aggregate/count.js.map +1 -0
- package/dist/commands/aggregate/group.d.ts +24 -0
- package/dist/commands/aggregate/group.d.ts.map +1 -0
- package/dist/commands/aggregate/group.js +120 -0
- package/dist/commands/aggregate/group.js.map +1 -0
- package/dist/commands/aggregate/query.d.ts +21 -0
- package/dist/commands/aggregate/query.d.ts.map +1 -0
- package/dist/commands/aggregate/query.js +100 -0
- package/dist/commands/aggregate/query.js.map +1 -0
- package/dist/commands/app/index.d.ts +4 -2
- package/dist/commands/app/index.d.ts.map +1 -1
- package/dist/commands/app/index.js +27 -6
- package/dist/commands/app/index.js.map +1 -1
- package/dist/commands/app/install.d.ts +4 -2
- package/dist/commands/app/install.d.ts.map +1 -1
- package/dist/commands/app/install.js +41 -8
- package/dist/commands/app/install.js.map +1 -1
- package/dist/commands/app/repo-install.d.ts +18 -0
- package/dist/commands/app/repo-install.d.ts.map +1 -0
- package/dist/commands/app/repo-install.js +171 -0
- package/dist/commands/app/repo-install.js.map +1 -0
- package/dist/commands/app/repo-list.d.ts +16 -0
- package/dist/commands/app/repo-list.d.ts.map +1 -0
- package/dist/commands/app/repo-list.js +150 -0
- package/dist/commands/app/repo-list.js.map +1 -0
- package/dist/commands/app/uninstall.d.ts +15 -0
- package/dist/commands/app/uninstall.d.ts.map +1 -0
- package/dist/commands/app/uninstall.js +69 -0
- package/dist/commands/app/uninstall.js.map +1 -0
- package/dist/commands/atf/index.d.ts +25 -0
- package/dist/commands/atf/index.d.ts.map +1 -0
- package/dist/commands/atf/index.js +183 -0
- package/dist/commands/atf/index.js.map +1 -0
- package/dist/commands/attachment/get.d.ts +14 -0
- package/dist/commands/attachment/get.d.ts.map +1 -0
- package/dist/commands/attachment/get.js +44 -0
- package/dist/commands/attachment/get.js.map +1 -0
- package/dist/commands/attachment/list.d.ts +16 -0
- package/dist/commands/attachment/list.d.ts.map +1 -0
- package/dist/commands/attachment/list.js +60 -0
- package/dist/commands/attachment/list.js.map +1 -0
- package/dist/commands/attachment/upload.d.ts +17 -0
- package/dist/commands/attachment/upload.d.ts.map +1 -0
- package/dist/commands/attachment/upload.js +71 -0
- package/dist/commands/attachment/upload.js.map +1 -0
- package/dist/commands/batch/create.d.ts +15 -0
- package/dist/commands/batch/create.d.ts.map +1 -0
- package/dist/commands/batch/create.js +56 -0
- package/dist/commands/batch/create.js.map +1 -0
- package/dist/commands/batch/update.d.ts +15 -0
- package/dist/commands/batch/update.d.ts.map +1 -0
- package/dist/commands/batch/update.js +56 -0
- package/dist/commands/batch/update.js.map +1 -0
- package/dist/commands/bulk/delete.d.ts +18 -0
- package/dist/commands/bulk/delete.d.ts.map +1 -0
- package/dist/commands/bulk/delete.js +95 -0
- package/dist/commands/bulk/delete.js.map +1 -0
- package/dist/commands/bulk/update.d.ts +19 -0
- package/dist/commands/bulk/update.d.ts.map +1 -0
- package/dist/commands/bulk/update.js +110 -0
- package/dist/commands/bulk/update.js.map +1 -0
- package/dist/commands/exec/index.d.ts +17 -4
- package/dist/commands/exec/index.d.ts.map +1 -1
- package/dist/commands/exec/index.js +278 -28
- package/dist/commands/exec/index.js.map +1 -1
- package/dist/commands/flow/action.d.ts +19 -0
- package/dist/commands/flow/action.d.ts.map +1 -0
- package/dist/commands/flow/action.js +88 -0
- package/dist/commands/flow/action.js.map +1 -0
- package/dist/commands/flow/cancel.d.ts +17 -0
- package/dist/commands/flow/cancel.d.ts.map +1 -0
- package/dist/commands/flow/cancel.js +60 -0
- package/dist/commands/flow/cancel.js.map +1 -0
- package/dist/commands/flow/error.d.ts +16 -0
- package/dist/commands/flow/error.d.ts.map +1 -0
- package/dist/commands/flow/error.js +51 -0
- package/dist/commands/flow/error.js.map +1 -0
- package/dist/commands/flow/message.d.ts +18 -0
- package/dist/commands/flow/message.d.ts.map +1 -0
- package/dist/commands/flow/message.js +66 -0
- package/dist/commands/flow/message.js.map +1 -0
- package/dist/commands/flow/outputs.d.ts +16 -0
- package/dist/commands/flow/outputs.d.ts.map +1 -0
- package/dist/commands/flow/outputs.js +55 -0
- package/dist/commands/flow/outputs.js.map +1 -0
- package/dist/commands/flow/run.d.ts +19 -0
- package/dist/commands/flow/run.d.ts.map +1 -0
- package/dist/commands/flow/run.js +98 -0
- package/dist/commands/flow/run.js.map +1 -0
- package/dist/commands/flow/status.d.ts +16 -0
- package/dist/commands/flow/status.d.ts.map +1 -0
- package/dist/commands/flow/status.js +52 -0
- package/dist/commands/flow/status.js.map +1 -0
- package/dist/commands/flow/subflow.d.ts +19 -0
- package/dist/commands/flow/subflow.d.ts.map +1 -0
- package/dist/commands/flow/subflow.js +92 -0
- package/dist/commands/flow/subflow.js.map +1 -0
- package/dist/commands/health/check.d.ts +20 -0
- package/dist/commands/health/check.d.ts.map +1 -0
- package/dist/commands/health/check.js +105 -0
- package/dist/commands/health/check.js.map +1 -0
- package/dist/commands/log/index.d.ts +22 -0
- package/dist/commands/log/index.d.ts.map +1 -0
- package/dist/commands/log/index.js +190 -0
- package/dist/commands/log/index.js.map +1 -0
- package/dist/commands/query/app.d.ts +17 -0
- package/dist/commands/query/app.d.ts.map +1 -0
- package/dist/commands/query/app.js +81 -0
- package/dist/commands/query/app.js.map +1 -0
- package/dist/commands/query/columns.d.ts +16 -0
- package/dist/commands/query/columns.d.ts.map +1 -0
- package/dist/commands/query/columns.js +76 -0
- package/dist/commands/query/columns.js.map +1 -0
- package/dist/commands/query/index.d.ts +19 -0
- package/dist/commands/query/index.d.ts.map +1 -0
- package/dist/commands/query/index.js +94 -0
- package/dist/commands/query/index.js.map +1 -0
- package/dist/commands/query/syslog.d.ts +16 -0
- package/dist/commands/query/syslog.d.ts.map +1 -0
- package/dist/commands/query/syslog.js +67 -0
- package/dist/commands/query/syslog.js.map +1 -0
- package/dist/commands/schema/field.d.ts +16 -0
- package/dist/commands/schema/field.d.ts.map +1 -0
- package/dist/commands/schema/field.js +62 -0
- package/dist/commands/schema/field.js.map +1 -0
- package/dist/commands/schema/index.d.ts +19 -0
- package/dist/commands/schema/index.d.ts.map +1 -0
- package/dist/commands/schema/index.js +90 -0
- package/dist/commands/schema/index.js.map +1 -0
- package/dist/commands/schema/validate-catalog.d.ts +15 -0
- package/dist/commands/schema/validate-catalog.d.ts.map +1 -0
- package/dist/commands/schema/validate-catalog.js +58 -0
- package/dist/commands/schema/validate-catalog.js.map +1 -0
- package/dist/commands/scope/index.d.ts +14 -0
- package/dist/commands/scope/index.d.ts.map +1 -0
- package/dist/commands/scope/index.js +58 -0
- package/dist/commands/scope/index.js.map +1 -0
- package/dist/commands/scope/set.d.ts +14 -0
- package/dist/commands/scope/set.d.ts.map +1 -0
- package/dist/commands/scope/set.js +44 -0
- package/dist/commands/scope/set.js.map +1 -0
- package/dist/commands/script-sync/pull.d.ts +16 -0
- package/dist/commands/script-sync/pull.d.ts.map +1 -0
- package/dist/commands/script-sync/pull.js +74 -0
- package/dist/commands/script-sync/pull.js.map +1 -0
- package/dist/commands/script-sync/push.d.ts +16 -0
- package/dist/commands/script-sync/push.d.ts.map +1 -0
- package/dist/commands/script-sync/push.js +73 -0
- package/dist/commands/script-sync/push.js.map +1 -0
- package/dist/commands/script-sync/sync.d.ts +15 -0
- package/dist/commands/script-sync/sync.d.ts.map +1 -0
- package/dist/commands/script-sync/sync.js +71 -0
- package/dist/commands/script-sync/sync.js.map +1 -0
- package/dist/commands/search/add-table.d.ts +16 -0
- package/dist/commands/search/add-table.d.ts.map +1 -0
- package/dist/commands/search/add-table.js +68 -0
- package/dist/commands/search/add-table.js.map +1 -0
- package/dist/commands/search/groups.d.ts +12 -0
- package/dist/commands/search/groups.d.ts.map +1 -0
- package/dist/commands/search/groups.js +42 -0
- package/dist/commands/search/groups.js.map +1 -0
- package/dist/commands/search/index.d.ts +18 -0
- package/dist/commands/search/index.d.ts.map +1 -0
- package/dist/commands/search/index.js +103 -0
- package/dist/commands/search/index.js.map +1 -0
- package/dist/commands/search/tables.d.ts +14 -0
- package/dist/commands/search/tables.d.ts.map +1 -0
- package/dist/commands/search/tables.js +50 -0
- package/dist/commands/search/tables.js.map +1 -0
- package/dist/commands/store/install.d.ts +19 -0
- package/dist/commands/store/install.d.ts.map +1 -0
- package/dist/commands/store/install.js +90 -0
- package/dist/commands/store/install.js.map +1 -0
- package/dist/commands/store/search.d.ts +16 -0
- package/dist/commands/store/search.d.ts.map +1 -0
- package/dist/commands/store/search.js +67 -0
- package/dist/commands/store/search.js.map +1 -0
- package/dist/commands/store/update.d.ts +18 -0
- package/dist/commands/store/update.d.ts.map +1 -0
- package/dist/commands/store/update.js +83 -0
- package/dist/commands/store/update.js.map +1 -0
- package/dist/commands/store/validate.d.ts +14 -0
- package/dist/commands/store/validate.d.ts.map +1 -0
- package/dist/commands/store/validate.js +43 -0
- package/dist/commands/store/validate.js.map +1 -0
- package/dist/commands/task/approve.d.ts +15 -0
- package/dist/commands/task/approve.d.ts.map +1 -0
- package/dist/commands/task/approve.js +66 -0
- package/dist/commands/task/approve.js.map +1 -0
- package/dist/commands/task/assign.d.ts +17 -0
- package/dist/commands/task/assign.d.ts.map +1 -0
- package/dist/commands/task/assign.js +86 -0
- package/dist/commands/task/assign.js.map +1 -0
- package/dist/commands/task/close.d.ts +16 -0
- package/dist/commands/task/close.d.ts.map +1 -0
- package/dist/commands/task/close.js +71 -0
- package/dist/commands/task/close.js.map +1 -0
- package/dist/commands/task/comment.d.ts +17 -0
- package/dist/commands/task/comment.d.ts.map +1 -0
- package/dist/commands/task/comment.js +86 -0
- package/dist/commands/task/comment.js.map +1 -0
- package/dist/commands/task/find.d.ts +15 -0
- package/dist/commands/task/find.d.ts.map +1 -0
- package/dist/commands/task/find.js +65 -0
- package/dist/commands/task/find.js.map +1 -0
- package/dist/commands/task/resolve.d.ts +16 -0
- package/dist/commands/task/resolve.d.ts.map +1 -0
- package/dist/commands/task/resolve.js +71 -0
- package/dist/commands/task/resolve.js.map +1 -0
- package/dist/commands/update-set/clone.d.ts +15 -0
- package/dist/commands/update-set/clone.d.ts.map +1 -0
- package/dist/commands/update-set/clone.js +50 -0
- package/dist/commands/update-set/clone.js.map +1 -0
- package/dist/commands/update-set/create.d.ts +16 -0
- package/dist/commands/update-set/create.d.ts.map +1 -0
- package/dist/commands/update-set/create.js +60 -0
- package/dist/commands/update-set/create.js.map +1 -0
- package/dist/commands/update-set/current.d.ts +14 -0
- package/dist/commands/update-set/current.d.ts.map +1 -0
- package/dist/commands/update-set/current.js +55 -0
- package/dist/commands/update-set/current.js.map +1 -0
- package/dist/commands/update-set/index.d.ts +15 -0
- package/dist/commands/update-set/index.d.ts.map +1 -0
- package/dist/commands/update-set/index.js +56 -0
- package/dist/commands/update-set/index.js.map +1 -0
- package/dist/commands/update-set/inspect.d.ts +14 -0
- package/dist/commands/update-set/inspect.d.ts.map +1 -0
- package/dist/commands/update-set/inspect.js +43 -0
- package/dist/commands/update-set/inspect.js.map +1 -0
- package/dist/commands/update-set/move.d.ts +16 -0
- package/dist/commands/update-set/move.d.ts.map +1 -0
- package/dist/commands/update-set/move.js +57 -0
- package/dist/commands/update-set/move.js.map +1 -0
- package/dist/commands/workflow/create.d.ts +14 -0
- package/dist/commands/workflow/create.d.ts.map +1 -0
- package/dist/commands/workflow/create.js +50 -0
- package/dist/commands/workflow/create.js.map +1 -0
- package/dist/commands/workflow/publish.d.ts +15 -0
- package/dist/commands/workflow/publish.d.ts.map +1 -0
- package/dist/commands/workflow/publish.js +53 -0
- package/dist/commands/workflow/publish.js.map +1 -0
- package/dist/commands/xml/export.d.ts +17 -0
- package/dist/commands/xml/export.d.ts.map +1 -0
- package/dist/commands/xml/export.js +87 -0
- package/dist/commands/xml/export.js.map +1 -0
- package/dist/commands/xml/import.d.ts +16 -0
- package/dist/commands/xml/import.d.ts.map +1 -0
- package/dist/commands/xml/import.js +69 -0
- package/dist/commands/xml/import.js.map +1 -0
- package/dist/common/authenticated-command.d.ts +5 -2
- package/dist/common/authenticated-command.d.ts.map +1 -1
- package/dist/common/authenticated-command.js +14 -5
- package/dist/common/authenticated-command.js.map +1 -1
- package/dist/common/base-command.d.ts +2 -2
- package/dist/common/base-command.d.ts.map +1 -1
- package/dist/common/base-command.js +0 -1
- package/dist/common/base-command.js.map +1 -1
- package/dist/common/scope-autocomplete.d.ts +20 -0
- package/dist/common/scope-autocomplete.d.ts.map +1 -0
- package/dist/common/scope-autocomplete.js +93 -0
- package/dist/common/scope-autocomplete.js.map +1 -0
- package/dist/services/aggregate-display.service.d.ts +18 -0
- package/dist/services/aggregate-display.service.d.ts.map +1 -0
- package/dist/services/aggregate-display.service.js +83 -0
- package/dist/services/aggregate-display.service.js.map +1 -0
- package/dist/services/app-display.service.d.ts +36 -0
- package/dist/services/app-display.service.d.ts.map +1 -0
- package/dist/services/app-display.service.js +101 -0
- package/dist/services/app-display.service.js.map +1 -0
- package/dist/services/atf-result-formatter.service.d.ts +64 -0
- package/dist/services/atf-result-formatter.service.d.ts.map +1 -0
- package/dist/services/atf-result-formatter.service.js +83 -0
- package/dist/services/atf-result-formatter.service.js.map +1 -0
- package/dist/services/attachment-display.service.d.ts +18 -0
- package/dist/services/attachment-display.service.d.ts.map +1 -0
- package/dist/services/attachment-display.service.js +93 -0
- package/dist/services/attachment-display.service.js.map +1 -0
- package/dist/services/batch-display.service.d.ts +11 -0
- package/dist/services/batch-display.service.d.ts.map +1 -0
- package/dist/services/batch-display.service.js +75 -0
- package/dist/services/batch-display.service.js.map +1 -0
- package/dist/services/bulk-display.service.d.ts +11 -0
- package/dist/services/bulk-display.service.d.ts.map +1 -0
- package/dist/services/bulk-display.service.js +85 -0
- package/dist/services/bulk-display.service.js.map +1 -0
- package/dist/services/code-search-display.service.d.ts +23 -0
- package/dist/services/code-search-display.service.d.ts.map +1 -0
- package/dist/services/code-search-display.service.js +130 -0
- package/dist/services/code-search-display.service.js.map +1 -0
- package/dist/services/flow-display.service.d.ts +10 -0
- package/dist/services/flow-display.service.d.ts.map +1 -0
- package/dist/services/flow-display.service.js +164 -0
- package/dist/services/flow-display.service.js.map +1 -0
- package/dist/services/health-display.service.d.ts +8 -0
- package/dist/services/health-display.service.d.ts.map +1 -0
- package/dist/services/health-display.service.js +91 -0
- package/dist/services/health-display.service.js.map +1 -0
- package/dist/services/log-filter.service.d.ts +31 -0
- package/dist/services/log-filter.service.d.ts.map +1 -0
- package/dist/services/log-filter.service.js +117 -0
- package/dist/services/log-filter.service.js.map +1 -0
- package/dist/services/log-formatter.service.d.ts +30 -0
- package/dist/services/log-formatter.service.d.ts.map +1 -0
- package/dist/services/log-formatter.service.js +122 -0
- package/dist/services/log-formatter.service.js.map +1 -0
- package/dist/services/query-display.service.d.ts +23 -0
- package/dist/services/query-display.service.d.ts.map +1 -0
- package/dist/services/query-display.service.js +152 -0
- package/dist/services/query-display.service.js.map +1 -0
- package/dist/services/schema-display.service.d.ts +18 -0
- package/dist/services/schema-display.service.d.ts.map +1 -0
- package/dist/services/schema-display.service.js +106 -0
- package/dist/services/schema-display.service.js.map +1 -0
- package/dist/services/scope-display.service.d.ts +18 -0
- package/dist/services/scope-display.service.d.ts.map +1 -0
- package/dist/services/scope-display.service.js +83 -0
- package/dist/services/scope-display.service.js.map +1 -0
- package/dist/services/script-parameter.service.d.ts +16 -0
- package/dist/services/script-parameter.service.d.ts.map +1 -0
- package/dist/services/script-parameter.service.js +34 -0
- package/dist/services/script-parameter.service.js.map +1 -0
- package/dist/services/script-sync-display.service.d.ts +13 -0
- package/dist/services/script-sync-display.service.d.ts.map +1 -0
- package/dist/services/script-sync-display.service.js +71 -0
- package/dist/services/script-sync-display.service.js.map +1 -0
- package/dist/services/store-app-display.service.d.ts +16 -0
- package/dist/services/store-app-display.service.d.ts.map +1 -0
- package/dist/services/store-app-display.service.js +114 -0
- package/dist/services/store-app-display.service.js.map +1 -0
- package/dist/services/task-display.service.d.ts +14 -0
- package/dist/services/task-display.service.d.ts.map +1 -0
- package/dist/services/task-display.service.js +86 -0
- package/dist/services/task-display.service.js.map +1 -0
- package/dist/services/update-set-display.service.d.ts +28 -0
- package/dist/services/update-set-display.service.d.ts.map +1 -0
- package/dist/services/update-set-display.service.js +150 -0
- package/dist/services/update-set-display.service.js.map +1 -0
- package/dist/services/workflow-display.service.d.ts +13 -0
- package/dist/services/workflow-display.service.d.ts.map +1 -0
- package/dist/services/workflow-display.service.js +53 -0
- package/dist/services/workflow-display.service.js.map +1 -0
- package/dist/services/xml-display.service.d.ts +11 -0
- package/dist/services/xml-display.service.d.ts.map +1 -0
- package/dist/services/xml-display.service.js +55 -0
- package/dist/services/xml-display.service.js.map +1 -0
- package/dist/util/log-factory.d.ts +5 -0
- package/dist/util/log-factory.d.ts.map +1 -0
- package/dist/util/log-factory.js +8 -0
- package/dist/util/log-factory.js.map +1 -0
- package/oclif.manifest.json +5847 -49
- package/package.json +107 -28
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
2
|
+
export declare class AggregateCount extends AuthenticatedCommand<typeof AggregateCount> {
|
|
3
|
+
static args: {};
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: {
|
|
6
|
+
description: string;
|
|
7
|
+
command: string;
|
|
8
|
+
}[];
|
|
9
|
+
static flags: {
|
|
10
|
+
table: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
query: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=count.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../../../src/commands/aggregate/count.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,cAAe,SAAQ,oBAAoB,CAAC,OAAO,cAAc,CAAC;IAE7E,MAAM,CAAC,IAAI,KAAK;IAClB,MAAM,CAAC,WAAW,SAKuB;IACzC,MAAM,CAAC,QAAQ;;;QAaZ;IACH,MAAM,CAAC,KAAK;;;;MAiBT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB3B"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* eslint-disable perfectionist/sort-objects */
|
|
2
|
+
import { Flags } from '@oclif/core';
|
|
3
|
+
import { AggregateQuery } from '@sonisoft/now-sdk-ext-core';
|
|
4
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
5
|
+
import { AggregateDisplayService } from '../../services/aggregate-display.service.js';
|
|
6
|
+
export class AggregateCount extends AuthenticatedCommand {
|
|
7
|
+
static args = {};
|
|
8
|
+
static description = 'Count records in a ServiceNow table.\n\n' +
|
|
9
|
+
'Uses the Stats API to efficiently count records with optional encoded query filtering.\n\n' +
|
|
10
|
+
'Features:\n' +
|
|
11
|
+
' \u2022 Fast record counting via Stats API\n' +
|
|
12
|
+
' \u2022 Optional encoded query filtering\n' +
|
|
13
|
+
' \u2022 JSON output for scripting';
|
|
14
|
+
static examples = [
|
|
15
|
+
{
|
|
16
|
+
description: 'Count all incidents',
|
|
17
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --auth dev',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
description: 'Count active critical incidents',
|
|
21
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --query "active=true^priority=1" --auth dev',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
description: 'Count as JSON',
|
|
25
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --query "active=true" --json --auth dev',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
static flags = {
|
|
29
|
+
'table': Flags.string({
|
|
30
|
+
char: 't',
|
|
31
|
+
description: 'ServiceNow table name to count records in',
|
|
32
|
+
required: true,
|
|
33
|
+
}),
|
|
34
|
+
'query': Flags.string({
|
|
35
|
+
char: 'q',
|
|
36
|
+
description: 'ServiceNow encoded query string to filter records',
|
|
37
|
+
required: false,
|
|
38
|
+
}),
|
|
39
|
+
'json': Flags.boolean({
|
|
40
|
+
char: 'j',
|
|
41
|
+
description: 'Output results as JSON',
|
|
42
|
+
required: false,
|
|
43
|
+
default: false,
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
async run() {
|
|
47
|
+
const { flags } = await this.parse(AggregateCount);
|
|
48
|
+
const displayService = new AggregateDisplayService();
|
|
49
|
+
try {
|
|
50
|
+
const aggregateQuery = new AggregateQuery(this.instance);
|
|
51
|
+
this.log(`Counting records in table: ${flags.table}`);
|
|
52
|
+
const count = await aggregateQuery.count({
|
|
53
|
+
table: flags.table,
|
|
54
|
+
query: flags.query,
|
|
55
|
+
});
|
|
56
|
+
const lines = displayService.formatCountResult(count, flags.table, flags.query, flags.json ?? false);
|
|
57
|
+
for (const line of lines) {
|
|
58
|
+
(flags.json ?? false) ? console.log(line) : this.log(line);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
this._logger.error("Error occurred when counting records.", error);
|
|
63
|
+
this.error(error);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=count.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"count.js","sourceRoot":"","sources":["../../../src/commands/aggregate/count.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAA;AAErF,MAAM,OAAO,cAAe,SAAQ,oBAA2C;IAE7E,MAAM,CAAC,IAAI,GAAG,EAAE,CAAA;IAClB,MAAM,CAAC,WAAW,GAAG,0CAA0C;QAC3D,4FAA4F;QAC5F,aAAa;QACb,+CAA+C;QAC/C,6CAA6C;QAC7C,oCAAoC,CAAC;IACzC,MAAM,CAAC,QAAQ,GAAG;QACd;YACE,WAAW,EAAE,qBAAqB;YAClC,OAAO,EAAE,iEAAiE;SAC3E;QACD;YACE,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,kGAAkG;SAC5G;QACD;YACE,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,8FAA8F;SACxG;KACF,CAAA;IACH,MAAM,CAAC,KAAK,GAAG;QACX,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2CAA2C;YACxD,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,wBAAwB;YACrC,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEzD,IAAI,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAEtD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC;gBACvC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,cAAc,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YACrG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAc,CAAC,CAAC;YAC5E,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
2
|
+
export declare class AggregateGroup extends AuthenticatedCommand<typeof AggregateGroup> {
|
|
3
|
+
static args: {};
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: {
|
|
6
|
+
description: string;
|
|
7
|
+
command: string;
|
|
8
|
+
}[];
|
|
9
|
+
static flags: {
|
|
10
|
+
table: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
query: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
'group-by': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[], import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
count: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
14
|
+
avg: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
|
+
min: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
16
|
+
max: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
17
|
+
sum: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
18
|
+
having: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
19
|
+
'display-value': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
20
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
21
|
+
};
|
|
22
|
+
run(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../src/commands/aggregate/group.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,cAAe,SAAQ,oBAAoB,CAAC,OAAO,cAAc,CAAC;IAE7E,MAAM,CAAC,IAAI,KAAK;IAClB,MAAM,CAAC,WAAW,SAQuB;IACzC,MAAM,CAAC,QAAQ;;;QAaZ;IACH,MAAM,CAAC,KAAK;;;;;;;;;;;;MA2DT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgC3B"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* eslint-disable perfectionist/sort-objects */
|
|
2
|
+
import { Flags } from '@oclif/core';
|
|
3
|
+
import { AggregateQuery } from '@sonisoft/now-sdk-ext-core';
|
|
4
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
5
|
+
import { AggregateDisplayService } from '../../services/aggregate-display.service.js';
|
|
6
|
+
export class AggregateGroup extends AuthenticatedCommand {
|
|
7
|
+
static args = {};
|
|
8
|
+
static description = 'Run a grouped aggregate query on a ServiceNow table.\n\n' +
|
|
9
|
+
'Compute aggregate statistics (COUNT, AVG, MIN, MAX, SUM) grouped by one or more fields ' +
|
|
10
|
+
'using the Stats API. Supports HAVING clauses for filtering groups.\n\n' +
|
|
11
|
+
'Features:\n' +
|
|
12
|
+
' \u2022 GROUP BY one or more fields\n' +
|
|
13
|
+
' \u2022 Compute AVG, MIN, MAX, SUM per group\n' +
|
|
14
|
+
' \u2022 HAVING clause for group filtering\n' +
|
|
15
|
+
' \u2022 Display values for reference fields\n' +
|
|
16
|
+
' \u2022 JSON output for scripting';
|
|
17
|
+
static examples = [
|
|
18
|
+
{
|
|
19
|
+
description: 'Count incidents grouped by priority',
|
|
20
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --group-by priority --count --auth dev',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
description: 'Average reassignment count grouped by priority and assignment group',
|
|
24
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --group-by priority --group-by assignment_group --avg reassignment_count --count --display-value --auth dev',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
description: 'Groups with HAVING clause',
|
|
28
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --group-by priority --count --having "count>10" --auth dev',
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
static flags = {
|
|
32
|
+
'table': Flags.string({
|
|
33
|
+
char: 't',
|
|
34
|
+
description: 'ServiceNow table name to aggregate',
|
|
35
|
+
required: true,
|
|
36
|
+
}),
|
|
37
|
+
'query': Flags.string({
|
|
38
|
+
char: 'q',
|
|
39
|
+
description: 'ServiceNow encoded query string to filter records before grouping',
|
|
40
|
+
required: false,
|
|
41
|
+
}),
|
|
42
|
+
'group-by': Flags.string({
|
|
43
|
+
char: 'g',
|
|
44
|
+
description: 'Field name(s) to group by',
|
|
45
|
+
required: true,
|
|
46
|
+
multiple: true,
|
|
47
|
+
}),
|
|
48
|
+
'count': Flags.boolean({
|
|
49
|
+
char: 'c',
|
|
50
|
+
description: 'Include record count per group',
|
|
51
|
+
required: false,
|
|
52
|
+
default: false,
|
|
53
|
+
}),
|
|
54
|
+
'avg': Flags.string({
|
|
55
|
+
description: 'Comma-separated field names to compute AVG on per group',
|
|
56
|
+
required: false,
|
|
57
|
+
multiple: true,
|
|
58
|
+
}),
|
|
59
|
+
'min': Flags.string({
|
|
60
|
+
description: 'Comma-separated field names to compute MIN on per group',
|
|
61
|
+
required: false,
|
|
62
|
+
multiple: true,
|
|
63
|
+
}),
|
|
64
|
+
'max': Flags.string({
|
|
65
|
+
description: 'Comma-separated field names to compute MAX on per group',
|
|
66
|
+
required: false,
|
|
67
|
+
multiple: true,
|
|
68
|
+
}),
|
|
69
|
+
'sum': Flags.string({
|
|
70
|
+
description: 'Comma-separated field names to compute SUM on per group',
|
|
71
|
+
required: false,
|
|
72
|
+
multiple: true,
|
|
73
|
+
}),
|
|
74
|
+
'having': Flags.string({
|
|
75
|
+
description: 'HAVING clause to filter groups (e.g. "count>10")',
|
|
76
|
+
required: false,
|
|
77
|
+
}),
|
|
78
|
+
'display-value': Flags.boolean({
|
|
79
|
+
char: 'd',
|
|
80
|
+
description: 'Return display values for group-by fields',
|
|
81
|
+
required: false,
|
|
82
|
+
default: false,
|
|
83
|
+
}),
|
|
84
|
+
'json': Flags.boolean({
|
|
85
|
+
char: 'j',
|
|
86
|
+
description: 'Output results as JSON',
|
|
87
|
+
required: false,
|
|
88
|
+
default: false,
|
|
89
|
+
}),
|
|
90
|
+
};
|
|
91
|
+
async run() {
|
|
92
|
+
const { flags } = await this.parse(AggregateGroup);
|
|
93
|
+
const displayService = new AggregateDisplayService();
|
|
94
|
+
try {
|
|
95
|
+
const aggregateQuery = new AggregateQuery(this.instance);
|
|
96
|
+
this.log(`Running grouped aggregate on table: ${flags.table} (group by: ${flags['group-by'].join(', ')})`);
|
|
97
|
+
const result = await aggregateQuery.groupBy({
|
|
98
|
+
table: flags.table,
|
|
99
|
+
query: flags.query,
|
|
100
|
+
groupBy: flags['group-by'],
|
|
101
|
+
count: flags.count,
|
|
102
|
+
avgFields: flags.avg,
|
|
103
|
+
minFields: flags.min,
|
|
104
|
+
maxFields: flags.max,
|
|
105
|
+
sumFields: flags.sum,
|
|
106
|
+
having: flags.having,
|
|
107
|
+
displayValue: flags['display-value'] ? 'all' : undefined,
|
|
108
|
+
});
|
|
109
|
+
const lines = displayService.formatGroupedResult(result.groups, flags.table, flags.json ?? false);
|
|
110
|
+
for (const line of lines) {
|
|
111
|
+
(flags.json ?? false) ? console.log(line) : this.log(line);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
this._logger.error("Error occurred when running grouped aggregate query.", error);
|
|
116
|
+
this.error(error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../../src/commands/aggregate/group.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
2
|
+
export declare class AggregateQueryCmd extends AuthenticatedCommand<typeof AggregateQueryCmd> {
|
|
3
|
+
static args: {};
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: {
|
|
6
|
+
description: string;
|
|
7
|
+
command: string;
|
|
8
|
+
}[];
|
|
9
|
+
static flags: {
|
|
10
|
+
table: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
query: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
count: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
13
|
+
avg: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
+
min: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
|
+
max: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
16
|
+
sum: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
17
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/aggregate/query.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,iBAAkB,SAAQ,oBAAoB,CAAC,OAAO,iBAAiB,CAAC;IAEnF,MAAM,CAAC,IAAI,KAAK;IAClB,MAAM,CAAC,WAAW,SAOuB;IACzC,MAAM,CAAC,QAAQ;;;QAaZ;IACH,MAAM,CAAC,KAAK;;;;;;;;;MA2CT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B3B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/* eslint-disable perfectionist/sort-objects */
|
|
2
|
+
import { Flags } from '@oclif/core';
|
|
3
|
+
import { AggregateQuery } from '@sonisoft/now-sdk-ext-core';
|
|
4
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
5
|
+
import { AggregateDisplayService } from '../../services/aggregate-display.service.js';
|
|
6
|
+
export class AggregateQueryCmd extends AuthenticatedCommand {
|
|
7
|
+
static args = {};
|
|
8
|
+
static description = 'Run aggregate statistics on a ServiceNow table.\n\n' +
|
|
9
|
+
'Compute AVG, MIN, MAX, and SUM on specified fields using the Stats API. ' +
|
|
10
|
+
'Optionally include a record count.\n\n' +
|
|
11
|
+
'Features:\n' +
|
|
12
|
+
' \u2022 Compute AVG, MIN, MAX, SUM on any numeric field\n' +
|
|
13
|
+
' \u2022 Optional record count\n' +
|
|
14
|
+
' \u2022 Filter with encoded queries\n' +
|
|
15
|
+
' \u2022 JSON output for scripting';
|
|
16
|
+
static examples = [
|
|
17
|
+
{
|
|
18
|
+
description: 'Get average reassignment count for incidents',
|
|
19
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --avg reassignment_count --auth dev',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
description: 'Get min, max, and average for active incidents',
|
|
23
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --query "active=true" --avg reassignment_count --min reassignment_count --max reassignment_count --count --auth dev',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
description: 'Get sum as JSON',
|
|
27
|
+
command: '<%= config.bin %> <%= command.id %> --table incident --sum reassignment_count --json --auth dev',
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
static flags = {
|
|
31
|
+
'table': Flags.string({
|
|
32
|
+
char: 't',
|
|
33
|
+
description: 'ServiceNow table name to aggregate',
|
|
34
|
+
required: true,
|
|
35
|
+
}),
|
|
36
|
+
'query': Flags.string({
|
|
37
|
+
char: 'q',
|
|
38
|
+
description: 'ServiceNow encoded query string to filter records',
|
|
39
|
+
required: false,
|
|
40
|
+
}),
|
|
41
|
+
'count': Flags.boolean({
|
|
42
|
+
char: 'c',
|
|
43
|
+
description: 'Include record count in the result',
|
|
44
|
+
required: false,
|
|
45
|
+
default: false,
|
|
46
|
+
}),
|
|
47
|
+
'avg': Flags.string({
|
|
48
|
+
description: 'Comma-separated field names to compute AVG on',
|
|
49
|
+
required: false,
|
|
50
|
+
multiple: true,
|
|
51
|
+
}),
|
|
52
|
+
'min': Flags.string({
|
|
53
|
+
description: 'Comma-separated field names to compute MIN on',
|
|
54
|
+
required: false,
|
|
55
|
+
multiple: true,
|
|
56
|
+
}),
|
|
57
|
+
'max': Flags.string({
|
|
58
|
+
description: 'Comma-separated field names to compute MAX on',
|
|
59
|
+
required: false,
|
|
60
|
+
multiple: true,
|
|
61
|
+
}),
|
|
62
|
+
'sum': Flags.string({
|
|
63
|
+
description: 'Comma-separated field names to compute SUM on',
|
|
64
|
+
required: false,
|
|
65
|
+
multiple: true,
|
|
66
|
+
}),
|
|
67
|
+
'json': Flags.boolean({
|
|
68
|
+
char: 'j',
|
|
69
|
+
description: 'Output results as JSON',
|
|
70
|
+
required: false,
|
|
71
|
+
default: false,
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
74
|
+
async run() {
|
|
75
|
+
const { flags } = await this.parse(AggregateQueryCmd);
|
|
76
|
+
const displayService = new AggregateDisplayService();
|
|
77
|
+
try {
|
|
78
|
+
const aggregateQuery = new AggregateQuery(this.instance);
|
|
79
|
+
this.log(`Running aggregate query on table: ${flags.table}`);
|
|
80
|
+
const result = await aggregateQuery.aggregate({
|
|
81
|
+
table: flags.table,
|
|
82
|
+
query: flags.query,
|
|
83
|
+
count: flags.count,
|
|
84
|
+
avgFields: flags.avg,
|
|
85
|
+
minFields: flags.min,
|
|
86
|
+
maxFields: flags.max,
|
|
87
|
+
sumFields: flags.sum,
|
|
88
|
+
});
|
|
89
|
+
const lines = displayService.formatAggregateResult(result.stats, flags.table, flags.json ?? false);
|
|
90
|
+
for (const line of lines) {
|
|
91
|
+
(flags.json ?? false) ? console.log(line) : this.log(line);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
this._logger.error("Error occurred when running aggregate query.", error);
|
|
96
|
+
this.error(error);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/commands/aggregate/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,15 @@ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
|
2
2
|
export declare class App extends AuthenticatedCommand<typeof App> {
|
|
3
3
|
static args: {};
|
|
4
4
|
static description: string;
|
|
5
|
-
static examples:
|
|
5
|
+
static examples: {
|
|
6
|
+
description: string;
|
|
7
|
+
command: string;
|
|
8
|
+
}[];
|
|
6
9
|
static flags: {
|
|
7
10
|
uninstall: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
11
|
applicationId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
12
|
scope: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
13
|
};
|
|
11
|
-
private _logger;
|
|
12
14
|
run(): Promise<void>;
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,GAAI,SAAQ,oBAAoB,CAAC,OAAO,GAAG,CAAC;IAEvD,MAAM,CAAC,IAAI,KACV;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,GAAI,SAAQ,oBAAoB,CAAC,OAAO,GAAG,CAAC;IAEvD,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAYuC;IACzD,MAAM,CAAC,QAAQ;;;QAaZ;IACH,MAAM,CAAC,KAAK;;;;MAMT;IAIK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
|
|
@@ -1,16 +1,37 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
2
|
/* eslint-disable perfectionist/sort-objects */
|
|
3
3
|
import { Flags } from '@oclif/core';
|
|
4
|
-
import { Application,
|
|
4
|
+
import { Application, NowStringUtil } from '@sonisoft/now-sdk-ext-core';
|
|
5
5
|
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
6
6
|
import { isNilOrEmpty } from '../../common/utils.js';
|
|
7
7
|
export class App extends AuthenticatedCommand {
|
|
8
8
|
static args = {};
|
|
9
|
-
static description = ''
|
|
9
|
+
static description = 'Manage ServiceNow applications: uninstall applications from your instance.\n\n' +
|
|
10
|
+
'This command provides programmatic control over ServiceNow applications, allowing you to uninstall ' +
|
|
11
|
+
'applications remotely. This is useful for automated environment cleanup, testing workflows, and ' +
|
|
12
|
+
'application lifecycle management.\n\n' +
|
|
13
|
+
'Features:\n' +
|
|
14
|
+
' • Uninstall applications by sys_id and scope\n' +
|
|
15
|
+
' • Automated application removal in CI/CD pipelines\n' +
|
|
16
|
+
' • Proper cleanup and rollback handling\n' +
|
|
17
|
+
' • Detailed logging and error reporting\n\n' +
|
|
18
|
+
'Requirements:\n' +
|
|
19
|
+
' • User must have admin role\n' +
|
|
20
|
+
' • Application must be in a removable state\n' +
|
|
21
|
+
' • Both application sys_id and scope are required';
|
|
10
22
|
static examples = [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
{
|
|
24
|
+
description: 'Uninstall an application by sys_id and scope',
|
|
25
|
+
command: '<%= config.bin %> <%= command.id %> --uninstall --applicationId a1b2c3d4e5f6 --scope x_my_custom_app --auth dev-instance',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
description: 'Uninstall with enhanced debug logging',
|
|
29
|
+
command: '<%= config.bin %> <%= command.id %> -u -i a1b2c3d4e5f6 -s x_my_custom_app --auth dev-instance --log-level debug',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
description: 'Uninstall using short flags',
|
|
33
|
+
command: '<%= config.bin %> <%= command.id %> -u -i a1b2c3d4e5f6 -s x_my_custom_app -a dev-instance',
|
|
34
|
+
},
|
|
14
35
|
];
|
|
15
36
|
static flags = {
|
|
16
37
|
// from: Flags.string({char: 'f', description: 'Who is saying hello', required: true}),
|
|
@@ -18,7 +39,7 @@ test
|
|
|
18
39
|
applicationId: Flags.string({ char: 'i', description: 'Application sys_id', required: false }),
|
|
19
40
|
scope: Flags.string({ char: 's', description: 'Scope of application.', required: false }),
|
|
20
41
|
};
|
|
21
|
-
_logger = new Logger("AppCommand");
|
|
42
|
+
// private _logger:Logger = new Logger("AppCommand");
|
|
22
43
|
async run() {
|
|
23
44
|
const { args, flags } = await this.parse(App);
|
|
24
45
|
this.log("App command");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,+CAA+C;AAC/C,OAAO,EAAgB,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/app/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,14 @@ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
|
2
2
|
export declare class Install extends AuthenticatedCommand<typeof Install> {
|
|
3
3
|
static args: {};
|
|
4
4
|
static description: string;
|
|
5
|
-
static examples:
|
|
5
|
+
static examples: {
|
|
6
|
+
command: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}[];
|
|
6
9
|
static flags: {
|
|
7
10
|
batch: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
11
|
definitionPath: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
12
|
};
|
|
10
|
-
private _logger;
|
|
11
13
|
run(): Promise<void>;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,qBAAa,OAAQ,SAAQ,oBAAoB,CAAC,OAAO,OAAO,CAAC;IAE/D,MAAM,CAAC,IAAI,KACV;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,qBAAa,OAAQ,SAAQ,oBAAoB,CAAC,OAAO,OAAO,CAAC;IAE/D,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAiB6B;IAC/C,MAAM,CAAC,QAAQ;;;QAaZ;IACH,MAAM,CAAC,KAAK;;;MAWT;IAGK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B3B"}
|
|
@@ -1,21 +1,54 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
2
|
import { Flags } from '@oclif/core';
|
|
3
|
-
import { ApplicationManager,
|
|
3
|
+
import { ApplicationManager, NowStringUtil } from '@sonisoft/now-sdk-ext-core';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
6
6
|
export class Install extends AuthenticatedCommand {
|
|
7
7
|
static args = {};
|
|
8
|
-
static description = 'Install or
|
|
8
|
+
static description = 'Install or upgrade multiple ServiceNow applications from a batch definition file.\n\n' +
|
|
9
|
+
'This command enables automated installation and upgrade of multiple applications using a JSON definition file. ' +
|
|
10
|
+
'Perfect for setting up new environments, deploying application bundles, or managing application dependencies. ' +
|
|
11
|
+
'The batch file can specify multiple applications with their versions, scopes, and installation options.\n\n' +
|
|
12
|
+
'Features:\n' +
|
|
13
|
+
' • Install multiple applications in a single operation\n' +
|
|
14
|
+
' • Upgrade existing applications to new versions\n' +
|
|
15
|
+
' • Control demo data loading per application\n' +
|
|
16
|
+
' • Detailed installation progress and results\n' +
|
|
17
|
+
' • Automatic dependency resolution\n' +
|
|
18
|
+
' • Rollback support on failures\n\n' +
|
|
19
|
+
'Batch Definition Format:\n' +
|
|
20
|
+
' The JSON file should contain an "applications" array with objects defining:\n' +
|
|
21
|
+
' • name: Application name\n' +
|
|
22
|
+
' • scope: Application scope (e.g., x_my_app)\n' +
|
|
23
|
+
' • version: Target version number\n' +
|
|
24
|
+
' • load_demo_data: Whether to load demo data (optional)\n' +
|
|
25
|
+
' • notes: Installation notes (optional)';
|
|
9
26
|
static examples = [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
27
|
+
{
|
|
28
|
+
command: '<%= config.bin %> <%= command.id %> --batch --definitionPath ./apps-to-install.json --auth dev-instance',
|
|
29
|
+
description: 'Install applications from a batch definition file',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
command: '<%= config.bin %> <%= command.id %> -b -d ./batch-apps.json -a dev-instance',
|
|
33
|
+
description: 'Install with short flags',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
command: '<%= config.bin %> <%= command.id %> -b -d ./apps.json -a dev-instance --log-level debug',
|
|
37
|
+
description: 'Install with debug logging to troubleshoot issues',
|
|
38
|
+
},
|
|
13
39
|
];
|
|
14
40
|
static flags = {
|
|
15
|
-
batch: Flags.boolean({
|
|
16
|
-
|
|
41
|
+
batch: Flags.boolean({
|
|
42
|
+
char: 'b',
|
|
43
|
+
description: 'Enable batch installation mode from definition file',
|
|
44
|
+
required: false
|
|
45
|
+
}),
|
|
46
|
+
definitionPath: Flags.string({
|
|
47
|
+
char: 'd',
|
|
48
|
+
description: 'Path to JSON batch definition file containing applications to install',
|
|
49
|
+
required: false
|
|
50
|
+
}),
|
|
17
51
|
};
|
|
18
|
-
_logger = new Logger("AppInstallCommand");
|
|
19
52
|
async run() {
|
|
20
53
|
const { args, flags } = await this.parse(Install);
|
|
21
54
|
this.log("App Install Command Executed.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,EAAgB,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/app/install.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,EAAgB,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAgB,kBAAkB,EAAqC,aAAa,EAAuB,MAAM,4BAA4B,CAAC;AAErJ,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,MAAM,OAAO,OAAQ,SAAQ,oBAAoC;IAE/D,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IACH,MAAM,CAAC,WAAW,GAAG,uFAAuF;QACxG,iHAAiH;QACjH,gHAAgH;QAChH,6GAA6G;QAC7G,aAAa;QACb,2DAA2D;QAC3D,qDAAqD;QACrD,iDAAiD;QACjD,kDAAkD;QAClD,uCAAuC;QACvC,sCAAsC;QACtC,4BAA4B;QAC5B,iFAAiF;QACjF,8BAA8B;QAC9B,iDAAiD;QACjD,sCAAsC;QACtC,4DAA4D;QAC5D,0CAA0C,CAAC;IAC/C,MAAM,CAAC,QAAQ,GAAG;QACd;YACE,OAAO,EAAE,yGAAyG;YAClH,WAAW,EAAE,mDAAmD;SACjE;QACD;YACE,OAAO,EAAE,6EAA6E;YACtF,WAAW,EAAE,0BAA0B;SACxC;QACD;YACE,OAAO,EAAE,yFAAyF;YAClG,WAAW,EAAE,mDAAmD;SACjE;KACF,CAAA;IACH,MAAM,CAAC,KAAK,GAAG;QACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC;YAC3B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,uEAAuE;YACpF,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAGD,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE1C,IAAG,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,EAAC,CAAC;YAClG,IAAG,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAE3B,IAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,EAAC,CAAC;oBACpD,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;oBACrE,OAAO;gBACT,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAwB,CAAC,CAAC,CAAC;gBAC3F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE9B,CAAC;YAAA,OAAM,KAAK,EAAC,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAc,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;YAC7B,CAAC;QAGH,CAAC;IAEH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from '../../common/authenticated-command.js';
|
|
2
|
+
export declare class RepoInstall extends AuthenticatedCommand<typeof RepoInstall> {
|
|
3
|
+
static args: {};
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: {
|
|
6
|
+
command: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}[];
|
|
9
|
+
static flags: {
|
|
10
|
+
'no-wait': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
'poll-interval': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
scope: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
timeout: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
+
version: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=repo-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-install.d.ts","sourceRoot":"","sources":["../../../src/commands/app/repo-install.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,WAAY,SAAQ,oBAAoB,CAAC,OAAO,WAAW,CAAC;IAEvE,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAqBmD;IACrE,MAAM,CAAC,QAAQ;;;QAqBZ;IACH,MAAM,CAAC,KAAK;;;;;;MA4BT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+G3B"}
|