@kardoe/quickback 0.4.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/commands/compile.d.ts +18 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +144 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/create.d.ts +18 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +669 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +383 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +190 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +7 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +19 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/whoami.d.ts +7 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +37 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +82 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +59 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +44 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +85 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/compiler-stubs.d.ts +66 -0
- package/dist/lib/compiler-stubs.d.ts.map +1 -0
- package/dist/lib/compiler-stubs.js +75 -0
- package/dist/lib/compiler-stubs.js.map +1 -0
- package/dist/lib/file-loader.d.ts +73 -0
- package/dist/lib/file-loader.d.ts.map +1 -0
- package/dist/lib/file-loader.js +291 -0
- package/dist/lib/file-loader.js.map +1 -0
- package/dist/lib/file-writer.d.ts +33 -0
- package/dist/lib/file-writer.d.ts.map +1 -0
- package/dist/lib/file-writer.js +110 -0
- package/dist/lib/file-writer.js.map +1 -0
- package/dist/lib/helpers.d.ts +39 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +299 -0
- package/dist/lib/helpers.js.map +1 -0
- package/dist/lib/shell.d.ts +15 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +32 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/templates/registry.d.ts +36 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +143 -0
- package/dist/templates/registry.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAU,MAAM,IAAI,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EACH,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAgBnD,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAExF,IAAI,CAAC;QACD,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,mBAAmB;QACnB,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,4BAA4B;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,SAAS,IAAI,CAAC,CAAC,CAAC;QAEjD,mCAAmC;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAE7C,+BAA+B;QAC/B,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzD,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC/B,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAE3C,qDAAqD;QACrD,IAAI,QAAQ,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC9D,MAAM,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChF,CAAC;QAED,6CAA6C;QAC7C,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;QAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAC9B,MAAM,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;aACtB;YACD,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;aACrB,CAAC,CAAC;SACN,CAAC,CAAC;QAEH,qCAAqC;QACrC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,SAAS,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;QAEpF,+BAA+B;QAC/B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,0DAA0D;YAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC5E,MAAM,EAAE,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,aAAa,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAED,2DAA2D;QAC3D,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,UAAU,CAC3B,KAAK,EACL,CAAC,aAAa,EAAE,UAAU,CAAC,EAC3B,SAAS,EACT,OAAO,CAAC,OAAO,CAClB,CAAC;QACF,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QAC3E,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC1D,0CAA0C;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,MAAM,aAAa,GAAG,UAAU,CAC5B,KAAK,EACL,CAAC,aAAa,EAAE,SAAS,CAAC,EAC1B,SAAS,EACT,OAAO,CAAC,OAAO,CAClB,CAAC;YACF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QAED,WAAW;QACX,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,KAAK,UAAU,eAAe,CAAC,IAAc;IACzC,IAAI,QAA4B,CAAC;IACjC,IAAI,OAA2B,CAAC;IAChC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,kCAAkC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,GAAG,KAAK,yBAAyB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC3D,mBAAmB,GAAG,IAAI,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAClC,WAAW,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;YACrC,cAAc,GAAG,IAAI,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,iEAAiE;QACjE,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CACpD,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CACjF,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACtD,CAAC,CAAC;SACN,CAAC,CAAC;QACH,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC3B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACZ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,kBAAkB,CAAC;gBAC3D,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,OAAO,kDAAkD,CAAC;gBAC9D,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ,CAAC,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,OAAO;QACH,QAAQ,EAAE,QAAS;QACnB,OAAO,EAAE,OAAQ;QACjB,mBAAmB;QACnB,WAAW;QACX,cAAc;QACd,MAAM;QACN,OAAO;KACV,CAAC;AACN,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,SAAS,kBAAkB,CAAC,SAAiB,EAAE,OAAe,EAAE,QAA4B;IACxF,8CAA8C;IAC9C,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,aAAa,GAAG;;oCAEU,QAAQ,CAAC,MAAM,IAAI,OAAO;;;OAGvD,OAAO;;;;;;;;;;;;aAYD,OAAO;;iBAEH,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;;CAEhF,CAAC;IAEE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,qBAAqB,CAAC,EAAE,aAAa,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc;IACzC,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,KAAK;YACN,OAAO;gBACH,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;gBACpC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE;gBACnE,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE;aAC5C,CAAC;QACN,KAAK,YAAY;YACb,OAAO;gBACH,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC3C,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBAC9D,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE;aAC5C,CAAC;QACN,KAAK,OAAO;YACR,OAAO;gBACH,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;gBACpC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;gBACxC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE;aAC5C,CAAC;QACN;YACI,OAAO;gBACH,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;gBACpC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE;aAC5C,CAAC;IACV,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC1C,uDAAuD;IACvD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BzB,CAAC;IAEE,kDAAkD;IAClD,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgG3B,CAAC;IAEE,+CAA+C;IAC/C,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuC1B,CAAC;IAEE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAEpF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IAC5D,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,eAAe,CAAC,CAAC;IAChE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IACzC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;CAkBvB,CAAC;IAEE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnG,aAAa,CACT,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EAC/E,WAAW,CACd,CAAC;AACN,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,KAAK,UAAU,wBAAwB,CACnC,OAAe,EACf,SAAiB,EACjB,OAAiB;IAEjB,MAAM,OAAO,GAAG,GAAG,CAAC,oCAAoC,CAAC,CAAC,KAAK,EAAE,CAAC;IAElE,iCAAiC;IACjC,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACzF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,qDAAqD,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9F,OAAO;IACX,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC,CAAC;QAC1F,OAAO;IACX,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,IAAI,GAAG,yBAAyB,OAAO,KAAK,CAAC;IACrD,MAAM,QAAQ,GAAG,SAAS,CACtB,KAAK,EACL,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,KAAK,CAAC,EAC7C,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CACxC,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,kCAAkC;QAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACvE,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,wBAAwB,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,OAAO,CAAC,wBAAwB,OAAO,KAAK,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;SAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,+BAA+B,OAAO,KAAK,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,SAAS,UAAU,CACf,GAAW,EACX,IAAc,EACd,GAAW,EACX,OAAiB;IAEjB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QAChC,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;KACtC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;KAC9B,CAAC;AACN,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAS,GAAG,KAAK;IAC3C,qCAAqC;IACrC,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,MAAM,CAAC;IAChD,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAE3C,uEAAuE;IACvE,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACL,kCAAkC;QACtC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,OAAsB;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,IAAI,QAAQ,EAAE,kBAAkB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe,EAAE,QAA4B;IACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAClF,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,SAAS;IACd,OAAO,CAAC,GAAG,CAAC;EACd,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;;EAE3B,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;;6CAE0B,EAAE,CAAC,IAAI,CAAC,kCAAkC,CAAC;;EAEtF,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;;6CAEuB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;6CAClB,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;;EAEzE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;;;;EASnB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;EACrB,kBAAkB,EAAE;CACrB,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqY/D"}
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
|
2
|
+
import { join, resolve } from "path";
|
|
3
|
+
import pc from "picocolors";
|
|
4
|
+
export async function init(options) {
|
|
5
|
+
const targetPath = resolve(options?.path || ".");
|
|
6
|
+
const quickbackPath = join(targetPath, "quickback");
|
|
7
|
+
// Check if quickback folder already exists
|
|
8
|
+
if (existsSync(quickbackPath)) {
|
|
9
|
+
console.error(pc.red("Error: quickback folder already exists in this directory"));
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
console.log(pc.cyan("Creating quickback project structure..."));
|
|
13
|
+
try {
|
|
14
|
+
// Create folder structure
|
|
15
|
+
mkdirSync(quickbackPath, { recursive: true });
|
|
16
|
+
mkdirSync(join(quickbackPath, "definitions"), { recursive: true });
|
|
17
|
+
mkdirSync(join(quickbackPath, "definitions", "auth"), { recursive: true });
|
|
18
|
+
mkdirSync(join(quickbackPath, "definitions", "features"), { recursive: true });
|
|
19
|
+
mkdirSync(join(quickbackPath, "definitions", "features", "todos"), { recursive: true });
|
|
20
|
+
mkdirSync(join(quickbackPath, "output"), { recursive: true });
|
|
21
|
+
// Create quickback.config.ts with new provider-based format
|
|
22
|
+
const configContent = `/**
|
|
23
|
+
* Quickback Configuration
|
|
24
|
+
*
|
|
25
|
+
* This file defines your backend configuration using the provider system.
|
|
26
|
+
* Use presets for quick setup, or define individual providers for customization.
|
|
27
|
+
*/
|
|
28
|
+
import { defineConfig } from "@quickback/compiler";
|
|
29
|
+
import { cloudflare } from "@quickback/compiler/presets";
|
|
30
|
+
|
|
31
|
+
export default defineConfig({
|
|
32
|
+
// Project settings
|
|
33
|
+
name: "my-quickback-app",
|
|
34
|
+
template: "hono", // "hono" | "nextjs"
|
|
35
|
+
|
|
36
|
+
// Use a preset for quick setup (includes runtime, database, storage, auth)
|
|
37
|
+
providers: cloudflare({
|
|
38
|
+
// Optional customization:
|
|
39
|
+
// databaseBinding: "DATABASE",
|
|
40
|
+
// kvBinding: "KV",
|
|
41
|
+
}),
|
|
42
|
+
|
|
43
|
+
// Build settings
|
|
44
|
+
build: {
|
|
45
|
+
outputDir: "./output",
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Alternative: For local development with Bun and SQLite, use:
|
|
51
|
+
*
|
|
52
|
+
* import { bun } from "@quickback/compiler/presets";
|
|
53
|
+
*
|
|
54
|
+
* providers: bun({
|
|
55
|
+
* databasePath: "./data/app.db",
|
|
56
|
+
* }),
|
|
57
|
+
*/
|
|
58
|
+
`;
|
|
59
|
+
writeFileSync(join(quickbackPath, "quickback.config.ts"), configContent);
|
|
60
|
+
// Create auth definition
|
|
61
|
+
const authConfigContent = `/**
|
|
62
|
+
* Better Auth Configuration
|
|
63
|
+
*
|
|
64
|
+
* This file defines your authentication configuration for Better Auth.
|
|
65
|
+
* Modify this to customize authentication behavior in your application.
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
export const authConfig = {
|
|
69
|
+
// Core settings
|
|
70
|
+
autoDetectIpAddress: true,
|
|
71
|
+
geolocationTracking: true,
|
|
72
|
+
|
|
73
|
+
// Authentication methods
|
|
74
|
+
emailAndPassword: {
|
|
75
|
+
enabled: true,
|
|
76
|
+
requireEmailVerification: false
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
// Plugins - Add or remove based on your needs
|
|
80
|
+
// Available plugins: "anonymous", "openAPI", "twoFactor", "passkey", "magicLink"
|
|
81
|
+
plugins: ["anonymous"],
|
|
82
|
+
|
|
83
|
+
// Rate limiting configuration
|
|
84
|
+
rateLimit: {
|
|
85
|
+
enabled: true,
|
|
86
|
+
window: 60, // seconds (minimum for KV is 60s)
|
|
87
|
+
max: 100, // requests per window
|
|
88
|
+
customRules: {
|
|
89
|
+
// Add custom rate limit rules for specific endpoints
|
|
90
|
+
"/sign-in/email": {
|
|
91
|
+
window: 60,
|
|
92
|
+
max: 10
|
|
93
|
+
},
|
|
94
|
+
"/sign-in/social": {
|
|
95
|
+
window: 60,
|
|
96
|
+
max: 10
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
// Social providers - Enable and configure as needed
|
|
102
|
+
socialProviders: {
|
|
103
|
+
google: {
|
|
104
|
+
enabled: false,
|
|
105
|
+
// clientId and clientSecret will be read from environment variables
|
|
106
|
+
},
|
|
107
|
+
github: {
|
|
108
|
+
enabled: false,
|
|
109
|
+
},
|
|
110
|
+
discord: {
|
|
111
|
+
enabled: false,
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
// Session configuration
|
|
116
|
+
session: {
|
|
117
|
+
expiresInDays: 30,
|
|
118
|
+
updateAgeInDays: 1
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
// Database configuration
|
|
122
|
+
database: {
|
|
123
|
+
// Additional database-specific options
|
|
124
|
+
usePlural: true, // Use plural table names (users, sessions, etc.)
|
|
125
|
+
debugLogs: true // Enable debug logging for database operations
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
`;
|
|
129
|
+
writeFileSync(join(quickbackPath, "definitions", "auth", "better-auth.ts"), authConfigContent);
|
|
130
|
+
// Create example todos feature
|
|
131
|
+
const todosSchemaContent = `/**
|
|
132
|
+
* Todos Feature Schema
|
|
133
|
+
*
|
|
134
|
+
* Example feature definition showing how to create database schemas
|
|
135
|
+
* and API endpoints for your application features.
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
139
|
+
import { sql } from "drizzle-orm";
|
|
140
|
+
|
|
141
|
+
export const todos = sqliteTable("todos", {
|
|
142
|
+
id: text("id").primaryKey().$defaultFn(() => crypto.randomUUID()),
|
|
143
|
+
userId: text("user_id").notNull(),
|
|
144
|
+
title: text("title").notNull(),
|
|
145
|
+
description: text("description"),
|
|
146
|
+
completed: integer("completed", { mode: "boolean" }).default(false).notNull(),
|
|
147
|
+
createdAt: integer("created_at", { mode: "timestamp" }).$defaultFn(() => new Date()),
|
|
148
|
+
updatedAt: integer("updated_at", { mode: "timestamp" }).$defaultFn(() => new Date()),
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
export type Todo = typeof todos.$inferSelect;
|
|
152
|
+
export type NewTodo = typeof todos.$inferInsert;
|
|
153
|
+
`;
|
|
154
|
+
writeFileSync(join(quickbackPath, "definitions", "features", "todos", "schema.ts"), todosSchemaContent);
|
|
155
|
+
// Create todos API routes
|
|
156
|
+
const todosRoutesContent = `/**
|
|
157
|
+
* Todos API Routes
|
|
158
|
+
*
|
|
159
|
+
* Example API implementation for the todos feature.
|
|
160
|
+
* Shows how to create authenticated CRUD endpoints.
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
import { Hono } from "hono";
|
|
164
|
+
import { eq, and } from "drizzle-orm";
|
|
165
|
+
import type { Todo, NewTodo } from "./schema";
|
|
166
|
+
|
|
167
|
+
export function createTodosRoutes(auth: any, db: any, todos: any) {
|
|
168
|
+
const app = new Hono();
|
|
169
|
+
|
|
170
|
+
// Get all todos for the authenticated user
|
|
171
|
+
app.get("/", async (c) => {
|
|
172
|
+
const session = await auth.api.getSession({
|
|
173
|
+
headers: c.req.raw.headers,
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
if (!session) {
|
|
177
|
+
return c.json({ error: "Unauthorized" }, 401);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const userTodos = await db
|
|
181
|
+
.select()
|
|
182
|
+
.from(todos)
|
|
183
|
+
.where(eq(todos.userId, session.user.id));
|
|
184
|
+
|
|
185
|
+
return c.json(userTodos);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// Create a new todo
|
|
189
|
+
app.post("/", async (c) => {
|
|
190
|
+
const session = await auth.api.getSession({
|
|
191
|
+
headers: c.req.raw.headers,
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
if (!session) {
|
|
195
|
+
return c.json({ error: "Unauthorized" }, 401);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const body = await c.req.json<{ title: string; description?: string }>();
|
|
199
|
+
|
|
200
|
+
if (!body.title) {
|
|
201
|
+
return c.json({ error: "Title is required" }, 400);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const newTodo: NewTodo = {
|
|
205
|
+
userId: session.user.id,
|
|
206
|
+
title: body.title,
|
|
207
|
+
description: body.description,
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const [todo] = await db.insert(todos).values(newTodo).returning();
|
|
211
|
+
return c.json(todo, 201);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// Update a todo
|
|
215
|
+
app.patch("/:id", async (c) => {
|
|
216
|
+
const session = await auth.api.getSession({
|
|
217
|
+
headers: c.req.raw.headers,
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
if (!session) {
|
|
221
|
+
return c.json({ error: "Unauthorized" }, 401);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const id = c.req.param("id");
|
|
225
|
+
const body = await c.req.json<{ title?: string; description?: string; completed?: boolean }>();
|
|
226
|
+
|
|
227
|
+
const [updatedTodo] = await db
|
|
228
|
+
.update(todos)
|
|
229
|
+
.set({
|
|
230
|
+
...body,
|
|
231
|
+
updatedAt: new Date(),
|
|
232
|
+
})
|
|
233
|
+
.where(and(eq(todos.id, id), eq(todos.userId, session.user.id)))
|
|
234
|
+
.returning();
|
|
235
|
+
|
|
236
|
+
if (!updatedTodo) {
|
|
237
|
+
return c.json({ error: "Todo not found" }, 404);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return c.json(updatedTodo);
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// Delete a todo
|
|
244
|
+
app.delete("/:id", async (c) => {
|
|
245
|
+
const session = await auth.api.getSession({
|
|
246
|
+
headers: c.req.raw.headers,
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
if (!session) {
|
|
250
|
+
return c.json({ error: "Unauthorized" }, 401);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const id = c.req.param("id");
|
|
254
|
+
|
|
255
|
+
const [deletedTodo] = await db
|
|
256
|
+
.delete(todos)
|
|
257
|
+
.where(and(eq(todos.id, id), eq(todos.userId, session.user.id)))
|
|
258
|
+
.returning();
|
|
259
|
+
|
|
260
|
+
if (!deletedTodo) {
|
|
261
|
+
return c.json({ error: "Todo not found" }, 404);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return c.json({ message: "Todo deleted successfully" });
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
return app;
|
|
268
|
+
}
|
|
269
|
+
`;
|
|
270
|
+
writeFileSync(join(quickbackPath, "definitions", "features", "todos", "routes.ts"), todosRoutesContent);
|
|
271
|
+
// Create todos README
|
|
272
|
+
const todosReadmeContent = `# Todos Feature
|
|
273
|
+
|
|
274
|
+
This is an example feature showing how to structure your application features in Quickback.
|
|
275
|
+
|
|
276
|
+
## Structure
|
|
277
|
+
|
|
278
|
+
- **schema.ts** - Defines the database schema using Drizzle ORM
|
|
279
|
+
- **routes.ts** - Implements the API endpoints for CRUD operations
|
|
280
|
+
|
|
281
|
+
## Usage
|
|
282
|
+
|
|
283
|
+
This feature will be automatically integrated into your application when you run the Quickback compiler. The routes will be mounted at \`/api/todos\`.
|
|
284
|
+
|
|
285
|
+
## Endpoints
|
|
286
|
+
|
|
287
|
+
- \`GET /api/todos\` - Get all todos for the authenticated user
|
|
288
|
+
- \`POST /api/todos\` - Create a new todo
|
|
289
|
+
- \`PATCH /api/todos/:id\` - Update a todo
|
|
290
|
+
- \`DELETE /api/todos/:id\` - Delete a todo
|
|
291
|
+
|
|
292
|
+
All endpoints require authentication via Better Auth sessions.
|
|
293
|
+
`;
|
|
294
|
+
writeFileSync(join(quickbackPath, "definitions", "features", "todos", "README.md"), todosReadmeContent);
|
|
295
|
+
// Create .gitignore
|
|
296
|
+
const gitignoreContent = `# Output directory
|
|
297
|
+
output/
|
|
298
|
+
|
|
299
|
+
# Dependencies
|
|
300
|
+
node_modules/
|
|
301
|
+
|
|
302
|
+
# Environment files
|
|
303
|
+
.env
|
|
304
|
+
.env.local
|
|
305
|
+
.env.*.local
|
|
306
|
+
|
|
307
|
+
# IDE
|
|
308
|
+
.vscode/
|
|
309
|
+
.idea/
|
|
310
|
+
|
|
311
|
+
# OS
|
|
312
|
+
.DS_Store
|
|
313
|
+
Thumbs.db
|
|
314
|
+
|
|
315
|
+
# Logs
|
|
316
|
+
*.log
|
|
317
|
+
|
|
318
|
+
# Build artifacts
|
|
319
|
+
dist/
|
|
320
|
+
build/
|
|
321
|
+
.next/
|
|
322
|
+
`;
|
|
323
|
+
writeFileSync(join(quickbackPath, ".gitignore"), gitignoreContent);
|
|
324
|
+
// Create README
|
|
325
|
+
const readmeContent = `# Quickback Project
|
|
326
|
+
|
|
327
|
+
This is a Quickback project structure for building Cloudflare Workers applications with authentication.
|
|
328
|
+
|
|
329
|
+
## Structure
|
|
330
|
+
|
|
331
|
+
- **quickback.config.ts** - Main configuration file for your project
|
|
332
|
+
- **definitions/** - Contains all your feature and configuration definitions
|
|
333
|
+
- **auth/** - Authentication configuration (Better Auth)
|
|
334
|
+
- **features/** - Your application features (APIs, schemas, etc.)
|
|
335
|
+
- **output/** - Generated code output (gitignored)
|
|
336
|
+
|
|
337
|
+
## Getting Started
|
|
338
|
+
|
|
339
|
+
1. Customize \`quickback.config.ts\` with your project settings
|
|
340
|
+
2. Modify \`definitions/auth/better-auth.ts\` for authentication configuration
|
|
341
|
+
3. Add your own features in \`definitions/features/\`
|
|
342
|
+
4. Run the Quickback compiler to generate your application:
|
|
343
|
+
|
|
344
|
+
\`\`\`bash
|
|
345
|
+
npx @quickback/compiler generate
|
|
346
|
+
\`\`\`
|
|
347
|
+
|
|
348
|
+
## Adding Features
|
|
349
|
+
|
|
350
|
+
Create a new directory under \`definitions/features/\` with:
|
|
351
|
+
- \`schema.ts\` - Database schema definitions
|
|
352
|
+
- \`routes.ts\` - API route implementations
|
|
353
|
+
- Any other files needed for your feature
|
|
354
|
+
|
|
355
|
+
## Environment Variables
|
|
356
|
+
|
|
357
|
+
Configure the following in your \`.env\` file:
|
|
358
|
+
- \`CLOUDFLARE_ACCOUNT_ID\` - Your Cloudflare account ID
|
|
359
|
+
- Social provider credentials (if using social auth)
|
|
360
|
+
- Database connection strings (for Hyperdrive)
|
|
361
|
+
|
|
362
|
+
## Learn More
|
|
363
|
+
|
|
364
|
+
- [Quickback Documentation](https://github.com/quickback/quickback-compiler)
|
|
365
|
+
- [Better Auth Documentation](https://www.better-auth.com)
|
|
366
|
+
- [Cloudflare Workers Documentation](https://developers.cloudflare.com/workers)
|
|
367
|
+
`;
|
|
368
|
+
writeFileSync(join(quickbackPath, "README.md"), readmeContent);
|
|
369
|
+
console.log(pc.green("\n✅ Quickback project structure created successfully!"));
|
|
370
|
+
console.log(pc.cyan("\nNext steps:"));
|
|
371
|
+
console.log(pc.white(` 1. cd ${quickbackPath}`));
|
|
372
|
+
console.log(pc.white(" 2. Customize quickback.config.ts"));
|
|
373
|
+
console.log(pc.white(" 3. Modify auth configuration in definitions/auth/"));
|
|
374
|
+
console.log(pc.white(" 4. Add your features in definitions/features/"));
|
|
375
|
+
console.log(pc.white(" 5. Run: npx @quickback/compiler generate"));
|
|
376
|
+
console.log(pc.cyan("\nFor more information, see the README.md file in the quickback folder."));
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
console.error(pc.red("Error creating quickback structure:"), error);
|
|
380
|
+
process.exit(1);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login Command
|
|
3
|
+
*
|
|
4
|
+
* Uses OAuth 2.0 Device Authorization Grant (RFC 8628) for CLI authentication.
|
|
5
|
+
* Works in headless environments (SSH, containers) and is more secure than URL-based tokens.
|
|
6
|
+
*/
|
|
7
|
+
export declare function login(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqCH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAyD3C"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login Command
|
|
3
|
+
*
|
|
4
|
+
* Uses OAuth 2.0 Device Authorization Grant (RFC 8628) for CLI authentication.
|
|
5
|
+
* Works in headless environments (SSH, containers) and is more secure than URL-based tokens.
|
|
6
|
+
*/
|
|
7
|
+
import { exec } from 'child_process';
|
|
8
|
+
import pc from 'picocolors';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import { storeCredentials } from '../lib/auth.js';
|
|
11
|
+
const AUTH_URL = process.env.QUICKBACK_AUTH_URL || 'https://app.quickback.dev';
|
|
12
|
+
const CLIENT_ID = 'quickback-cli';
|
|
13
|
+
export async function login() {
|
|
14
|
+
console.log(pc.bold('\n🔐 Quickback Login\n'));
|
|
15
|
+
const spinner = ora('Requesting device authorization...').start();
|
|
16
|
+
try {
|
|
17
|
+
// Step 1: Request device code
|
|
18
|
+
const deviceCode = await requestDeviceCode();
|
|
19
|
+
spinner.stop();
|
|
20
|
+
// Step 2: Display user code and open browser
|
|
21
|
+
console.log(pc.cyan('━'.repeat(50)));
|
|
22
|
+
console.log();
|
|
23
|
+
console.log(` ${pc.bold('Your code:')} ${pc.green(pc.bold(formatUserCode(deviceCode.user_code)))}`);
|
|
24
|
+
console.log();
|
|
25
|
+
console.log(` Visit: ${pc.underline(deviceCode.verification_uri)}`);
|
|
26
|
+
console.log();
|
|
27
|
+
console.log(pc.cyan('━'.repeat(50)));
|
|
28
|
+
console.log();
|
|
29
|
+
// Try to open browser
|
|
30
|
+
const verificationUrl = deviceCode.verification_uri_complete || deviceCode.verification_uri;
|
|
31
|
+
openBrowser(verificationUrl);
|
|
32
|
+
// Step 3: Poll for Better Auth token
|
|
33
|
+
const pollSpinner = ora('Waiting for authorization...').start();
|
|
34
|
+
const betterAuthToken = await pollForToken(deviceCode.device_code, deviceCode.interval);
|
|
35
|
+
// Step 4: Exchange for CLI token (includes subscription tier)
|
|
36
|
+
pollSpinner.text = 'Completing authentication...';
|
|
37
|
+
const cliToken = await exchangeToken(betterAuthToken.access_token);
|
|
38
|
+
pollSpinner.stop();
|
|
39
|
+
// Step 5: Store credentials
|
|
40
|
+
await storeCredentials({
|
|
41
|
+
token: cliToken.access_token,
|
|
42
|
+
user: cliToken.user,
|
|
43
|
+
expiresAt: new Date(Date.now() + cliToken.expires_in * 1000).toISOString(),
|
|
44
|
+
});
|
|
45
|
+
console.log(pc.green('\n✓ Login successful!'));
|
|
46
|
+
console.log(pc.gray(`Welcome, ${cliToken.user?.name || cliToken.user?.email || 'user'}!`));
|
|
47
|
+
if (cliToken.user?.tier === 'pro') {
|
|
48
|
+
console.log(pc.cyan('You have access to Pro templates.'));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log(pc.gray('Upgrade to Pro for premium templates: https://quickback.dev/pricing'));
|
|
52
|
+
}
|
|
53
|
+
console.log();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
spinner.stop();
|
|
57
|
+
if (error instanceof Error) {
|
|
58
|
+
console.error(pc.red('\n✗ Login failed:'), error.message);
|
|
59
|
+
}
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Request a device code from the auth server
|
|
65
|
+
*/
|
|
66
|
+
async function requestDeviceCode() {
|
|
67
|
+
const response = await fetch(`${AUTH_URL}/auth/v1/device/code`, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
headers: {
|
|
70
|
+
'Content-Type': 'application/json',
|
|
71
|
+
'User-Agent': 'quickback-cli',
|
|
72
|
+
},
|
|
73
|
+
body: JSON.stringify({
|
|
74
|
+
client_id: CLIENT_ID,
|
|
75
|
+
scope: 'openid profile email',
|
|
76
|
+
}),
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
const error = await response.json().catch(() => ({}));
|
|
80
|
+
throw new Error(error.error_description || 'Failed to request device code');
|
|
81
|
+
}
|
|
82
|
+
return response.json();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Poll for access token
|
|
86
|
+
*/
|
|
87
|
+
async function pollForToken(deviceCode, interval) {
|
|
88
|
+
let pollingInterval = interval;
|
|
89
|
+
const maxAttempts = 120; // 10 minutes max at 5s intervals
|
|
90
|
+
let attempts = 0;
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
const poll = async () => {
|
|
93
|
+
attempts++;
|
|
94
|
+
if (attempts > maxAttempts) {
|
|
95
|
+
reject(new Error('Authorization timed out. Please try again.'));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const response = await fetch(`${AUTH_URL}/auth/v1/device/token`, {
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: {
|
|
102
|
+
'Content-Type': 'application/json',
|
|
103
|
+
'User-Agent': 'quickback-cli',
|
|
104
|
+
},
|
|
105
|
+
body: JSON.stringify({
|
|
106
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
107
|
+
device_code: deviceCode,
|
|
108
|
+
client_id: CLIENT_ID,
|
|
109
|
+
}),
|
|
110
|
+
});
|
|
111
|
+
if (response.ok) {
|
|
112
|
+
const token = await response.json();
|
|
113
|
+
resolve(token);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const error = await response.json();
|
|
117
|
+
switch (error.error) {
|
|
118
|
+
case 'authorization_pending':
|
|
119
|
+
// Continue polling
|
|
120
|
+
break;
|
|
121
|
+
case 'slow_down':
|
|
122
|
+
// Increase polling interval
|
|
123
|
+
pollingInterval += 5;
|
|
124
|
+
break;
|
|
125
|
+
case 'access_denied':
|
|
126
|
+
reject(new Error('Authorization was denied'));
|
|
127
|
+
return;
|
|
128
|
+
case 'expired_token':
|
|
129
|
+
reject(new Error('Device code expired. Please try again.'));
|
|
130
|
+
return;
|
|
131
|
+
default:
|
|
132
|
+
reject(new Error(error.error_description || error.error || 'Unknown error'));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// Schedule next poll
|
|
136
|
+
setTimeout(poll, pollingInterval * 1000);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
// Network error - retry
|
|
140
|
+
setTimeout(poll, pollingInterval * 1000);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
// Start polling after initial interval
|
|
144
|
+
setTimeout(poll, pollingInterval * 1000);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Exchange Better Auth access token for CLI token with subscription tier
|
|
149
|
+
*/
|
|
150
|
+
async function exchangeToken(accessToken) {
|
|
151
|
+
const response = await fetch(`${AUTH_URL}/cli/exchange`, {
|
|
152
|
+
method: 'POST',
|
|
153
|
+
headers: {
|
|
154
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
155
|
+
'Content-Type': 'application/json',
|
|
156
|
+
'User-Agent': 'quickback-cli',
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
if (!response.ok) {
|
|
160
|
+
const error = await response.json().catch(() => ({}));
|
|
161
|
+
throw new Error(error.error_description || 'Failed to exchange token');
|
|
162
|
+
}
|
|
163
|
+
return response.json();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Format user code with dash for readability (e.g., ABCD-1234)
|
|
167
|
+
*/
|
|
168
|
+
function formatUserCode(code) {
|
|
169
|
+
if (code.length === 8) {
|
|
170
|
+
return `${code.slice(0, 4)}-${code.slice(4)}`;
|
|
171
|
+
}
|
|
172
|
+
return code;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Try to open browser to verification URL
|
|
176
|
+
*/
|
|
177
|
+
function openBrowser(url) {
|
|
178
|
+
const platform = process.platform;
|
|
179
|
+
const openCmd = platform === 'darwin' ? 'open' : platform === 'win32' ? 'start' : 'xdg-open';
|
|
180
|
+
exec(`${openCmd} "${url}"`, (error) => {
|
|
181
|
+
if (error) {
|
|
182
|
+
console.log(pc.yellow('Could not open browser automatically.'));
|
|
183
|
+
console.log(`Open this URL in your browser: ${pc.cyan(url)}\n`);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.log(pc.gray('Opening browser...\n'));
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAc5C"}
|