@kevisual/cnb 0.0.71 → 0.0.72

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevisual/cnb",
3
- "version": "0.0.71",
3
+ "version": "0.0.72",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "basename": "/root/cnb",
@@ -77,6 +77,7 @@
77
77
  "./keep-file-live.ts": "./src/workspace/keep-file-live.ts",
78
78
  "./routes": "./dist/routes.js",
79
79
  "./download.ts": "./src/repo/download.ts",
80
+ "./parse-html.ts": "./src/issue/parse-html.ts",
80
81
  "./src/*": "./src/*",
81
82
  "./agent/*": "./agent/*"
82
83
  }
@@ -0,0 +1,531 @@
1
+ export function extractInfo(html: string): Record<string, any> | null {
2
+ const match = html.match(/<script[^>]*id="__NEXT_DATA__"[^>]*>([\s\S]*?)<\/script>/);
3
+ if (!match || !match[1]) {
4
+ return null
5
+ }
6
+
7
+ try {
8
+ const data = JSON.parse(match[1]);
9
+ return data;
10
+ } catch {
11
+ return null
12
+ }
13
+ }
14
+
15
+ export const extractInitialState = (data?: Record<string, any> | null): InitialState | null => {
16
+ if (!data) return null
17
+
18
+ return data?.props?.pageProps.initialState as InitialState
19
+ }
20
+ export const extractState = (html: string): InitialState | null => {
21
+ return extractInitialState(extractInfo(html))
22
+ }
23
+ export type InitialState = {
24
+ global?: any;
25
+ artifact?: any;
26
+ home?: any;
27
+ user?: any;
28
+ slug?: Slug;
29
+ groupTree?: any;
30
+ repoList?: any;
31
+ profile?: any;
32
+ commitList?: any;
33
+ dashboard?: any;
34
+ workspace?: any;
35
+ workspaceDetail?: any;
36
+ group?: any;
37
+ report?: any;
38
+ mission?: any;
39
+ search?: any;
40
+ artifactory?: any;
41
+ [key: string]: any;
42
+ }
43
+
44
+ type Slug = {
45
+ repo: SlugRepo;
46
+ global: SlugGlobal;
47
+ }
48
+
49
+ type SlugRepo = {
50
+ index: RepoIndex;
51
+ branches: RepoBranches;
52
+ tags: RepoTags;
53
+ releases: RepoReleases;
54
+ blob: RepoBlob;
55
+ pulls: RepoPulls;
56
+ settings: RepoSettings;
57
+ compare: RepoCompare;
58
+ stargazers: RepoStargazers;
59
+ global: RepoGlobal;
60
+ issues: RepoIssues;
61
+ issuesList: RepoIssuesList;
62
+ contributor: RepoContributor;
63
+ commits: RepoCommits;
64
+ security: RepoSecurity;
65
+ commit: RepoCommit;
66
+ pipeline: RepoPipeline;
67
+ property: RepoProperty;
68
+ npc: RepoNpc;
69
+ }
70
+
71
+ type RepoIndex = {
72
+ ref: string;
73
+ content: {
74
+ status: string;
75
+ data: {
76
+ type: string;
77
+ initialized: boolean;
78
+ repository: {
79
+ slug: string;
80
+ http_clone_url: string;
81
+ ssh_clone_url: string;
82
+ head_ref: string;
83
+ usage: {
84
+ git_size_in_kib: string;
85
+ lfs_size_in_kib: string;
86
+ }
87
+ };
88
+ branch_count: number;
89
+ tag_count: number;
90
+ is_protected: boolean;
91
+ commit_count: number;
92
+ commit_count_state: string;
93
+ commit_count_exceeded: boolean;
94
+ raw_file_limit_in_byte: string;
95
+ path: string;
96
+ name: string;
97
+ entries: RepoEntry[];
98
+ last_commit: RepoLastCommit;
99
+ read_me: RepoReadMe | null;
100
+ file_list_limit: number;
101
+ file_list_exceeded: boolean;
102
+ has_web_trigger: boolean;
103
+ skill_path: string;
104
+ }
105
+ };
106
+ lfsDataMap: Record<string, unknown>;
107
+ selfDescription: {
108
+ licenseTabInfos: unknown[];
109
+ licenseMaxShoingNumber: number;
110
+ selfDectriptionTabInfos: Record<string, { value: string; path: string; fileNickName: string }>;
111
+ selectedTabInfo: { value: string; path: string; fileNickName: string };
112
+ selfDectriptionContents: Record<string, { type: string; encoding: string; content: string } | null>;
113
+ };
114
+ forkFromInfo: { data: unknown; status: string };
115
+ artifactData: { data: unknown; status: string };
116
+ artifactTotalCount: number;
117
+ releasesInfo: unknown;
118
+ commitDataMap: Record<string, unknown>;
119
+ languageRatios: unknown[];
120
+ licenses: unknown[];
121
+ contributorInfo: unknown;
122
+ lastPushBranch: unknown;
123
+ knowlegdeBaseInfo: unknown;
124
+ __hydrate_flag: boolean;
125
+ }
126
+
127
+ type RepoEntry = {
128
+ sha: string;
129
+ type: 'file' | 'dir' | 'symlink' | 'submodule';
130
+ path: string;
131
+ name: string;
132
+ is_lfs: boolean;
133
+ }
134
+
135
+ type RepoLastCommit = {
136
+ sha: string;
137
+ commit: {
138
+ author: { name: string; email: string; date: string };
139
+ committer: { name: string; email: string; date: string };
140
+ message: string;
141
+ tree: { sha: string };
142
+ comment_count: number;
143
+ verification: {
144
+ verified: boolean;
145
+ reason: string;
146
+ key_id: string;
147
+ has_signature: boolean;
148
+ signer: string;
149
+ signed_by_cnb: boolean;
150
+ verified_at: string;
151
+ }
152
+ };
153
+ author: {
154
+ username: string;
155
+ nickname: string;
156
+ email: string;
157
+ freeze: boolean;
158
+ };
159
+ parents: { sha: string }[];
160
+ push_user_context: unknown;
161
+ }
162
+
163
+ type RepoReadMe = {
164
+ path: string;
165
+ name: string;
166
+ encoding: string;
167
+ content: string;
168
+ file_stat: {
169
+ mime_type: {
170
+ content_type: string;
171
+ externsion: string;
172
+ is_representable_as_text: boolean;
173
+ is_browsable_binary_type: boolean;
174
+ is_text: boolean;
175
+ is_image: boolean;
176
+ is_svg_image: boolean;
177
+ is_pdf: boolean;
178
+ is_video: boolean;
179
+ is_audio: boolean;
180
+ }
181
+ }
182
+ }
183
+
184
+ type RepoBranches = {
185
+ keyWord: string;
186
+ branchesViewState: { data: unknown; status: string };
187
+ pageNumber: number;
188
+ pageSize: number;
189
+ type: string;
190
+ aheadInfos: Record<string, unknown>;
191
+ __hydrate_flag: boolean;
192
+ }
193
+
194
+ type RepoTags = {
195
+ total: number;
196
+ data: unknown;
197
+ status: string;
198
+ __hydrate_flag: boolean;
199
+ }
200
+
201
+ type RepoReleases = {
202
+ detail: { data: unknown; status: string; __hydrate_flag: boolean };
203
+ list: { data: unknown; status: string; __hydrate_flag: boolean };
204
+ }
205
+
206
+ type RepoBlob = {
207
+ path: string;
208
+ ref: unknown;
209
+ refType: unknown;
210
+ contentDataMap: Record<string, unknown>;
211
+ commitDataMap: Record<string, unknown>;
212
+ lfsDataMap: Record<string, unknown>;
213
+ viewMode: string;
214
+ newFileName: unknown;
215
+ directoryVisible: boolean;
216
+ modifiedFile: boolean;
217
+ isProtectedRef: { status: boolean; ref: string };
218
+ blameInfo: { data: unknown; status: string };
219
+ __hydrate_flag: boolean;
220
+ }
221
+
222
+ type RepoPulls = {
223
+ detail: {
224
+ currentPullNumber: unknown;
225
+ data: unknown;
226
+ status: string;
227
+ activities: unknown[];
228
+ actCurrentPage: number;
229
+ actTotalCount: number;
230
+ activityStatus: string;
231
+ isForceMerge: boolean;
232
+ __hydrate_flag: boolean;
233
+ }
234
+ }
235
+
236
+ type RepoSettings = {
237
+ common: { menuValue: string; rootGroupRole: string; __hydrate_flag: boolean };
238
+ branchProtect: { ruleList: { data: unknown; status: string }; strategy: unknown; __hydrate_flag: boolean };
239
+ basic: { repoInfo: unknown; defaultBranch: unknown; pushLimit: unknown; __hydrate_flag: boolean };
240
+ advanced: { transfer: { target: unknown; searchVal: string }; __hydrate_flag: boolean };
241
+ usage: {
242
+ isRepoGitCapacityFull: boolean;
243
+ repo: RepoUsage;
244
+ productsDocker: unknown;
245
+ dockerGCSchedule: unknown;
246
+ dockerModelGCSchedule: unknown;
247
+ productsHelm: unknown;
248
+ productsDockerModel: unknown;
249
+ amount: unknown;
250
+ asset: { used: unknown; list: unknown };
251
+ changeCapacityDialogInfo: {
252
+ isShow: boolean;
253
+ title: string;
254
+ value: string;
255
+ max: string;
256
+ isFileLimit: boolean;
257
+ isControlled: boolean;
258
+ type: string;
259
+ };
260
+ gitGc: unknown;
261
+ gitRealTimeGCInfo: unknown;
262
+ __hydrate_flag: boolean;
263
+ };
264
+ events: { settings: unknown; __hydrate_flag: boolean };
265
+ pullRequest: { settings: unknown; __hydrate_flag: boolean };
266
+ member: {
267
+ viewData: { type: string; memberList: unknown };
268
+ totalInfo: { status: string; data: { inherit: unknown; member: unknown; outter: unknown } };
269
+ curInheritTable: unknown;
270
+ __hydrate_flag: boolean;
271
+ };
272
+ strategy: { dockerSettings: unknown; dockerModelSettings: unknown; __hydrate_flag: boolean };
273
+ }
274
+
275
+ type RepoUsage = {
276
+ git_used_in_kib: string;
277
+ lfs_used_in_kib: string;
278
+ physical_lfs_used_in_kib: string;
279
+ logical_lfs_used_in_kib: string;
280
+ git_quota_in_kib: string;
281
+ git_object_size_limit_in_kib: string;
282
+ lfs_quota_in_kib: string;
283
+ lfs_object_size_limit_in_kib: string;
284
+ max_git_quota_in_kib: string;
285
+ max_git_object_size_limit_in_kib: string;
286
+ max_lfs_quota_in_kib: string;
287
+ max_lfs_object_size_limit_in_kib: string;
288
+ used_in_kib: string;
289
+ limit_in_kib: string;
290
+ lfs_limit_in_kib: string;
291
+ }
292
+
293
+ type RepoCompare = {
294
+ activeBranch: string;
295
+ defaultBranch: string;
296
+ headRepo: string;
297
+ baseRepo: string;
298
+ baseRepos: unknown[];
299
+ baseRef: string;
300
+ headRef: string;
301
+ forkFrom: string;
302
+ comparisonType: string;
303
+ __hydrate_flag: boolean;
304
+ }
305
+
306
+ type RepoStargazers = {
307
+ data: unknown;
308
+ totalMap: unknown;
309
+ pageNumber: number;
310
+ pageSize: number;
311
+ currentTab: string;
312
+ __hydrate_flag: boolean;
313
+ }
314
+
315
+ type RepoGlobal = {
316
+ repoInformation: {
317
+ status: string;
318
+ data: RepoInformation;
319
+ };
320
+ sponsor: { fundingInfo: unknown; topActiveUsers: unknown[]; customUsers: unknown[] };
321
+ isNoAccessToRepoDemo: boolean;
322
+ headRefCnbSettings: { data: unknown; status: string };
323
+ showWiki: boolean;
324
+ __hydrate_flag: boolean;
325
+ }
326
+
327
+ type RepoInformation = {
328
+ id: string;
329
+ name: string;
330
+ freeze: boolean;
331
+ status: number;
332
+ visibility_level: string;
333
+ flags: string;
334
+ created_at: string;
335
+ updated_at: string;
336
+ description: string;
337
+ site: string;
338
+ topics: string;
339
+ license: string;
340
+ display_module: { activity: boolean; contributors: boolean; release: boolean };
341
+ star_count: number;
342
+ fork_count: number;
343
+ mark_count: number;
344
+ npc_created_pull_count: number;
345
+ npc_merged_pull_count: number;
346
+ npc_builded_count: number;
347
+ last_updated_at: string;
348
+ web_url: string;
349
+ path: string;
350
+ tags: unknown;
351
+ open_issue_count: number;
352
+ open_pull_request_count: number;
353
+ languages: { language: string; color: string };
354
+ second_languages: { language: string; color: string };
355
+ last_update_username: string;
356
+ last_update_nickname: string;
357
+ access: string;
358
+ stared: boolean;
359
+ star_time: string;
360
+ pinned: boolean;
361
+ pinned_time: string;
362
+ }
363
+
364
+ type RepoIssues = {
365
+ detail: unknown;
366
+ activities: unknown[];
367
+ actCurrentPage: number;
368
+ actTotalCount: number;
369
+ activityStatus: string;
370
+ property: unknown[];
371
+ subscriberUsers: unknown[];
372
+ __hydrate_flag: boolean;
373
+ }
374
+
375
+ type RepoIssuesList = {
376
+ pinnedList: unknown[];
377
+ __hydrate_flag: boolean;
378
+ }
379
+
380
+ type RepoContributor = {
381
+ trend: { status: string; data: unknown };
382
+ __hydrate_flag: boolean;
383
+ }
384
+
385
+ type RepoCommits = {
386
+ refName: unknown;
387
+ ref: unknown;
388
+ refType: string;
389
+ path: unknown;
390
+ status: string;
391
+ data: Record<string, unknown>;
392
+ page: number;
393
+ pageSize: number;
394
+ hasMore: boolean;
395
+ filters: {
396
+ users: unknown[];
397
+ updatedTimeBegin: unknown;
398
+ updateTimeEnd: unknown;
399
+ };
400
+ __hydrate_flag: boolean;
401
+ }
402
+
403
+ type RepoSecurity = {
404
+ common: { menuValue: string; __hydrate_flag: boolean };
405
+ overView: {
406
+ status: string;
407
+ risk_cnt: {
408
+ code_license_enable: boolean;
409
+ code_issue_enable: boolean;
410
+ code_sensitive_enable: boolean;
411
+ code_vulnerability_enable: boolean;
412
+ code_issue_risk_cnt: number;
413
+ code_sensitive_risk_cnt: number;
414
+ code_license_risk_cnt: number;
415
+ code_vulnerability_risk_cnt: number;
416
+ enable: boolean;
417
+ total: number;
418
+ };
419
+ code_sensitive: {
420
+ enable: boolean;
421
+ open: number;
422
+ ignored: number;
423
+ high_count: number;
424
+ low_count: number;
425
+ medium_count: number;
426
+ high_ignore_count: number;
427
+ low_ignore_count: number;
428
+ medium_ignore_count: number;
429
+ };
430
+ code_vulnerability: {
431
+ critical_vul_ignore_cnt: number;
432
+ critical_vul_open_cnt: number;
433
+ enable: boolean;
434
+ high_vul_ignore_cnt: number;
435
+ high_vul_open_cnt: number;
436
+ ignored: number;
437
+ low_vul_ignore_cnt: number;
438
+ low_vul_open_cnt: number;
439
+ medium_vul_ignore_cnt: number;
440
+ medium_vul_open_cnt: number;
441
+ open: number;
442
+ };
443
+ code_issue: {
444
+ critical_count: number;
445
+ critical_ignore_count: number;
446
+ enable: boolean;
447
+ high_count: number;
448
+ high_ignore_count: number;
449
+ ignored: number;
450
+ low_count: number;
451
+ low_ignore_count: number;
452
+ medium_count: number;
453
+ medium_ignore_count: number;
454
+ open: number;
455
+ };
456
+ code_license: {
457
+ enable: boolean;
458
+ high_risk_cnt: number;
459
+ medium_risk_cnt: number;
460
+ low_risk_cnt: number;
461
+ na_risk_cnt: number;
462
+ };
463
+ slugName: string;
464
+ __hydrate_flag: boolean;
465
+ }
466
+ }
467
+
468
+ type RepoCommit = {
469
+ commitInfo: unknown;
470
+ status: string;
471
+ __hydrate_flag: boolean;
472
+ }
473
+
474
+ type RepoPipeline = {
475
+ logsData: { status: string; data: unknown };
476
+ gitCloneData: { status: string; data: unknown };
477
+ workspaceData: { status: string; data: unknown };
478
+ unitTestBadgeData: { status: string; data: unknown };
479
+ pipelineBadgeData: { status: string; data: unknown };
480
+ __hydrate_flag: boolean;
481
+ }
482
+
483
+ type RepoProperty = {
484
+ visible: { status: string; data: unknown[] };
485
+ invisible: { status: string; data: unknown[]; page: number; pageSize: number; total: number };
486
+ __hydrate_flag: boolean;
487
+ }
488
+
489
+ type RepoNpc = {
490
+ status: string;
491
+ data: unknown[];
492
+ __hydrate_flag: boolean;
493
+ }
494
+
495
+ type SlugGlobal = {
496
+ layout: { slugTab: Record<string, unknown> };
497
+ chargeStausInfo: {
498
+ data: {
499
+ budget_status: number;
500
+ threshold: {
501
+ charge_type_ci: string;
502
+ charge_type_ci_gpu: string;
503
+ charge_type_credit: string;
504
+ charge_type_dev: string;
505
+ charge_type_dev_gpu: string;
506
+ charge_type_git: string;
507
+ charge_type_object: string;
508
+ };
509
+ show_warn_tip: boolean;
510
+ };
511
+ status: string;
512
+ };
513
+ openIssues: { status: string; data: number };
514
+ closedIssues: { status: string; data: number };
515
+ openPulls: { status: string; data: number };
516
+ closedPulls: { status: string; data: number };
517
+ userInfoMap: Record<string, unknown>;
518
+ platformInfoMap: Record<string, unknown>;
519
+ oauth2InfoMap: Record<string, unknown>;
520
+ accessLevelToRootGroup: string;
521
+ deployKeys: {
522
+ configData: unknown;
523
+ tokensData: { data: unknown; status: string };
524
+ page: number;
525
+ pageSize: number;
526
+ total: unknown;
527
+ showDeleteDialog: boolean;
528
+ deleteDialog: unknown;
529
+ };
530
+ __hydrate_flag: boolean;
531
+ }