@typokit/cli 0.1.4

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.
Files changed (64) hide show
  1. package/dist/bin.d.ts +3 -0
  2. package/dist/bin.d.ts.map +1 -0
  3. package/dist/bin.js +13 -0
  4. package/dist/bin.js.map +1 -0
  5. package/dist/commands/build.d.ts +42 -0
  6. package/dist/commands/build.d.ts.map +1 -0
  7. package/dist/commands/build.js +302 -0
  8. package/dist/commands/build.js.map +1 -0
  9. package/dist/commands/dev.d.ts +106 -0
  10. package/dist/commands/dev.d.ts.map +1 -0
  11. package/dist/commands/dev.js +536 -0
  12. package/dist/commands/dev.js.map +1 -0
  13. package/dist/commands/generate.d.ts +65 -0
  14. package/dist/commands/generate.d.ts.map +1 -0
  15. package/dist/commands/generate.js +430 -0
  16. package/dist/commands/generate.js.map +1 -0
  17. package/dist/commands/inspect.d.ts +26 -0
  18. package/dist/commands/inspect.d.ts.map +1 -0
  19. package/dist/commands/inspect.js +579 -0
  20. package/dist/commands/inspect.js.map +1 -0
  21. package/dist/commands/migrate.d.ts +70 -0
  22. package/dist/commands/migrate.d.ts.map +1 -0
  23. package/dist/commands/migrate.js +570 -0
  24. package/dist/commands/migrate.js.map +1 -0
  25. package/dist/commands/scaffold.d.ts +70 -0
  26. package/dist/commands/scaffold.d.ts.map +1 -0
  27. package/dist/commands/scaffold.js +483 -0
  28. package/dist/commands/scaffold.js.map +1 -0
  29. package/dist/commands/test.d.ts +56 -0
  30. package/dist/commands/test.d.ts.map +1 -0
  31. package/dist/commands/test.js +248 -0
  32. package/dist/commands/test.js.map +1 -0
  33. package/dist/config.d.ts +20 -0
  34. package/dist/config.d.ts.map +1 -0
  35. package/dist/config.js +69 -0
  36. package/dist/config.js.map +1 -0
  37. package/dist/index.d.ts +30 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +245 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/logger.d.ts +12 -0
  42. package/dist/logger.d.ts.map +1 -0
  43. package/dist/logger.js +33 -0
  44. package/dist/logger.js.map +1 -0
  45. package/package.json +33 -0
  46. package/src/bin.ts +22 -0
  47. package/src/commands/build.ts +433 -0
  48. package/src/commands/dev.ts +822 -0
  49. package/src/commands/generate.ts +640 -0
  50. package/src/commands/inspect.ts +885 -0
  51. package/src/commands/migrate.ts +800 -0
  52. package/src/commands/scaffold.ts +627 -0
  53. package/src/commands/test.ts +353 -0
  54. package/src/config.ts +93 -0
  55. package/src/dev.test.ts +285 -0
  56. package/src/env.d.ts +86 -0
  57. package/src/generate.test.ts +304 -0
  58. package/src/index.test.ts +217 -0
  59. package/src/index.ts +397 -0
  60. package/src/inspect.test.ts +411 -0
  61. package/src/logger.ts +49 -0
  62. package/src/migrate.test.ts +205 -0
  63. package/src/scaffold.test.ts +256 -0
  64. package/src/test.test.ts +230 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EACL,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,UAAU,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,GACb,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAO5B,mDAAmD;AACnD,MAAM,UAAU,SAAS,CAAC,IAAc;IAKtC,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,+CAA+C;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAE3D,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAEjE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEtC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CACT,wEAAwE,CACzE,CAAC;QACF,MAAM,CAAC,IAAI,CACT,oEAAoE,CACrE,CAAC;QACF,MAAM,CAAC,IAAI,CACT,yEAAyE,CAC1E,CAAC;QACF,MAAM,CAAC,IAAI,CACT,qEAAqE,CACtE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CACT,iEAAiE,CAClE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CACT,+DAA+D,CAChE,CAAC;QACF,MAAM,CAAC,IAAI,CACT,+DAA+D,CAChE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CACT,mEAAmE,CACpE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,OAAO;YACP,MAAM;YACN,MAAM;YACN,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,SAAS,GACb,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,QAAQ;YACrC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC;QAEX,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAClE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO;YACP,MAAM;YACN,MAAM;YACN,OAAO;YACP,SAAS;SACV,CAAC,CAAC;QAEH,wDAAwD;QACxD,+DAA+D;QAC/D,4BAA4B;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,+CAA+C;QAC/C,iDAAiD;QACjD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,GACrC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,OAAO;YACP,MAAM;YACN,MAAM;YACN,UAAU;YACV,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GACnC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,OAAO;YACP,MAAM;YACN,MAAM;YACN,UAAU;YACV,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GACnC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,OAAO;YACP,MAAM;YACN,MAAM;YACN,UAAU;YACV,UAAU,EAAE,aAAa;YACzB,KAAK;SACN,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,GACrC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,OAAO;YACP,MAAM;YACN,UAAU,EAAE,MAAM;YAClB,UAAU;YACV,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,GACrC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,OAAO;YACP,MAAM;YACN,UAAU;YACV,UAAU,EAAE,aAAa;YACzB,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAkC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;QAC/B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEnE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEvC,MAAM,UAAU,GACd,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,OAAO;YACP,MAAM;YACN,MAAM;YACN,UAAU;YACV,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface CliLogger {
2
+ info(message: string): void;
3
+ success(message: string): void;
4
+ warn(message: string): void;
5
+ error(message: string): void;
6
+ verbose(message: string): void;
7
+ step(label: string, message: string): void;
8
+ }
9
+ export declare function createLogger(options: {
10
+ verbose?: boolean;
11
+ }): CliLogger;
12
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAqCtE"}
package/dist/logger.js ADDED
@@ -0,0 +1,33 @@
1
+ // @typokit/cli — Structured CLI logger
2
+ export function createLogger(options) {
3
+ const isVerbose = options.verbose ?? false;
4
+ const write = (prefix, message) => {
5
+ const g = globalThis;
6
+ const proc = g["process"];
7
+ const out = proc?.stderr ?? { write: () => { } };
8
+ out.write(`${prefix} ${message}\n`);
9
+ };
10
+ return {
11
+ info(message) {
12
+ write("[info]", message);
13
+ },
14
+ success(message) {
15
+ write("[ok]", message);
16
+ },
17
+ warn(message) {
18
+ write("[warn]", message);
19
+ },
20
+ error(message) {
21
+ write("[error]", message);
22
+ },
23
+ verbose(message) {
24
+ if (isVerbose) {
25
+ write("[verbose]", message);
26
+ }
27
+ },
28
+ step(label, message) {
29
+ write(`[${label}]`, message);
30
+ },
31
+ };
32
+ }
33
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAWvC,MAAM,UAAU,YAAY,CAAC,OAA8B;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAE3C,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,OAAe,EAAQ,EAAE;QACtD,MAAM,CAAC,GAAG,UAAqC,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAKX,CAAC;QACd,MAAM,GAAG,GAAG,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,CAAC,OAAe;YAClB,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,OAAe;YACrB,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,OAAe;YAClB,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,OAAe;YACnB,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,OAAe;YACrB,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAa,EAAE,OAAe;YACjC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@typokit/cli",
3
+ "exports": {
4
+ ".": {
5
+ "import": "./dist/index.js",
6
+ "types": "./dist/index.d.ts"
7
+ }
8
+ },
9
+ "bin": {
10
+ "typokit": "./dist/bin.js"
11
+ },
12
+ "version": "0.1.4",
13
+ "type": "module",
14
+ "files": [
15
+ "dist",
16
+ "src"
17
+ ],
18
+ "main": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "dependencies": {
21
+ "@typokit/core": "0.1.4",
22
+ "@typokit/types": "0.1.4",
23
+ "@typokit/transform-native": "0.1.4"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/KyleBastien/typokit",
28
+ "directory": "packages/cli"
29
+ },
30
+ "scripts": {
31
+ "test": "rstest run --passWithNoTests"
32
+ }
33
+ }
package/src/bin.ts ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ // @typokit/cli — CLI binary entry point
3
+
4
+ import { run } from "./index.js";
5
+
6
+ const g = globalThis as Record<string, unknown>;
7
+ const proc = g["process"] as { argv: string[]; exit(code: number): void };
8
+
9
+ run(proc.argv).then(
10
+ (code) => proc.exit(code),
11
+ (err) => {
12
+ const stderr = (
13
+ proc as unknown as Record<string, { write(s: string): void }>
14
+ )["stderr"];
15
+ if (stderr?.write) {
16
+ stderr.write(
17
+ `[error] ${err instanceof Error ? err.message : String(err)}\n`,
18
+ );
19
+ }
20
+ proc.exit(1);
21
+ },
22
+ );
@@ -0,0 +1,433 @@
1
+ // @typokit/cli — Build Command
2
+
3
+ import type { CliLogger } from "../logger.js";
4
+ import type { TypoKitConfig } from "../config.js";
5
+ import type {
6
+ BuildResult,
7
+ BuildContext,
8
+ GeneratedOutput,
9
+ } from "@typokit/types";
10
+ import type { TypoKitPlugin, BuildPipelineInstance } from "@typokit/core";
11
+
12
+ export interface BuildCommandOptions {
13
+ /** Project root directory */
14
+ rootDir: string;
15
+ /** Resolved configuration */
16
+ config: Required<TypoKitConfig>;
17
+ /** Logger instance */
18
+ logger: CliLogger;
19
+ /** Whether verbose mode is enabled */
20
+ verbose: boolean;
21
+ /** Plugins to register with the build pipeline */
22
+ plugins?: TypoKitPlugin[];
23
+ }
24
+
25
+ /** Structured build error with source context */
26
+ export interface BuildError {
27
+ source: string;
28
+ phase: "transform" | "compile";
29
+ message: string;
30
+ file?: string;
31
+ line?: number;
32
+ errorType?: string;
33
+ }
34
+
35
+ /**
36
+ * Resolve glob patterns to actual file paths.
37
+ */
38
+ async function resolveFilePatterns(
39
+ rootDir: string,
40
+ patterns: string[],
41
+ ): Promise<string[]> {
42
+ const { join, resolve } = (await import(/* @vite-ignore */ "path")) as {
43
+ join: (...args: string[]) => string;
44
+ resolve: (...args: string[]) => string;
45
+ };
46
+ const { readdirSync, statSync, existsSync } = (await import(
47
+ /* @vite-ignore */ "fs"
48
+ )) as {
49
+ readdirSync: (p: string, opts?: { recursive?: boolean }) => string[];
50
+ statSync: (p: string) => { isFile(): boolean; isDirectory(): boolean };
51
+ existsSync: (p: string) => boolean;
52
+ };
53
+
54
+ const files: string[] = [];
55
+
56
+ for (const pattern of patterns) {
57
+ if (pattern.includes("*")) {
58
+ // Simple glob matching: support **/*.ext and **/name.ts patterns
59
+ const parts = pattern.split("/");
60
+ const hasDoubleGlob = parts.includes("**");
61
+ const lastPart = parts[parts.length - 1];
62
+
63
+ // Determine the base directory (everything before the first glob)
64
+ const baseParts: string[] = [];
65
+ for (const part of parts) {
66
+ if (part.includes("*")) break;
67
+ baseParts.push(part);
68
+ }
69
+ const baseDir =
70
+ baseParts.length > 0 ? join(rootDir, ...baseParts) : rootDir;
71
+
72
+ if (!existsSync(baseDir)) continue;
73
+
74
+ // List files recursively if **
75
+ const entries = hasDoubleGlob
76
+ ? listFilesRecursive(baseDir, existsSync, readdirSync, statSync, join)
77
+ : readdirSync(baseDir).map((f) => join(baseDir, f));
78
+
79
+ // Match against the filename pattern
80
+ const filePattern = lastPart.replace(/\*/g, ".*");
81
+ const regex = new RegExp(`^${filePattern}$`);
82
+
83
+ for (const entry of entries) {
84
+ const name = entry.split(/[\\/]/).pop() ?? "";
85
+ if (regex.test(name)) {
86
+ files.push(resolve(entry));
87
+ }
88
+ }
89
+ } else {
90
+ // Direct path
91
+ const fullPath = resolve(join(rootDir, pattern));
92
+ if (existsSync(fullPath)) {
93
+ files.push(fullPath);
94
+ }
95
+ }
96
+ }
97
+
98
+ return [...new Set(files)].sort();
99
+ }
100
+
101
+ function listFilesRecursive(
102
+ dir: string,
103
+ existsSync: (p: string) => boolean,
104
+ readdirSync: (p: string) => string[],
105
+ statSync: (p: string) => { isFile(): boolean; isDirectory(): boolean },
106
+ join: (...args: string[]) => string,
107
+ ): string[] {
108
+ if (!existsSync(dir)) return [];
109
+ const results: string[] = [];
110
+ const entries = readdirSync(dir);
111
+ for (const entry of entries) {
112
+ const fullPath = join(dir, entry);
113
+ try {
114
+ const stat = statSync(fullPath);
115
+ if (stat.isDirectory()) {
116
+ if (
117
+ entry !== "node_modules" &&
118
+ entry !== "dist" &&
119
+ entry !== ".typokit"
120
+ ) {
121
+ results.push(
122
+ ...listFilesRecursive(
123
+ fullPath,
124
+ existsSync,
125
+ readdirSync,
126
+ statSync,
127
+ join,
128
+ ),
129
+ );
130
+ }
131
+ } else if (stat.isFile()) {
132
+ results.push(fullPath);
133
+ }
134
+ } catch {
135
+ // Skip files that can't be stat'd
136
+ }
137
+ }
138
+ return results;
139
+ }
140
+
141
+ /**
142
+ * Parse TypeScript compiler errors into structured BuildError objects.
143
+ */
144
+ function parseCompilerErrors(stderr: string): BuildError[] {
145
+ const errors: BuildError[] = [];
146
+ const lines = stderr.split("\n");
147
+
148
+ for (const line of lines) {
149
+ // Match tsc error format: file(line,col): error TSxxxx: message
150
+ const match = line.match(/^(.+?)\((\d+),\d+\):\s*error\s+(TS\d+):\s*(.+)/);
151
+ if (match) {
152
+ errors.push({
153
+ source: "tsc",
154
+ phase: "compile",
155
+ message: match[4],
156
+ file: match[1],
157
+ line: parseInt(match[2], 10),
158
+ errorType: match[3],
159
+ });
160
+ }
161
+ }
162
+
163
+ // If no structured errors found but there's stderr content, add a generic error
164
+ if (errors.length === 0 && stderr.trim()) {
165
+ errors.push({
166
+ source: "compiler",
167
+ phase: "compile",
168
+ message: stderr.trim().split("\n")[0],
169
+ });
170
+ }
171
+
172
+ return errors;
173
+ }
174
+
175
+ /**
176
+ * Run the TypeScript compiler step.
177
+ */
178
+ async function runCompiler(
179
+ options: BuildCommandOptions,
180
+ ): Promise<{ success: boolean; errors: BuildError[] }> {
181
+ const { spawnSync } = (await import(/* @vite-ignore */ "child_process")) as {
182
+ spawnSync: (
183
+ cmd: string,
184
+ args: string[],
185
+ opts: {
186
+ cwd?: string;
187
+ encoding?: string;
188
+ },
189
+ ) => {
190
+ status: number | null;
191
+ stdout: string;
192
+ stderr: string;
193
+ error?: Error;
194
+ };
195
+ };
196
+
197
+ const { config, rootDir, logger } = options;
198
+ const compiler = config.compiler;
199
+ const args = [...config.compilerArgs];
200
+
201
+ let command: string;
202
+ switch (compiler) {
203
+ case "tsc":
204
+ command = "tsc";
205
+ if (args.length === 0) {
206
+ args.push("-p", "tsconfig.json");
207
+ }
208
+ break;
209
+ case "tsup":
210
+ command = "tsup";
211
+ break;
212
+ case "swc":
213
+ command = "swc";
214
+ if (args.length === 0) {
215
+ args.push("src", "-d", config.distDir);
216
+ }
217
+ break;
218
+ default:
219
+ command = "tsc";
220
+ args.push("-p", "tsconfig.json");
221
+ }
222
+
223
+ logger.step("compile", `Running ${compiler}: ${command} ${args.join(" ")}`);
224
+
225
+ const result = spawnSync(command, args, {
226
+ cwd: rootDir,
227
+ encoding: "utf-8",
228
+ });
229
+
230
+ if (result.error) {
231
+ return {
232
+ success: false,
233
+ errors: [
234
+ {
235
+ source: compiler,
236
+ phase: "compile",
237
+ message: result.error.message,
238
+ errorType: "SPAWN_ERROR",
239
+ },
240
+ ],
241
+ };
242
+ }
243
+
244
+ if (result.status !== 0) {
245
+ const errors = parseCompilerErrors(result.stderr || result.stdout);
246
+ return { success: false, errors };
247
+ }
248
+
249
+ if (options.verbose && result.stdout) {
250
+ logger.verbose(result.stdout.trim());
251
+ }
252
+
253
+ return { success: true, errors: [] };
254
+ }
255
+
256
+ /**
257
+ * Execute the build command.
258
+ *
259
+ * 1. Resolve type and route files from config patterns
260
+ * 2. Create build pipeline and let plugins register taps via onBuild()
261
+ * 3. Fire beforeTransform hook
262
+ * 4. Run the Rust native transform pipeline (buildPipeline)
263
+ * 5. Fire afterTypeParse, afterValidators, afterRouteTable hooks
264
+ * 6. Fire emit hook (plugins can add outputs)
265
+ * 7. Run the TypeScript compiler
266
+ * 8. Fire done hook
267
+ * 9. Return structured BuildResult
268
+ */
269
+ export async function executeBuild(
270
+ options: BuildCommandOptions,
271
+ ): Promise<BuildResult & { pipeline?: BuildPipelineInstance }> {
272
+ const { createBuildPipeline } = (await import(
273
+ /* @vite-ignore */ "@typokit/core"
274
+ )) as {
275
+ createBuildPipeline: () => BuildPipelineInstance;
276
+ };
277
+
278
+ const startTime = Date.now();
279
+ const { config, rootDir, logger, verbose, plugins = [] } = options;
280
+ const errors: string[] = [];
281
+ const outputs: GeneratedOutput[] = [];
282
+
283
+ // Create build pipeline and let plugins register their taps
284
+ const pipeline = createBuildPipeline();
285
+ for (const plugin of plugins) {
286
+ if (plugin.onBuild) {
287
+ plugin.onBuild(pipeline);
288
+ if (verbose) {
289
+ logger.verbose(`Plugin "${plugin.name}" registered build hooks`);
290
+ }
291
+ }
292
+ }
293
+
294
+ const buildCtx: BuildContext = {
295
+ rootDir,
296
+ outDir: config.outputDir,
297
+ dev: false,
298
+ outputs,
299
+ };
300
+
301
+ // Step 1: Resolve file patterns
302
+ logger.step("build", "Resolving source files...");
303
+ const typeFiles = await resolveFilePatterns(rootDir, config.typeFiles);
304
+ const routeFiles = await resolveFilePatterns(rootDir, config.routeFiles);
305
+
306
+ if (verbose) {
307
+ logger.verbose(`Type files: ${typeFiles.length} found`);
308
+ for (const f of typeFiles) logger.verbose(` ${f}`);
309
+ logger.verbose(`Route files: ${routeFiles.length} found`);
310
+ for (const f of routeFiles) logger.verbose(` ${f}`);
311
+ }
312
+
313
+ // Step 2: Fire beforeTransform hook
314
+ await pipeline.hooks.beforeTransform.call(buildCtx);
315
+
316
+ // Step 3: Run native transform pipeline
317
+
318
+ if (typeFiles.length > 0 || routeFiles.length > 0) {
319
+ logger.step("transform", "Running native transform pipeline...");
320
+
321
+ try {
322
+ const { buildPipeline: nativeBuildPipeline } = (await import(
323
+ /* @vite-ignore */ "@typokit/transform-native"
324
+ )) as {
325
+ buildPipeline: (opts: {
326
+ typeFiles: string[];
327
+ routeFiles: string[];
328
+ outputDir?: string;
329
+ }) => Promise<{
330
+ regenerated: boolean;
331
+ contentHash: string;
332
+ filesWritten: string[];
333
+ }>;
334
+ };
335
+
336
+ const result = await nativeBuildPipeline({
337
+ typeFiles,
338
+ routeFiles,
339
+ outputDir: config.outputDir,
340
+ });
341
+
342
+ if (result.regenerated) {
343
+ logger.success(
344
+ `Transform complete — ${result.filesWritten.length} files written`,
345
+ );
346
+ for (const f of result.filesWritten) {
347
+ outputs.push({ filePath: f, content: "", overwrite: true });
348
+ }
349
+ } else {
350
+ logger.success("Transform skipped — cache hit");
351
+ }
352
+
353
+ if (verbose) {
354
+ logger.verbose(`Content hash: ${result.contentHash}`);
355
+ for (const f of result.filesWritten) logger.verbose(` wrote: ${f}`);
356
+ }
357
+
358
+ // Fire afterTypeParse hook (types extracted during transform)
359
+ await pipeline.hooks.afterTypeParse.call({}, buildCtx);
360
+
361
+ // Fire afterValidators hook
362
+ await pipeline.hooks.afterValidators.call(outputs, buildCtx);
363
+
364
+ // Fire afterRouteTable hook
365
+ await pipeline.hooks.afterRouteTable.call(
366
+ {
367
+ segment: "",
368
+ children: {},
369
+ handlers: {},
370
+ },
371
+ buildCtx,
372
+ );
373
+ } catch (err: unknown) {
374
+ const message = err instanceof Error ? err.message : String(err);
375
+ logger.error(`Transform failed: ${message}`);
376
+ errors.push(`Transform error: ${message}`);
377
+ return {
378
+ success: false,
379
+ outputs,
380
+ duration: Date.now() - startTime,
381
+ errors,
382
+ };
383
+ }
384
+ } else {
385
+ logger.info("No type or route files found — skipping transform");
386
+ }
387
+
388
+ // Step 4: Fire emit hook — plugins can add their own outputs
389
+ await pipeline.hooks.emit.call(outputs, buildCtx);
390
+
391
+ // Step 5: Run TypeScript compiler
392
+ logger.step("compile", "Compiling TypeScript...");
393
+ const compileResult = await runCompiler(options);
394
+
395
+ if (!compileResult.success) {
396
+ for (const buildErr of compileResult.errors) {
397
+ const parts = [buildErr.message];
398
+ if (buildErr.file)
399
+ parts.unshift(`${buildErr.file}:${buildErr.line ?? 0}`);
400
+ if (buildErr.errorType) parts.push(`(${buildErr.errorType})`);
401
+ const formatted = parts.join(" — ");
402
+ logger.error(formatted);
403
+ errors.push(formatted);
404
+ }
405
+
406
+ return {
407
+ success: false,
408
+ outputs,
409
+ duration: Date.now() - startTime,
410
+ errors,
411
+ };
412
+ }
413
+
414
+ logger.success("Compilation complete");
415
+
416
+ const duration = Date.now() - startTime;
417
+ logger.success(`Build finished in ${duration}ms`);
418
+
419
+ const buildResult: BuildResult = {
420
+ success: true,
421
+ outputs,
422
+ duration,
423
+ errors: [],
424
+ };
425
+
426
+ // Step 6: Fire done hook
427
+ await pipeline.hooks.done.call(buildResult);
428
+
429
+ return {
430
+ ...buildResult,
431
+ pipeline,
432
+ };
433
+ }