@elisra-devops/docgen-data-provider 0.4.6
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/.github/sonar-project.properties +5 -0
- package/.github/workflows/ci.yml +21 -0
- package/.github/workflows/release.yml +40 -0
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/enviroment.d.ts +12 -0
- package/package.json +53 -0
- package/src/helpers/helper.ts +117 -0
- package/src/helpers/tfs.ts +92 -0
- package/src/index.ts +36 -0
- package/src/models/tfs-data.ts +137 -0
- package/src/modules/GitDataProvider.ts +446 -0
- package/src/modules/MangementDataProvider.ts +59 -0
- package/src/modules/PipelinesDataProvider.ts +142 -0
- package/src/modules/TestDataProvider.ts +423 -0
- package/src/modules/TicketsDataProvider.ts +435 -0
- package/src/modules/test/gitDataProvider.test.ts +207 -0
- package/src/modules/test/managmentDataProvider.test.ts +34 -0
- package/src/modules/test/pipelineDataProvider.test.ts +80 -0
- package/src/modules/test/testDataProvider.test.ts +140 -0
- package/src/modules/test/ticketsDataProvider.test.ts +138 -0
- package/src/utils/logger.ts +37 -0
- package/tsconfig.json +27 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import DgDataProviderAzureDevOps from "../..";
|
|
2
|
+
|
|
3
|
+
require("dotenv").config();
|
|
4
|
+
jest.setTimeout(60000);
|
|
5
|
+
|
|
6
|
+
const orgUrl = process.env.ORG_URL;
|
|
7
|
+
const token = process.env.PAT;
|
|
8
|
+
const dgDataProviderAzureDevOps = new DgDataProviderAzureDevOps(orgUrl,token);
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
describe("pipeline module - tests", () => {
|
|
12
|
+
test("should return pipeline info", async () => {
|
|
13
|
+
let pipelinesDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider()
|
|
14
|
+
let json = await pipelinesDataProvider.getPipelineFromPipelineId(
|
|
15
|
+
"tests",
|
|
16
|
+
244
|
|
17
|
+
);
|
|
18
|
+
expect(json.id).toBe(244);
|
|
19
|
+
});
|
|
20
|
+
test("should return Release definition", async () => {
|
|
21
|
+
let pipelinesDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider()
|
|
22
|
+
let json = await pipelinesDataProvider.GetReleaseByReleaseId(
|
|
23
|
+
"tests",
|
|
24
|
+
1
|
|
25
|
+
);
|
|
26
|
+
expect(json.id).toBe(1);
|
|
27
|
+
});
|
|
28
|
+
test("should return OK(200) as response ", async () => {
|
|
29
|
+
let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
|
|
30
|
+
let result = await PipelineDataProvider.TriggerBuildById(
|
|
31
|
+
"tests",
|
|
32
|
+
"14" ,
|
|
33
|
+
'{"test":"param1","age":"26","name":"denis" }'
|
|
34
|
+
);
|
|
35
|
+
expect(result.status).toBe(200);
|
|
36
|
+
});
|
|
37
|
+
test("should the path to zip file as response ", async () => {
|
|
38
|
+
let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
|
|
39
|
+
let result = await PipelineDataProvider.GetArtifactByBuildId(
|
|
40
|
+
"tests",
|
|
41
|
+
"245", //buildId
|
|
42
|
+
"_tests" //artifactName
|
|
43
|
+
);
|
|
44
|
+
expect(result).toBeDefined();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("should return pipeline run history ", async () => {
|
|
48
|
+
let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
|
|
49
|
+
let json = await PipelineDataProvider.GetPipelineRunHistory(
|
|
50
|
+
"tests",
|
|
51
|
+
"14"
|
|
52
|
+
);
|
|
53
|
+
expect(json).toBeDefined();
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
test("should return release defenition history ", async () => {
|
|
57
|
+
let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
|
|
58
|
+
let json = await PipelineDataProvider.GetReleaseHistory(
|
|
59
|
+
"tests",
|
|
60
|
+
"1"
|
|
61
|
+
);
|
|
62
|
+
expect(json).toBeDefined();
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
test("should return all pipelines ", async () => {
|
|
66
|
+
let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
|
|
67
|
+
let json = await PipelineDataProvider.GetAllPipelines(
|
|
68
|
+
"tests"
|
|
69
|
+
);
|
|
70
|
+
expect(json).toBeDefined();
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
test("should return all releaseDefenitions ", async () => {
|
|
74
|
+
let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
|
|
75
|
+
let json = await PipelineDataProvider.GetAllReleaseDefenitions(
|
|
76
|
+
"tests"
|
|
77
|
+
);
|
|
78
|
+
expect(json).toBeDefined();
|
|
79
|
+
})
|
|
80
|
+
});
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import DgDataProviderAzureDevOps from "../..";
|
|
2
|
+
|
|
3
|
+
require("dotenv").config();
|
|
4
|
+
jest.setTimeout(600000);
|
|
5
|
+
|
|
6
|
+
const orgUrl = process.env.ORG_URL;
|
|
7
|
+
const token = process.env.PAT;
|
|
8
|
+
const dgDataProviderAzureDevOps = new DgDataProviderAzureDevOps(orgUrl,token);
|
|
9
|
+
|
|
10
|
+
describe("Test module - tests", () => {
|
|
11
|
+
test("should return test plans", async () => {
|
|
12
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
13
|
+
let json: any = await TestDataProvider.GetTestPlans("tests");
|
|
14
|
+
expect(json.count).toBeGreaterThanOrEqual(1);
|
|
15
|
+
});
|
|
16
|
+
test("should return test suites by plan", async () => { //not working yet
|
|
17
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
18
|
+
let testSuites = await TestDataProvider.GetTestSuitesByPlan(
|
|
19
|
+
"tests",
|
|
20
|
+
"540",
|
|
21
|
+
true
|
|
22
|
+
);
|
|
23
|
+
expect(testSuites[0].name).toBe("TestSuite");
|
|
24
|
+
});
|
|
25
|
+
test("should return list of test cases", async () => {
|
|
26
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
27
|
+
let attachList: any = await TestDataProvider.GetTestCasesBySuites(
|
|
28
|
+
"tests",
|
|
29
|
+
"545",
|
|
30
|
+
"546",
|
|
31
|
+
true
|
|
32
|
+
);
|
|
33
|
+
expect(attachList.length > 0).toBeDefined();
|
|
34
|
+
});
|
|
35
|
+
test("should use Helper.findSuitesRecursive twice after restarting static value of Helper.first=True ", async () => {
|
|
36
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
37
|
+
let suitesByPlan = await TestDataProvider.GetTestSuitesByPlan(
|
|
38
|
+
"tests",
|
|
39
|
+
"545",
|
|
40
|
+
true
|
|
41
|
+
);
|
|
42
|
+
expect(suitesByPlan.length > 0).toBeDefined();
|
|
43
|
+
});
|
|
44
|
+
test.skip("should return list of test cases - stress test - big testplan 1400 cases", async () => {
|
|
45
|
+
jest.setTimeout(1000000);
|
|
46
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
47
|
+
let attachList: any = await TestDataProvider.GetTestCasesBySuites(
|
|
48
|
+
"tests",
|
|
49
|
+
"540",
|
|
50
|
+
"549",
|
|
51
|
+
true
|
|
52
|
+
);
|
|
53
|
+
expect(attachList.length > 1000).toBeDefined(); //not enough test cases for stress test
|
|
54
|
+
});
|
|
55
|
+
test("should return test cases by suite", async () => {
|
|
56
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
57
|
+
let json = await TestDataProvider.GetTestCases(
|
|
58
|
+
"tests",
|
|
59
|
+
"540",
|
|
60
|
+
"541"
|
|
61
|
+
);
|
|
62
|
+
expect(json.count).toBeGreaterThan(0);
|
|
63
|
+
});
|
|
64
|
+
test("should return test points by testcase", async () => {
|
|
65
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
66
|
+
let json = await TestDataProvider.GetTestPoint(
|
|
67
|
+
"tests",
|
|
68
|
+
"540",
|
|
69
|
+
"541",
|
|
70
|
+
"542"
|
|
71
|
+
);
|
|
72
|
+
expect(json.count).toBeGreaterThan(0);
|
|
73
|
+
});
|
|
74
|
+
test("should return test runs by testcaseid", async () => {
|
|
75
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
76
|
+
let json = await TestDataProvider.GetTestRunById(
|
|
77
|
+
"tests",
|
|
78
|
+
"1000120"
|
|
79
|
+
);
|
|
80
|
+
expect(json.id).toBe(1000120);
|
|
81
|
+
});
|
|
82
|
+
test("should create run test according test pointId and return OK(200) as response ", async () => {
|
|
83
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
84
|
+
let result: any = await TestDataProvider.CreateTestRun(
|
|
85
|
+
"tests",
|
|
86
|
+
"testrun",
|
|
87
|
+
"540",
|
|
88
|
+
"3"
|
|
89
|
+
);
|
|
90
|
+
expect(result.status).toBe(200);
|
|
91
|
+
});
|
|
92
|
+
test("should Update runId state and return OK(200) as response ", async () => {
|
|
93
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
94
|
+
let result: any = await TestDataProvider.UpdateTestRun(
|
|
95
|
+
"tests",
|
|
96
|
+
"1000124", //runId
|
|
97
|
+
"NeedsInvestigation" //Unspecified ,NotStarted, InProgress, Completed, Waiting, Aborted, NeedsInvestigation (State)
|
|
98
|
+
);
|
|
99
|
+
expect(result.status).toBe(200);
|
|
100
|
+
});
|
|
101
|
+
test("should Update test case state and return OK(200) as response ", async () => {
|
|
102
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
103
|
+
let result: any = await TestDataProvider.UpdateTestCase(
|
|
104
|
+
"tests",
|
|
105
|
+
"1000120",
|
|
106
|
+
2 //0-reset , 1-complite , 2-passed , 3-failed (State)
|
|
107
|
+
);
|
|
108
|
+
expect(result.status).toBe(200);
|
|
109
|
+
});
|
|
110
|
+
test("should Upload attachment for test run and return OK(200) as response ", async () => {
|
|
111
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
112
|
+
let data = "This is test line of data";
|
|
113
|
+
let buff = new Buffer(data);
|
|
114
|
+
let base64data = buff.toString("base64");
|
|
115
|
+
let result: any = await TestDataProvider.UploadTestAttachment(
|
|
116
|
+
"1000120", //runID
|
|
117
|
+
"tests",
|
|
118
|
+
base64data, //stream
|
|
119
|
+
"testAttachment2.json", //fileName
|
|
120
|
+
"Test attachment upload", //comment
|
|
121
|
+
"GeneralAttachment" //attachmentType
|
|
122
|
+
);
|
|
123
|
+
expect(result.status).toBe(200);
|
|
124
|
+
});
|
|
125
|
+
test("should Get all test case data", async () => {
|
|
126
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
127
|
+
let result: any = await TestDataProvider.GetTestSuiteByTestCase(
|
|
128
|
+
"544"
|
|
129
|
+
);
|
|
130
|
+
expect(result).toBeDefined;
|
|
131
|
+
});
|
|
132
|
+
test("should Get test points by test case id", async () => {
|
|
133
|
+
let TestDataProvider = await dgDataProviderAzureDevOps.getTestDataProvider();
|
|
134
|
+
let result: any = await TestDataProvider.GetTestPointByTestCaseId(
|
|
135
|
+
"tests",
|
|
136
|
+
"544" //testCaseId
|
|
137
|
+
);
|
|
138
|
+
expect(result).toBeDefined;
|
|
139
|
+
});
|
|
140
|
+
});
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import DgDataProviderAzureDevOps from "../..";
|
|
2
|
+
|
|
3
|
+
require("dotenv").config();
|
|
4
|
+
jest.setTimeout(60000);
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const orgUrl = process.env.ORG_URL;
|
|
8
|
+
const token = process.env.PAT;
|
|
9
|
+
const dgDataProviderAzureDevOps = new DgDataProviderAzureDevOps(orgUrl,token);
|
|
10
|
+
|
|
11
|
+
const wiql =
|
|
12
|
+
"SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM workitems WHERE [System.TeamProject]=@project";
|
|
13
|
+
|
|
14
|
+
describe("ticket module - tests", () => {
|
|
15
|
+
test("should create a new work item", async () => {
|
|
16
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
17
|
+
let body =
|
|
18
|
+
[{
|
|
19
|
+
op: "add",
|
|
20
|
+
path: "/fields/System.IterationPath",
|
|
21
|
+
value: "tests"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
op: "add",
|
|
25
|
+
path: "/fields/System.State",
|
|
26
|
+
value: "New"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
op: "add",
|
|
30
|
+
path: "/fields/System.AreaPath",
|
|
31
|
+
value: "tests"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
op: "add",
|
|
35
|
+
path: "/fields/System.Title",
|
|
36
|
+
value: "new-test-title2"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
op: "add",
|
|
40
|
+
path: "/fields/System.Tags",
|
|
41
|
+
value: "tag-test"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
op: "add",
|
|
45
|
+
path: "/fields/System.AssignedTo",
|
|
46
|
+
value: "denispankove"
|
|
47
|
+
}];
|
|
48
|
+
let res = await TicketDataProvider.CreateNewWorkItem(
|
|
49
|
+
"tests",
|
|
50
|
+
body,
|
|
51
|
+
"Epic",
|
|
52
|
+
true
|
|
53
|
+
);
|
|
54
|
+
expect(typeof res.id).toBe("number");
|
|
55
|
+
body[3].value = "edited";
|
|
56
|
+
let updatedWI = await TicketDataProvider.UpdateWorkItem(
|
|
57
|
+
"tests",
|
|
58
|
+
body,
|
|
59
|
+
res.id,
|
|
60
|
+
true
|
|
61
|
+
);
|
|
62
|
+
expect(updatedWI.fields["System.Title"]).toBe("edited");
|
|
63
|
+
});
|
|
64
|
+
test("should return shared queires", async () => {
|
|
65
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
66
|
+
let json = await TicketDataProvider.GetSharedQueries(
|
|
67
|
+
"tests",
|
|
68
|
+
"",
|
|
69
|
+
);
|
|
70
|
+
expect(json.length).toBeGreaterThan(1);
|
|
71
|
+
});
|
|
72
|
+
test("should return query results", async () => {
|
|
73
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
74
|
+
let json = await TicketDataProvider.GetSharedQueries(
|
|
75
|
+
"tests",
|
|
76
|
+
""
|
|
77
|
+
);
|
|
78
|
+
let query = json.find((o: { wiql: undefined }) => o.wiql != undefined);
|
|
79
|
+
let result = await TicketDataProvider.GetQueryResultsByWiqlHref(
|
|
80
|
+
query.wiql.href,
|
|
81
|
+
"tests"
|
|
82
|
+
);
|
|
83
|
+
expect(result.length).toBeGreaterThanOrEqual(1);
|
|
84
|
+
});
|
|
85
|
+
test("should return query results by query id", async () => {
|
|
86
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
87
|
+
let result = await TicketDataProvider.GetQueryResultById(
|
|
88
|
+
"08e044be-b9bc-4962-99c9-ffebb47ff95a",
|
|
89
|
+
"tests"
|
|
90
|
+
);
|
|
91
|
+
expect(result.length).toBeGreaterThanOrEqual(1);
|
|
92
|
+
});
|
|
93
|
+
test("should return wi base on wiql string", async () => {
|
|
94
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
95
|
+
let result = await TicketDataProvider.GetQueryResultsByWiqlString(
|
|
96
|
+
wiql,
|
|
97
|
+
"tests"
|
|
98
|
+
);
|
|
99
|
+
expect(result.workItems.length).toBeGreaterThanOrEqual(1);
|
|
100
|
+
});
|
|
101
|
+
test("should return populated work items array", async () => {
|
|
102
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
103
|
+
let result = await TicketDataProvider.GetQueryResultsByWiqlString(
|
|
104
|
+
wiql,
|
|
105
|
+
"tests"
|
|
106
|
+
);
|
|
107
|
+
let wiarray = result.workItems.map((o: any) => o.id);
|
|
108
|
+
let res = await TicketDataProvider.PopulateWorkItemsByIds(
|
|
109
|
+
wiarray,
|
|
110
|
+
"tests"
|
|
111
|
+
);
|
|
112
|
+
expect(res.length).toBeGreaterThanOrEqual(1);
|
|
113
|
+
});
|
|
114
|
+
test("should return list of attachments", async () => {
|
|
115
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
116
|
+
let attachList = await TicketDataProvider.GetWorkitemAttachments(
|
|
117
|
+
"tests",
|
|
118
|
+
"538"
|
|
119
|
+
);
|
|
120
|
+
expect(attachList.length > 0).toBeDefined();
|
|
121
|
+
});
|
|
122
|
+
test("should return Json data of the attachment", async () => {
|
|
123
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
124
|
+
let attachedData = await TicketDataProvider.GetWorkitemAttachmentsJSONData(
|
|
125
|
+
"tests",
|
|
126
|
+
"14933c55-6d84-499c-88db-55202f16dd46"
|
|
127
|
+
);
|
|
128
|
+
expect(JSON.stringify(attachedData).length > 0).toBeDefined();
|
|
129
|
+
});
|
|
130
|
+
test("should return list of id & link object", async () => {
|
|
131
|
+
let TicketDataProvider = await dgDataProviderAzureDevOps.getTicketsDataProvider();
|
|
132
|
+
let attachList = await TicketDataProvider.GetLinksByIds(
|
|
133
|
+
"tests",
|
|
134
|
+
[535]
|
|
135
|
+
);
|
|
136
|
+
expect(attachList.length).toBeGreaterThan(0);
|
|
137
|
+
});
|
|
138
|
+
}); //describe
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import * as winston from "winston";
|
|
3
|
+
import BrowserConsole from "winston-transport-browserconsole";
|
|
4
|
+
let logger: winston.Logger;
|
|
5
|
+
|
|
6
|
+
const logFormat = winston.format.printf(
|
|
7
|
+
(info) => `${info.level} - ${info.message}`
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
// if (typeof window === "undefined") {
|
|
11
|
+
// let logsPath = process.env.logs_path || "./logs/";
|
|
12
|
+
|
|
13
|
+
// logger = winston.createLogger({
|
|
14
|
+
// format: winston.format.timestamp(),
|
|
15
|
+
// level: "silly",
|
|
16
|
+
// transports: [
|
|
17
|
+
// new winston.transports.File({
|
|
18
|
+
// filename: `${logsPath}azure-rest-api-errors.log`,
|
|
19
|
+
// level: "error",
|
|
20
|
+
// format: logFormat,
|
|
21
|
+
// }),
|
|
22
|
+
// new winston.transports.File({
|
|
23
|
+
// filename: `${logsPath}azure-rest-api-all.log`,
|
|
24
|
+
// format: logFormat,
|
|
25
|
+
// }),
|
|
26
|
+
// new winston.transports.Console({ format: logFormat, level: "debug" }),
|
|
27
|
+
// ],
|
|
28
|
+
// });
|
|
29
|
+
// } else {
|
|
30
|
+
logger = winston.createLogger({
|
|
31
|
+
format: winston.format.timestamp(),
|
|
32
|
+
level: "silly",
|
|
33
|
+
transports: [new BrowserConsole({ format: logFormat, level: "debug" })],
|
|
34
|
+
});
|
|
35
|
+
// }
|
|
36
|
+
|
|
37
|
+
export default logger;
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2015",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"baseUrl": "./src",
|
|
7
|
+
"allowJs": true,
|
|
8
|
+
"checkJs": true,
|
|
9
|
+
"outDir": "./bin",
|
|
10
|
+
"declaration": true,
|
|
11
|
+
"sourceMap": true,
|
|
12
|
+
"strict": true,
|
|
13
|
+
"lib": ["ES2017", "DOM"],
|
|
14
|
+
"noImplicitAny": true,
|
|
15
|
+
"strictNullChecks": true,
|
|
16
|
+
"strictPropertyInitialization": false
|
|
17
|
+
},
|
|
18
|
+
"include": [
|
|
19
|
+
"**/*.ts"
|
|
20
|
+
// "test/test.ts",
|
|
21
|
+
// "test/sample.ts",
|
|
22
|
+
// "models/tfs-data.ts",
|
|
23
|
+
// "src/index.ts",
|
|
24
|
+
// "helpers/tfs.ts",
|
|
25
|
+
// "helpers/helper.ts"
|
|
26
|
+
]
|
|
27
|
+
}
|