trm-core 1.0.1 → 2.0.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/actions/install.js +31 -5
- package/dist/actions/publish.js +29 -7
- package/dist/logger/Logger.js +1 -0
- package/dist/rfc/client/RFCClient.d.ts +2 -0
- package/dist/rfc/client/RFCClient.js +34 -5
- package/dist/rfc/components/DDOPTION.d.ts +1 -0
- package/dist/rfc/components/DDOPTION.js +2 -0
- package/dist/rfc/components/DDSIGN.d.ts +1 -0
- package/dist/rfc/components/DDSIGN.js +2 -0
- package/dist/rfc/components/TRPARFLAG.d.ts +1 -0
- package/dist/rfc/components/TRPARFLAG.js +2 -0
- package/dist/rfc/components/index.d.ts +3 -0
- package/dist/rfc/components/index.js +3 -0
- package/dist/rfc/struct/LXE_TT_PACKG_LINE.d.ts +7 -0
- package/dist/rfc/struct/LXE_TT_PACKG_LINE.js +2 -0
- package/dist/rfc/struct/index.d.ts +1 -0
- package/dist/rfc/struct/index.js +1 -0
- package/dist/systemConnector/SystemConnector.d.ts +1 -0
- package/dist/systemConnector/SystemConnector.js +19 -2
- package/dist/transport/Transport.d.ts +7 -0
- package/dist/transport/Transport.js +36 -0
- package/dist/transport/TrmTransportIdentifier.d.ts +2 -1
- package/dist/transport/TrmTransportIdentifier.js +1 -0
- package/package.json +3 -2
package/dist/actions/install.js
CHANGED
|
@@ -62,7 +62,7 @@ function _validateDevclass(input, packagesNamespace) {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
function install(data, inquirer, system, registry, logger) {
|
|
65
|
-
var _a, _b;
|
|
65
|
+
var _a, _b, _c;
|
|
66
66
|
return __awaiter(this, void 0, void 0, function* () {
|
|
67
67
|
const ignoreSapEntries = data.ignoreSapEntries ? true : false;
|
|
68
68
|
const skipDependencies = data.skipDependencies ? true : false;
|
|
@@ -212,7 +212,9 @@ function install(data, inquirer, system, registry, logger) {
|
|
|
212
212
|
}
|
|
213
213
|
const aDevcTransports = aTransports.filter(o => o.type === transport_1.TrmTransportIdentifier.DEVC);
|
|
214
214
|
const aTadirTransports = aTransports.filter(o => o.type === transport_1.TrmTransportIdentifier.TADIR);
|
|
215
|
+
const aLangTransports = aTransports.filter(o => o.type === transport_1.TrmTransportIdentifier.LANG);
|
|
215
216
|
var wbObjects = [];
|
|
217
|
+
var trCopy = [];
|
|
216
218
|
if (aDevcTransports.length > 1) {
|
|
217
219
|
throw new Error(`Unexpected declaration of devclass in package ${packageName}.`);
|
|
218
220
|
}
|
|
@@ -354,9 +356,11 @@ function install(data, inquirer, system, registry, logger) {
|
|
|
354
356
|
const installRoot = installPackageHierarchy.devclass === packageReplacement.installDevclass;
|
|
355
357
|
const originalParentCl = tdevc.find(o => o.devclass === packageReplacement.originalDevclass).parentcl;
|
|
356
358
|
if (originalParentCl) {
|
|
357
|
-
const installParentCl = packageReplacements.find(o => o.originalDevclass === originalParentCl).installDevclass;
|
|
358
|
-
if (
|
|
359
|
-
|
|
359
|
+
const installParentCl = (_c = packageReplacements.find(o => o.originalDevclass === originalParentCl)) === null || _c === void 0 ? void 0 : _c.installDevclass;
|
|
360
|
+
if (installParentCl) {
|
|
361
|
+
if (!installRoot) {
|
|
362
|
+
yield system.setPackageSuperpackage(packageReplacement.installDevclass, installParentCl);
|
|
363
|
+
}
|
|
360
364
|
}
|
|
361
365
|
}
|
|
362
366
|
}
|
|
@@ -380,6 +384,20 @@ function install(data, inquirer, system, registry, logger) {
|
|
|
380
384
|
}
|
|
381
385
|
logger.success(`TADIR import finished.`);
|
|
382
386
|
}
|
|
387
|
+
if (aLangTransports.length > 0) {
|
|
388
|
+
logger.loading(`Importing transports...`);
|
|
389
|
+
for (const langTransport of aLangTransports) {
|
|
390
|
+
trCopy.push(langTransport.trkorr);
|
|
391
|
+
const oTransport = yield transport_1.Transport.upload({
|
|
392
|
+
binary: langTransport.binaries,
|
|
393
|
+
systemConnector: system,
|
|
394
|
+
trTarget: system.getDest()
|
|
395
|
+
}, true, logger);
|
|
396
|
+
yield oTransport.import(false, importTimeout);
|
|
397
|
+
}
|
|
398
|
+
logger.success(`Transports imported.`);
|
|
399
|
+
logger.success(`LANG import finished.`);
|
|
400
|
+
}
|
|
383
401
|
logger.loading(`Finalizing install...`);
|
|
384
402
|
yield system.rfcClient.setPackageIntegrity({
|
|
385
403
|
package_name: manifest.name,
|
|
@@ -406,7 +424,7 @@ function install(data, inquirer, system, registry, logger) {
|
|
|
406
424
|
wbObjectsAdd.push(wbObject);
|
|
407
425
|
}
|
|
408
426
|
}
|
|
409
|
-
if (wbObjectsAdd.length > 0 && !skipWbTransport) {
|
|
427
|
+
if ((wbObjectsAdd.length > 0 || trCopy.length > 0) && !skipWbTransport) {
|
|
410
428
|
var wbTransport = yield system.getPackageWorkbenchTransport(oTrmPackage);
|
|
411
429
|
if (!wbTransport) {
|
|
412
430
|
wbTransport = yield transport_1.Transport.createWb({
|
|
@@ -430,6 +448,14 @@ function install(data, inquirer, system, registry, logger) {
|
|
|
430
448
|
catch (e) {
|
|
431
449
|
}
|
|
432
450
|
}
|
|
451
|
+
for (const trFrom of trCopy) {
|
|
452
|
+
try {
|
|
453
|
+
yield wbTransport.addObjectsFromTransport(trFrom);
|
|
454
|
+
}
|
|
455
|
+
catch (e) {
|
|
456
|
+
debugger;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
433
459
|
logger.success(`Use ${wbTransport.trkorr} for transports.`);
|
|
434
460
|
}
|
|
435
461
|
logger.success(`Install of package "${packageName}" finished.`);
|
package/dist/actions/publish.js
CHANGED
|
@@ -456,6 +456,24 @@ function publish(data, inquirer, system, registry, logger) {
|
|
|
456
456
|
target: trTarget,
|
|
457
457
|
text: `@X1@TRM: ${manifest.name} v${manifest.version}`
|
|
458
458
|
}, system, true, logger);
|
|
459
|
+
var langTr = yield transport_1.Transport.createLang({
|
|
460
|
+
target: trTarget,
|
|
461
|
+
text: `@X1@TRM: ${manifest.name} v${manifest.version} (L)`
|
|
462
|
+
}, system, true, logger);
|
|
463
|
+
var iLanguageObjects = 0;
|
|
464
|
+
try {
|
|
465
|
+
yield langTr.addTranslations(devcOnly.map(o => o.objName));
|
|
466
|
+
iLanguageObjects = (yield langTr.getE071()).length;
|
|
467
|
+
}
|
|
468
|
+
catch (e) {
|
|
469
|
+
logger.info(`Language transport generation error (${e.toString()})`);
|
|
470
|
+
}
|
|
471
|
+
finally {
|
|
472
|
+
if (iLanguageObjects === 0) {
|
|
473
|
+
yield langTr.delete();
|
|
474
|
+
langTr = null;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
459
477
|
try {
|
|
460
478
|
yield tadirToc.addComment(`name=${manifest.name}`);
|
|
461
479
|
yield tadirToc.addComment(`version=${manifest.version}`);
|
|
@@ -475,18 +493,18 @@ function publish(data, inquirer, system, registry, logger) {
|
|
|
475
493
|
}
|
|
476
494
|
const timeout = data.releaseTimeout || 180;
|
|
477
495
|
const tmpFolder = data.tmpFolder;
|
|
478
|
-
var devcTocReleased = false;
|
|
479
496
|
try {
|
|
497
|
+
var aTransports = [tadirToc, devcToc];
|
|
480
498
|
logger.forceStop();
|
|
481
499
|
yield tadirToc.release(false, false, tmpFolder, timeout);
|
|
482
500
|
logger.loading(`Finalizing release...`);
|
|
483
501
|
yield devcToc.release(false, true, tmpFolder, timeout);
|
|
484
|
-
|
|
502
|
+
if (langTr) {
|
|
503
|
+
aTransports.push(langTr);
|
|
504
|
+
yield langTr.release(false, true, tmpFolder, timeout);
|
|
505
|
+
}
|
|
485
506
|
logger.loading(`Creating TRM Artifact...`);
|
|
486
|
-
const trmArtifact = yield TrmArtifact_1.TrmArtifact.create(
|
|
487
|
-
tadirToc,
|
|
488
|
-
devcToc
|
|
489
|
-
], oTrmPackage.manifest, true);
|
|
507
|
+
const trmArtifact = yield TrmArtifact_1.TrmArtifact.create(aTransports, oTrmPackage.manifest, true);
|
|
490
508
|
logger.loading(`Publishing...`);
|
|
491
509
|
yield oTrmPackage.publish({
|
|
492
510
|
artifact: trmArtifact,
|
|
@@ -516,10 +534,14 @@ function publish(data, inquirer, system, registry, logger) {
|
|
|
516
534
|
if (rollBackTransports) {
|
|
517
535
|
yield system.addToIgnoredTrkorr(tadirToc.trkorr);
|
|
518
536
|
logger.error(`Transport ${tadirToc.trkorr} rollback.`);
|
|
519
|
-
if (
|
|
537
|
+
if ((yield devcToc.canBeDeleted())) {
|
|
520
538
|
yield devcToc.delete();
|
|
521
539
|
logger.error(`Transport ${devcToc.trkorr} rollback.`);
|
|
522
540
|
}
|
|
541
|
+
if (langTr && (yield langTr.canBeDeleted())) {
|
|
542
|
+
yield langTr.delete();
|
|
543
|
+
logger.error(`Transport ${langTr.trkorr} rollback.`);
|
|
544
|
+
}
|
|
523
545
|
}
|
|
524
546
|
}
|
|
525
547
|
});
|
package/dist/logger/Logger.js
CHANGED
|
@@ -35,4 +35,6 @@ export declare class RFCClient {
|
|
|
35
35
|
trmServerPing(): Promise<string>;
|
|
36
36
|
renameTransportRequest(trkorr: components.TRKORR, as4text: components.AS4TEXT): Promise<void>;
|
|
37
37
|
setPackageIntegrity(integrity: struct.ZTRM_INTEGRITY): Promise<void>;
|
|
38
|
+
addTranslationToTr(trkorr: components.TRKORR, devclassFilter: struct.LXE_TT_PACKG_LINE[]): Promise<void>;
|
|
39
|
+
trCopy(from: components.TRKORR, to: components.TRKORR, doc?: boolean): Promise<void>;
|
|
38
40
|
}
|
|
@@ -80,11 +80,23 @@ class RFCClient {
|
|
|
80
80
|
const delimiter = '|';
|
|
81
81
|
var aOptions = [];
|
|
82
82
|
if (options) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
const aSplit = options.split('AND');
|
|
84
|
+
if (aSplit.length > 1) {
|
|
85
|
+
aSplit.forEach((s, i) => {
|
|
86
|
+
var sText = s.trim();
|
|
87
|
+
if (i !== 0) {
|
|
88
|
+
sText = `AND ${sText}`;
|
|
89
|
+
}
|
|
90
|
+
aOptions.push({ text: sText });
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
aOptions = aSplit.map(s => {
|
|
95
|
+
return {
|
|
96
|
+
text: s
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
}
|
|
88
100
|
}
|
|
89
101
|
const result = yield this._call("RFC_READ_TABLE", {
|
|
90
102
|
query_table: tableName.toUpperCase(),
|
|
@@ -325,5 +337,22 @@ class RFCClient {
|
|
|
325
337
|
});
|
|
326
338
|
});
|
|
327
339
|
}
|
|
340
|
+
addTranslationToTr(trkorr, devclassFilter) {
|
|
341
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
342
|
+
yield this._call("ZTRM_ADD_LANG_TR", {
|
|
343
|
+
iv_trkorr: trkorr,
|
|
344
|
+
it_devclass: devclassFilter
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
trCopy(from, to, doc = false) {
|
|
349
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
350
|
+
yield this._call("ZTRM_TR_COPY", {
|
|
351
|
+
iv_from: from,
|
|
352
|
+
iv_to: to,
|
|
353
|
+
iv_doc: doc ? 'X' : ' '
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
}
|
|
328
357
|
}
|
|
329
358
|
exports.RFCClient = RFCClient;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type DDOPTION = string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type DDSIGN = string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type TRPARFLAG = string;
|
|
@@ -50,3 +50,6 @@ __exportStar(require("./ARBGB"), exports);
|
|
|
50
50
|
__exportStar(require("./MSGNR"), exports);
|
|
51
51
|
__exportStar(require("./NATXT"), exports);
|
|
52
52
|
__exportStar(require("./ZTRM_PACKAGE_INTEGRITY"), exports);
|
|
53
|
+
__exportStar(require("./DDSIGN"), exports);
|
|
54
|
+
__exportStar(require("./DDOPTION"), exports);
|
|
55
|
+
__exportStar(require("./TRPARFLAG"), exports);
|
package/dist/rfc/struct/index.js
CHANGED
|
@@ -24,6 +24,7 @@ export declare class SystemConnector {
|
|
|
24
24
|
getLogonLanguage(c?: boolean): string;
|
|
25
25
|
getLogonUser(): string;
|
|
26
26
|
connect(skipLog?: boolean): Promise<void>;
|
|
27
|
+
getTransportStatus(trkorr: TRKORR): Promise<string>;
|
|
27
28
|
getPackageWorkbenchTransport(oPackage: TrmPackage): Promise<Transport>;
|
|
28
29
|
getInstalledPackages(skipLog?: boolean, includeSoruces?: boolean): Promise<TrmPackage[]>;
|
|
29
30
|
getDevclass(devclass: DEVCLASS): Promise<TDEVC>;
|
|
@@ -63,14 +63,31 @@ class SystemConnector {
|
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
+
getTransportStatus(trkorr) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
const aTrkorrStatusCheck = (yield this.rfcClient.readTable('E070', [{ fieldName: 'TRKORR' }, { fieldName: 'TRSTATUS' }], `TRKORR EQ '${trkorr}'`));
|
|
69
|
+
if (aTrkorrStatusCheck.length !== 1) {
|
|
70
|
+
throw new Error(`Transport not found.`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return aTrkorrStatusCheck[0].trstatus;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
66
77
|
getPackageWorkbenchTransport(oPackage) {
|
|
67
78
|
return __awaiter(this, void 0, void 0, function* () {
|
|
68
79
|
var aTrkorr = (yield this.rfcClient.readTable('E071', [{ fieldName: 'TRKORR' }], `PGMID EQ '*' AND OBJECT EQ '${transport_1.COMMENT_OBJ}'`)).map(o => o.trkorr);
|
|
69
80
|
aTrkorr = Array.from(new Set(aTrkorr));
|
|
70
81
|
var aSkipTrkorr = [];
|
|
71
82
|
for (const sTrkorr of aTrkorr) {
|
|
72
|
-
|
|
73
|
-
|
|
83
|
+
var canBeReleased = false;
|
|
84
|
+
try {
|
|
85
|
+
canBeReleased = (yield this.getTransportStatus(sTrkorr)) === 'D';
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
canBeReleased = false;
|
|
89
|
+
}
|
|
90
|
+
if (!canBeReleased) {
|
|
74
91
|
aSkipTrkorr.push(sTrkorr);
|
|
75
92
|
}
|
|
76
93
|
}
|
|
@@ -42,6 +42,7 @@ export declare class Transport {
|
|
|
42
42
|
}[]): Documentation[];
|
|
43
43
|
addObjects(objects: E071[], lock: boolean): Promise<void>;
|
|
44
44
|
addComment(comment: TROBJ_NAME): Promise<void>;
|
|
45
|
+
addTranslations(aDevclass: DEVCLASS[]): Promise<void>;
|
|
45
46
|
getLinkedPackage(): Promise<TrmPackage>;
|
|
46
47
|
delete(): Promise<null>;
|
|
47
48
|
release(lock: boolean, skipLog?: boolean, tmpFolder?: string, secondsTimeout?: number): Promise<Transport>;
|
|
@@ -55,6 +56,10 @@ export declare class Transport {
|
|
|
55
56
|
target: TR_TARGET;
|
|
56
57
|
trmIdentifier?: TrmTransportIdentifier;
|
|
57
58
|
}, systemConnector: SystemConnector, skipLog?: boolean, logger?: Logger): Promise<Transport>;
|
|
59
|
+
static createLang(data: {
|
|
60
|
+
text: AS4TEXT;
|
|
61
|
+
target: TR_TARGET;
|
|
62
|
+
}, systemConnector: SystemConnector, skipLog?: boolean, logger?: Logger): Promise<Transport>;
|
|
58
63
|
static createWb(data: {
|
|
59
64
|
text: AS4TEXT;
|
|
60
65
|
target?: TR_TARGET;
|
|
@@ -74,4 +79,6 @@ export declare class Transport {
|
|
|
74
79
|
static getLatest(transports: Transport[]): Promise<Transport>;
|
|
75
80
|
import(skipLog?: boolean, timeout?: number): Promise<void>;
|
|
76
81
|
rename(as4text: string): Promise<void>;
|
|
82
|
+
canBeDeleted(): Promise<boolean>;
|
|
83
|
+
addObjectsFromTransport(from: TRKORR): Promise<void>;
|
|
77
84
|
}
|
|
@@ -39,6 +39,7 @@ exports.Transport = exports.COMMENT_OBJ = void 0;
|
|
|
39
39
|
const logger_1 = require("../logger");
|
|
40
40
|
const commons_1 = require("../commons");
|
|
41
41
|
const node_r3trans_1 = require("node-r3trans");
|
|
42
|
+
const TrmTransportIdentifier_1 = require("./TrmTransportIdentifier");
|
|
42
43
|
const manifest_1 = require("../manifest");
|
|
43
44
|
const promises_1 = require("timers/promises");
|
|
44
45
|
const fs = __importStar(require("fs"));
|
|
@@ -232,6 +233,21 @@ class Transport {
|
|
|
232
233
|
}], false);
|
|
233
234
|
});
|
|
234
235
|
}
|
|
236
|
+
addTranslations(aDevclass) {
|
|
237
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
238
|
+
var aDevclassLangFilter = [];
|
|
239
|
+
aDevclass.forEach(d => {
|
|
240
|
+
if (!aDevclassLangFilter.find(o => o.low === d)) {
|
|
241
|
+
aDevclassLangFilter.push({
|
|
242
|
+
sign: 'I',
|
|
243
|
+
option: 'EQ',
|
|
244
|
+
low: d
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
yield this._systemConnector.rfcClient.addTranslationToTr(this.trkorr, aDevclassLangFilter);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
235
251
|
getLinkedPackage() {
|
|
236
252
|
return __awaiter(this, void 0, void 0, function* () {
|
|
237
253
|
const trmRelevant = yield this.isTrmRelevant();
|
|
@@ -516,6 +532,15 @@ class Transport {
|
|
|
516
532
|
return new Transport(trkorr, systemConnector, data.target, logger).setTrmIdentifier(data.trmIdentifier);
|
|
517
533
|
});
|
|
518
534
|
}
|
|
535
|
+
static createLang(data, systemConnector, skipLog = false, logger) {
|
|
536
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
537
|
+
logger = skipLog ? logger_1.Logger.getDummy() : logger;
|
|
538
|
+
logger.loading(`Creating transport request (LANG)...`);
|
|
539
|
+
const trkorr = yield systemConnector.rfcClient.createWbTransport(data.text, data.target);
|
|
540
|
+
logger.success(`Transport request ${trkorr} generated successfully.`);
|
|
541
|
+
return new Transport(trkorr, systemConnector, data.target, logger).setTrmIdentifier(TrmTransportIdentifier_1.TrmTransportIdentifier.LANG);
|
|
542
|
+
});
|
|
543
|
+
}
|
|
519
544
|
static createWb(data, systemConnector, skipLog = false, logger) {
|
|
520
545
|
return __awaiter(this, void 0, void 0, function* () {
|
|
521
546
|
logger = skipLog ? logger_1.Logger.getDummy() : logger;
|
|
@@ -605,5 +630,16 @@ class Transport {
|
|
|
605
630
|
yield this._systemConnector.rfcClient.renameTransportRequest(this.trkorr, as4text);
|
|
606
631
|
});
|
|
607
632
|
}
|
|
633
|
+
canBeDeleted() {
|
|
634
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
635
|
+
const status = yield this._systemConnector.getTransportStatus(this.trkorr);
|
|
636
|
+
return status === 'D';
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
addObjectsFromTransport(from) {
|
|
640
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
641
|
+
yield this._systemConnector.rfcClient.trCopy(from, this.trkorr);
|
|
642
|
+
});
|
|
643
|
+
}
|
|
608
644
|
}
|
|
609
645
|
exports.Transport = Transport;
|
|
@@ -5,4 +5,5 @@ var TrmTransportIdentifier;
|
|
|
5
5
|
(function (TrmTransportIdentifier) {
|
|
6
6
|
TrmTransportIdentifier["DEVC"] = "DEVC";
|
|
7
7
|
TrmTransportIdentifier["TADIR"] = "TADIR";
|
|
8
|
+
TrmTransportIdentifier["LANG"] = "LANG";
|
|
8
9
|
})(TrmTransportIdentifier || (exports.TrmTransportIdentifier = TrmTransportIdentifier = {}));
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trm-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "TRM (Transport Request Manager) Core",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"/dist"
|
|
8
|
+
"/dist",
|
|
9
|
+
"!dist/test.*"
|
|
9
10
|
],
|
|
10
11
|
"scripts": {
|
|
11
12
|
"build": "tsc"
|