@topconsultnpm/sdkui-react-beta 6.10.25 → 6.10.26

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.
@@ -1,10 +1,10 @@
1
- import { JobTypes, ObjectClasses, ProcessDescriptor } from "@topconsultnpm/sdk-ts-beta";
1
+ import { JobTypes, ObjectClasses, ProcessDescriptor, UserDescriptor } from "@topconsultnpm/sdk-ts-beta";
2
2
  export declare class PlatformObjectService {
3
3
  private static readonly retrieveAllJobsAsync;
4
- static readonly retrieveAllAsync: (objClass: ObjectClasses, jobType?: JobTypes) => Promise<import("@topconsultnpm/sdk-ts-beta").UserDescriptor[] | import("@topconsultnpm/sdk-ts-beta").BatchUpdaterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").CassettoDoganaleJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").CassettoDoganalePlusJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").CheckSequenceJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").COSCheckerJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtConverterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtDeleterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtNoteJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtPrinterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FEAttacherJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FEDetacherJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FESenderWsJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FEValidatorJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileCheckerJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileExecJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileMoverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").LinkerJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MailArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MailQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MailSenderJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MigrationJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PDFArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PdVArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PdVQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PdVSenderJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PeppolQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PostelQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").ReplicatorJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SAPBarcodeJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SpoolArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").UpdaterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").AreaDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DataListDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DiskDescriptor[] | import("@topconsultnpm/sdk-ts-beta").GroupDescriptor[] | import("@topconsultnpm/sdk-ts-beta").LDAPDescriptor[] | import("@topconsultnpm/sdk-ts-beta").NumeratorDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SignCertDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SignServerDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TreeDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TSADescriptor[] | ProcessDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TaskDescriptor[] | undefined>;
4
+ static readonly retrieveAllAsync: (objClass: ObjectClasses, jobType?: JobTypes) => Promise<UserDescriptor[] | import("@topconsultnpm/sdk-ts-beta").BatchUpdaterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").CassettoDoganaleJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").CassettoDoganalePlusJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").CheckSequenceJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").COSCheckerJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtConverterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtDeleterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtNoteJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DcmtPrinterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FEAttacherJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FEDetacherJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FESenderWsJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FEValidatorJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileCheckerJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileExecJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").FileMoverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").LinkerJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MailArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MailQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MailSenderJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").MigrationJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PDFArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PdVArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PdVQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PdVSenderJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PeppolQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").PostelQueryJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").ReplicatorJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SAPBarcodeJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SpoolArchiverJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").UpdaterJobDescriptor[] | import("@topconsultnpm/sdk-ts-beta").AreaDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DataListDescriptor[] | import("@topconsultnpm/sdk-ts-beta").DiskDescriptor[] | import("@topconsultnpm/sdk-ts-beta").GroupDescriptor[] | import("@topconsultnpm/sdk-ts-beta").LDAPDescriptor[] | import("@topconsultnpm/sdk-ts-beta").NumeratorDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SignCertDescriptor[] | import("@topconsultnpm/sdk-ts-beta").SignServerDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TreeDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TSADescriptor[] | ProcessDescriptor[] | import("@topconsultnpm/sdk-ts-beta").TaskDescriptor[] | undefined>;
5
5
  private static readonly loadCacheForJobAsync;
6
6
  private static readonly retrieveAdminJobAsync;
