@vobs/cli 1.2.1 → 1.3.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/banner.cjs +31 -7
- package/dist/banner.cjs.map +1 -1
- package/dist/banner.js +5 -3
- package/dist/banner.js.map +1 -1
- package/dist/cli.cjs +130 -98
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +65 -40
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.cjs +63 -49
- package/dist/commands/add.cjs.map +1 -1
- package/dist/commands/add.js +14 -9
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/build.cjs +50 -19
- package/dist/commands/build.cjs.map +1 -1
- package/dist/commands/build.js +9 -6
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/dev.cjs +50 -19
- package/dist/commands/dev.cjs.map +1 -1
- package/dist/commands/dev.js +9 -6
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/generate.cjs +76 -63
- package/dist/commands/generate.cjs.map +1 -1
- package/dist/commands/generate.js +24 -18
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/index.cjs +136 -100
- package/dist/commands/index.cjs.map +1 -1
- package/dist/commands/index.js +66 -39
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.cjs +89 -71
- package/dist/commands/init.cjs.map +1 -1
- package/dist/commands/init.js +28 -17
- package/dist/commands/init.js.map +1 -1
- package/dist/index.cjs +187 -132
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +94 -48
- package/dist/index.js.map +1 -1
- package/dist/repl.cjs +139 -111
- package/dist/repl.cjs.map +1 -1
- package/dist/repl.js +67 -46
- package/dist/repl.js.map +1 -1
- package/dist/start.cjs +151 -114
- package/dist/start.cjs.map +1 -1
- package/dist/start.js +76 -48
- package/dist/start.js.map +1 -1
- package/dist/types.cjs +18 -2
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/file.cjs +67 -34
- package/dist/utils/file.cjs.map +1 -1
- package/dist/utils/file.js +18 -12
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/logger.cjs +56 -22
- package/dist/utils/logger.cjs.map +1 -1
- package/dist/utils/logger.js +11 -5
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/pm.cjs +41 -16
- package/dist/utils/pm.cjs.map +1 -1
- package/dist/utils/pm.js +10 -7
- package/dist/utils/pm.js.map +1 -1
- package/package.json +1 -1
package/dist/start.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/logger.ts","../src/utils/file.ts","../src/utils/pm.ts","../src/commands/init.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/generate.ts","../src/commands/add.ts","../src/banner.ts","../src/cli.ts","../src/repl.ts","../src/start.ts"],"names":["pc","__dirname","dirname","fileURLToPath","resolve","readFileSync","Handlebars","mkdirSync","writeFileSync","existsSync","execSync","p","createServer","build","p2","p3","cac","createInterface","stdin","stdout"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,SAAA,GAAoB;AAC3B,EAAA,OAAOA,oBAAA,CAAG,IAAI,CAAA,CAAA,EAAA,iBAAI,IAAI,MAAK,EAAE,kBAAA,EAAoB,CAAA,CAAA,CAAG,CAAA;AACtD;AAFS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAIF,SAAS,KAAK,GAAA,EAAmB;AACtC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,SAAA,EAAW,CAAA,CAAA,EAAIA,oBAAA,CAAG,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACrD;AAFgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAIT,SAAS,QAAQ,GAAA,EAAmB;AACzC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,SAAA,EAAW,CAAA,CAAA,EAAIA,oBAAA,CAAG,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACtD;AAFgB,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA;AAIT,SAAS,KAAK,GAAA,EAAmB;AACtC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,SAAA,EAAW,CAAA,CAAA,EAAIA,oBAAA,CAAG,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACvD;AAFgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAIT,SAAS,MAAM,GAAA,EAAmB;AACvC,EAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,SAAA,EAAW,CAAA,CAAA,EAAIA,oBAAA,CAAG,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACtD;AAFgB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AAIT,SAAS,KAAK,GAAA,EAAmB;AACtC,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAOA,qBAAG,IAAA,CAAKA,oBAAA,CAAG,KAAK,GAAG,CAAC,CAAC,CAAA,CAAE,CAAA;AAC5C;AAFgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAIT,IAAM,SAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAO,IAAA,EAAK;ACrBzD,IAAMC,WAAA,GAAYC,YAAA,CAAQC,iBAAA,CAAc,2PAAe,CAAC,CAAA;AACxD,IAAM,cAAA,GAAiBC,YAAA,CAAQH,WAAA,EAAW,IAAA,EAAM,WAAW,CAAA;AAGpD,SAAS,eAAA,GAA0B;AACxC,EAAA,OAAO,cAAA;AACT;AAFgB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAKT,SAAS,cAAA,CACd,cACA,OAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAASI,eAAA,CAAa,YAAA,EAAc,OAAO,CAAA;AACjD,EAAA,MAAM,QAAA,GAAWC,2BAAA,CAAW,OAAA,CAAQ,MAAM,CAAA;AAC1C,EAAA,OAAO,SAAS,OAAO,CAAA;AACzB;AAPgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAUT,SAAS,SAAA,CAAU,GAAA,EAAa,QAAA,EAAkB,OAAA,EAAuB;AAC9E,EAAA,MAAM,QAAA,GAAWF,YAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AACtC,EAAAG,YAAA,CAAUL,aAAQ,QAAQ,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,EAAAM,gBAAA,CAAc,QAAA,EAAU,SAAS,OAAO,CAAA;AAC1C;AAJgB,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAOT,SAAS,UAAU,GAAA,EAAmB;AAC3C,EAAA,IAAI,CAACC,aAAA,CAAW,GAAG,CAAA,EAAG;AACpB,IAAAF,YAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EACpC;AACF;AAJgB,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAYhB,eAAe,gBAAA,CAAiB,MAAA,EAAgB,OAAA,EAAiB,OAAA,EAAiD;AAChH,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,IAAS,CAAA;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,OAAO,MAAW,CAAA;AAEzC,EAAA,MAAM,UAAU,WAAA,CAAY,MAAA,EAAQ,EAAE,aAAA,EAAe,MAAM,CAAA;AAE3D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,IAAI,CAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,EAAG,EAAE,IAAI,KAAA,CAAM,IAAA;AACzD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAEvC,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,SAAA,CAAU,QAAQ,CAAA;AAClB,MAAA,MAAM,gBAAA,CAAiB,OAAA,EAAS,QAAA,EAAU,OAAO,CAAA;AAAA,IACnD,WAAW,KAAA,EAAO;AAChB,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,OAAA,EAAS,OAAO,CAAA;AAC/C,MAAA,SAAA,CAAU,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,MAAM,OAAA,GAAUF,eAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAC7C,MAAA,SAAA,CAAU,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,IACtC;AAAA,EACF;AACF;AAvBe,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AA0Bf,eAAsB,eAAA,CACpB,WACA,OAAA,EACe;AACf,EAAA,MAAM,WAAA,GAAcD,YAAA,CAAQ,cAAA,EAAgB,OAAO,CAAA;AACnD,EAAA,SAAA,CAAU,SAAS,CAAA;AACnB,EAAA,MAAM,gBAAA,CAAiB,WAAA,EAAa,SAAA,EAAW,OAAO,CAAA;AACxD;AAPsB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AC9Df,SAAS,qBAAqB,SAAA,EAAoC;AAEvE,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAIK,cAAWL,YAAAA,CAAQ,SAAA,EAAW,gBAAgB,CAAC,GAAG,OAAO,MAAA;AAC7D,IAAA,IAAIK,cAAWL,YAAAA,CAAQ,SAAA,EAAW,WAAW,CAAC,GAAG,OAAO,MAAA;AACxD,IAAA,IAAIK,cAAWL,YAAAA,CAAQ,SAAA,EAAW,mBAAmB,CAAC,GAAG,OAAO,KAAA;AAAA,EAClE;AAGA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,qBAAA,IAAyB,EAAA;AACvD,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,MAAA;AACzC,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,MAAA;AACzC,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,KAAA;AAGxC,EAAA,OAAO,MAAA;AACT;AAhBgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAmBT,SAAS,mBAAA,CAAoB,WAAmB,EAAA,EAA0B;AAC/E,EAAA,MAAM,GAAA,GAAM,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,GAAG,EAAE,CAAA,QAAA,CAAA;AAC1C,EAAAM,sBAAA,CAAS,KAAK,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,WAAW,CAAA;AACpD;AAHgB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAMT,SAAS,UAAA,CAAW,SAAA,EAAmB,EAAA,EAAoB,GAAA,EAAa,GAAA,EAAoB;AACjG,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,GAAO,EAAA;AACjC,EAAA,MAAM,MAAM,EAAA,KAAO,KAAA,GACf,eAAe,WAAW,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GACjC,EAAA,KAAO,MAAA,GACL,CAAA,SAAA,EAAY,WAAW,CAAA,CAAA,EAAI,GAAG,KAC9B,CAAA,SAAA,EAAY,WAAW,IAAI,GAAG,CAAA,CAAA;AAEpC,EAAAA,sBAAA,CAAS,KAAK,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,WAAW,CAAA;AACpD;AATgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACxBhB,eAAsB,YAAY,OAAA,EAA8C;AAC9E,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,IAAA,IAAS,MAAQC,YAAA,CAAA,IAAA,CAAK;AAAA,IAChD,OAAA,EAAS,eAAA;AAAA,IACT,WAAA,EAAa,aAAA;AAAA,IACb,0BAAU,MAAA,CAAA,CAAC,CAAA,KAAM,CAAC,CAAA,GAAI,6BAA6B,MAAA,EAAzC,UAAA;AAAA,GACX,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3B,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA,IAAaP,aAAQ,OAAA,CAAQ,GAAA,IAAO,WAAW,CAAA;AAEzE,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,cAAA,IAAmB,MAAQO,YAAA,CAAA,MAAA,CAAO;AAAA,IAC/D,OAAA,EAAS,kBAAA;AAAA,IACT,OAAA,EAAS;AAAA,MACP,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,MAC/B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,MAC7B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAAO;AACjC,GACD,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,cAAc,CAAA,EAAG;AAC9B,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,UAAA,IAAe,MAAQA,YAAA,CAAA,OAAA,CAAQ;AAAA,IAC3D,OAAA,EAAS,iBAAA;AAAA,IACT,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,aAAa,CAAA,EAAG;AAC7B,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,IAAQ,MAAQA,YAAA,CAAA,OAAA,CAAQ;AAAA,IAC9C,OAAA,EAAS,8BAAA;AAAA,IACT,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,OAAO,CAAA,EAAG;AACvB,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iBAAA,EAAoB,WAAW,CAAA,GAAA,CAAK,CAAA;AAEhD,EAAA,MAAM,gBAAgB,SAAA,EAAW;AAAA,IAC/B,IAAA,EAAM,WAAA;AAAA,IACN,aAAa,WAAA,CAAY,WAAA,EAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAAA,IAC1D,UAAA,EAAY,aAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,MAAA,CAAO,QAAQ,oBAAoB,CAAA;AAEnC,EAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AACxC,EAAA,mBAAA,CAAoB,WAAW,cAAc,CAAA;AAC7C,EAAA,MAAA,CAAO,QAAQ,wBAAwB,CAAA;AAEvC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAC5C,IAAA,IAAI;AACF,MAAAD,uBAAS,UAAA,EAAY,EAAE,KAAK,SAAA,EAAW,KAAA,EAAO,UAAU,CAAA;AACxD,MAAA,MAAA,CAAO,QAAQ,4BAA4B,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAAA,IAChD;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,mBAAmB,MAAA,GAAS,MAAA,GAAS,cAAA,KAAmB,MAAA,GAAS,SAAS,SAAS,CAAA;AAAA,CAAQ,CAAA;AAChH;AA3EsB,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;ACJtB,eAAsB,WAAW,OAAA,EAAoC;AACnE,EAAA,MAAA,CAAO,KAAK,wBAAwB,CAAA;AAEpC,EAAA,MAAM,MAAA,GAAS,MAAME,iBAAA,CAAa;AAAA,IAChC,YAAY,OAAA,CAAQ,MAAA;AAAA,IACpB,MAAA,EAAQ;AAAA,MACN,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ;AAAA;AAChB,GACD,CAAA;AAED,EAAA,MAAM,OAAO,MAAA,EAAO;AACpB,EAAA,MAAA,CAAO,SAAA,EAAU;AACjB,EAAA,MAAA,CAAO,QAAQ,uBAAuB,CAAA;AACxC;AAdsB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;ACAtB,eAAsB,aAAa,OAAA,EAAsC;AACvE,EAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AAExC,EAAA,MAAMC,UAAA,CAAM;AAAA,IACV,YAAY,OAAA,CAAQ,MAAA;AAAA,IACpB,KAAA,EAAO;AAAA,MACL,QAAQ,OAAA,CAAQ;AAAA,KAClB;AAAA,IACA,IAAA,EAAM,QAAQ,IAAA,IAAQ;AAAA,GACvB,CAAA;AAED,EAAA,MAAA,CAAO,QAAQ,gBAAgB,CAAA;AACjC;AAZsB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;ACEtB,eAAsB,gBAAgB,OAAA,EAAkD;AACtF,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,IAAS,MAAQC,YAAA,CAAA,MAAA,CAAO;AAAA,IAC3C,OAAA,EAAS,mBAAA;AAAA,IACT,OAAA,EAAS;AAAA,MACP,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,MACzC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAAO;AACjC,GACD,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,IAAI,CAAA,EAAG;AACpB,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,IAAS,MAAQA,YAAA,CAAA,IAAA,CAAK;AAAA,IACzC,OAAA,EAAS,OAAA;AAAA,IACT,WAAA,EAAa,IAAA,KAAS,WAAA,GAAc,QAAA,GAAW,WAAA;AAAA,IAC/C,0BAAU,MAAA,CAAA,CAAC,CAAA,KAAM,CAAC,CAAA,GAAI,qBAAqB,MAAA,EAAjC,UAAA;AAAA,GACX,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,IAAI,CAAA,EAAG;AACpB,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA,IAAaV,aAAQ,OAAA,CAAQ,GAAA,IAAO,gBAAgB,CAAA;AAC9E,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,MAAM,OAAA,GAAoC;AAAA,MACxC,IAAA,EAAM,aAAa,IAAI,CAAA;AAAA,MACvB,SAAA,EAAW,YAAY,IAAI;AAAA,KAC7B;AAEA,IAAA,MAAM,OAAA,GAAU,cAAA;AAAA,MACdA,YAAAA,CAAQ,cAAc,eAAe,CAAA;AAAA,MACrC;AAAA,KACF;AAEA,IAAA,MAAM,QAAA,GAAW,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,IAAA,CAAA;AAChC,IAAA,SAAA,CAAU,SAAA,EAAW,UAAU,OAAO,CAAA;AACtC,IAAA,MAAA,CAAO,OAAA,CAAQ,WAAW,IAAI,CAAA,IAAA,EAAOA,aAAQ,SAAA,EAAW,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACrE,CAAA,MAAO;AACL,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA,IAAaA,aAAQ,OAAA,CAAQ,GAAA,IAAO,WAAW,CAAA;AACzE,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,MAAM,OAAA,GAA+B;AAAA,MACnC,IAAA,EAAM,aAAa,IAAI,CAAA;AAAA,MACvB,IAAA,EAAM,CAAA,CAAA,EAAI,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,KAC7B;AAEA,IAAA,MAAM,OAAA,GAAU,cAAA;AAAA,MACdA,YAAAA,CAAQ,cAAc,UAAU,CAAA;AAAA,MAChC;AAAA,KACF;AAEA,IAAA,MAAM,QAAA,GAAW,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,IAAA,CAAA;AAChC,IAAA,SAAA,CAAU,SAAA,EAAW,UAAU,OAAO,CAAA;AACtC,IAAA,MAAA,CAAO,OAAA,CAAQ,WAAW,IAAI,CAAA,IAAA,EAAOA,aAAQ,SAAA,EAAW,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACrE;AACF;AA9DsB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAgEtB,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,OAAO,GAAA,CACJ,OAAA,CAAQ,eAAA,EAAiB,GAAG,CAAA,CAC5B,MAAM,KAAK,CAAA,CACX,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,WAAA,EAAa,CAAA,CACtE,IAAA,CAAK,EAAE,CAAA;AACZ;AANS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAQT,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,OAAO,GAAA,CACJ,QAAQ,UAAA,EAAY,KAAK,EACzB,WAAA,EAAY,CACZ,QAAQ,IAAA,EAAM,EAAE,EAChB,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,QAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AACzB;AARS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;ACzET,eAAsB,WAAW,OAAA,EAA6C;AAC5E,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,IAAY,MAAQW,YAAA,CAAA,IAAA,CAAK;AAAA,IAC3C,OAAA,EAAS,iBAAA;AAAA,IACT,WAAA,EAAa,UAAA;AAAA,IACb,0BAAU,MAAA,CAAA,CAAC,CAAA,KAAM,CAAC,CAAA,GAAI,6BAA6B,MAAA,EAAzC,UAAA;AAAA,GACX,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,GAAG,CAAA,EAAG;AACnB,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,IAAQ,MAAQA,YAAA,CAAA,OAAA,CAAQ;AAAA,IAC5C,OAAA,EAAS,yBAAA;AAAA,IACT,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,IAAMA,YAAA,CAAA,QAAA,CAAS,KAAK,CAAA,EAAG;AACrB,IAAEA,oBAAO,WAAW,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,EAAA,GAAK,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAE7C,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,WAAA,EAAc,GAAG,CAAA,GAAA,CAAK,CAAA;AAClC,EAAA,UAAA,CAAW,OAAA,CAAQ,GAAA,EAAI,EAAG,EAAA,EAAI,KAAK,KAAK,CAAA;AAExC,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,UAAA,EAAa,GAAG,CAAA,CAAE,CAAA;AACjC,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA;AAAA,CAA+B,CAAA;AAC3C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,GAAG,CAAA,CAAA,CAAG,CAAA;AAC9C,EAAA,OAAA,CAAQ,GAAA,EAAI;AACd;AA/BsB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACMtB,IAAM,YAAA,GAAe,+FAAA;AACrB,IAAM,cAAA,GAAiB,2DAAA;AAGvB,IAAM,MAAA,GAAS,IAAA;AACf,IAAM,GAAA,GAAM,SAAA;AACZ,IAAM,KAAA,GAAQ,SAAA;AAGP,SAAS,QAAA,GAAiB;AAC/B,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,EAAG,YAAY,CAAA,CAAE,CAAA;AACtC,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,MAAM,CAAA,EAAG,GAAG,CAAA,EAAG,cAAc,CAAA,EAAG,KAAK,CAAA,CAAE,CAAA;AACtD,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,EAAI;AACd;AARgB,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA;AAWT,SAAS,UAAA,GAAmB;AACjC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,EAAG,YAAY,CAAA,CAAE,CAAA;AACxC;AAFgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAKT,SAAS,aAAA,GAAsB;AACpC,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,EAAG,YAAY,CAAA,CAAE,CAAA;AACtC,EAAA,OAAA,CAAQ,GAAA,EAAI;AACd;AAJgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;;;AC5BT,SAAS,SAAA,GAAoC;AAClD,EAAA,MAAM,GAAA,GAAMC,QAAI,MAAM,CAAA;AAEtB,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,2BAA2B,CAAA,CAClD,OAAO,aAAA,EAAe,kBAAkB,CAAA,CACxC,MAAA,CAAO,WAAA,EAAa,iCAAiC,EACrD,MAAA,CAAO,iBAAA,EAAmB,uBAAuB,CAAA,CACjD,MAAA,CAAO,UAAA,EAAY,uBAAuB,CAAA,CAC1C,MAAA,CAAO,OAAO,IAAA,EAAc,OAAA,KAAqC;AAChE,IAAA,MAAM,WAAA,CAAY;AAAA,MAChB,IAAA;AAAA,MACA,WAAW,OAAA,CAAQ,GAAA;AAAA,MACnB,gBAAgB,OAAA,CAAQ,EAAA;AAAA,MACxB,UAAA,EAAY,QAAQ,UAAA,KAAe,KAAA;AAAA,MACnC,GAAA,EAAK,QAAQ,GAAA,KAAQ;AAAA,KACtB,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,iBAAiB,gBAAgB,CAAA,CACzC,OAAO,aAAA,EAAe,kBAAkB,CAAA,CACxC,MAAA,CAAO,WAAA,EAAa,iCAAiC,EACrD,MAAA,CAAO,iBAAA,EAAmB,uBAAuB,CAAA,CACjD,MAAA,CAAO,UAAA,EAAY,uBAAuB,CAAA,CAC1C,MAAA,CAAO,OAAO,IAAA,EAAc,OAAA,KAAqC;AAChE,IAAA,MAAM,WAAA,CAAY;AAAA,MAChB,IAAA;AAAA,MACA,WAAW,OAAA,CAAQ,GAAA;AAAA,MACnB,gBAAgB,OAAA,CAAQ,EAAA;AAAA,MACxB,UAAA,EAAY,QAAQ,UAAA,KAAe,KAAA;AAAA,MACnC,GAAA,EAAK,QAAQ,GAAA,KAAQ;AAAA,KACtB,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,KAAA,EAAO,sBAAsB,EACrC,MAAA,CAAO,iBAAA,EAAmB,kBAAkB,CAAA,CAC5C,MAAA,CAAO,eAAA,EAAiB,mBAAmB,EAC3C,MAAA,CAAO,QAAA,EAAU,uBAAuB,CAAA,CACxC,MAAA,CAAO,OAAO,OAAA,KAAqC;AAClD,IAAA,aAAA,EAAc;AACd,IAAA,MAAM,UAAA,CAAW;AAAA,MACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ;AAAA,KACf,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,OAAA,EAAS,sBAAsB,EACvC,MAAA,CAAO,iBAAA,EAAmB,kBAAkB,CAAA,CAC5C,MAAA,CAAO,gBAAA,EAAkB,kBAAkB,EAC3C,MAAA,CAAO,eAAA,EAAiB,YAAY,CAAA,CACpC,MAAA,CAAO,OAAO,OAAA,KAAqC;AAClD,IAAA,MAAM,YAAA,CAAa;AAAA,MACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAM,OAAA,CAAQ;AAAA,KACf,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,iBAAA,EAAmB,gCAAgC,EAC3D,KAAA,CAAM,GAAG,EACT,MAAA,CAAO,eAAA,EAAiB,yBAAyB,CAAA,CACjD,OAAO,aAAA,EAAe,kBAAkB,EACxC,MAAA,CAAO,OAAO,MAAc,OAAA,KAAqC;AAChE,IAAA,MAAM,eAAA,CAAgB;AAAA,MACpB,IAAA;AAAA,MACA,IAAA,EAAO,QAAQ,IAAA,IAAiC,MAAA;AAAA,MAChD,WAAW,OAAA,CAAQ;AAAA,KACpB,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,eAAA,EAAiB,eAAe,CAAA,CACxC,MAAA,CAAO,WAAA,EAAa,wBAAwB,CAAA,CAC5C,MAAA,CAAO,OAAO,GAAA,EAAa,OAAA,KAAqC;AAC/D,IAAA,MAAM,UAAA,CAAW;AAAA,MACf,OAAA,EAAS,GAAA;AAAA,MACT,KAAK,OAAA,CAAQ;AAAA,KACd,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,MAAA,EAAQ,yCAAyC,CAAA,CACzD,OAAO,MAAM;AACZ,IAAA,QAAA,EAAS;AAAA,EACX,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,EAAA,CAAG,UAAU,MAAM;AACrB,IAAA,UAAA,EAAW;AAAA,EACb,CAAC,CAAA;AAED,EAAA,GAAA,CAAI,IAAA,EAAK;AACT,EAAA,GAAA,CAAI,QAAQ,OAAO,CAAA;AAEnB,EAAA,OAAO,GAAA;AACT;AAnGgB,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;ACKhB,eAAsB,SAAA,GAA2B;AAC/C,EAAA,QAAA,EAAS;AAET,EAAA,MAAM,KAAKC,wBAAA,CAAgB;AAAA,IACzB,KAAA,EAAOC,eAAA;AAAA,IACP,MAAA,EAAQC,gBAAA;AAAA,IACR,MAAA,EAAQ,CAAA,EAAA,EAAKnB,oBAAAA,CAAG,OAAA,CAAQ,QAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,EAAA,CAAG,MAAA,EAAO;AAEV,EAAA,WAAA,MAAiB,WAAW,EAAA,EAAI;AAC9B,IAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,EAAK;AAE1B,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,EAAA,CAAG,MAAA,EAAO;AACV,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAE3B,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,IAAI,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAA,EAAKA,oBAAAA,CAAG,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACtF;AAEA,IAAA,EAAA,CAAG,MAAA,EAAO;AAAA,EACZ;AACF;AA/BsB,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAoCtB,IAAM,KAAA,GAAwD;AAAA,EAC5D,IAAA,EAAM;AAAA,IACJ,qBAAK,MAAA,CAAA,YAAY;AACf,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAKA,oBAAAA,CAAG,IAAA,CAAK,qBAAqB,CAAC,CAAA,CAAE,CAAA;AACjD,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,WAAW,CAAC,CAAA,+BAAA,CAAiC,CAAA;AACvE,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,OAAO,CAAC,CAAA,0BAAA,CAA4B,CAAA;AAC9D,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,MAAM,CAAC,CAAA,8BAAA,CAAgC,CAAA;AACjE,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,SAAS,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAC1D,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,aAAa,CAAC,CAAA,6BAAA,CAA+B,CAAA;AACvE,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,iBAAiB,CAAC,CAAA,0BAAA,CAA4B,CAAA;AACxE,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,eAAe,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAC5D,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAOA,oBAAAA,CAAG,GAAA,CAAI,WAAW,CAAC,CAAA,sDAAA,CAAwD,CAAA;AAAA,IAChG,CAAA,EAVK,KAAA,CAAA;AAAA,IAWL,IAAA,EAAM;AAAA,GACR;AAAA,EACA,IAAA,EAAM,EAAE,GAAA,kBAAK,MAAA,CAAA,YAAY,UAAS,EAArB,KAAA,CAAA,EAAwB,MAAM,EAAA,EAAG;AAAA,EAC9C,OAAA,EAAS,EAAE,GAAA,kBAAK,MAAA,CAAA,YAAY,YAAW,EAAvB,KAAA,CAAA,EAA0B,MAAM,EAAA,EAAG;AAAA,EACnD,KAAA,EAAO;AAAA,IACL,qBAAK,MAAA,CAAA,YAAY;AACf,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,IAC9B,CAAA,EAFK,KAAA,CAAA;AAAA,IAGL,IAAA,EAAM;AAAA,GACR;AAAA,EACA,IAAA,EAAM,EAAE,GAAA,kBAAK,MAAA,CAAA,YAAY,OAAA,CAAQ,KAAK,CAAC,CAAA,EAA1B,KAAA,CAAA,EAA6B,IAAA,EAAM,EAAA,EAAG;AAAA,EACnD,IAAA,EAAM,EAAE,GAAA,kBAAK,MAAA,CAAA,YAAY,OAAA,CAAQ,KAAK,CAAC,CAAA,EAA1B,KAAA,CAAA,EAA6B,IAAA,EAAM,EAAA,EAAG;AAAA,EACnD,IAAA,EAAM;AAAA,IACJ,GAAA,gCAAY,IAAA,KAAS;AACnB,MAAA,MAAM,WAAA,CAAY;AAAA,QAChB,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,QACZ,SAAA,EAAW,MAAA;AAAA,QACX,cAAA,EAAgB,MAAA;AAAA,QAChB,UAAA,EAAY,IAAA;AAAA,QACZ,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH,CAAA,EARK,KAAA,CAAA;AAAA,IASL,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,gCAAY,IAAA,KAAS;AACnB,MAAA,MAAM,eAAA,CAAgB;AAAA,QACpB,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,QACZ,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH,CAAA,EANK,KAAA,CAAA;AAAA,IAOL,IAAA,EAAM;AAAA,GACR;AAAA,EACA,CAAA,EAAG;AAAA,IACD,GAAA,gCAAY,IAAA,KAAS;AACnB,MAAA,MAAM,eAAA,CAAgB;AAAA,QACpB,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,QACZ,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH,CAAA,EANK,KAAA,CAAA;AAAA,IAOL,IAAA,EAAM;AAAA,GACR;AAAA,EACA,GAAA,EAAK;AAAA,IACH,GAAA,gCAAY,IAAA,KAAS;AACnB,MAAA,MAAM,UAAA,CAAW,EAAE,OAAA,EAAS,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,EAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,IAC3F,CAAA,EAFK,KAAA,CAAA;AAAA,IAGL,IAAA,EAAM;AAAA;AAEV,CAAA;AAGA,eAAe,SAAS,IAAA,EAA+B;AACrD,EAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAEzB,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAI,CAAA;AACxB,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,KAAA,CAAM,IAAI,IAAI,CAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAKA,oBAAAA,CAAG,OAAO,QAAG,CAAC,qBAAqBA,oBAAAA,CAAG,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA,OAAA,EAAUA,qBAAG,IAAA,CAAK,MAAM,CAAC,CAAA,gBAAA,CAAkB,CAAA;AACtH;AAbe,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA;AAgBf,SAAS,UAAU,IAAA,EAAwB;AACzC,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,MAAM,EAAA,GAAK,+BAAA;AACX,EAAA,IAAI,CAAA;AACJ,EAAA,OAAA,CAAQ,CAAA,GAAI,EAAA,CAAG,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AACnC,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,CAAC,CAAA,IAAK,EAAE,CAAC,CAAA,IAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,GAAA;AACT;AARS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;;;AC9HT,eAAsB,MAAM,IAAA,EAA+B;AAEzD,EAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,CAAC,MAAM,KAAA,EAAO;AAC1C,IAAA,MAAM,SAAA,EAAU;AAChB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,QAAA,CAAS,WAAW,KAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACrD,IAAA,UAAA,EAAW;AACX,IAAA;AAAA,EACF;AAGA,EAAA,SAAA,GAAY,KAAA,EAAM;AACpB;AAdsB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA","file":"start.cjs","sourcesContent":["import pc from 'picocolors'\n\nfunction timestamp(): string {\n return pc.dim(`[${new Date().toLocaleTimeString()}]`)\n}\n\nexport function info(msg: string): void {\n console.log(`${timestamp()} ${pc.cyan('ℹ')} ${msg}`)\n}\n\nexport function success(msg: string): void {\n console.log(`${timestamp()} ${pc.green('✔')} ${msg}`)\n}\n\nexport function warn(msg: string): void {\n console.log(`${timestamp()} ${pc.yellow('⚠')} ${msg}`)\n}\n\nexport function error(msg: string): void {\n console.error(`${timestamp()} ${pc.red('✖')} ${msg}`)\n}\n\nexport function step(msg: string): void {\n console.log(`\\n ${pc.bold(pc.cyan(msg))}`)\n}\n\nexport const logger = { info, success, warn, error, step }","import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport Handlebars from 'handlebars'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst TEMPLATES_ROOT = resolve(__dirname, '..', 'templates')\n\n/** Get the absolute path to the templates directory */\nexport function getTemplatesDir(): string {\n return TEMPLATES_ROOT\n}\n\n/** Read a template file and compile it with Handlebars */\nexport function renderTemplate(\n templatePath: string,\n context: Record<string, unknown>\n): string {\n const source = readFileSync(templatePath, 'utf-8')\n const template = Handlebars.compile(source)\n return template(context)\n}\n\n/** Write a file, creating parent directories if needed */\nexport function writeFile(dir: string, filename: string, content: string): void {\n const filePath = resolve(dir, filename)\n mkdirSync(dirname(filePath), { recursive: true })\n writeFileSync(filePath, content, 'utf-8')\n}\n\n/** Ensure a directory exists */\nexport function ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n}\n\n/** Check if a path exists */\nexport function pathExists(path: string): boolean {\n return existsSync(path)\n}\n\n/** Copy a template directory recursively, rendering each .hbs file */\nasync function copyDirRecursive(srcDir: string, destDir: string, context: Record<string, unknown>): Promise<void> {\n const { readdirSync } = await import('node:fs')\n const { join } = await import('node:path')\n\n const entries = readdirSync(srcDir, { withFileTypes: true })\n\n for (const entry of entries) {\n const srcPath = join(srcDir, entry.name)\n const isHbs = entry.name.endsWith('.hbs')\n const destName = isHbs ? entry.name.slice(0, -4) : entry.name\n const destPath = join(destDir, destName)\n\n if (entry.isDirectory()) {\n ensureDir(destPath)\n await copyDirRecursive(srcPath, destPath, context)\n } else if (isHbs) {\n const content = renderTemplate(srcPath, context)\n writeFile(destDir, destName, content)\n } else {\n const content = readFileSync(srcPath, 'utf-8')\n writeFile(destDir, destName, content)\n }\n }\n}\n\n/** Scaffold a project from the basic template */\nexport async function scaffoldProject(\n targetDir: string,\n context: Record<string, unknown>\n): Promise<void> {\n const templateDir = resolve(TEMPLATES_ROOT, 'basic')\n ensureDir(targetDir)\n await copyDirRecursive(templateDir, targetDir, context)\n}","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\n/** Detect the package manager to use */\nexport function detectPackageManager(targetDir?: string): PackageManager {\n // Check if a specific package manager is locked\n if (targetDir) {\n if (existsSync(resolve(targetDir, 'pnpm-lock.yaml'))) return 'pnpm'\n if (existsSync(resolve(targetDir, 'yarn.lock'))) return 'yarn'\n if (existsSync(resolve(targetDir, 'package-lock.json'))) return 'npm'\n }\n\n // Check for global preference\n const userAgent = process.env.npm_config_user_agent || ''\n if (userAgent.startsWith('pnpm')) return 'pnpm'\n if (userAgent.startsWith('yarn')) return 'yarn'\n if (userAgent.startsWith('npm')) return 'npm'\n\n // Default to pnpm\n return 'pnpm'\n}\n\n/** Install dependencies in a directory */\nexport function installDependencies(targetDir: string, pm: PackageManager): void {\n const cmd = pm === 'yarn' ? 'yarn' : `${pm} install`\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}\n\n/** Add a package as a dependency */\nexport function addPackage(targetDir: string, pm: PackageManager, pkg: string, dev: boolean): void {\n const installFlag = dev ? '-D' : ''\n const cmd = pm === 'npm'\n ? `npm install ${installFlag} ${pkg}`\n : pm === 'yarn'\n ? `yarn add ${installFlag} ${pkg}`\n : `pnpm add ${installFlag} ${pkg}`\n\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}","import { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { scaffoldProject } from '../utils/file.js'\nimport { installDependencies } from '../utils/pm.js'\nimport type { InitOptions } from '../types.js'\n\nexport async function initCommand(options: Partial<InitOptions>): Promise<void> {\n const projectName = options.name || (await p.text({\n message: 'Project name:',\n placeholder: 'my-vobs-app',\n validate: (v) => !v ? 'Project name is required' : undefined\n })) as string\n\n if (p.isCancel(projectName)) {\n p.cancel('Cancelled')\n return\n }\n\n const targetDir = options.targetDir || resolve(process.cwd(), projectName)\n\n const packageManager = options.packageManager || (await p.select({\n message: 'Package manager:',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' }\n ]\n })) as 'pnpm' | 'npm' | 'yarn'\n\n if (p.isCancel(packageManager)) {\n p.cancel('Cancelled')\n return\n }\n\n const useTypescript = options.typescript ?? (await p.confirm({\n message: 'Use TypeScript?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(useTypescript)) {\n p.cancel('Cancelled')\n return\n }\n\n const initGit = options.git ?? (await p.confirm({\n message: 'Initialize a git repository?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(initGit)) {\n p.cancel('Cancelled')\n return\n }\n\n logger.step(`Creating project ${projectName}...`)\n\n await scaffoldProject(targetDir, {\n name: projectName,\n packageName: projectName.toLowerCase().replace(/\\s+/g, '-'),\n typescript: useTypescript,\n vobsVersion: '1.0.0'\n })\n\n logger.success('Project scaffolded')\n\n logger.step('Installing dependencies...')\n installDependencies(targetDir, packageManager)\n logger.success('Dependencies installed')\n\n if (initGit) {\n logger.step('Initializing git repository...')\n try {\n execSync('git init', { cwd: targetDir, stdio: 'ignore' })\n logger.success('Git repository initialized')\n } catch {\n logger.warn('Git not found, skipping git init')\n }\n }\n\n logger.step('Done!')\n console.log(`\\n ${packageManager === 'pnpm' ? 'pnpm' : packageManager === 'yarn' ? 'yarn' : 'npm run'} dev\\n`)\n}","import { createServer } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { DevOptions } from '../types.js'\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n logger.info('Starting dev server...')\n\n const server = await createServer({\n configFile: options.config,\n server: {\n port: options.port,\n open: options.open\n }\n })\n\n await server.listen()\n server.printUrls()\n logger.success('Dev server is running')\n}","import { build } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { BuildOptions } from '../types.js'\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n logger.info('Building for production...')\n\n await build({\n configFile: options.config,\n build: {\n outDir: options.outDir\n },\n mode: options.mode || 'production'\n })\n\n logger.success('Build complete')\n}","import { resolve } from 'node:path'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { renderTemplate, writeFile, getTemplatesDir, ensureDir } from '../utils/file.js'\nimport type { GenerateOptions, ComponentTemplateContext, PageTemplateContext } from '../types.js'\n\nexport async function generateCommand(options: Partial<GenerateOptions>): Promise<void> {\n const type = options.type || (await p.select({\n message: 'What to generate?',\n options: [\n { value: 'component', label: 'Component' },\n { value: 'page', label: 'Page' }\n ]\n })) as 'component' | 'page'\n\n if (p.isCancel(type)) {\n p.cancel('Cancelled')\n return\n }\n\n const name = options.name || (await p.text({\n message: 'Name:',\n placeholder: type === 'component' ? 'Button' : 'AboutPage',\n validate: (v) => !v ? 'Name is required' : undefined\n })) as string\n\n if (p.isCancel(name)) {\n p.cancel('Cancelled')\n return\n }\n\n const templatesDir = getTemplatesDir()\n\n if (type === 'component') {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/components')\n ensureDir(targetDir)\n\n const context: ComponentTemplateContext = {\n name: toPascalCase(name),\n kebabName: toKebabCase(name)\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'component.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n } else {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/pages')\n ensureDir(targetDir)\n\n const context: PageTemplateContext = {\n name: toPascalCase(name),\n path: `/${toKebabCase(name)}`\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'page.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n }\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9]/g, ' ')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('')\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/--+/g, '-')\n .replace(/^-|-$/g, '')\n}","import * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { detectPackageManager, addPackage } from '../utils/pm.js'\nimport type { AddOptions } from '../types.js'\n\nexport async function addCommand(options: Partial<AddOptions>): Promise<void> {\n const pkg = options.package || (await p.text({\n message: 'Package to add:',\n placeholder: '@vobs/ui',\n validate: (v) => !v ? 'Package name is required' : undefined\n })) as string\n\n if (p.isCancel(pkg)) {\n p.cancel('Cancelled')\n return\n }\n\n const isDev = options.dev ?? (await p.confirm({\n message: 'Save as dev dependency?',\n initialValue: false\n })) as boolean\n\n if (p.isCancel(isDev)) {\n p.cancel('Cancelled')\n return\n }\n\n const pm = detectPackageManager(process.cwd())\n\n logger.step(`Installing ${pkg}...`)\n addPackage(process.cwd(), pm, pkg, isDev)\n\n logger.success(`Installed ${pkg}`)\n console.log(`\\n Import it in your code:\\n`)\n console.log(` import { ... } from '${pkg}'`)\n console.log()\n}","/**\n * VOBS CLI Banner — Mathematical Bold Sans-Serif\n * 𝗩𝗢𝗕𝗦 𝗖𝗟𝗜 𝘃𝟭.𝟬\n * Signals First · Zero Re-renders · Ultra Lightweight\n *\n * The banner is left-aligned with a fixed indent rather than horizontally\n * centered. Centering depends on the terminal column width and per-glyph\n * render width, neither of which is reliably knowable, so it drifts as the\n * window resizes. Fixed indent is stable across any terminal size.\n */\n\nconst BANNER_LINE1 = '𝗩𝗢𝗕𝗦 𝗖𝗟𝗜 𝘃𝟭.𝟬'\nconst BANNER_TAGLINE = 'Signals First · Zero Re-renders · Ultra Lightweight'\n\n/** Fixed left indent applied to every banner line (2 spaces). */\nconst INDENT = ' '\nconst DIM = '\\x1b[2m'\nconst RESET = '\\x1b[0m'\n\n/** Show full banner (used for logo command, --help) */\nexport function showLogo(): void {\n console.log()\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n console.log(`${INDENT}${DIM}${BANNER_TAGLINE}${RESET}`)\n console.log()\n console.log()\n}\n\n/** Show single-line version banner (used for --version) */\nexport function showBanner(): void {\n console.log(`${INDENT}${BANNER_LINE1}`)\n}\n\n/** Show the dev server start banner */\nexport function showDevBanner(): void {\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n}","import { cac } from 'cac'\nimport { initCommand } from './commands/init.js'\nimport { devCommand } from './commands/dev.js'\nimport { buildCommand } from './commands/build.js'\nimport { generateCommand } from './commands/generate.js'\nimport { addCommand } from './commands/add.js'\nimport { showBanner, showLogo, showDevBanner } from './banner.js'\n\nexport function createCLI(): ReturnType<typeof cac> {\n const cli = cac('vobs')\n\n cli\n .command('init [name]', 'Create a new vobs project')\n .option('--dir <dir>', 'Target directory')\n .option('--pm <pm>', 'Package manager (pnpm/npm/yarn)')\n .option('--no-typescript', 'Do not use TypeScript')\n .option('--no-git', 'Do not initialize git')\n .action(async (name: string, options: Record<string, unknown>) => {\n await initCommand({\n name,\n targetDir: options.dir as string | undefined,\n packageManager: options.pm as 'pnpm' | 'npm' | 'yarn' | undefined,\n typescript: options.typescript !== false,\n git: options.git !== false\n })\n })\n\n cli\n .command('create [name]', 'Alias for init')\n .option('--dir <dir>', 'Target directory')\n .option('--pm <pm>', 'Package manager (pnpm/npm/yarn)')\n .option('--no-typescript', 'Do not use TypeScript')\n .option('--no-git', 'Do not initialize git')\n .action(async (name: string, options: Record<string, unknown>) => {\n await initCommand({\n name,\n targetDir: options.dir as string | undefined,\n packageManager: options.pm as 'pnpm' | 'npm' | 'yarn' | undefined,\n typescript: options.typescript !== false,\n git: options.git !== false\n })\n })\n\n cli\n .command('dev', 'Start the dev server')\n .option('--config <path>', 'Vite config file')\n .option('--port <port>', 'Port to listen on')\n .option('--open', 'Open browser on start')\n .action(async (options: Record<string, unknown>) => {\n showDevBanner()\n await devCommand({\n config: options.config as string | undefined,\n port: options.port as number | undefined,\n open: options.open as boolean | undefined\n })\n })\n\n cli\n .command('build', 'Build for production')\n .option('--config <path>', 'Vite config file')\n .option('--outDir <dir>', 'Output directory')\n .option('--mode <mode>', 'Build mode')\n .action(async (options: Record<string, unknown>) => {\n await buildCommand({\n config: options.config as string | undefined,\n outDir: options.outDir as string | undefined,\n mode: options.mode as string | undefined\n })\n })\n\n cli\n .command('generate [name]', 'Generate code (component/page)')\n .alias('g')\n .option('--type <type>', 'Type: component or page')\n .option('--dir <dir>', 'Target directory')\n .action(async (name: string, options: Record<string, unknown>) => {\n await generateCommand({\n name,\n type: (options.type as 'component' | 'page') || undefined,\n targetDir: options.dir as string | undefined\n })\n })\n\n cli\n .command('add [package]', 'Add a package')\n .option('-D, --dev', 'Save as dev dependency')\n .action(async (pkg: string, options: Record<string, unknown>) => {\n await addCommand({\n package: pkg,\n dev: options.dev as boolean | undefined\n })\n })\n\n cli\n .command('logo', 'Show the vobs CLI logo and version info')\n .action(() => {\n showLogo()\n })\n\n cli.on('--help', () => {\n showBanner()\n })\n\n cli.help()\n cli.version('1.0.0')\n\n return cli\n}","import { createInterface } from 'node:readline/promises'\nimport { stdin, stdout } from 'node:process'\nimport pc from 'picocolors'\nimport { showLogo, showBanner } from './banner.js'\nimport { initCommand } from './commands/init.js'\nimport { generateCommand } from './commands/generate.js'\nimport { addCommand } from './commands/add.js'\n\n/**\n * Interactive REPL shell. Runs `vobs` with no arguments and stays in CLI\n * mode accepting repeated commands until the user types `exit` / `quit`\n * or presses Ctrl+C / Ctrl+D.\n */\nexport async function startRepl(): Promise<void> {\n showLogo()\n\n const rl = createInterface({\n input: stdin,\n output: stdout,\n prompt: ` ${pc.magenta('❯')} `,\n terminal: true\n })\n\n rl.prompt()\n\n for await (const rawLine of rl) {\n const line = rawLine.trim()\n\n if (!line) {\n rl.prompt()\n continue\n }\n\n // Split into args, honoring simple double quotes\n const args = splitArgs(line)\n\n try {\n await dispatch(args)\n } catch (err) {\n console.error(` ${pc.red('✖')} ${err instanceof Error ? err.message : String(err)}`)\n }\n\n rl.prompt()\n }\n}\n\ntype Command = (args: string[]) => Promise<void>\n\n/** Internal command table for the REPL */\nconst TABLE: Record<string, { cmd: Command; help: string }> = {\n help: {\n cmd: async () => {\n console.log(` ${pc.bold('Available commands:')}`)\n console.log(` ${pc.dim('exit|quit')} Leave the interactive CLI`)\n console.log(` ${pc.dim('clear')} Clear the screen`)\n console.log(` ${pc.dim('logo')} Re-print the banner`)\n console.log(` ${pc.dim('version')} Show version`)\n console.log(` ${pc.dim('init <name>')} Create a new vobs project`)\n console.log(` ${pc.dim('generate <name>')} Generate a component/page`)\n console.log(` ${pc.dim('add <package>')} Add a package`)\n console.log(` ${pc.dim('dev|build')} Use \\`vobs dev\\` / \\`vobs build\\` in a terminal`)\n },\n help: ''\n },\n logo: { cmd: async () => showLogo(), help: '' },\n version: { cmd: async () => showBanner(), help: '' },\n clear: {\n cmd: async () => {\n process.stdout.write('\\x1Bc')\n },\n help: ''\n },\n exit: { cmd: async () => process.exit(0), help: '' },\n quit: { cmd: async () => process.exit(0), help: '' },\n init: {\n cmd: async (args) => {\n await initCommand({\n name: args[0],\n targetDir: undefined,\n packageManager: undefined,\n typescript: true,\n git: true\n })\n },\n help: ''\n },\n generate: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n g: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n add: {\n cmd: async (args) => {\n await addCommand({ package: args[0], dev: args.includes('-D') || args.includes('--dev') })\n },\n help: ''\n }\n}\n\n/** Dispatch a parsed command line to the internal table */\nasync function dispatch(args: string[]): Promise<void> {\n const name = args[0]\n const rest = args.slice(1)\n\n if (!name) return\n\n const entry = TABLE[name]\n if (entry) {\n await entry.cmd(rest)\n return\n }\n\n console.log(` ${pc.yellow('⚠')} Unknown command: ${pc.bold(String(name))}. Type ${pc.cyan('help')} to see options.`)\n}\n\n/** Minimal tokenizer supporting double-quoted arguments */\nfunction splitArgs(line: string): string[] {\n const out: string[] = []\n const re = /[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g\n let m: RegExpExecArray | null\n while ((m = re.exec(line)) !== null) {\n out.push(m[1] ?? m[2] ?? m[0])\n }\n return out\n}","import { createCLI } from './cli.js'\nimport { showBanner } from './banner.js'\nimport { startRepl } from './repl.js'\n\n/** Entry point: decides between interactive REPL and single-shot commands */\nexport async function start(args: string[]): Promise<void> {\n // No args (or explicit `cli`) → launch the interactive REPL\n if (args.length === 0 || args[0] === 'cli') {\n await startRepl()\n return\n }\n\n if (args.includes('--version') || args.includes('-V')) {\n showBanner()\n return\n }\n\n // Let cac read the full process.argv so single-shot commands dispatch correctly\n createCLI().parse()\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/start.ts","../src/cli.ts","../src/commands/init.ts","../src/utils/logger.ts","../src/utils/file.ts","../src/utils/pm.ts","../src/commands/dev.ts","../src/commands/build.ts","../src/commands/generate.ts","../src/commands/add.ts","../src/banner.ts","../src/repl.ts"],"sourcesContent":["import { createCLI } from './cli.js'\nimport { showBanner } from './banner.js'\nimport { startRepl } from './repl.js'\n\n/** Entry point: decides between interactive REPL and single-shot commands */\nexport async function start(args: string[]): Promise<void> {\n // No args (or explicit `cli`) → launch the interactive REPL\n if (args.length === 0 || args[0] === 'cli') {\n await startRepl()\n return\n }\n\n if (args.includes('--version') || args.includes('-V')) {\n showBanner()\n return\n }\n\n // Let cac read the full process.argv so single-shot commands dispatch correctly\n createCLI().parse()\n}","import { cac } from 'cac'\nimport { initCommand } from './commands/init.js'\nimport { devCommand } from './commands/dev.js'\nimport { buildCommand } from './commands/build.js'\nimport { generateCommand } from './commands/generate.js'\nimport { addCommand } from './commands/add.js'\nimport { showBanner, showLogo, showDevBanner } from './banner.js'\n\nexport function createCLI(): ReturnType<typeof cac> {\n const cli = cac('vobs')\n\n cli\n .command('init [name]', 'Create a new vobs project')\n .option('--dir <dir>', 'Target directory')\n .option('--pm <pm>', 'Package manager (pnpm/npm/yarn)')\n .option('--no-typescript', 'Do not use TypeScript')\n .option('--no-git', 'Do not initialize git')\n .action(async (name: string, options: Record<string, unknown>) => {\n await initCommand({\n name,\n targetDir: options.dir as string | undefined,\n packageManager: options.pm as 'pnpm' | 'npm' | 'yarn' | undefined,\n typescript: options.typescript !== false,\n git: options.git !== false\n })\n })\n\n cli\n .command('create [name]', 'Alias for init')\n .option('--dir <dir>', 'Target directory')\n .option('--pm <pm>', 'Package manager (pnpm/npm/yarn)')\n .option('--no-typescript', 'Do not use TypeScript')\n .option('--no-git', 'Do not initialize git')\n .action(async (name: string, options: Record<string, unknown>) => {\n await initCommand({\n name,\n targetDir: options.dir as string | undefined,\n packageManager: options.pm as 'pnpm' | 'npm' | 'yarn' | undefined,\n typescript: options.typescript !== false,\n git: options.git !== false\n })\n })\n\n cli\n .command('dev', 'Start the dev server')\n .option('--config <path>', 'Vite config file')\n .option('--port <port>', 'Port to listen on')\n .option('--open', 'Open browser on start')\n .action(async (options: Record<string, unknown>) => {\n showDevBanner()\n await devCommand({\n config: options.config as string | undefined,\n port: options.port as number | undefined,\n open: options.open as boolean | undefined\n })\n })\n\n cli\n .command('build', 'Build for production')\n .option('--config <path>', 'Vite config file')\n .option('--outDir <dir>', 'Output directory')\n .option('--mode <mode>', 'Build mode')\n .action(async (options: Record<string, unknown>) => {\n await buildCommand({\n config: options.config as string | undefined,\n outDir: options.outDir as string | undefined,\n mode: options.mode as string | undefined\n })\n })\n\n cli\n .command('generate [name]', 'Generate code (component/page)')\n .alias('g')\n .option('--type <type>', 'Type: component or page')\n .option('--dir <dir>', 'Target directory')\n .action(async (name: string, options: Record<string, unknown>) => {\n await generateCommand({\n name,\n type: (options.type as 'component' | 'page') || undefined,\n targetDir: options.dir as string | undefined\n })\n })\n\n cli\n .command('add [package]', 'Add a package')\n .option('-D, --dev', 'Save as dev dependency')\n .action(async (pkg: string, options: Record<string, unknown>) => {\n await addCommand({\n package: pkg,\n dev: options.dev as boolean | undefined\n })\n })\n\n cli\n .command('logo', 'Show the vobs CLI logo and version info')\n .action(() => {\n showLogo()\n })\n\n cli.on('--help', () => {\n showBanner()\n })\n\n cli.help()\n cli.version('1.0.0')\n\n return cli\n}","import { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { scaffoldProject } from '../utils/file.js'\nimport { installDependencies } from '../utils/pm.js'\nimport type { InitOptions } from '../types.js'\n\nexport async function initCommand(options: Partial<InitOptions>): Promise<void> {\n const projectName = options.name || (await p.text({\n message: 'Project name:',\n placeholder: 'my-vobs-app',\n validate: (v) => !v ? 'Project name is required' : undefined\n })) as string\n\n if (p.isCancel(projectName)) {\n p.cancel('Cancelled')\n return\n }\n\n const targetDir = options.targetDir || resolve(process.cwd(), projectName)\n\n const packageManager = options.packageManager || (await p.select({\n message: 'Package manager:',\n options: [\n { value: 'pnpm', label: 'pnpm' },\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' }\n ]\n })) as 'pnpm' | 'npm' | 'yarn'\n\n if (p.isCancel(packageManager)) {\n p.cancel('Cancelled')\n return\n }\n\n const useTypescript = options.typescript ?? (await p.confirm({\n message: 'Use TypeScript?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(useTypescript)) {\n p.cancel('Cancelled')\n return\n }\n\n const initGit = options.git ?? (await p.confirm({\n message: 'Initialize a git repository?',\n initialValue: true\n })) as boolean\n\n if (p.isCancel(initGit)) {\n p.cancel('Cancelled')\n return\n }\n\n logger.step(`Creating project ${projectName}...`)\n\n await scaffoldProject(targetDir, {\n name: projectName,\n packageName: projectName.toLowerCase().replace(/\\s+/g, '-'),\n typescript: useTypescript,\n vobsVersion: '1.0.0'\n })\n\n logger.success('Project scaffolded')\n\n logger.step('Installing dependencies...')\n installDependencies(targetDir, packageManager)\n logger.success('Dependencies installed')\n\n if (initGit) {\n logger.step('Initializing git repository...')\n try {\n execSync('git init', { cwd: targetDir, stdio: 'ignore' })\n logger.success('Git repository initialized')\n } catch {\n logger.warn('Git not found, skipping git init')\n }\n }\n\n logger.step('Done!')\n console.log(`\\n ${packageManager === 'pnpm' ? 'pnpm' : packageManager === 'yarn' ? 'yarn' : 'npm run'} dev\\n`)\n}","import pc from 'picocolors'\n\nfunction timestamp(): string {\n return pc.dim(`[${new Date().toLocaleTimeString()}]`)\n}\n\nexport function info(msg: string): void {\n console.log(`${timestamp()} ${pc.cyan('ℹ')} ${msg}`)\n}\n\nexport function success(msg: string): void {\n console.log(`${timestamp()} ${pc.green('✔')} ${msg}`)\n}\n\nexport function warn(msg: string): void {\n console.log(`${timestamp()} ${pc.yellow('⚠')} ${msg}`)\n}\n\nexport function error(msg: string): void {\n console.error(`${timestamp()} ${pc.red('✖')} ${msg}`)\n}\n\nexport function step(msg: string): void {\n console.log(`\\n ${pc.bold(pc.cyan(msg))}`)\n}\n\nexport const logger = { info, success, warn, error, step }","import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs'\nimport { resolve, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport Handlebars from 'handlebars'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst TEMPLATES_ROOT = resolve(__dirname, '..', 'templates')\n\n/** Get the absolute path to the templates directory */\nexport function getTemplatesDir(): string {\n return TEMPLATES_ROOT\n}\n\n/** Read a template file and compile it with Handlebars */\nexport function renderTemplate(\n templatePath: string,\n context: Record<string, unknown>\n): string {\n const source = readFileSync(templatePath, 'utf-8')\n const template = Handlebars.compile(source)\n return template(context)\n}\n\n/** Write a file, creating parent directories if needed */\nexport function writeFile(dir: string, filename: string, content: string): void {\n const filePath = resolve(dir, filename)\n mkdirSync(dirname(filePath), { recursive: true })\n writeFileSync(filePath, content, 'utf-8')\n}\n\n/** Ensure a directory exists */\nexport function ensureDir(dir: string): void {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n}\n\n/** Check if a path exists */\nexport function pathExists(path: string): boolean {\n return existsSync(path)\n}\n\n/** Copy a template directory recursively, rendering each .hbs file */\nasync function copyDirRecursive(srcDir: string, destDir: string, context: Record<string, unknown>): Promise<void> {\n const { readdirSync } = await import('node:fs')\n const { join } = await import('node:path')\n\n const entries = readdirSync(srcDir, { withFileTypes: true })\n\n for (const entry of entries) {\n const srcPath = join(srcDir, entry.name)\n const isHbs = entry.name.endsWith('.hbs')\n const destName = isHbs ? entry.name.slice(0, -4) : entry.name\n const destPath = join(destDir, destName)\n\n if (entry.isDirectory()) {\n ensureDir(destPath)\n await copyDirRecursive(srcPath, destPath, context)\n } else if (isHbs) {\n const content = renderTemplate(srcPath, context)\n writeFile(destDir, destName, content)\n } else {\n const content = readFileSync(srcPath, 'utf-8')\n writeFile(destDir, destName, content)\n }\n }\n}\n\n/** Scaffold a project from the basic template */\nexport async function scaffoldProject(\n targetDir: string,\n context: Record<string, unknown>\n): Promise<void> {\n const templateDir = resolve(TEMPLATES_ROOT, 'basic')\n ensureDir(targetDir)\n await copyDirRecursive(templateDir, targetDir, context)\n}","import { existsSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { execSync } from 'node:child_process'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn'\n\n/** Detect the package manager to use */\nexport function detectPackageManager(targetDir?: string): PackageManager {\n // Check if a specific package manager is locked\n if (targetDir) {\n if (existsSync(resolve(targetDir, 'pnpm-lock.yaml'))) return 'pnpm'\n if (existsSync(resolve(targetDir, 'yarn.lock'))) return 'yarn'\n if (existsSync(resolve(targetDir, 'package-lock.json'))) return 'npm'\n }\n\n // Check for global preference\n const userAgent = process.env.npm_config_user_agent || ''\n if (userAgent.startsWith('pnpm')) return 'pnpm'\n if (userAgent.startsWith('yarn')) return 'yarn'\n if (userAgent.startsWith('npm')) return 'npm'\n\n // Default to pnpm\n return 'pnpm'\n}\n\n/** Install dependencies in a directory */\nexport function installDependencies(targetDir: string, pm: PackageManager): void {\n const cmd = pm === 'yarn' ? 'yarn' : `${pm} install`\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}\n\n/** Add a package as a dependency */\nexport function addPackage(targetDir: string, pm: PackageManager, pkg: string, dev: boolean): void {\n const installFlag = dev ? '-D' : ''\n const cmd = pm === 'npm'\n ? `npm install ${installFlag} ${pkg}`\n : pm === 'yarn'\n ? `yarn add ${installFlag} ${pkg}`\n : `pnpm add ${installFlag} ${pkg}`\n\n execSync(cmd, { cwd: targetDir, stdio: 'inherit' })\n}","import { createServer } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { DevOptions } from '../types.js'\n\nexport async function devCommand(options: DevOptions): Promise<void> {\n logger.info('Starting dev server...')\n\n const server = await createServer({\n configFile: options.config,\n server: {\n port: options.port,\n open: options.open\n }\n })\n\n await server.listen()\n server.printUrls()\n logger.success('Dev server is running')\n}","import { build } from 'vite'\nimport { logger } from '../utils/logger.js'\nimport type { BuildOptions } from '../types.js'\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n logger.info('Building for production...')\n\n await build({\n configFile: options.config,\n build: {\n outDir: options.outDir\n },\n mode: options.mode || 'production'\n })\n\n logger.success('Build complete')\n}","import { resolve } from 'node:path'\nimport * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { renderTemplate, writeFile, getTemplatesDir, ensureDir } from '../utils/file.js'\nimport type { GenerateOptions, ComponentTemplateContext, PageTemplateContext } from '../types.js'\n\nexport async function generateCommand(options: Partial<GenerateOptions>): Promise<void> {\n const type = options.type || (await p.select({\n message: 'What to generate?',\n options: [\n { value: 'component', label: 'Component' },\n { value: 'page', label: 'Page' }\n ]\n })) as 'component' | 'page'\n\n if (p.isCancel(type)) {\n p.cancel('Cancelled')\n return\n }\n\n const name = options.name || (await p.text({\n message: 'Name:',\n placeholder: type === 'component' ? 'Button' : 'AboutPage',\n validate: (v) => !v ? 'Name is required' : undefined\n })) as string\n\n if (p.isCancel(name)) {\n p.cancel('Cancelled')\n return\n }\n\n const templatesDir = getTemplatesDir()\n\n if (type === 'component') {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/components')\n ensureDir(targetDir)\n\n const context: ComponentTemplateContext = {\n name: toPascalCase(name),\n kebabName: toKebabCase(name)\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'component.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n } else {\n const targetDir = options.targetDir || resolve(process.cwd(), 'src/pages')\n ensureDir(targetDir)\n\n const context: PageTemplateContext = {\n name: toPascalCase(name),\n path: `/${toKebabCase(name)}`\n }\n\n const content = renderTemplate(\n resolve(templatesDir, 'page.hbs'),\n context as unknown as Record<string, unknown>\n )\n\n const filename = `${context.name}.tsx`\n writeFile(targetDir, filename, content)\n logger.success(`Created ${type} at ${resolve(targetDir, filename)}`)\n }\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .replace(/[^a-zA-Z0-9]/g, ' ')\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('')\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/^-/, '')\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/--+/g, '-')\n .replace(/^-|-$/g, '')\n}","import * as p from '@clack/prompts'\nimport { logger } from '../utils/logger.js'\nimport { detectPackageManager, addPackage } from '../utils/pm.js'\nimport type { AddOptions } from '../types.js'\n\nexport async function addCommand(options: Partial<AddOptions>): Promise<void> {\n const pkg = options.package || (await p.text({\n message: 'Package to add:',\n placeholder: '@vobs/ui',\n validate: (v) => !v ? 'Package name is required' : undefined\n })) as string\n\n if (p.isCancel(pkg)) {\n p.cancel('Cancelled')\n return\n }\n\n const isDev = options.dev ?? (await p.confirm({\n message: 'Save as dev dependency?',\n initialValue: false\n })) as boolean\n\n if (p.isCancel(isDev)) {\n p.cancel('Cancelled')\n return\n }\n\n const pm = detectPackageManager(process.cwd())\n\n logger.step(`Installing ${pkg}...`)\n addPackage(process.cwd(), pm, pkg, isDev)\n\n logger.success(`Installed ${pkg}`)\n console.log(`\\n Import it in your code:\\n`)\n console.log(` import { ... } from '${pkg}'`)\n console.log()\n}","/**\n * VOBS CLI Banner — Mathematical Bold Sans-Serif\n * 𝗩𝗢𝗕𝗦 𝗖𝗟𝗜 𝘃𝟭.𝟬\n * Signals First · Zero Re-renders · Ultra Lightweight\n *\n * The banner is left-aligned with a fixed indent rather than horizontally\n * centered. Centering depends on the terminal column width and per-glyph\n * render width, neither of which is reliably knowable, so it drifts as the\n * window resizes. Fixed indent is stable across any terminal size.\n */\n\nconst BANNER_LINE1 = '𝗩𝗢𝗕𝗦 𝗖𝗟𝗜 𝘃𝟭.𝟬'\nconst BANNER_TAGLINE = 'Signals First · Zero Re-renders · Ultra Lightweight'\n\n/** Fixed left indent applied to every banner line (2 spaces). */\nconst INDENT = ' '\nconst DIM = '\\x1b[2m'\nconst RESET = '\\x1b[0m'\n\n/** Show full banner (used for logo command, --help) */\nexport function showLogo(): void {\n console.log()\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n console.log(`${INDENT}${DIM}${BANNER_TAGLINE}${RESET}`)\n console.log()\n console.log()\n}\n\n/** Show single-line version banner (used for --version) */\nexport function showBanner(): void {\n console.log(`${INDENT}${BANNER_LINE1}`)\n}\n\n/** Show the dev server start banner */\nexport function showDevBanner(): void {\n console.log()\n console.log(`${INDENT}${BANNER_LINE1}`)\n console.log()\n}","import { createInterface } from 'node:readline/promises'\nimport { stdin, stdout } from 'node:process'\nimport pc from 'picocolors'\nimport { showLogo, showBanner } from './banner.js'\nimport { initCommand } from './commands/init.js'\nimport { generateCommand } from './commands/generate.js'\nimport { addCommand } from './commands/add.js'\n\n/**\n * Interactive REPL shell. Runs `vobs` with no arguments and stays in CLI\n * mode accepting repeated commands until the user types `exit` / `quit`\n * or presses Ctrl+C / Ctrl+D.\n */\nexport async function startRepl(): Promise<void> {\n showLogo()\n\n const rl = createInterface({\n input: stdin,\n output: stdout,\n prompt: ` ${pc.magenta('❯')} `,\n terminal: true\n })\n\n rl.prompt()\n\n for await (const rawLine of rl) {\n const line = rawLine.trim()\n\n if (!line) {\n rl.prompt()\n continue\n }\n\n // Split into args, honoring simple double quotes\n const args = splitArgs(line)\n\n try {\n await dispatch(args)\n } catch (err) {\n console.error(` ${pc.red('✖')} ${err instanceof Error ? err.message : String(err)}`)\n }\n\n rl.prompt()\n }\n}\n\ntype Command = (args: string[]) => Promise<void>\n\n/** Internal command table for the REPL */\nconst TABLE: Record<string, { cmd: Command; help: string }> = {\n help: {\n cmd: async () => {\n console.log(` ${pc.bold('Available commands:')}`)\n console.log(` ${pc.dim('exit|quit')} Leave the interactive CLI`)\n console.log(` ${pc.dim('clear')} Clear the screen`)\n console.log(` ${pc.dim('logo')} Re-print the banner`)\n console.log(` ${pc.dim('version')} Show version`)\n console.log(` ${pc.dim('init <name>')} Create a new vobs project`)\n console.log(` ${pc.dim('generate <name>')} Generate a component/page`)\n console.log(` ${pc.dim('add <package>')} Add a package`)\n console.log(` ${pc.dim('dev|build')} Use \\`vobs dev\\` / \\`vobs build\\` in a terminal`)\n },\n help: ''\n },\n logo: { cmd: async () => showLogo(), help: '' },\n version: { cmd: async () => showBanner(), help: '' },\n clear: {\n cmd: async () => {\n process.stdout.write('\\x1Bc')\n },\n help: ''\n },\n exit: { cmd: async () => process.exit(0), help: '' },\n quit: { cmd: async () => process.exit(0), help: '' },\n init: {\n cmd: async (args) => {\n await initCommand({\n name: args[0],\n targetDir: undefined,\n packageManager: undefined,\n typescript: true,\n git: true\n })\n },\n help: ''\n },\n generate: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n g: {\n cmd: async (args) => {\n await generateCommand({\n name: args[0],\n type: undefined,\n targetDir: undefined\n })\n },\n help: ''\n },\n add: {\n cmd: async (args) => {\n await addCommand({ package: args[0], dev: args.includes('-D') || args.includes('--dev') })\n },\n help: ''\n }\n}\n\n/** Dispatch a parsed command line to the internal table */\nasync function dispatch(args: string[]): Promise<void> {\n const name = args[0]\n const rest = args.slice(1)\n\n if (!name) return\n\n const entry = TABLE[name]\n if (entry) {\n await entry.cmd(rest)\n return\n }\n\n console.log(` ${pc.yellow('⚠')} Unknown command: ${pc.bold(String(name))}. Type ${pc.cyan('help')} to see options.`)\n}\n\n/** Minimal tokenizer supporting double-quoted arguments */\nfunction splitArgs(line: string): string[] {\n const out: string[] = []\n const re = /[^\\s\"']+|\"([^\"]*)\"|'([^']*)'/g\n let m: RegExpExecArray | null\n while ((m = re.exec(line)) !== null) {\n out.push(m[1] ?? m[2] ?? m[0])\n }\n return out\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAoB;;;ACApB,IAAAA,oBAAwB;AACxB,IAAAC,6BAAyB;AACzB,QAAmB;;;ACFnB,wBAAe;AAEf,SAAS,YAAoB;AAC3B,SAAO,kBAAAC,QAAG,IAAI,KAAI,oBAAI,KAAK,GAAE,mBAAmB,CAAC,GAAG;AACtD;AAFS;AAIF,SAAS,KAAK,KAAmB;AACtC,UAAQ,IAAI,GAAG,UAAU,CAAC,IAAI,kBAAAA,QAAG,KAAK,QAAG,CAAC,IAAI,GAAG,EAAE;AACrD;AAFgB;AAIT,SAAS,QAAQ,KAAmB;AACzC,UAAQ,IAAI,GAAG,UAAU,CAAC,IAAI,kBAAAA,QAAG,MAAM,QAAG,CAAC,IAAI,GAAG,EAAE;AACtD;AAFgB;AAIT,SAAS,KAAK,KAAmB;AACtC,UAAQ,IAAI,GAAG,UAAU,CAAC,IAAI,kBAAAA,QAAG,OAAO,QAAG,CAAC,IAAI,GAAG,EAAE;AACvD;AAFgB;AAIT,SAAS,MAAM,KAAmB;AACvC,UAAQ,MAAM,GAAG,UAAU,CAAC,IAAI,kBAAAA,QAAG,IAAI,QAAG,CAAC,IAAI,GAAG,EAAE;AACtD;AAFgB;AAIT,SAAS,KAAK,KAAmB;AACtC,UAAQ,IAAI;AAAA,IAAO,kBAAAA,QAAG,KAAK,kBAAAA,QAAG,KAAK,GAAG,CAAC,CAAC,EAAE;AAC5C;AAFgB;AAIT,IAAM,SAAS,EAAE,MAAM,SAAS,MAAM,OAAO,KAAK;;;AC1BzD,qBAAmE;AACnE,uBAAiC;AACjC,sBAA8B;AAC9B,wBAAuB;AAEvB,IAAM,gBAAY,8BAAQ,+BAAc,mBAAe,CAAC;AACxD,IAAM,qBAAiB,0BAAQ,WAAW,MAAM,WAAW;AAGpD,SAAS,kBAA0B;AACxC,SAAO;AACT;AAFgB;AAKT,SAAS,eACd,cACA,SACQ;AACR,QAAM,aAAS,6BAAa,cAAc,OAAO;AACjD,QAAM,WAAW,kBAAAC,QAAW,QAAQ,MAAM;AAC1C,SAAO,SAAS,OAAO;AACzB;AAPgB;AAUT,SAAS,UAAU,KAAa,UAAkB,SAAuB;AAC9E,QAAM,eAAW,0BAAQ,KAAK,QAAQ;AACtC,oCAAU,0BAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAChD,oCAAc,UAAU,SAAS,OAAO;AAC1C;AAJgB;AAOT,SAAS,UAAU,KAAmB;AAC3C,MAAI,KAAC,2BAAW,GAAG,GAAG;AACpB,kCAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACpC;AACF;AAJgB;AAYhB,eAAe,iBAAiB,QAAgB,SAAiB,SAAiD;AAChH,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,IAAS;AAC9C,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,MAAW;AAEzC,QAAM,UAAU,YAAY,QAAQ,EAAE,eAAe,KAAK,CAAC;AAE3D,aAAW,SAAS,SAAS;AAC3B,UAAM,UAAU,KAAK,QAAQ,MAAM,IAAI;AACvC,UAAM,QAAQ,MAAM,KAAK,SAAS,MAAM;AACxC,UAAM,WAAW,QAAQ,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI,MAAM;AACzD,UAAM,WAAW,KAAK,SAAS,QAAQ;AAEvC,QAAI,MAAM,YAAY,GAAG;AACvB,gBAAU,QAAQ;AAClB,YAAM,iBAAiB,SAAS,UAAU,OAAO;AAAA,IACnD,WAAW,OAAO;AAChB,YAAM,UAAU,eAAe,SAAS,OAAO;AAC/C,gBAAU,SAAS,UAAU,OAAO;AAAA,IACtC,OAAO;AACL,YAAM,cAAU,6BAAa,SAAS,OAAO;AAC7C,gBAAU,SAAS,UAAU,OAAO;AAAA,IACtC;AAAA,EACF;AACF;AAvBe;AA0Bf,eAAsB,gBACpB,WACA,SACe;AACf,QAAM,kBAAc,0BAAQ,gBAAgB,OAAO;AACnD,YAAU,SAAS;AACnB,QAAM,iBAAiB,aAAa,WAAW,OAAO;AACxD;AAPsB;;;ACrEtB,IAAAC,kBAA2B;AAC3B,IAAAC,oBAAwB;AACxB,gCAAyB;AAKlB,SAAS,qBAAqB,WAAoC;AAEvE,MAAI,WAAW;AACb,YAAI,gCAAW,2BAAQ,WAAW,gBAAgB,CAAC,EAAG,QAAO;AAC7D,YAAI,gCAAW,2BAAQ,WAAW,WAAW,CAAC,EAAG,QAAO;AACxD,YAAI,gCAAW,2BAAQ,WAAW,mBAAmB,CAAC,EAAG,QAAO;AAAA,EAClE;AAGA,QAAM,YAAY,QAAQ,IAAI,yBAAyB;AACvD,MAAI,UAAU,WAAW,MAAM,EAAG,QAAO;AACzC,MAAI,UAAU,WAAW,MAAM,EAAG,QAAO;AACzC,MAAI,UAAU,WAAW,KAAK,EAAG,QAAO;AAGxC,SAAO;AACT;AAhBgB;AAmBT,SAAS,oBAAoB,WAAmB,IAA0B;AAC/E,QAAM,MAAM,OAAO,SAAS,SAAS,GAAG,EAAE;AAC1C,0CAAS,KAAK,EAAE,KAAK,WAAW,OAAO,UAAU,CAAC;AACpD;AAHgB;AAMT,SAAS,WAAW,WAAmB,IAAoB,KAAa,KAAoB;AACjG,QAAM,cAAc,MAAM,OAAO;AACjC,QAAM,MAAM,OAAO,QACf,eAAe,WAAW,IAAI,GAAG,KACjC,OAAO,SACL,YAAY,WAAW,IAAI,GAAG,KAC9B,YAAY,WAAW,IAAI,GAAG;AAEpC,0CAAS,KAAK,EAAE,KAAK,WAAW,OAAO,UAAU,CAAC;AACpD;AATgB;;;AHxBhB,eAAsB,YAAY,SAA8C;AAC9E,QAAM,cAAc,QAAQ,QAAS,MAAQ,OAAK;AAAA,IAChD,SAAS;AAAA,IACT,aAAa;AAAA,IACb,UAAU,wBAAC,MAAM,CAAC,IAAI,6BAA6B,QAAzC;AAAA,EACZ,CAAC;AAED,MAAM,WAAS,WAAW,GAAG;AAC3B,IAAE,SAAO,WAAW;AACpB;AAAA,EACF;AAEA,QAAM,YAAY,QAAQ,iBAAa,2BAAQ,QAAQ,IAAI,GAAG,WAAW;AAEzE,QAAM,iBAAiB,QAAQ,kBAAmB,MAAQ,SAAO;AAAA,IAC/D,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,MAC/B,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,MAC7B,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,IACjC;AAAA,EACF,CAAC;AAED,MAAM,WAAS,cAAc,GAAG;AAC9B,IAAE,SAAO,WAAW;AACpB;AAAA,EACF;AAEA,QAAM,gBAAgB,QAAQ,cAAe,MAAQ,UAAQ;AAAA,IAC3D,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AAED,MAAM,WAAS,aAAa,GAAG;AAC7B,IAAE,SAAO,WAAW;AACpB;AAAA,EACF;AAEA,QAAM,UAAU,QAAQ,OAAQ,MAAQ,UAAQ;AAAA,IAC9C,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AAED,MAAM,WAAS,OAAO,GAAG;AACvB,IAAE,SAAO,WAAW;AACpB;AAAA,EACF;AAEA,SAAO,KAAK,oBAAoB,WAAW,KAAK;AAEhD,QAAM,gBAAgB,WAAW;AAAA,IAC/B,MAAM;AAAA,IACN,aAAa,YAAY,YAAY,EAAE,QAAQ,QAAQ,GAAG;AAAA,IAC1D,YAAY;AAAA,IACZ,aAAa;AAAA,EACf,CAAC;AAED,SAAO,QAAQ,oBAAoB;AAEnC,SAAO,KAAK,4BAA4B;AACxC,sBAAoB,WAAW,cAAc;AAC7C,SAAO,QAAQ,wBAAwB;AAEvC,MAAI,SAAS;AACX,WAAO,KAAK,gCAAgC;AAC5C,QAAI;AACF,+CAAS,YAAY,EAAE,KAAK,WAAW,OAAO,SAAS,CAAC;AACxD,aAAO,QAAQ,4BAA4B;AAAA,IAC7C,QAAQ;AACN,aAAO,KAAK,kCAAkC;AAAA,IAChD;AAAA,EACF;AAEA,SAAO,KAAK,OAAO;AACnB,UAAQ,IAAI;AAAA,IAAO,mBAAmB,SAAS,SAAS,mBAAmB,SAAS,SAAS,SAAS;AAAA,CAAQ;AAChH;AA3EsB;;;AIRtB,kBAA6B;AAI7B,eAAsB,WAAW,SAAoC;AACnE,SAAO,KAAK,wBAAwB;AAEpC,QAAM,SAAS,UAAM,0BAAa;AAAA,IAChC,YAAY,QAAQ;AAAA,IACpB,QAAQ;AAAA,MACN,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,IAChB;AAAA,EACF,CAAC;AAED,QAAM,OAAO,OAAO;AACpB,SAAO,UAAU;AACjB,SAAO,QAAQ,uBAAuB;AACxC;AAdsB;;;ACJtB,IAAAC,eAAsB;AAItB,eAAsB,aAAa,SAAsC;AACvE,SAAO,KAAK,4BAA4B;AAExC,YAAM,oBAAM;AAAA,IACV,YAAY,QAAQ;AAAA,IACpB,OAAO;AAAA,MACL,QAAQ,QAAQ;AAAA,IAClB;AAAA,IACA,MAAM,QAAQ,QAAQ;AAAA,EACxB,CAAC;AAED,SAAO,QAAQ,gBAAgB;AACjC;AAZsB;;;ACJtB,IAAAC,oBAAwB;AACxB,IAAAC,KAAmB;AAKnB,eAAsB,gBAAgB,SAAkD;AACtF,QAAM,OAAO,QAAQ,QAAS,MAAQ,UAAO;AAAA,IAC3C,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,OAAO,aAAa,OAAO,YAAY;AAAA,MACzC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,IACjC;AAAA,EACF,CAAC;AAED,MAAM,YAAS,IAAI,GAAG;AACpB,IAAE,UAAO,WAAW;AACpB;AAAA,EACF;AAEA,QAAM,OAAO,QAAQ,QAAS,MAAQ,QAAK;AAAA,IACzC,SAAS;AAAA,IACT,aAAa,SAAS,cAAc,WAAW;AAAA,IAC/C,UAAU,wBAAC,MAAM,CAAC,IAAI,qBAAqB,QAAjC;AAAA,EACZ,CAAC;AAED,MAAM,YAAS,IAAI,GAAG;AACpB,IAAE,UAAO,WAAW;AACpB;AAAA,EACF;AAEA,QAAM,eAAe,gBAAgB;AAErC,MAAI,SAAS,aAAa;AACxB,UAAM,YAAY,QAAQ,iBAAa,2BAAQ,QAAQ,IAAI,GAAG,gBAAgB;AAC9E,cAAU,SAAS;AAEnB,UAAM,UAAoC;AAAA,MACxC,MAAM,aAAa,IAAI;AAAA,MACvB,WAAW,YAAY,IAAI;AAAA,IAC7B;AAEA,UAAM,UAAU;AAAA,UACd,2BAAQ,cAAc,eAAe;AAAA,MACrC;AAAA,IACF;AAEA,UAAM,WAAW,GAAG,QAAQ,IAAI;AAChC,cAAU,WAAW,UAAU,OAAO;AACtC,WAAO,QAAQ,WAAW,IAAI,WAAO,2BAAQ,WAAW,QAAQ,CAAC,EAAE;AAAA,EACrE,OAAO;AACL,UAAM,YAAY,QAAQ,iBAAa,2BAAQ,QAAQ,IAAI,GAAG,WAAW;AACzE,cAAU,SAAS;AAEnB,UAAM,UAA+B;AAAA,MACnC,MAAM,aAAa,IAAI;AAAA,MACvB,MAAM,IAAI,YAAY,IAAI,CAAC;AAAA,IAC7B;AAEA,UAAM,UAAU;AAAA,UACd,2BAAQ,cAAc,UAAU;AAAA,MAChC;AAAA,IACF;AAEA,UAAM,WAAW,GAAG,QAAQ,IAAI;AAChC,cAAU,WAAW,UAAU,OAAO;AACtC,WAAO,QAAQ,WAAW,IAAI,WAAO,2BAAQ,WAAW,QAAQ,CAAC,EAAE;AAAA,EACrE;AACF;AA9DsB;AAgEtB,SAAS,aAAa,KAAqB;AACzC,SAAO,IACJ,QAAQ,iBAAiB,GAAG,EAC5B,MAAM,KAAK,EACX,IAAI,UAAQ,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,EAAE,YAAY,CAAC,EACtE,KAAK,EAAE;AACZ;AANS;AAQT,SAAS,YAAY,KAAqB;AACxC,SAAO,IACJ,QAAQ,YAAY,KAAK,EACzB,YAAY,EACZ,QAAQ,MAAM,EAAE,EAChB,QAAQ,eAAe,GAAG,EAC1B,QAAQ,QAAQ,GAAG,EACnB,QAAQ,UAAU,EAAE;AACzB;AARS;;;AC9ET,IAAAC,KAAmB;AAKnB,eAAsB,WAAW,SAA6C;AAC5E,QAAM,MAAM,QAAQ,WAAY,MAAQ,QAAK;AAAA,IAC3C,SAAS;AAAA,IACT,aAAa;AAAA,IACb,UAAU,wBAAC,MAAM,CAAC,IAAI,6BAA6B,QAAzC;AAAA,EACZ,CAAC;AAED,MAAM,YAAS,GAAG,GAAG;AACnB,IAAE,UAAO,WAAW;AACpB;AAAA,EACF;AAEA,QAAM,QAAQ,QAAQ,OAAQ,MAAQ,WAAQ;AAAA,IAC5C,SAAS;AAAA,IACT,cAAc;AAAA,EAChB,CAAC;AAED,MAAM,YAAS,KAAK,GAAG;AACrB,IAAE,UAAO,WAAW;AACpB;AAAA,EACF;AAEA,QAAM,KAAK,qBAAqB,QAAQ,IAAI,CAAC;AAE7C,SAAO,KAAK,cAAc,GAAG,KAAK;AAClC,aAAW,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AAExC,SAAO,QAAQ,aAAa,GAAG,EAAE;AACjC,UAAQ,IAAI;AAAA;AAAA,CAA+B;AAC3C,UAAQ,IAAI,4BAA4B,GAAG,GAAG;AAC9C,UAAQ,IAAI;AACd;AA/BsB;;;ACMtB,IAAM,eAAe;AACrB,IAAM,iBAAiB;AAGvB,IAAM,SAAS;AACf,IAAM,MAAM;AACZ,IAAM,QAAQ;AAGP,SAAS,WAAiB;AAC/B,UAAQ,IAAI;AACZ,UAAQ,IAAI;AACZ,UAAQ,IAAI,GAAG,MAAM,GAAG,YAAY,EAAE;AACtC,UAAQ,IAAI;AACZ,UAAQ,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,KAAK,EAAE;AACtD,UAAQ,IAAI;AACZ,UAAQ,IAAI;AACd;AARgB;AAWT,SAAS,aAAmB;AACjC,UAAQ,IAAI,GAAG,MAAM,GAAG,YAAY,EAAE;AACxC;AAFgB;AAKT,SAAS,gBAAsB;AACpC,UAAQ,IAAI;AACZ,UAAQ,IAAI,GAAG,MAAM,GAAG,YAAY,EAAE;AACtC,UAAQ,IAAI;AACd;AAJgB;;;AT5BT,SAAS,YAAoC;AAClD,QAAM,UAAM,gBAAI,MAAM;AAEtB,MACG,QAAQ,eAAe,2BAA2B,EAClD,OAAO,eAAe,kBAAkB,EACxC,OAAO,aAAa,iCAAiC,EACrD,OAAO,mBAAmB,uBAAuB,EACjD,OAAO,YAAY,uBAAuB,EAC1C,OAAO,OAAO,MAAc,YAAqC;AAChE,UAAM,YAAY;AAAA,MAChB;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,gBAAgB,QAAQ;AAAA,MACxB,YAAY,QAAQ,eAAe;AAAA,MACnC,KAAK,QAAQ,QAAQ;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAEH,MACG,QAAQ,iBAAiB,gBAAgB,EACzC,OAAO,eAAe,kBAAkB,EACxC,OAAO,aAAa,iCAAiC,EACrD,OAAO,mBAAmB,uBAAuB,EACjD,OAAO,YAAY,uBAAuB,EAC1C,OAAO,OAAO,MAAc,YAAqC;AAChE,UAAM,YAAY;AAAA,MAChB;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,gBAAgB,QAAQ;AAAA,MACxB,YAAY,QAAQ,eAAe;AAAA,MACnC,KAAK,QAAQ,QAAQ;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAEH,MACG,QAAQ,OAAO,sBAAsB,EACrC,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,iBAAiB,mBAAmB,EAC3C,OAAO,UAAU,uBAAuB,EACxC,OAAO,OAAO,YAAqC;AAClD,kBAAc;AACd,UAAM,WAAW;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ;AAAA,MACd,MAAM,QAAQ;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;AAEH,MACG,QAAQ,SAAS,sBAAsB,EACvC,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,kBAAkB,kBAAkB,EAC3C,OAAO,iBAAiB,YAAY,EACpC,OAAO,OAAO,YAAqC;AAClD,UAAM,aAAa;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;AAEH,MACG,QAAQ,mBAAmB,gCAAgC,EAC3D,MAAM,GAAG,EACT,OAAO,iBAAiB,yBAAyB,EACjD,OAAO,eAAe,kBAAkB,EACxC,OAAO,OAAO,MAAc,YAAqC;AAChE,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA,MAAO,QAAQ,QAAiC;AAAA,MAChD,WAAW,QAAQ;AAAA,IACrB,CAAC;AAAA,EACH,CAAC;AAEH,MACG,QAAQ,iBAAiB,eAAe,EACxC,OAAO,aAAa,wBAAwB,EAC5C,OAAO,OAAO,KAAa,YAAqC;AAC/D,UAAM,WAAW;AAAA,MACf,SAAS;AAAA,MACT,KAAK,QAAQ;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AAEH,MACG,QAAQ,QAAQ,yCAAyC,EACzD,OAAO,MAAM;AACZ,aAAS;AAAA,EACX,CAAC;AAEH,MAAI,GAAG,UAAU,MAAM;AACrB,eAAW;AAAA,EACb,CAAC;AAED,MAAI,KAAK;AACT,MAAI,QAAQ,OAAO;AAEnB,SAAO;AACT;AAnGgB;;;AURhB,sBAAgC;AAChC,0BAA8B;AAC9B,IAAAC,qBAAe;AAWf,eAAsB,YAA2B;AAC/C,WAAS;AAET,QAAM,SAAK,iCAAgB;AAAA,IACzB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,KAAK,mBAAAC,QAAG,QAAQ,QAAG,CAAC;AAAA,IAC5B,UAAU;AAAA,EACZ,CAAC;AAED,KAAG,OAAO;AAEV,mBAAiB,WAAW,IAAI;AAC9B,UAAM,OAAO,QAAQ,KAAK;AAE1B,QAAI,CAAC,MAAM;AACT,SAAG,OAAO;AACV;AAAA,IACF;AAGA,UAAM,OAAO,UAAU,IAAI;AAE3B,QAAI;AACF,YAAM,SAAS,IAAI;AAAA,IACrB,SAAS,KAAK;AACZ,cAAQ,MAAM,KAAK,mBAAAA,QAAG,IAAI,QAAG,CAAC,IAAI,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IACtF;AAEA,OAAG,OAAO;AAAA,EACZ;AACF;AA/BsB;AAoCtB,IAAM,QAAwD;AAAA,EAC5D,MAAM;AAAA,IACJ,KAAK,mCAAY;AACf,cAAQ,IAAI,KAAK,mBAAAA,QAAG,KAAK,qBAAqB,CAAC,EAAE;AACjD,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,WAAW,CAAC,iCAAiC;AACvE,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,OAAO,CAAC,4BAA4B;AAC9D,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,MAAM,CAAC,gCAAgC;AACjE,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,SAAS,CAAC,sBAAsB;AAC1D,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,aAAa,CAAC,+BAA+B;AACvE,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,iBAAiB,CAAC,4BAA4B;AACxE,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,eAAe,CAAC,kBAAkB;AAC5D,cAAQ,IAAI,OAAO,mBAAAA,QAAG,IAAI,WAAW,CAAC,wDAAwD;AAAA,IAChG,GAVK;AAAA,IAWL,MAAM;AAAA,EACR;AAAA,EACA,MAAM,EAAE,KAAK,mCAAY,SAAS,GAArB,QAAwB,MAAM,GAAG;AAAA,EAC9C,SAAS,EAAE,KAAK,mCAAY,WAAW,GAAvB,QAA0B,MAAM,GAAG;AAAA,EACnD,OAAO;AAAA,IACL,KAAK,mCAAY;AACf,cAAQ,OAAO,MAAM,OAAO;AAAA,IAC9B,GAFK;AAAA,IAGL,MAAM;AAAA,EACR;AAAA,EACA,MAAM,EAAE,KAAK,mCAAY,QAAQ,KAAK,CAAC,GAA1B,QAA6B,MAAM,GAAG;AAAA,EACnD,MAAM,EAAE,KAAK,mCAAY,QAAQ,KAAK,CAAC,GAA1B,QAA6B,MAAM,GAAG;AAAA,EACnD,MAAM;AAAA,IACJ,KAAK,8BAAO,SAAS;AACnB,YAAM,YAAY;AAAA,QAChB,MAAM,KAAK,CAAC;AAAA,QACZ,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,KAAK;AAAA,MACP,CAAC;AAAA,IACH,GARK;AAAA,IASL,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,KAAK,8BAAO,SAAS;AACnB,YAAM,gBAAgB;AAAA,QACpB,MAAM,KAAK,CAAC;AAAA,QACZ,MAAM;AAAA,QACN,WAAW;AAAA,MACb,CAAC;AAAA,IACH,GANK;AAAA,IAOL,MAAM;AAAA,EACR;AAAA,EACA,GAAG;AAAA,IACD,KAAK,8BAAO,SAAS;AACnB,YAAM,gBAAgB;AAAA,QACpB,MAAM,KAAK,CAAC;AAAA,QACZ,MAAM;AAAA,QACN,WAAW;AAAA,MACb,CAAC;AAAA,IACH,GANK;AAAA,IAOL,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH,KAAK,8BAAO,SAAS;AACnB,YAAM,WAAW,EAAE,SAAS,KAAK,CAAC,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,OAAO,EAAE,CAAC;AAAA,IAC3F,GAFK;AAAA,IAGL,MAAM;AAAA,EACR;AACF;AAGA,eAAe,SAAS,MAA+B;AACrD,QAAM,OAAO,KAAK,CAAC;AACnB,QAAM,OAAO,KAAK,MAAM,CAAC;AAEzB,MAAI,CAAC,KAAM;AAEX,QAAM,QAAQ,MAAM,IAAI;AACxB,MAAI,OAAO;AACT,UAAM,MAAM,IAAI,IAAI;AACpB;AAAA,EACF;AAEA,UAAQ,IAAI,KAAK,mBAAAA,QAAG,OAAO,QAAG,CAAC,qBAAqB,mBAAAA,QAAG,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,mBAAAA,QAAG,KAAK,MAAM,CAAC,kBAAkB;AACtH;AAbe;AAgBf,SAAS,UAAU,MAAwB;AACzC,QAAM,MAAgB,CAAC;AACvB,QAAM,KAAK;AACX,MAAI;AACJ,UAAQ,IAAI,GAAG,KAAK,IAAI,OAAO,MAAM;AACnC,QAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,EAC/B;AACA,SAAO;AACT;AARS;;;AX9HT,eAAsB,MAAM,MAA+B;AAEzD,MAAI,KAAK,WAAW,KAAK,KAAK,CAAC,MAAM,OAAO;AAC1C,UAAM,UAAU;AAChB;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,IAAI,GAAG;AACrD,eAAW;AACX;AAAA,EACF;AAGA,YAAU,EAAE,MAAM;AACpB;AAdsB;","names":["import_node_path","import_node_child_process","pc","Handlebars","import_node_fs","import_node_path","import_vite","import_node_path","p","p","import_picocolors","pc"]}
|
package/dist/start.js
CHANGED
|
@@ -1,45 +1,50 @@
|
|
|
1
|
-
import { cac } from 'cac';
|
|
2
|
-
import { dirname, resolve } from 'path';
|
|
3
|
-
import { execSync } from 'child_process';
|
|
4
|
-
import * as p from '@clack/prompts';
|
|
5
|
-
import pc2 from 'picocolors';
|
|
6
|
-
import { readFileSync, mkdirSync, writeFileSync, existsSync } from 'fs';
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
import Handlebars from 'handlebars';
|
|
9
|
-
import { createServer, build } from 'vite';
|
|
10
|
-
import { createInterface } from 'readline/promises';
|
|
11
|
-
import { stdout, stdin } from 'process';
|
|
12
|
-
|
|
13
1
|
var __defProp = Object.defineProperty;
|
|
14
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// packages/cli/src/cli.ts
|
|
5
|
+
import { cac } from "cac";
|
|
6
|
+
|
|
7
|
+
// packages/cli/src/commands/init.ts
|
|
8
|
+
import { resolve as resolve3 } from "path";
|
|
9
|
+
import { execSync as execSync2 } from "child_process";
|
|
10
|
+
import * as p from "@clack/prompts";
|
|
11
|
+
|
|
12
|
+
// packages/cli/src/utils/logger.ts
|
|
13
|
+
import pc from "picocolors";
|
|
15
14
|
function timestamp() {
|
|
16
|
-
return
|
|
15
|
+
return pc.dim(`[${(/* @__PURE__ */ new Date()).toLocaleTimeString()}]`);
|
|
17
16
|
}
|
|
18
17
|
__name(timestamp, "timestamp");
|
|
19
18
|
function info(msg) {
|
|
20
|
-
console.log(`${timestamp()} ${
|
|
19
|
+
console.log(`${timestamp()} ${pc.cyan("\u2139")} ${msg}`);
|
|
21
20
|
}
|
|
22
21
|
__name(info, "info");
|
|
23
22
|
function success(msg) {
|
|
24
|
-
console.log(`${timestamp()} ${
|
|
23
|
+
console.log(`${timestamp()} ${pc.green("\u2714")} ${msg}`);
|
|
25
24
|
}
|
|
26
25
|
__name(success, "success");
|
|
27
26
|
function warn(msg) {
|
|
28
|
-
console.log(`${timestamp()} ${
|
|
27
|
+
console.log(`${timestamp()} ${pc.yellow("\u26A0")} ${msg}`);
|
|
29
28
|
}
|
|
30
29
|
__name(warn, "warn");
|
|
31
30
|
function error(msg) {
|
|
32
|
-
console.error(`${timestamp()} ${
|
|
31
|
+
console.error(`${timestamp()} ${pc.red("\u2716")} ${msg}`);
|
|
33
32
|
}
|
|
34
33
|
__name(error, "error");
|
|
35
34
|
function step(msg) {
|
|
36
35
|
console.log(`
|
|
37
|
-
${
|
|
36
|
+
${pc.bold(pc.cyan(msg))}`);
|
|
38
37
|
}
|
|
39
38
|
__name(step, "step");
|
|
40
39
|
var logger = { info, success, warn, error, step };
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
|
|
41
|
+
// packages/cli/src/utils/file.ts
|
|
42
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
|
|
43
|
+
import { resolve, dirname } from "path";
|
|
44
|
+
import { fileURLToPath } from "url";
|
|
45
|
+
import Handlebars from "handlebars";
|
|
46
|
+
var __dirname = dirname(fileURLToPath(import.meta.url));
|
|
47
|
+
var TEMPLATES_ROOT = resolve(__dirname, "..", "templates");
|
|
43
48
|
function getTemplatesDir() {
|
|
44
49
|
return TEMPLATES_ROOT;
|
|
45
50
|
}
|
|
@@ -63,8 +68,8 @@ function ensureDir(dir) {
|
|
|
63
68
|
}
|
|
64
69
|
__name(ensureDir, "ensureDir");
|
|
65
70
|
async function copyDirRecursive(srcDir, destDir, context) {
|
|
66
|
-
const { readdirSync } = await import(
|
|
67
|
-
const { join } = await import(
|
|
71
|
+
const { readdirSync } = await import("fs");
|
|
72
|
+
const { join } = await import("path");
|
|
68
73
|
const entries = readdirSync(srcDir, { withFileTypes: true });
|
|
69
74
|
for (const entry of entries) {
|
|
70
75
|
const srcPath = join(srcDir, entry.name);
|
|
@@ -90,11 +95,16 @@ async function scaffoldProject(targetDir, context) {
|
|
|
90
95
|
await copyDirRecursive(templateDir, targetDir, context);
|
|
91
96
|
}
|
|
92
97
|
__name(scaffoldProject, "scaffoldProject");
|
|
98
|
+
|
|
99
|
+
// packages/cli/src/utils/pm.ts
|
|
100
|
+
import { existsSync as existsSync2 } from "fs";
|
|
101
|
+
import { resolve as resolve2 } from "path";
|
|
102
|
+
import { execSync } from "child_process";
|
|
93
103
|
function detectPackageManager(targetDir) {
|
|
94
104
|
if (targetDir) {
|
|
95
|
-
if (
|
|
96
|
-
if (
|
|
97
|
-
if (
|
|
105
|
+
if (existsSync2(resolve2(targetDir, "pnpm-lock.yaml"))) return "pnpm";
|
|
106
|
+
if (existsSync2(resolve2(targetDir, "yarn.lock"))) return "yarn";
|
|
107
|
+
if (existsSync2(resolve2(targetDir, "package-lock.json"))) return "npm";
|
|
98
108
|
}
|
|
99
109
|
const userAgent = process.env.npm_config_user_agent || "";
|
|
100
110
|
if (userAgent.startsWith("pnpm")) return "pnpm";
|
|
@@ -126,7 +136,7 @@ async function initCommand(options) {
|
|
|
126
136
|
p.cancel("Cancelled");
|
|
127
137
|
return;
|
|
128
138
|
}
|
|
129
|
-
const targetDir = options.targetDir ||
|
|
139
|
+
const targetDir = options.targetDir || resolve3(process.cwd(), projectName);
|
|
130
140
|
const packageManager = options.packageManager || await p.select({
|
|
131
141
|
message: "Package manager:",
|
|
132
142
|
options: [
|
|
@@ -169,7 +179,7 @@ async function initCommand(options) {
|
|
|
169
179
|
if (initGit) {
|
|
170
180
|
logger.step("Initializing git repository...");
|
|
171
181
|
try {
|
|
172
|
-
|
|
182
|
+
execSync2("git init", { cwd: targetDir, stdio: "ignore" });
|
|
173
183
|
logger.success("Git repository initialized");
|
|
174
184
|
} catch {
|
|
175
185
|
logger.warn("Git not found, skipping git init");
|
|
@@ -181,6 +191,9 @@ async function initCommand(options) {
|
|
|
181
191
|
`);
|
|
182
192
|
}
|
|
183
193
|
__name(initCommand, "initCommand");
|
|
194
|
+
|
|
195
|
+
// packages/cli/src/commands/dev.ts
|
|
196
|
+
import { createServer } from "vite";
|
|
184
197
|
async function devCommand(options) {
|
|
185
198
|
logger.info("Starting dev server...");
|
|
186
199
|
const server = await createServer({
|
|
@@ -195,6 +208,9 @@ async function devCommand(options) {
|
|
|
195
208
|
logger.success("Dev server is running");
|
|
196
209
|
}
|
|
197
210
|
__name(devCommand, "devCommand");
|
|
211
|
+
|
|
212
|
+
// packages/cli/src/commands/build.ts
|
|
213
|
+
import { build } from "vite";
|
|
198
214
|
async function buildCommand(options) {
|
|
199
215
|
logger.info("Building for production...");
|
|
200
216
|
await build({
|
|
@@ -207,56 +223,60 @@ async function buildCommand(options) {
|
|
|
207
223
|
logger.success("Build complete");
|
|
208
224
|
}
|
|
209
225
|
__name(buildCommand, "buildCommand");
|
|
226
|
+
|
|
227
|
+
// packages/cli/src/commands/generate.ts
|
|
228
|
+
import { resolve as resolve4 } from "path";
|
|
229
|
+
import * as p2 from "@clack/prompts";
|
|
210
230
|
async function generateCommand(options) {
|
|
211
|
-
const type = options.type || await
|
|
231
|
+
const type = options.type || await p2.select({
|
|
212
232
|
message: "What to generate?",
|
|
213
233
|
options: [
|
|
214
234
|
{ value: "component", label: "Component" },
|
|
215
235
|
{ value: "page", label: "Page" }
|
|
216
236
|
]
|
|
217
237
|
});
|
|
218
|
-
if (
|
|
219
|
-
|
|
238
|
+
if (p2.isCancel(type)) {
|
|
239
|
+
p2.cancel("Cancelled");
|
|
220
240
|
return;
|
|
221
241
|
}
|
|
222
|
-
const name = options.name || await
|
|
242
|
+
const name = options.name || await p2.text({
|
|
223
243
|
message: "Name:",
|
|
224
244
|
placeholder: type === "component" ? "Button" : "AboutPage",
|
|
225
245
|
validate: /* @__PURE__ */ __name((v) => !v ? "Name is required" : void 0, "validate")
|
|
226
246
|
});
|
|
227
|
-
if (
|
|
228
|
-
|
|
247
|
+
if (p2.isCancel(name)) {
|
|
248
|
+
p2.cancel("Cancelled");
|
|
229
249
|
return;
|
|
230
250
|
}
|
|
231
251
|
const templatesDir = getTemplatesDir();
|
|
232
252
|
if (type === "component") {
|
|
233
|
-
const targetDir = options.targetDir ||
|
|
253
|
+
const targetDir = options.targetDir || resolve4(process.cwd(), "src/components");
|
|
234
254
|
ensureDir(targetDir);
|
|
235
255
|
const context = {
|
|
236
256
|
name: toPascalCase(name),
|
|
237
257
|
kebabName: toKebabCase(name)
|
|
238
258
|
};
|
|
239
259
|
const content = renderTemplate(
|
|
240
|
-
|
|
260
|
+
resolve4(templatesDir, "component.hbs"),
|
|
241
261
|
context
|
|
242
262
|
);
|
|
243
263
|
const filename = `${context.name}.tsx`;
|
|
244
264
|
writeFile(targetDir, filename, content);
|
|
245
|
-
logger.success(`Created ${type} at ${
|
|
265
|
+
logger.success(`Created ${type} at ${resolve4(targetDir, filename)}`);
|
|
246
266
|
} else {
|
|
247
|
-
const targetDir = options.targetDir ||
|
|
267
|
+
const targetDir = options.targetDir || resolve4(process.cwd(), "src/pages");
|
|
248
268
|
ensureDir(targetDir);
|
|
249
269
|
const context = {
|
|
250
270
|
name: toPascalCase(name),
|
|
251
271
|
path: `/${toKebabCase(name)}`
|
|
252
272
|
};
|
|
253
273
|
const content = renderTemplate(
|
|
254
|
-
|
|
274
|
+
resolve4(templatesDir, "page.hbs"),
|
|
255
275
|
context
|
|
256
276
|
);
|
|
257
277
|
const filename = `${context.name}.tsx`;
|
|
258
278
|
writeFile(targetDir, filename, content);
|
|
259
|
-
logger.success(`Created ${type} at ${
|
|
279
|
+
logger.success(`Created ${type} at ${resolve4(targetDir, filename)}`);
|
|
260
280
|
}
|
|
261
281
|
}
|
|
262
282
|
__name(generateCommand, "generateCommand");
|
|
@@ -268,22 +288,25 @@ function toKebabCase(str) {
|
|
|
268
288
|
return str.replace(/([A-Z])/g, "-$1").toLowerCase().replace(/^-/, "").replace(/[^a-z0-9-]/g, "-").replace(/--+/g, "-").replace(/^-|-$/g, "");
|
|
269
289
|
}
|
|
270
290
|
__name(toKebabCase, "toKebabCase");
|
|
291
|
+
|
|
292
|
+
// packages/cli/src/commands/add.ts
|
|
293
|
+
import * as p3 from "@clack/prompts";
|
|
271
294
|
async function addCommand(options) {
|
|
272
|
-
const pkg = options.package || await
|
|
295
|
+
const pkg = options.package || await p3.text({
|
|
273
296
|
message: "Package to add:",
|
|
274
297
|
placeholder: "@vobs/ui",
|
|
275
298
|
validate: /* @__PURE__ */ __name((v) => !v ? "Package name is required" : void 0, "validate")
|
|
276
299
|
});
|
|
277
|
-
if (
|
|
278
|
-
|
|
300
|
+
if (p3.isCancel(pkg)) {
|
|
301
|
+
p3.cancel("Cancelled");
|
|
279
302
|
return;
|
|
280
303
|
}
|
|
281
|
-
const isDev = options.dev ?? await
|
|
304
|
+
const isDev = options.dev ?? await p3.confirm({
|
|
282
305
|
message: "Save as dev dependency?",
|
|
283
306
|
initialValue: false
|
|
284
307
|
});
|
|
285
|
-
if (
|
|
286
|
-
|
|
308
|
+
if (p3.isCancel(isDev)) {
|
|
309
|
+
p3.cancel("Cancelled");
|
|
287
310
|
return;
|
|
288
311
|
}
|
|
289
312
|
const pm = detectPackageManager(process.cwd());
|
|
@@ -385,6 +408,11 @@ function createCLI() {
|
|
|
385
408
|
return cli;
|
|
386
409
|
}
|
|
387
410
|
__name(createCLI, "createCLI");
|
|
411
|
+
|
|
412
|
+
// packages/cli/src/repl.ts
|
|
413
|
+
import { createInterface } from "readline/promises";
|
|
414
|
+
import { stdin, stdout } from "process";
|
|
415
|
+
import pc2 from "picocolors";
|
|
388
416
|
async function startRepl() {
|
|
389
417
|
showLogo();
|
|
390
418
|
const rl = createInterface({
|
|
@@ -510,7 +538,7 @@ async function start(args) {
|
|
|
510
538
|
createCLI().parse();
|
|
511
539
|
}
|
|
512
540
|
__name(start, "start");
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
541
|
+
export {
|
|
542
|
+
start
|
|
543
|
+
};
|
|
516
544
|
//# sourceMappingURL=start.js.map
|