FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
forgecode/benchmarks/command-generator.ts at main · GS-Kevin/forgecode · GitHub
GS-Kevin
/
forgecode
Public
forked from
tailcallhq/forgecode
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
forgecode
/
benchmarks
/
command-generator.ts
Copy path
More file actions
More file actions
Latest commit
History
History
History
98 lines (84 loc) · 2.24 KB
Breadcrumbs
forgecode
/
benchmarks
/
command-generator.ts
Copy path
File metadata and controls
98 lines (84 loc) · 2.24 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import
Handlebars
from
"handlebars"
;
/**
* Loads data from CSV content string (internal helper)
*/
function
loadCsvData
(
csvContent
:
string
)
:
Record
<
string
,
string
>
[
]
{
const
lines
=
csvContent
.
trim
(
)
.
split
(
"\n"
)
;
if
(
lines
.
length
===
0
)
{
return
[
]
;
}
const
firstLine
=
lines
[
0
]
;
if
(
!
firstLine
)
{
return
[
]
;
}
const
headers
=
firstLine
.
split
(
","
)
.
map
(
(
h
)
=>
h
.
trim
(
)
)
;
const
data
:
Record
<
string
,
string
>
[
]
=
[
]
;
for
(
let
i
=
1
;
i
<
lines
.
length
;
i
++
)
{
const
line
=
lines
[
i
]
;
if
(
!
line
||
!
line
.
trim
(
)
)
continue
;
const
values
=
line
.
split
(
","
)
.
map
(
(
v
)
=>
v
.
trim
(
)
)
;
const
row
:
Record
<
string
,
string
>
=
{
}
;
for
(
let
j
=
0
;
j
<
headers
.
length
;
j
++
)
{
const
header
=
headers
[
j
]
;
if
(
header
)
{
row
[
header
]
=
values
[
j
]
||
""
;
}
}
data
.
push
(
row
)
;
}
return
data
;
}
/**
* Creates a cross product of multiple data arrays (internal helper)
*/
function
createCrossProduct
(
sourcesData
:
Record
<
string
,
string
>
[
]
[
]
)
:
Record
<
string
,
string
>
[
]
{
if
(
sourcesData
.
length
===
0
)
{
return
[
]
;
}
return
sourcesData
.
reduce
(
(
acc
,
sourceData
)
=>
{
if
(
acc
.
length
===
0
)
{
return
sourceData
;
}
const
result
:
Record
<
string
,
string
>
[
]
=
[
]
;
for
(
const
accItem
of
acc
)
{
for
(
const
sourceItem
of
sourceData
)
{
result
.
push
(
{
...
accItem
,
...
sourceItem
}
)
;
}
}
return
result
;
}
,
[
]
as
Record
<
string
,
string
>
[
]
)
;
}
/**
* Generates a command from a template and data context
*/
export
function
generateCommand
(
commandTemplate
:
string
,
context
:
Record
<
string
,
string
>
)
:
string
{
const
template
=
Handlebars
.
compile
(
commandTemplate
,
{
strict
:
true
,
}
)
;
return
template
(
context
)
;
}
/**
* Generates all commands from a template and cross product data (internal helper)
*/
function
generateCommands
(
commandTemplate
:
string
,
sourcesData
:
Record
<
string
,
string
>
[
]
[
]
)
:
string
[
]
{
const
crossProduct
=
createCrossProduct
(
sourcesData
)
;
return
crossProduct
.
map
(
(
context
)
=>
generateCommand
(
commandTemplate
,
context
)
)
;
}
/**
* Pure function to get contexts from sources data
*/
export
function
getContextsFromSources
(
sourcesData
:
Record
<
string
,
string
>
[
]
[
]
)
:
Record
<
string
,
string
>
[
]
{
return
createCrossProduct
(
sourcesData
)
;
}
Back
|
FazBrowse Home
|
New Git URL