7
- static readonly retrieveAdminAsync: (objClass: ObjectClasses, jobType: JobTypes, id: number) => Promise<-1 | import("@topconsultnpm/sdk-ts-beta").DataListDescriptor | import("@topconsultnpm/sdk-ts-beta").UserDescriptor | import("@topconsultnpm/sdk-ts-beta").BarcodeArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").BatchUpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganaleJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganalePlusJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CheckSequenceJobDescriptor | import("@topconsultnpm/sdk-ts-beta").COSCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtConverterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtDeleterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtNoteJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtPrinterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEAttacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FECreatorTxtJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEDetacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESenderWsJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESplitterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEValidatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExecJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExportJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileMoverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LexJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LinkerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MigrationJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdDCreatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PDFArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").ReplicatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPAlignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPBarcodeJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataReaderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataWriterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SpoolArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").UpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").AreaDescriptor | import("@topconsultnpm/sdk-ts-beta").BasketTypeDescriptor | import("@topconsultnpm/sdk-ts-beta").DiskDescriptor | import("@topconsultnpm/sdk-ts-beta").GroupDescriptor | import("@topconsultnpm/sdk-ts-beta").LDAPDescriptor | import("@topconsultnpm/sdk-ts-beta").NumeratorDescriptor | import("@topconsultnpm/sdk-ts-beta").SignCertDescriptor | import("@topconsultnpm/sdk-ts-beta").SignServerDescriptor | import("@topconsultnpm/sdk-ts-beta").TreeDescriptor | import("@topconsultnpm/sdk-ts-beta").TSADescriptor | ProcessDescriptor | undefined>;
7
+ static readonly retrieveAdminAsync: (objClass: ObjectClasses, jobType: JobTypes, id: number) => Promise<-1 | import("@topconsultnpm/sdk-ts-beta").DataListDescriptor | UserDescriptor | import("@topconsultnpm/sdk-ts-beta").BarcodeArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").BatchUpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganaleJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CassettoDoganalePlusJobDescriptor | import("@topconsultnpm/sdk-ts-beta").CheckSequenceJobDescriptor | import("@topconsultnpm/sdk-ts-beta").COSCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtConverterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtDeleterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtNoteJobDescriptor | import("@topconsultnpm/sdk-ts-beta").DcmtPrinterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEAttacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FECreatorTxtJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEDetacherJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESenderWsJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FESplitterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FEValidatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileCheckerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExecJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileExportJobDescriptor | import("@topconsultnpm/sdk-ts-beta").FileMoverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LexJobDescriptor | import("@topconsultnpm/sdk-ts-beta").LinkerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MailSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").MigrationJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdDCreatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PDFArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PdVSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PeppolSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelQueryJobDescriptor | import("@topconsultnpm/sdk-ts-beta").PostelSenderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").ReplicatorJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPAlignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPBarcodeJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataReaderJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SAPDataWriterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SignerJobDescriptor | import("@topconsultnpm/sdk-ts-beta").SpoolArchiverJobDescriptor | import("@topconsultnpm/sdk-ts-beta").UpdaterJobDescriptor | import("@topconsultnpm/sdk-ts-beta").AreaDescriptor | import("@topconsultnpm/sdk-ts-beta").BasketTypeDescriptor | import("@topconsultnpm/sdk-ts-beta").DiskDescriptor | import("@topconsultnpm/sdk-ts-beta").GroupDescriptor | import("@topconsultnpm/sdk-ts-beta").LDAPDescriptor | import("@topconsultnpm/sdk-ts-beta").NumeratorDescriptor | import("@topconsultnpm/sdk-ts-beta").SignCertDescriptor | import("@topconsultnpm/sdk-ts-beta").SignServerDescriptor | import("@topconsultnpm/sdk-ts-beta").TreeDescriptor | import("@topconsultnpm/sdk-ts-beta").TSADescriptor | ProcessDescriptor | undefined>;
8
8
  private static readonly updateJobAsync;
9
9
  static readonly updateAsync: (objClass: ObjectClasses, jobType: JobTypes, d: any) => Promise<number | undefined>;
10
10
  private static readonly createJobAsync;
@@ -12,6 +12,7 @@ export declare class PlatformObjectService {
12
12
  static readonly deleteAsync: (objClass: ObjectClasses, id: number) => Promise<number | undefined>;
13
13
  private static readonly getJobName;
14
14
  static readonly getName: (objClass: ObjectClasses, jobType?: JobTypes, isPlural?: boolean) => string;
15
+ static User_IsExpired(d: any): boolean | undefined;
15
16
  static readonly getIcon: (objClass: ObjectClasses, d: any) => import("react/jsx-runtime").JSX.Element;
16
17
  static readonly getTooltip: (objClass: ObjectClasses, d: any) => import("react/jsx-runtime").JSX.Element | null;
17
18
  }
