From d105cb8aa5483ac895fcac58662e9296ce8b3fbf Mon Sep 17 00:00:00 2001 From: Pawel Siemienik Date: Fri, 27 Mar 2020 00:24:29 +0100 Subject: [PATCH] #3 tests (#6 and examples) for `ContinueCell`, `SumCell`, `DeleteCell`, `AverageCell` #7 Update documentation --- README.md | 14 ++--- tests/integration/Renderer.test.ts | 20 +++---- .../expected.xlsx | Bin 0 -> 10153 bytes .../template.xlsx | Bin 0 -> 10705 bytes .../viewModel.json | 52 ++++++++++++++++++ .../Renderer007-ForEach-Sum/expected.xlsx | Bin 0 -> 10086 bytes .../Renderer007-ForEach-Sum/template.xlsx | Bin 0 -> 12850 bytes .../Renderer007-ForEach-Sum/viewModel.json | 52 ++++++++++++++++++ .../data/Renderer008-Delete/expected.xlsx | Bin 0 -> 6891 bytes .../data/Renderer008-Delete/template.xlsx | Bin 0 -> 9951 bytes .../data/Renderer008-Delete/viewModel.json | 3 + .../Renderer009-ForEach-Average/expected.xlsx | Bin 0 -> 10298 bytes .../Renderer009-ForEach-Average/template.xlsx | Bin 0 -> 12965 bytes .../viewModel.json | 52 ++++++++++++++++++ 14 files changed, 175 insertions(+), 18 deletions(-) create mode 100644 tests/integration/data/Renderer006-ForEach-Continue-stripped-table/expected.xlsx create mode 100644 tests/integration/data/Renderer006-ForEach-Continue-stripped-table/template.xlsx create mode 100644 tests/integration/data/Renderer006-ForEach-Continue-stripped-table/viewModel.json create mode 100644 tests/integration/data/Renderer007-ForEach-Sum/expected.xlsx create mode 100644 tests/integration/data/Renderer007-ForEach-Sum/template.xlsx create mode 100644 tests/integration/data/Renderer007-ForEach-Sum/viewModel.json create mode 100644 tests/integration/data/Renderer008-Delete/expected.xlsx create mode 100644 tests/integration/data/Renderer008-Delete/template.xlsx create mode 100644 tests/integration/data/Renderer008-Delete/viewModel.json create mode 100644 tests/integration/data/Renderer009-ForEach-Average/expected.xlsx create mode 100644 tests/integration/data/Renderer009-ForEach-Average/template.xlsx create mode 100644 tests/integration/data/Renderer009-ForEach-Average/viewModel.json diff --git a/README.md b/README.md index b3e6233..c19071c 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,6 @@ It consumes template which is common Excel file, then add yours data (called Vie npm i xlsx-renderer --save ``` -2. TODO add some example here (https://github.com/Siemienik/xlsx-renderer/issues/6) - ## Sample code: ```javascript @@ -52,12 +50,12 @@ for more example I invite to tests data: [click here and check `Renderer` folder | Worksheet
Navigation
Loop | [FinishCell](./src/cell/FinishCell.ts) | 7 | `#! FINISH conditionPath` | Finish rendering for current worksheet and:
1) go to next worksheet if `conditionPath===true`
2) repeat this template worksheet again (`conditionPath === false`) - looping through worksheets
3) finished whole rendering when this worksheet is the last one. | **Examples:**
`#! FINISHED ` or `#! FINISHED itemFromLoop.__iterated` | | Worksheet | [WsNameCell](./src/cell/WsNameCell.ts) | 13 | `#! WS_NAME pathToVariable` | Set worksheet's name. | **Examples:**
`#! WS_NAME worksheetName`
`#! WS_NAME item.title`
`#! WS_NAME translatedNames.0` | | Loop | **TODO: describe it!** [DumpColsCell](./src/cell/DumpColsCell.ts) | | | | | -| Loop | **TODO: describe it! test done: simple; tests todo: nested, with formula, stripped, through worksheets,** [ForEachCell](./src/cell/ForEachCell.ts) | | | | | -| Loop | **TODO: describe it!** [ContinueCell](./src/cell/ContinueCell.ts) | | | | | -| Loop | **TODO: describe it!** [EndLoopCell](./src/cell/EndLoopCell.ts) | | | | | -| Aggregation | **TODO: describe it!** [AverageCell](./src/cell/AverageCell.ts) | | | | | -| Aggregation| **TODO: describe it!** [SumCell](./src/cell/SumCell.ts) | | | | | -| View Model | **TODO: test - nested loop** [DeleteCell](./src/cell/DeleteCell.ts) | 14 | `#! DELETE pathToVariable` | Delete variable, useful for nested loops.| | +| Loop | **TODO: tests done: simple, stripped; tests todo: nested, with formula, special fields, through worksheets,** [ForEachCell](./src/cell/ForEachCell.ts) | 6 | #! FOR_EACH item items | Begin the loop named `item`, set the first element of `items` into `item` and go to the beginning of next line.| Connected to: `ContinueCell`, `EndLoopCell`, `DeleteCell`, `FinishedCell`, `SumCell`, `AverageCell`. | +| Loop | [ContinueCell](./src/cell/ContinueCell.ts) | 9 | `#! CONTINUE item` | Iterate to next element of loop named `item` (check `ForEachCell` for more information) and navigate to the beginning of new line. | | +| Loop | [EndLoopCell](./src/cell/EndLoopCell.ts) | 8 | `#! END_LOOP item` | Mark cell when the loop `item` finished. | | +| Aggregation| [SumCell](./src/cell/SumCell.ts) | 11 | `#! SUM item` | Write sum formulae for current column and the `item`'s rows. | [Example](./tests/integration/data/Renderer007-ForEach-Sum/) | +| Aggregation | [AverageCell](./src/cell/AverageCell.ts) | 12 | `#! AVERAGE item` | Write average formulae for current column and the `item`'s rows. | [Example](./tests/integration/data/Renderer009-ForEach-Average/) | +| View Model | **TODO: test - nested loop** [DeleteCell](./src/cell/DeleteCell.ts) | 14 | `#! DELETE pathToVariable` | Delete variable, useful for nested loops.| [Example](./tests/integration/data/Renderer009-ForEach-Average/) | ## Commands [PREVIOUS VERSION]: diff --git a/tests/integration/Renderer.test.ts b/tests/integration/Renderer.test.ts index 739e568..45ebbd5 100644 --- a/tests/integration/Renderer.test.ts +++ b/tests/integration/Renderer.test.ts @@ -5,13 +5,13 @@ import * as path from "path"; import {Workbook} from "exceljs"; import * as chai from 'chai' -function isDir(path: Dirent | string): boolean { - if (typeof path ==="object") return path.isDirectory(); +function isDir(dirPath: Dirent | string): boolean { + if (typeof dirPath ==="object") { return dirPath.isDirectory(); } try { - return fs.lstatSync(path).isDirectory(); + return fs.lstatSync(dirPath).isDirectory(); } catch (e) { - return false;// lstatSync throws an error if path doesn't exist + return false;// lstatSync throws an error if dirPath doesn't exist } } @@ -45,17 +45,17 @@ function assertCells(expected: Workbook, result: Workbook, factor: number = 10) } } -describe('INTEGRATION:: Test xlsx renderer ', function () { +describe('INTEGRATION:: Test xlsx renderer ', () => { - describe('Checking if assertCells works ok.', function () { - it('Same - should pass ok', async function () { + describe('Checking if assertCells works ok.', () => { + it('Same - should pass ok', async () => { const expected = await new Workbook().xlsx.readFile(path.join(__dirname, 'data', 'assertCells', 'main.xlsx')); const correct = await new Workbook().xlsx.readFile(path.join(__dirname, 'data', 'assertCells', 'correct.xlsx')); assertCells(expected, correct, 20); }); - it('Different - attempt to broke assertions', async function () { + it('Different - attempt to broke assertions', async () => { const expected = await new Workbook().xlsx.readFile(path.join(__dirname, 'data', 'assertCells', 'main.xlsx')); const failedWorksheetAmount = await new Workbook().xlsx.readFile(path.join(__dirname, 'data', 'assertCells', 'f-ws-amount.xlsx')); const failedWorksheetNames = await new Workbook().xlsx.readFile(path.join(__dirname, 'data', 'assertCells', 'f-ws-names.xlsx')); @@ -76,7 +76,7 @@ describe('INTEGRATION:: Test xlsx renderer ', function () { chai.expect(() => assertCells(expected, failedTable, 20)).throw('expected { Object (font, border, ...) } to deeply equal { Object (font, border, ...) }'); }); }); - describe('Load examples, render and compare with expected result', function () { + describe('Load examples, render and compare with expected result', () => { const dataPath = path.normalize(path.join(__dirname, 'data/')); const sets = fs.readdirSync(path.normalize(dataPath), {withFileTypes: true}) .filter(isDir) @@ -85,7 +85,7 @@ describe('INTEGRATION:: Test xlsx renderer ', function () { const renderer = new Renderer(); sets.forEach(s => { - it(`Test for ${s.name}`, async function () { + it(`Test for ${s.name}`, async () => { const result = await renderer.renderFromFile( path.join(dataPath, s.name, "template.xlsx"), require(path.join(dataPath, s.name, 'viewModel.json')) diff --git a/tests/integration/data/Renderer006-ForEach-Continue-stripped-table/expected.xlsx b/tests/integration/data/Renderer006-ForEach-Continue-stripped-table/expected.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..506f8e1020b4e80909d897e60183e3d66ef23f89 GIT binary patch literal 10153 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 Hf8PBcVm-%O literal 0 HcmV?d00001 diff --git a/tests/integration/data/Renderer006-ForEach-Continue-stripped-table/template.xlsx b/tests/integration/data/Renderer006-ForEach-Continue-stripped-table/template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..64d85248af420126890174bd1b8a365ae0e640fe GIT binary patch literal 10705 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 literal 0 HcmV?d00001 diff --git a/tests/integration/data/Renderer006-ForEach-Continue-stripped-table/viewModel.json b/tests/integration/data/Renderer006-ForEach-Continue-stripped-table/viewModel.json new file mode 100644 index 0000000..0316180 --- /dev/null +++ b/tests/integration/data/Renderer006-ForEach-Continue-stripped-table/viewModel.json @@ -0,0 +1,52 @@ +{ + "projects": [ + { + "name": "ExcelJS", + "role": "maintainer", + "platform": "github", + "link": "https://github.com/exceljs/exceljs", + "stars": 5300, + "forks": 682 + }, + { + "name": "xlsx-import", + "role": "owner", + "platform": "github", + "link": "https://github.com/siemienik/xlsx-import", + "stars": 2, + "forks": 0 + }, + { + "name": "xlsx-import", + "role": "owner", + "platform": "npm", + "link": "https://www.npmjs.com/package/xlsx-import", + "stars": "n.o.", + "forks": "n.o." + }, + { + "name": "xlsx-renderer", + "role": "owner", + "platform": "github", + "link": "https://github.com/siemienik/xlsx-renderer", + "stars": 2, + "forks": 0 + }, + { + "name": "xlsx-renderer", + "role": "owner", + "platform": "npm", + "link": "https://www.npmjs.com/package/xlsx-renderer", + "stars": "n.o.", + "forks": "n.o." + }, + { + "name": "TS Package Structure", + "role": "owner", + "platform": "github", + "link": "https://github.com/Siemienik/ts-package-structure", + "stars": 3, + "forks": 0 + } + ] +} \ No newline at end of file diff --git a/tests/integration/data/Renderer007-ForEach-Sum/expected.xlsx b/tests/integration/data/Renderer007-ForEach-Sum/expected.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6ffdaa4ff657e42f7875738263a3b7f4c26a3350 GIT binary patch literal 10086 zcmeHtWmpti7cSi~l(c~K5R!rpE!`#EA?461Al=<1-3`(W3M!3sNF&|d+)+M{=XlQf zzI*@Q{ex#7X0Moc?Y-W;*V^(@uy80)P*6xvpz_!9n|2>Gw4kA&oZ+FMa3KHHd~RiF zZ)|C=tL$QJY^Tla41U$6+->=u1<-QF@JLs|U_t%`p4W4;2qwi1#QFnYHSXGPgtcvZ zRPxF%7=_4fg75}sc!Eq=G$x*?3kff4Grv|>rCLBK4@>#BWN{hK7X&Bqw6w%2G6X$? z0G$kBLs(UNBu1@fg8g6&*gGuLaLVkKOnSooj8^`Rb6_7>jMdU?IJCLlx#0mZ*^=izmQwOO?aF#7=}+N3tOhL)u5#=*H`ZEf z_COV#Vs0TuoZ8Y&%=XA9>AWL-l|E6I75CIIu)5N-?)JKL{pp&d$WS`&h4&m!yY3E- zs)E4mRHGWK)b3oDA{L~8qbWRiUItQT8P)(}f zr_hpcnz;HqF2U zw=!YqKcvCnis7e476v5x-{t#jPj%%EnOiT(lpk=Q-gWDLBmAqBE zRw<~GwrpA^*D-pQ-N&z#NFbJKaH3q70vgME;lLQ7MyG9eVitC|gs&ym?*I;2q+TOs z;QbSHHRJQZqLJzA3&T5BHuRq1&BO=w-WErAibo@>5o7E$5yxm0?A(GP6RSy;ug%ms zKp)t0QMEn<@2w=p(l1NdzB854dyOk=tPeedQNkt?M^6~P!b`$EsDOa;R$EeyRYFKF ziY<+gH#^z!mGSArMmFk*giAyJ-ee`7446t)L31MGTAsH+>EQtH-ZwVQ99#8W2Ew{o zp?bk~wF~y(EW`dvJk7UeRnH!kWfV3F>a{-M2le_aCy&3RZohkUE*)o*U3dojF`|FT zS}Ubl&Wa%6Ono|MZF2KcGrJ;EMb-ja6bDo-`smHbT@tY zq6OW3GcO4uCEf$3xsX_6vXWlUh+5pO4%&?!!&9#RAG8qsN>ApBQN-~!MsDsMJU z;whWq#Q3xH>MMafVzbpwhPH>;_q}i7{D$V_D2-*b(z(;!(?GS^2xJFc97iEtlodCVxY)KA_=Zh?P?NO%WSO6g(eBsCi}9#6_*_%U z-m)5LUl=Ywm~8n*;|UEKp$0BLTd_?0-T|8v`FPs`p0@GG{gBU;FVen|7G0c1Q!mv~ z+H#`^kuK0fvB2-+d4k}Pa6P%;k?=hE;RA6!xfL{ua-Q*av?F+;hjmuxH=C?0zA}_2^0@pQE<%&`IH> z3C#(#0a|)|aLX1q@5E#zKV2e+V~se3Lw>H_^rf%S7QP?r%IiwXOADBPLxR=QdL-Sd z-GfM1j)0GHhO>$`f#hhXe{u(&yvF?ZOoscn?DS70VL%MjAc35hHXu2T@?Ru=Wwjq{ z(G@!=3&RQs*yHQUJDY_8vikdlBwO!iokP`tnl#tj`uchfPoDrqv86p>-zH1Ul+Rxe z_Zf|YQrw}Uky~*;7?88=KU4n5mFuj@^UdiIrAn*f6KA?E1o6H+)foJW;1N=DnH)wz zp13UI@H53|%MN;=5L~+Brl+h8urf+vBhFkP9Koluvki@PR{!Nu5iWPR|0B&;k4WBQ zIDk2L;AWrhH?JX2(O_#Vt0EUwK;M2;TzcX^v)eM%A+gRmNe!OZnOc*l4*Qe_-SSRo z_lz`kJ^_szcCN(8s&FtY1p0z|Yl~gId}8apSY6KJgB=rY^{dq-eadqbz&`ihOz$W6 ztD%&?Vc=Vq9J7A zK3|^UJnbF`ZR0d0YwRYG2TYONF>*>LWPCLSWk5Y;cX5e_4N#{GyD(dG_HzO5IoI`kLS@OB-4Pz9Y3WP&)OX*^LymMQvOdH{9*Co zdlnJa@=?a6qXB9!L-XY#3Nm>$<8+^^8n0}Ox_!18vkn$hesl^H2N(COodpoZY*((l z(`_d2b+xP{_@YWjo4DlN&#j%Xu4cEHgJGh#<(LlcRhCmHmLzDcmUk; zdaB08udtT$9c|ilr@ym>DyGYL-dY2MEs85*RR*A?66;PX*=}w8Ez}NMK1sjd=Xh!Q-CQExMc^D2(GV95wbXr=Z}s-gL?bNU)9mFSj97)G2y4ny?@15tmhkWf|O$}ZD{4fN0#)wgq3F%EO zgit_;t)MitkSFR_uFL%{+`vXE3R_|LP8Or@gc5%hGjZ`Wby1ecIpt}z?W7C5x1XKm z(H6M{GBRR%nB}D8a}EN>#>Fa*PDz42wjO-mD%Y-s{b95d=mg`$QCCDbiL9QHQ3>H9 z@@uKim!U(z>bSt#6IiNd-)*$Wb?ifzw-!9)%)o_tMQGhcDUO|1>7E$EtFmJHy;Cn~ zt}l{xaWewQk>*98kmN!R)cXgI`n-KK;Skx(9CCPDHoSmZGhg9~%$a7vb%aIR)9u^R z1lqOqz3nA@%_8pH)Szu+1_H1=mwx%}L?W2mvRDTeRyh4EMA?IN^9$27<#U;nsEE90 zWHJtXjaf%Dp>r-u@rCN{ZXuV>l8$a7Ys(DJ$lB&zV1@UZlY!R#(=nRWw9CmbJD%#a z=4&VO=SD?G-FT^7`o{w)@8DjZY@lyWn3ccc&K%JhuolkOR`sXUVAT?~j3_t-!#XSN zkuAECnwe=BICavAkLy)L5YCT;E z2~g~hGM-UK%WRj)Y^RI0oN|2dobE19{`ULl*R2nG6m;Yw%F(H=Wsij8OkBJyFm2ex zuFXYv&%EUkA=lMJs7#oB8BcL&I2wTxC?Onj1*oO5Q3YzwDd^jzDA=OH7w?5e%X4F^ z9;Xpnc0%X{i~Y8LT~+MOpr7#9wO7UMi6^LHhkOE#<|Q=CUmgw-9;Ca5_QhI2@vHdpea85hKBsyrS8i>qwO6N;L0mt%TEh9KLc}5FR4Xh zbdL#XQJfI$!inLo8m#?297=8x|C-PKugT&^R{Q^C@&7~?qr46asSqaSfe^-jxZBQD z-`3bj$==q?(!}mNQKTw;2_InrxUDfT@_Pv{*}lb4rhZCQA0q%1PB?`PZQ`&r1UYlb zT=lda=yEeTiOXsNFco5xQj<=erOfV1f2dth0HqwMZuqiS^f1+Ee{*APlbf^kr`l0` zG9WZ?=6PM~98ZCbsu=RLJZQQQP+-o2tu*0{-p92Tmb1U13Zsc>8^j5fB&sDt!}VSq z{8Xu|D)xwL;;n;<$KJvXR(<25h=1efg2bJvgoV$*2^aX1V@velNZ$EY*`ls(5t@R} zo${^)WXZ_}3@_F>a~_>D?R&R8M;G-OODSkQXGHH*6B#x{n*+5GdSR9k7WRq`TVE3B zp40g6I-(@Yy+FhKkh$*}krbELctw=`0bQ@&n=%Dx0*5wW;pX-!Slg#bIAz==n0_Mt zGjG&Bhk{Km}XZ)EI31$6fyZh|qx#XpM%{Mn00?*Q+3x{rhP@{{Fa1 z?x^=$%{;+v!<@V$U*DCirS^bxK+&wdisKMmc3h8&Hw$5)2XUYW`}!iHkI3@p)wqvopeQ6! zrbKP!r8j)l(qm!HwRIcSMR^v!rJO8vlbduaqm@5hXb+Tfr-!=WE2%E{qR!+pK#~I8 zpG-8nW8S2tyia)Z4c%=-<`&n@#n0)<{%l#@JADKWi$-GSx))Y8FK%{Gbf?-?cV5mE z0?%=A<*~!KhH5qGT|>s0DV~d3nJzj^Y^X@toue2VXIapYbvLV_exX>_hRPWbi5B*M zE4vT4@H_%gyUT`>vZ0Xg)6f~f`0qr|*7WYDUOzQsIH8+}f1J^gp4Aa;+*P9WpyX*bjgEK4s);E`>4tT z52VAUgUUgejPinMW*1Qou+Sg#J$q_|Lc0Ijt-zWW$(b<-!5M^vx4>*z-Bs`Sv@WLM zU2jl!)EnD}CN@r3&xZSVN}tx_$dRuE$>!qg`K|K7TV-Q~S8zm|yb7%p-G-(J)^-XS zOwxO9#zQWOid8D{I_L3;5SKX8o1{%7?_#`}?Kv)u(9O}hgQ#F%uvdXBbzU%GdA3@X zd@q3?N61$}wxKAVL|a|f`pAV1th~N;vvR5S*-lr?ss6xdDYkJ6CxD^4 zQA$_~lphY02{yd?whXI3K;$D|j0U#!EQJKwwP%)=(>$$Onw93f4_XdpwdqlHBIuL8dgG;nV}2H+Aj+M_m9 zkjNW|0){PEG5nI>hN%=4*Eva@m|0Q1gZrwyF(qL{qa+c_NmcZ%DvE9zzbmUuUxA@D z$S>{yg+vxXaxS20AQa1&*!P(HU_|=O;w)r4w}q8iLa3k!CxA@Lo;PZeuD%moKua`Z74(`iioafWE4rTy0F%oAJR z5?^Yw_4=Yti9Sl~7#6EK2@p20l*bk-F_{&}#;Y?ZH1}v+**wiRd1^7+?abZT+DEAF zus9_hbh_c{9fJ|#bu7rj{p6Bk)d`EBr}P01EJk3Ylm!OTAlz9`u*HUXD_&f0{MZ8# zd+dyhplF#@cIRoG;qDSjbX0C&+^3^g>fgNhXdiLj7V%FFKo9}dQMhd(-5{4EQ~jMs_Sfu`!53k7vKUF zLtxkTw@KvK`MD)N+j!*RFCvalqeS~8KDe1S$$VmH(CH{^NcC27+!pEw$D_(jFyVtN zzgX5uMzqthA%*O|+GW13lFL7my0Uj$UgFb=omO>wput$`Q>x6}QvW#q@bNA>OuUO4 zy~EbG*Tsqj2`RJQBbH+*4&}qZY6hK}S+J{R>72U}kr@4?Sv+t4a3LO0WRQUy50t4} zj9(;MIBH+iukp!@FL{PYrS)7pk?UK{&2JReP)wCq3#l>7LQXB{_ay{7dzV+nKTa(D ziP~1#+_?UGXR748$dhhj6xk9Z;*|X*D(0%wnuyW{VU?8DjYgtJ^J@g+88a_Za?GZ6 zaIf^*)}EeL+VET`<9~I|Fz(6`m*%jQ_6b&gDP4knw0Gr)mn51S_!%j|n`Sj!Wi@|; zEJkvNyG2u}2u&XF!k{c}IuzU_IZ;hMCT>~a$<@G!nw6nZwr#GY82zGAsRO*t?WGN% z=~L0y%J~$Cn{(Ydt5(SPM7WZAS$c><$z4lTTt zlzO*Tn80Yf%Yfo#EN87@N=^&*=d^rZx0w#`!iWU3Us0&CrJtlUQYHn72mYaM_~UstXGUHG`4s|}Zbrzf4>v(sx;$tmlNDzhk}l?8w@~lTC$gW~&z;duYw75??S#ufmt>$ae0R zR$L~a1Lug_-L0T_#D(N=oHN&a(;{HqfC5LJV|B5{2l=wcdL1carYa~(tq40q1+q7alg*?b3d$AC$3H=13TAbbIa0D|C)E9^ql% zsFS+px6;BGF-w|(kY6okQtdM~#6ORHB_qDS}iJIV3oMYD8 zn<11KxG@v&iZgcoGcK=@`Tu^DHL^04x3#kVy)^bzP0s_ z%S*JN)eH-o-`*9T|8CgZS9JaYDy%uguO};@B%0W1M=Isjv4zLQPq%16fm_u9&`rG2 zn1ku`MNNil!4Gk!78okEVzUISgupkM*b!G&TpO=OROj!`>P z1}%l~JJx1i|fq^Xz zSu;ZhDPDiO3xVTILMriz)|l+k(8F0GP3BrR^h9j7_e3xWJl0>44M7B76zID$s?*Ch z;T81?1bmPm=1T+*zJkiX=|^?96*R{?ePEfDZ=KXQ{J%;$MS{}km?f1dB59pzme$C z{VUX>p_-0a5U7EWU4ePej(_gIhDFPK-xS}0_TCL*;*w}0m-WgdjqjD$Gjmm;dPb9l z`8;}gWj?}j(^B0l6Tdg-obP&g^VSF*Bow%=-QC5phW7T5Xts4_aAq$CG++=dE454- zdyN(~U*1;oj0^*`hZ%az9N#QksQyx2nNy80zZF`HD-KhIhV27ihzwMrA$nvV9FD8Gu0m!ibBf?aMLS zDkr|rshMSR27J*QXRy;*D14Vd8RQd{m4G)QX~;HaE-ghv?Y+jE(og#3%&r*y*(nWQ zk0uHvytO5o?}($U?yq}*PN-{jNSszW&vk&C=r37I11>Czk_Bn^*-~(4$0EO1YR^_S zu|1pCIrARs;!m72%2&0YcA`#45`4Vm26ps034S(4{rKfklhZtAyL&1UpC;}~EN~I4 z*7hu(`HEqlCGo)MgH!eu_o~1C^(L=@vs+LfrD)EJA*gt9ef?|`-UBiRn_TAG>@>`i zP!T#a-2QTY|3{W0I$trcmet1FAUg*d1{dnzUzk8*`ls;^?@fLw_Tli@jYXP zLDtF7Ce2@s{{Bkhrxc_S{fEqtdfR_923djs8Q+b4fb9JrPYZrp`nz}E9~az@?*c3L z0{`sb?~e_B3PK)rK+Hny+>8Br>HklEzxU$r$9MA_kh&N|&tE$8KV84iYQOj9e@a6^ z>HSUiS5ND|A@;ovcR#*+aEtW22mg%4?`6`TI-sCfAc+3;H{5IZ<;`!P{Bs}am%=c} zy8NrcAF6)TUw{3udoBO&mNq0Y{Z-4K-1=3^{axYj70X|4HA3KmDEwRf@|TAHwb+8N ze`xqwGW%iV19}IFPD``|3sv}#O^Kr zemMGN(e=+_|2ZoCF8w=S|B|L5`;*b1?ESm=?;P|?Jc|5}$p3s1BrgU3BP-!Ts?ht8 LeWUm2`}F?-@Ms zZq=DxUA?Po_j;;(z3W-7APo+I0RjaA0|Ej<0zwic#^VGE0uluY0)h?#1EwuvXX|Wg z>#VQhVQ=cB%jj-nO`Hb-Mx6@+2K@eiuK&dv=u;WC?E#>4s2{u)?Nkd75K&cyK+=t2 zK)V8$;UmEcxAB02^IH$sR8gfDCcaLfuGzJ@k@0J`JTQR;jjn6iGb4=mXUODmO^K`; z_Ie;kBR6d*%L>-10PVN8_nXhD;5X=*#d1(Vm%_$-_k?RUU2arq zM(mX}o==}iQJtg|Ndon(PCc7fv~APh#VJ)Z5V37qS5-I?e9_4fOo~ODs`g4EsjHa* zR!@h8C}O?`P92R2!tU}T$Z!AvMamH({AL?L;k#*pwmPo5n4t!4EVA`8j7Xc~%539F zVk{XB;;;ndg94&gYPptg8z6^=b3!gi2TwMN+A67rca`eyyIIotY)4JpoIXUSg7|5U zGs?P4+_{Gj2I`L}hXNNw_rve8xw~m}n1Zq4Z5FOhpj|cc`x|p_Aa~=7#r;Q>7aAnk{j!oP5}K@~uD1$-g{q#`_! ztNMQTBDvXOtB6Fy;3aEx`y7(`;NSvHOX-**=1{TO zhw3_eJ$sWbF6BY(+7U}z-dyrYdU%~oZ020F24#X#9S;`0kRSw$KRrNeKvr|j=&llU zR#^G?b4Ya)XYN7b#7DpRl%jpaw_)5eN7Lz;LrzBKiWc&f@4-0!Q6vK@Iy zJ@ieizg&ub>_UI`W{}GqQX*wTyJMLUAEd~=_S33oJ0H#R=;MU#Egw1?4vZu!Sp$Zx zeu*AJ7yEVrS9-}R0y1v|kjEBR8DBbbx*O#a7-gMi~N?~5mAUy0YR-ZY; zcS~!{7*x%TdU-T7VHcGUMOtpYiLq#vW-zaEWXC#eHzc{8_{R-38HCM7q|&3CuGh*T z6DP2%fcvOkM)Tx0>}YRj(Vjjc(!Og04WqDY_N~vYoJkqpX+=+9#E?M}rg?ZXJ~?V_n3l)r-Gl+e zD+eB^m1Y$=O1oQLu()j}FR%W2$SUHT%bwXKr;Th8-u(NLX^(#P@}d)*5Tj8&*&*M= zoAvEw3xl#=&(@JpJ7`Br=-B@meG}26{n7U%c6>$fZJxmFlW%8q@#H;EL4ls&3Bck ztu#uI+-71cQHMuTnV(i0$;-=Nti0s~ASsfV$c^HyUL9`**X+N?d=6}Q|9)#n=nIr$ z@8xYbxD5;U!mX4vbT(66Y+Mii0|+eSvdW`p*N3S1srkwz*!u^Jey&@mz$tfOQj9*K zsI5sV3xYz!H<;u-msj{<@rp`tONXAPnBe>_K^xH0IeRD7!uHdb2k8UoYkqP2T~rnkGHV(_VKK7KQLS4{&+F+)&)046BUq| zR=R|Cl}-g1li!8xe)EA7Vq~n29muB_>mHg=@D!qiG0#_&ipcECU%0r`L#c0KMrr7n zS%hn4=42CG=EirNj}PY-(NpWA=37Ke-E`pOBXWD30|^z8T1ryTFRH6X4-DNh=6zP& zU*x_rut74C@MjuuMgd0+|&&Y&jM;D4$50)D_IlMpS%1TYntn5o;JBf2xP44b_w%1 zAA!vLcj`)&78yPODJu@7FCGXCD3H2;3vvHU;D3ZWP+&?5bO8Umul9s7%RT_YhtuHB zps5argcpSo9xs~Uj>ctZKn+@`thI6JTaU+#q!W(ng4D@;a<)t6uV#I z%EKM*-kL*u6iJQHH;F_WW4g~7t#nLSh%1^9cjaZtjdg5kL$KVH5 z1b7NrwV5cK>Sz&SeGVRK=-9^I-Z-kg9>D*V<)~nh!OsD$CIt8t2WS$1clu5irl!tL zOuuf-KfQmZns#hH2aZqGw^#qCZ2th1Fkv-Tk+dJ5lp5MP+C9S(HNexB#&xu=yKd`b ziAfeU>y^-;ojNa9W0*$e?Ns;M6-aQals^=|akS7qV<^9+d3d%G2#+VjENv>-W|y7f zP2QV1*v(0)(%~BgFB}04(JI=@RjISr)g-WZx1GdUAHvDYNSn8zc%-`sBh@%iLaV!e zN!mnOA(moDGGKqU8iUF9y}u@}p_V)_MO5hN;tQUKQF#QjGbZZ9pqbKH8E6ER8q2k< zM7%O)w-WM}i$*E1#2aO&x;#+EdfV=71A|;xVCNT~x7Xx* zBttIw#vKSmUwZv48dg~Ls>erAom2C?+86qUbQz+3Ukt8Pv!C7S339mn=9oA(2Ed^t zrL`;!xi0K_9YV4Fc5rWc+&N;|QkUbiUf-hbinVpYnoGNFYm`kqU1N{jKtsY)WR4S4 zF+}v=@aNZpum{e+2h6lXG6g{RW<~6qLRymAnR%OPyGTq~<3ajH`4H2@D4ie3^Tujh zSwZsyTmg-)zHHZ9rg^c|(>o zcje&HIGzmnd7PqtpcMdN`o?iJd8j;g41cD_Jmpzg$uYr^;G)j?6`H^@|Ar5XshDyp zC-4?c79_}62{^d#KU#CuG@?(+d{#yrt}=VGj0;nJ%hq*OUxOo28G1+97i{TFG1baV zH+-z>G@=-!3^BcL(IFIp70~Sm4a-Qfh$!I>tJ#F2LGAOD8utWMFfo~Qa?Z1~m@DJI zN4T*J8Av>Uy~np@p@1g~(Zl1!y{Bb{TFu}r)F0HN0YN{D#5}3t8~r8d4ZmKJi^9WL z|7fQRc18e#YE4< zg+wqN5pjtbChi7ypWB_}(pWYt1OkGu8nkKxlQes;g8NY6eL&GZe&*g;J%Q?YAo?p` z;3mFVL=p-xFVGjD+-K=X5{FeU?Xc{8Qkvc0S%d(eBX_XG zPg^W|?HF_&LQIKP!=p6lyv&O1GA8+LIB7t0H!+y@DG9Ju)0#H5|C4x*l<+*llRlA!AZI1@D=VxRWH z642Y{#XNr8RpN7V7eTThunK$#B1B@Npi9YiQj!n>(vYH$NvgHTOz&gv1q-n%cPkk)^4O}D6_#n?;PKw zJ|sD-qQ@ubDR<-0M0i#F1%>;!SP9s3I=&)UPsExkiKUL`i|HrmSEmD!#m1*jY!UO{ z-Py9`Rul=m5~p@ex1kOtQJ8wq-qxp`(i~NfjBIVk)&p+HpCX`!rG?A}$ zBt#V?_#-20N@ep7tYO&0OEUuC5EY`hlCOkQ$VdHg0?}V_h`NtVE4;ZH5^o+q_D0WL z*{v)kf(w{mxVb(DPkxsS+^r!Lu9Tv$dmfAk!%%@+J0@0Xry2E!c+uuoJ%*y~J*CuZ zO)Z89cEz|;o`6ocq9-4HOT0(+V@Ovay7Ju#*bVTf{B0*BgXAGZ~Ehmp%{*jUoMg>!#Jk#2Nf!G87 z%1*u~tcFbdozX;BC|5b-t}Sj1Tq5xkEtA?K@Nj~Hkp*@d(inx!*>KPdlie-%haH1ne zA;)ph&Bo=QOcN#o8dn6e3^u6jlfQs`r~o&{Igy9 zE75SaFtssd`t|-R$2ig)i^S)|=)!(@i{Rw;#Qr^&Vr^r>I&qcUBrA!aq47vjjg=*# z9UmQxg8N#Dx}Y#s*p5GGS`Zwu<0=-Gyndf(ifU|u?DG!!M{6l9SHwv1myY7%+iYLY zOXu_Hjxju(_m!nZ#=u)+%IRXi+j5#1CP>SxP#?TRXYl&)S*xpY zx){`gEik#Lae?PB**4A)QQ=|sQ=9s!>L}LQq`q!l3t?Go@O-X{Uv&r(LhHsm_$nb9 z0iE8^EVE+s!}(kceeK?P>0>>GrYkE2QAx+<5XRsJOShIKOp~6y81yxSAfb)~nhC`? z#PTC0Wf=`p&K<3&6BYpwe=sF-$*tjj1o=sr+U7`V?v1`>iWwL*yAU)=gJu;PL@Cv~ zDuIBPBC?1^082r#u0gm4zS51mQQxpk;}c!(EGIEjHow=)+5Tl{7r)=t-hHorZA$~K zv@JA+vhvAntp4lsGxnN(*UQ<#Ip_X2s`H+{uBZFa)UMZap6lwZ6-=g1pNotAMC^5+ z>s|R+!lh*b!n8Az@S3yAP2*F_NW%c6$8*rPS$zQEz63$kJ=c$acOitHoBL^A_@$^eV9$$Q9!#R~$EU>kd$%}ARew=FZ0sKOph#|dlNqtZKwu$=>| zBTbk18W$SI!dZEFE=!Y_+HjPeqXuxingpCQCJk9fcUz{^Nez+-kEAN-hQ?K|GYvpZ z6UwaSXdF{v=uB_VlWeNZ?HmH#v8cmQ*9-3PL|3JBxpp#DJhNhuWH;Esc8InkXK3aj z_W%iPU6O~(W|y7qLwc6EaW`fL2hoe;R*mbk<>O*dmGidKPqh9NL;2-vHE zVVEyEqFLoy)+b3H7d~FSrv2$^dYcUH<=;LvY}-3G!xUWX+ECFX9-TzF5h&*PG_RyS27Ly< zWJIC}ztM1#Bu;+P{?buM<{~FB0^0 z5Jks!fb;Bfq84aqFwsHBg!@MZIUbBL2Yjr?jNiF;+cFrjm~W4m=1z(s|kdZH~4E&};ewCAGcEkzl{SWh^e%ga?&WZb>yxWN77b4$k zX$x(iEJCyZR%SDj>P%7*0VPvI!)(qM$fX~z3kE>W|PeIr&m5lmf8h!ys}cQ8OB5 zy`7ti;nkPM8hTY~fguUcunR>cNa+)5V|lPEj@syRwa$SHE%JszyrK@$%;5v5j^X4x z*Y{O}^Nc6ocNoTkQ6nQ|^uJ;^Y(8vt>MVLYoT3tEJvNNwYTCG32AehTQ$uvfk_T&yf6jd-rZYC! zq46>41i7_rYkd97=I-Zj2#ngm+`bqC1O)MK;n&I8!`js8XF}hnu?{TmQGO=$pyzUT zsKh9s#iM3qStIXy;zNb#MYIRl#Zy6vyo=PVEc*Bz>PL%KBoqLfHp|!BHzB zt{YH3mcCcp$HOkcJ4ZA-qu4bKfN&m7*0hm|s+D4-E!o#dvBL@jbi@M~rb&e1R9+Tr zqmr=k$%hgYNL{5;Dlzx3mLty57-$4P+h7-J**q5J&zd%cOQFm70bV$@ zhvYXlUDeQ3-!@Q*8urbNkxOy!6jFY1G2mwJQ3&{m>lT(^D!E-xfcfDh!%!TF+OFvm z4y-XXsHkr$S2C|K^BUHR8*ZJo!+#}EVg~1g8X?Hu8amtfv3sFm;5H<~PxiB`s-HRvi5&;ri$+tH57K8ANSa9m>4tE>WX+aUquf%!rk2@JXU4abA4P$gp<7*^C} zKeEy~Xs5N;D^4Cj+4sZDqbW%M$XwVEpLiQ})oW}Q<*4X;*~f`pbsNm( z5ph*Th`RznV$MSzazYHe1vdf^dmK<6kkWb_!A&=omknaSREx#nha`qG_@Q&b6g0d= z`BKc?y_n-a2Sbknb<)>BS-E>>eyK2pN@_nmif|ChcsK+xgFu1W-vZK`V$zWE8faIL z-hvWmoJdV((T|(QV(3h_1QjOBT!>sda7X7y**4DJ$bc1m2W1E*ULwP;i@ud_!*P)j zleC^XH*^w-2zq(%*ub-HcQ$8<57HT9*`+1&5pi|+YK3ymjrhHZPoYUa+zN~g>Cl?2 zy7pzl(}!r2C3QK)P?;>`={F@aO$V>%K`Cgj45)%nzARuH%cu}RN7;e;_R185tlqI) zCk_qTTlH*~t00+vkzyNzF$rss3G!Sxm1uzl2?pSp$s~N#!fW*>UX6T)0n(BTb}GB+ zpv^uaRhdM0r`zicu>s|e6{ZLGa*teOSwu4SkNEZ)Z@8&E1Gr`8a0Q4;klb70BhVLj zXGP8q$d5L;<0A#2kWE6y1?+pdew-X`DehokD0I*sYeqL#HL`h>MqRJ(;G+cZhBX>Y zr)Udr@?1#yK(W+4D4c873Zq`|i_Zo=>iTEmj!&gT3_cHPysh`^#a+Y_%y69}+75@O zAe}=#KCJ~b%o1YGZ+Su5VVzakNTVITu1rvFKKX9q1hB&+xJB`kU70!cI-Qzb-jmi7 z9G89#LDwdg?W#pYzIs>MYv?aV7HFyPH#=XpHJ#s70I? z4?w*$p3rb_WW8No>}WdkT-I$v{eDw|rdWS@!^8(U4#vFl!n-}f$iOcxl3rSXy0+ssFSTDRwN z+9{+0qrk_zXx1JWcM`Rz^+)%XG^Dpi1#CNXT5w1LYe7Bp-IwOsN_goSmEP@ht#8^Y zY3CFacf#VfZPRq2wbW7R&E2UDS#7$OGRDX`uToa&M7urU$Y{E_g9ufUvIUK?w8`&N zZ%{|xCIip;c@a~)`3ScZa-OOPzg=*Kybb=XyxE{!Y!!RXX2|)NZi;uqfOXt5xn%4V zf6`(T+gIECyV37*QUjc?xT_`HJ6;9zNp|0?lBS{WF59Ti*&_12=RlDT@X9l=#9YJ# z;I@(M{RL>CFu}(;_`@%Do>X2h`K6)&ij0l5AW0nRs(U*pmKHsF{H3iVG4br*hrik( zr-$B?MozP}@29|c+KP`8+9mWwQtO3?BYE`TK5~6#SUk($7>4Xe-woUjcM`hn<7V>Q z%2e#25ZkJsUC?;N+Rk{Tz5B}!Gp`McbT{y}RwRGM>Gkbf ztcigwjT88>C>ibn7`~6hpR6dew7JlSu4j^KIHlkAQ4iwbSJHerit!=hv(4`sm$;bt zAjutPAdn})J@oGQ!rw^f(CsGM$_ELe$mZ+lXu*q|H&h{lLSKqxp7I&wo!)ZZjg&F|T)BCj)SR{%t^xm3nx~4NDj23nFyPLU z;2%;w9{m7Rf%r|D+XDe?)Zy1vCpX|Q;opfrUhh^N0yF>+Y7h{rzZro&knzr@j>@La z&OfQo^v7prMx*z(M`>enL4qiQukaS{JxgLYy6+qSrAvuTjSmn7;q#PiV)<{ZWj*_N zp(lJe@~gIvNEv3OEDb~^UoSeo9Gxwvo4SHU*~h|WpZQxI8Tm7g0}|^%jQO_2ZqQqJ z`V=f5_J$k-$qL?ioaxoLP5Sz|VrHZ@wfe#YLsb%p$N1AdW=k-1S?tTjENnR18-7}p zk8i!MGS$uEN2G2+g2*_cM7s<45<|ga%MdnUPw#p2Rp0DGTObdWu^q-c(%oQiW*<59 zGv5G1YLZD6uhl(VehF{7Ab!S>c*2 zfihtS;X*=(n#$-~^-l4I%ZX3xoaU48kQAD^RqwU@I? z)rz36#+sg&U(mq)Ajt*6e!mo0K*xPwIwVzd0H4(7bNr>ynhSj-&W~y@PzRZ9A|aH( z(h-ysK9S&|5rd*t3;GAJk3~R8e8CF%xdib4;wV}EbCmyo9_7Gh6Q!O_m%iOJZ`(e!6w09=mx&$JlGf~W*V>0SUv@H*tH$gtN(j#*~m<$#fF0t604 zZ}{O=thoY;a96MEuKO;T<GdJ)Wy45Fxk@P zr(KHI^|OEXYJ`;8au3AhqD(Vxh77qD6s0QI0Iz)km_nlvh`_?t*KviTJsr9jBz5pi z(vTG=oM=4C6*n6;3gSa4s0P*o*X7c>i`FnnG$Z$!5 zf%g)Whg?N8pWL=PqR-4b5m)p}l;d7eC52C^l4QjDSaXNY`hiv0U%HbQ>k*x3pbgRk z;|9t<+n}Mn{eMglsItFbnF&I6%K(JnQ}7!igjIa*MFoU_iaZI0N~@)rfgn@fvNijIu5 zMauy`axro|>W*t=S?q|`TpH>{LJAi)xwhR`(#v?M3gt0#gc@)(BDXzO+Tll2#8+Iw zdoqp#=*HKLHMj?qq!iC6)97;`AEasx36OSHc&k?3I`9y5GVve%Q9lGb^>yS!o!K?8 zhYOIt!4X?SHJ`s^*!4!=CywTFx-!H^IA1sC{1iQqqmfp&KK^!7cO?{Gmi4FE^U|J_Q-pD2HhpMRrFqx>bxuXOoOlt1T8zfqVl zf1&(2b@~(F&raEIfJ%a20KfZYe~SKD-u@P4Bl(-?pT+K<2!9q!zY(Z`wbQ?9@-IuL zKLP)&J$?hylK)=-e^(-Z0{)rF{|02B_yzb!9{-nl{r?>Fj`Dv3`YXfy6ZBuRo8P|^ v1f&;Oh5TEt^QZW~2Bv=&7pMCt@xO;D1!+hi-+nI6B7>j-yBlzfKR^8!*sVgB literal 0 HcmV?d00001 diff --git a/tests/integration/data/Renderer007-ForEach-Sum/viewModel.json b/tests/integration/data/Renderer007-ForEach-Sum/viewModel.json new file mode 100644 index 0000000..0316180 --- /dev/null +++ b/tests/integration/data/Renderer007-ForEach-Sum/viewModel.json @@ -0,0 +1,52 @@ +{ + "projects": [ + { + "name": "ExcelJS", + "role": "maintainer", + "platform": "github", + "link": "https://github.com/exceljs/exceljs", + "stars": 5300, + "forks": 682 + }, + { + "name": "xlsx-import", + "role": "owner", + "platform": "github", + "link": "https://github.com/siemienik/xlsx-import", + "stars": 2, + "forks": 0 + }, + { + "name": "xlsx-import", + "role": "owner", + "platform": "npm", + "link": "https://www.npmjs.com/package/xlsx-import", + "stars": "n.o.", + "forks": "n.o." + }, + { + "name": "xlsx-renderer", + "role": "owner", + "platform": "github", + "link": "https://github.com/siemienik/xlsx-renderer", + "stars": 2, + "forks": 0 + }, + { + "name": "xlsx-renderer", + "role": "owner", + "platform": "npm", + "link": "https://www.npmjs.com/package/xlsx-renderer", + "stars": "n.o.", + "forks": "n.o." + }, + { + "name": "TS Package Structure", + "role": "owner", + "platform": "github", + "link": "https://github.com/Siemienik/ts-package-structure", + "stars": 3, + "forks": 0 + } + ] +} \ No newline at end of file diff --git a/tests/integration/data/Renderer008-Delete/expected.xlsx b/tests/integration/data/Renderer008-Delete/expected.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..956870fdb7208159891d17dc62b2de338aaba748 GIT binary patch literal 6891 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 literal 0 HcmV?d00001 diff --git a/tests/integration/data/Renderer008-Delete/template.xlsx b/tests/integration/data/Renderer008-Delete/template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..36c148f42e414164e5f46ad4dc087d7e0ec68d67 GIT binary patch literal 9951 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 a|Fg?US`6+-R>Fb+--nQO!$SU@{Qm*eZkO}` literal 0 HcmV?d00001 diff --git a/tests/integration/data/Renderer009-ForEach-Average/template.xlsx b/tests/integration/data/Renderer009-ForEach-Average/template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..60f920d3f9655384b9bc13cfdb21d0581db29cd3 GIT binary patch literal 12965 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 KLcHjI-u*8-9BtVE literal 0 HcmV?d00001 diff --git a/tests/integration/data/Renderer009-ForEach-Average/viewModel.json b/tests/integration/data/Renderer009-ForEach-Average/viewModel.json new file mode 100644 index 0000000..0316180 --- /dev/null +++ b/tests/integration/data/Renderer009-ForEach-Average/viewModel.json @@ -0,0 +1,52 @@ +{ + "projects": [ + { + "name": "ExcelJS", + "role": "maintainer", + "platform": "github", + "link": "https://github.com/exceljs/exceljs", + "stars": 5300, + "forks": 682 + }, + { + "name": "xlsx-import", + "role": "owner", + "platform": "github", + "link": "https://github.com/siemienik/xlsx-import", + "stars": 2, + "forks": 0 + }, + { + "name": "xlsx-import", + "role": "owner", + "platform": "npm", + "link": "https://www.npmjs.com/package/xlsx-import", + "stars": "n.o.", + "forks": "n.o." + }, + { + "name": "xlsx-renderer", + "role": "owner", + "platform": "github", + "link": "https://github.com/siemienik/xlsx-renderer", + "stars": 2, + "forks": 0 + }, + { + "name": "xlsx-renderer", + "role": "owner", + "platform": "npm", + "link": "https://www.npmjs.com/package/xlsx-renderer", + "stars": "n.o.", + "forks": "n.o." + }, + { + "name": "TS Package Structure", + "role": "owner", + "platform": "github", + "link": "https://github.com/Siemienik/ts-package-structure", + "stars": 3, + "forks": 0 + } + ] +} \ No newline at end of file