@@ -6,6 +6,13 @@ import { Icon123, IconAccessPoint, IconAddressBook, IconBasket, IconCloud, IconD
6
6
  import { TMColors } from "../utils/theme";
7
7
  import { LocalizeOwnershipLevels } from "../helper/Enum_Localizator";
8
8
  export class PlatformObjectService {
9
+ static User_IsExpired(d) {
10
+ if (d == undefined)
11
+ return false;
12
+ let ud = d;
13
+ const today = new Date();
14
+ return (ud.validFrom && today < ud.validFrom) || (ud.validTo && today > ud.validTo);
15
+ }
9
16
  }
10
17
  _a = PlatformObjectService;
11
18
  PlatformObjectService.retrieveAllJobsAsync = async (jobType) => {
@@ -390,7 +397,7 @@ PlatformObjectService.getIcon = (objClass, d) => {
390
397
  ownershipColor = "red";
391
398
  break;
392
399
  }
393
- return (_jsx("div", { style: { flexDirection: "row", display: "flex", alignItems: "center", justifyContent: "center", overflow: 'visible' }, children: _jsxs(TMTooltip, { content: _a.getTooltip(objClass, d), children: [objClass == ObjectClasses.Area && _jsx(IconCloud, { color: ownershipColor }), objClass == ObjectClasses.BasketType && _jsx(IconBasket, { color: ownershipColor }), objClass == ObjectClasses.Disk && _jsx(IconDisk, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.DataList && d.id && d.id > 26 && _jsx(IconDataList, { color: ownershipColor }), objClass == ObjectClasses.DataList && d.id && d.id <= 26 && _jsx(IconSettings, { color: ownershipColor }), objClass == ObjectClasses.Group && _jsx(IconUserGroup, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.Numerator && _jsx(Icon123, { color: ownershipColor }), objClass == ObjectClasses.SignCert && _jsx(IconSignCert, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.SignServer && _jsx(IconServerService, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.LDAP && _jsx(IconAddressBook, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.Tree && _jsx(IconTree, { color: ownershipColor }), objClass == ObjectClasses.TSA && _jsx(IconAccessPoint, { color: ownershipColor }), objClass == ObjectClasses.User && _jsx(IconUser, { color: ownershipColor }), objClass == ObjectClasses.Job && _jsx(IconSuitcase, { color: ownershipColor }), objClass == ObjectClasses.Process && _jsx(IconProcess, { color: d.state === ProcessStates.Running ? TMColors.primary : d.state === ProcessStates.Ready || d.state === ProcessStates.Started ? TMColors.secondary : d.state === ProcessStates.Freezed ? 'rgb(180,180,180)' : d.state === ProcessStates.Completed ? TMColors.success : TMColors.error })] }) }));
400
+ return (_jsx("div", { style: { flexDirection: "row", display: "flex", alignItems: "center", justifyContent: "center", overflow: 'visible' }, children: _jsxs(TMTooltip, { content: _a.getTooltip(objClass, d), children: [objClass == ObjectClasses.Area && _jsx(IconCloud, { color: ownershipColor }), objClass == ObjectClasses.BasketType && _jsx(IconBasket, { color: ownershipColor }), objClass == ObjectClasses.Disk && _jsx(IconDisk, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.DataList && d.id && d.id > 26 && _jsx(IconDataList, { color: ownershipColor }), objClass == ObjectClasses.DataList && d.id && d.id <= 26 && _jsx(IconSettings, { color: ownershipColor }), objClass == ObjectClasses.Group && _jsx(IconUserGroup, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.Numerator && _jsx(Icon123, { color: ownershipColor }), objClass == ObjectClasses.SignCert && _jsx(IconSignCert, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.SignServer && _jsx(IconServerService, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.LDAP && _jsx(IconAddressBook, { fontSize: 20, color: ownershipColor }), objClass == ObjectClasses.Tree && _jsx(IconTree, { color: ownershipColor }), objClass == ObjectClasses.TSA && _jsx(IconAccessPoint, { color: ownershipColor }), objClass == ObjectClasses.User && _jsx(IconUser, { color: _a.User_IsExpired(d) ? "grey" : ownershipColor }), objClass == ObjectClasses.Job && _jsx(IconSuitcase, { color: ownershipColor }), objClass == ObjectClasses.Process && _jsx(IconProcess, { color: d.state === ProcessStates.Running ? TMColors.primary : d.state === ProcessStates.Ready || d.state === ProcessStates.Started ? TMColors.secondary : d.state === ProcessStates.Freezed ? 'rgb(180,180,180)' : d.state === ProcessStates.Completed ? TMColors.success : TMColors.error })] }) }));
394
401
  };
395
402
  PlatformObjectService.getTooltip = (objClass, d) => {
396
403
  let ownLevel = LocalizeOwnershipLevels(d.ownershipLevel);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topconsultnpm/sdkui-react-beta",
3
- "version": "6.10.25",
3
+ "version": "6.10.26",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",