@forgecart/cli 1.0.0 → 1.1.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/LICENSE +21 -0
- package/README.md +7 -7
- package/bin/forgecart.js +1 -1
- package/dist/package.json +50 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/{cli.js → src/cli.js} +8 -6
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/delete.d.ts.map +1 -0
- package/dist/{commands → src/commands}/delete.js +8 -3
- package/dist/src/commands/delete.js.map +1 -0
- package/dist/src/commands/deploy.d.ts.map +1 -0
- package/dist/src/commands/deploy.js +243 -0
- package/dist/src/commands/deploy.js.map +1 -0
- package/dist/src/commands/env.d.ts.map +1 -0
- package/dist/{commands → src/commands}/env.js +70 -12
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/{commands → src/commands}/init.js +103 -17
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/list.d.ts.map +1 -0
- package/dist/{commands → src/commands}/list.js +6 -2
- package/dist/src/commands/list.js.map +1 -0
- package/dist/src/commands/login.d.ts +3 -0
- package/dist/src/commands/login.d.ts.map +1 -0
- package/dist/src/commands/login.js +120 -0
- package/dist/src/commands/login.js.map +1 -0
- package/dist/src/commands/logs.d.ts.map +1 -0
- package/dist/src/commands/logs.js +88 -0
- package/dist/src/commands/logs.js.map +1 -0
- package/dist/src/commands/scale.d.ts.map +1 -0
- package/dist/{commands → src/commands}/scale.js +7 -3
- package/dist/src/commands/scale.js.map +1 -0
- package/dist/src/commands/status.d.ts.map +1 -0
- package/dist/{commands → src/commands}/status.js +7 -2
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/whoami.d.ts.map +1 -0
- package/dist/{commands → src/commands}/whoami.js +20 -7
- package/dist/src/commands/whoami.js.map +1 -0
- package/dist/{index.d.ts.map → src/index.d.ts.map} +1 -1
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +34 -0
- package/dist/src/lib/api-client.d.ts.map +1 -0
- package/dist/src/lib/api-client.js +141 -0
- package/dist/src/lib/api-client.js.map +1 -0
- package/dist/{lib → src/lib}/archive.d.ts +2 -1
- package/dist/src/lib/archive.d.ts.map +1 -0
- package/dist/{lib → src/lib}/archive.js +27 -5
- package/dist/src/lib/archive.js.map +1 -0
- package/dist/src/lib/config-updater.d.ts +10 -0
- package/dist/src/lib/config-updater.d.ts.map +1 -0
- package/dist/src/lib/config-updater.js +34 -0
- package/dist/src/lib/config-updater.js.map +1 -0
- package/dist/src/lib/config.d.ts +53 -0
- package/dist/src/lib/config.d.ts.map +1 -0
- package/dist/src/lib/config.js +162 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/env-sync.d.ts +44 -0
- package/dist/src/lib/env-sync.d.ts.map +1 -0
- package/dist/src/lib/env-sync.js +207 -0
- package/dist/src/lib/env-sync.js.map +1 -0
- package/dist/src/lib/logger.d.ts.map +1 -0
- package/dist/src/lib/logger.js.map +1 -0
- package/dist/src/lib/nx-generator.d.ts +22 -0
- package/dist/src/lib/nx-generator.d.ts.map +1 -0
- package/dist/src/lib/nx-generator.js +345 -0
- package/dist/src/lib/nx-generator.js.map +1 -0
- package/dist/src/lib/standalone.d.ts +28 -0
- package/dist/src/lib/standalone.d.ts.map +1 -0
- package/dist/src/lib/standalone.js +107 -0
- package/dist/src/lib/standalone.js.map +1 -0
- package/dist/{types → src/types}/index.d.ts +10 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/spinner.d.ts +16 -0
- package/dist/src/utils/spinner.d.ts.map +1 -0
- package/dist/src/utils/spinner.js +88 -0
- package/dist/src/utils/spinner.js.map +1 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/{utils → src/utils}/validation.js +18 -2
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/templates/application-additions/.forgecartignore +1 -1
- package/dist/templates/application-additions/Procfile +1 -1
- package/dist/templates/application-additions/src/app/app.module.ts +16 -0
- package/dist/templates/application-additions/src/services/forgecart.service.ts +62 -0
- package/dist/templates/application-additions/src/services/index.ts +2 -0
- package/dist/templates/application-additions/src/services/product-event-listener.service.ts +150 -0
- package/dist/templates/application-e2e-additions/src/support/global-setup.ts +16 -0
- package/dist/templates/application-e2e-additions/src/support/test-setup.ts +9 -0
- package/dist/templates/storefront-additions/.forgecartignore +30 -6
- package/dist/templates/storefront-additions/Procfile +1 -1
- package/dist/templates/storefront-additions/package.json +11 -0
- package/dist/templates/storefront-additions/postcss.config.js +5 -0
- package/dist/templates/storefront-additions/src/app/cart/page.tsx +77 -0
- package/dist/templates/storefront-additions/src/app/global.css +1 -0
- package/dist/templates/storefront-additions/src/app/layout.tsx +25 -0
- package/dist/templates/storefront-additions/src/app/page.tsx +43 -0
- package/dist/templates/storefront-additions/src/components/AddToCartButton.tsx +29 -0
- package/dist/templates/storefront-additions/src/components/CartItem.tsx +82 -0
- package/dist/templates/storefront-additions/src/components/Header.tsx +42 -0
- package/dist/templates/storefront-additions/src/components/ProductCard.tsx +57 -0
- package/dist/templates/storefront-additions/src/components/QuantitySelector.tsx +35 -0
- package/dist/templates/storefront-additions/src/context/CartContext.tsx +158 -0
- package/dist/templates/storefront-additions/src/lib/forgecart.ts +19 -8
- package/dist/templates/storefront-additions/tailwind.config.js +8 -0
- package/dist/templates/storefront-e2e-additions/playwright.config.ts +26 -0
- package/dist/templates/storefront-e2e-additions/src/example.spec.ts +11 -0
- package/dist/templates/workspace/.nxignore +2 -0
- package/package.json +6 -28
- package/templates/application-additions/.forgecartignore +1 -1
- package/templates/application-additions/Procfile +1 -1
- package/templates/application-additions/src/app/app.module.ts +16 -0
- package/templates/application-additions/src/services/forgecart.service.ts +62 -0
- package/templates/application-additions/src/services/index.ts +2 -0
- package/templates/application-additions/src/services/product-event-listener.service.ts +150 -0
- package/templates/application-e2e-additions/src/support/global-setup.ts +16 -0
- package/templates/application-e2e-additions/src/support/test-setup.ts +9 -0
- package/templates/storefront-additions/.forgecartignore +30 -6
- package/templates/storefront-additions/Procfile +1 -1
- package/templates/storefront-additions/package.json +11 -0
- package/templates/storefront-additions/postcss.config.js +5 -0
- package/templates/storefront-additions/src/app/cart/page.tsx +77 -0
- package/templates/storefront-additions/src/app/global.css +1 -0
- package/templates/storefront-additions/src/app/layout.tsx +25 -0
- package/templates/storefront-additions/src/app/page.tsx +43 -0
- package/templates/storefront-additions/src/components/AddToCartButton.tsx +29 -0
- package/templates/storefront-additions/src/components/CartItem.tsx +82 -0
- package/templates/storefront-additions/src/components/Header.tsx +42 -0
- package/templates/storefront-additions/src/components/ProductCard.tsx +57 -0
- package/templates/storefront-additions/src/components/QuantitySelector.tsx +35 -0
- package/templates/storefront-additions/src/context/CartContext.tsx +158 -0
- package/templates/storefront-additions/src/lib/forgecart.ts +19 -8
- package/templates/storefront-additions/tailwind.config.js +8 -0
- package/templates/storefront-e2e-additions/playwright.config.ts +26 -0
- package/templates/storefront-e2e-additions/src/example.spec.ts +11 -0
- package/templates/workspace/.nxignore +2 -0
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/delete.d.ts.map +0 -1
- package/dist/commands/delete.js.map +0 -1
- package/dist/commands/deploy.d.ts.map +0 -1
- package/dist/commands/deploy.js +0 -128
- package/dist/commands/deploy.js.map +0 -1
- package/dist/commands/env.d.ts.map +0 -1
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/list.d.ts.map +0 -1
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -105
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/scale.d.ts.map +0 -1
- package/dist/commands/scale.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/commands/whoami.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/api-client.d.ts +0 -21
- package/dist/lib/api-client.d.ts.map +0 -1
- package/dist/lib/api-client.js +0 -220
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/archive.d.ts.map +0 -1
- package/dist/lib/archive.js.map +0 -1
- package/dist/lib/config.d.ts +0 -12
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -79
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/nx-generator.d.ts +0 -8
- package/dist/lib/nx-generator.d.ts.map +0 -1
- package/dist/lib/nx-generator.js +0 -146
- package/dist/lib/nx-generator.js.map +0 -1
- package/dist/templates/application-additions/src/services/price-fetcher.service.ts +0 -72
- package/dist/templates/storefront-additions/src/app/products/page.tsx +0 -78
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -4
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js +0 -20
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js.map +0 -1
- package/templates/application-additions/src/services/price-fetcher.service.ts +0 -72
- package/templates/storefront-additions/src/app/products/page.tsx +0 -78
- /package/dist/{cli.d.ts → src/cli.d.ts} +0 -0
- /package/dist/{commands → src/commands}/delete.d.ts +0 -0
- /package/dist/{commands → src/commands}/deploy.d.ts +0 -0
- /package/dist/{commands → src/commands}/env.d.ts +0 -0
- /package/dist/{commands → src/commands}/init.d.ts +0 -0
- /package/dist/{commands → src/commands}/list.d.ts +0 -0
- /package/dist/{commands → src/commands}/logs.d.ts +0 -0
- /package/dist/{commands → src/commands}/scale.d.ts +0 -0
- /package/dist/{commands → src/commands}/status.d.ts +0 -0
- /package/dist/{commands → src/commands}/whoami.d.ts +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{lib → src/lib}/logger.d.ts +0 -0
- /package/dist/{lib → src/lib}/logger.js +0 -0
- /package/dist/{types → src/types}/index.js +0 -0
- /package/dist/{utils → src/utils}/validation.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-generator.js","sourceRoot":"","sources":["../../../src/lib/nx-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAQ1C,KAAK,UAAU,UAAU,CACvB,OAAe,EACf,IAAc,EACd,GAAW,EACX,MAAM,GAAG,KAAK;IAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG;YACH,KAAK,EAAE,IAAI;YACX,6EAA6E;YAC7E,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;YACzD,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,SAAS,EAAE,OAAO,EAAE,kDAAkD;gBACtE,EAAE,EAAE,MAAM,EAAE,wDAAwD;aACrE;SACF,CAAC,CAAA;QAEF,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,KAAK,GAAG,EAAE,CAAA;QAEd,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC3B,CAAC,CAAC,CAAA;YACF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC1B,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC;gBACN,OAAO,EAAE,IAAI,KAAK,CAAC;gBACnB,MAAM;gBACN,KAAK;aACN,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,WAAmB;IACvC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;IACzE,mCAAmC;IACnC,MAAM,SAAS,GACb,WAAW,CAAC,eAAe,EAAE,EAAE,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,CAAA;IACjE,kCAAkC;IAClC,OAAO,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,SAAiB,EACjB,YAAoB,kBAAkB;IAEtC,MAAM,CAAC,IAAI,CAAC,0BAA0B,WAAW,SAAS,SAAS,GAAG,CAAC,CAAA;IAEvE,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL;QACE,uBAAuB,SAAS,EAAE;QAClC,WAAW;QACX,eAAe;QACf,gBAAgB;QAChB,sBAAsB;KACvB,EACD,SAAS,CACV,CAAA;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,iFAAiF;IACjF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAA;IAEjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG;YACtB,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE;gBACf,OAAO,EAAE,GAAG;gBACZ,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,KAAK;gBAClB,gBAAgB,EAAE,MAAM;gBACxB,qBAAqB,EAAE,IAAI;gBAC3B,sBAAsB,EAAE,IAAI;gBAC5B,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,QAAQ;gBAChB,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACtB,YAAY,EAAE,IAAI;gBAClB,mBAAmB,EAAE,IAAI;gBACzB,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE,EAAE;aACV;YACD,OAAO,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC;SACjC,CAAA;QAED,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IAC3C,CAAC;IAED,kDAAkD;IAClD,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAA;IACzC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAClE,IAAI,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACzC,iBAAiB,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,WAAmB;IAEnB,qDAAqD;IACrD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IAE3C,4EAA4E;IAC5E,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG;QACd,YAAY,SAAS,EAAE;QACvB,aAAa,SAAS,EAAE;QACxB,YAAY,SAAS,EAAE;QACvB,kBAAkB,SAAS,EAAE;QAC7B,cAAc,SAAS,EAAE;KAC1B,CAAA;IAED,MAAM,aAAa,GAAG,MAAM,UAAU,CACpC,KAAK,EACL,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,EACrC,WAAW,CACZ,CAAA;IAED,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAA;IAEzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL;QACE,IAAI;QACJ,GAAG;QACH,sBAAsB;QACtB,OAAO;QACP,mBAAmB,GAAG,OAAO;QAC7B,aAAa;QACb,eAAe;QACf,iBAAiB;QACjB,4BAA4B;QAC5B,uBAAuB;QACvB,YAAY;KACb,EACD,WAAW,CACZ,CAAA;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;QACtD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,WAAmB;IAEnB,qDAAqD;IACrD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IAE3C,4EAA4E;IAC5E,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG;QACd,YAAY,SAAS,EAAE;QACvB,YAAY,SAAS,EAAE;QACvB,YAAY,SAAS,EAAE;QACvB,cAAc,SAAS,EAAE;KAC1B,CAAA;IAED,MAAM,aAAa,GAAG,MAAM,UAAU,CACpC,KAAK,EACL,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,EACrC,WAAW,CACZ,CAAA;IAED,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAA;IAExD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL;QACE,IAAI;QACJ,GAAG;QACH,sBAAsB;QACtB,SAAS,GAAG,OAAO;QACnB,mBAAmB,GAAG,OAAO;QAC7B,iBAAiB;QACjB,sBAAsB;QACtB,uBAAuB;KACxB,EACD,WAAW,CACZ,CAAA;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACrD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,WAAmB,EACnB,GAAG,GAAG,KAAK;IAEX,MAAM,CAAC,IAAI,CAAC,cAAc,WAAW,EAAE,CAAC,CAAA;IAExC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACrC,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IAEzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAA;QAChD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,WAAmB;IAEnB,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAA;IAElC,gDAAgD;IAChD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC,EAC3B,WAAW,CACZ,CAAA;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;QAC1C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAkB,EAClB,WAAmB;IAEnB,MAAM,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAE9C,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,KAAK,EACL,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,QAAQ,EAAE,CAAC,EAC9D,WAAW,CACZ,CAAA;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACxC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,SAAiB,EACjB,SAAS,GAAG,IAAI;IAEhB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAM;IACR,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,CAAC;QAED,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;YACjC,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,EAAE,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAE1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE1C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,eAAwB;IAExB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IAE9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;QAChE,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;IAEzE,WAAW,CAAC,OAAO,GAAG;QACpB,GAAG,WAAW,CAAC,OAAO;QACtB,KAAK,EAAE,uBAAuB;QAC9B,GAAG,EAAE,WAAW;QAChB,gBAAgB,EAAE,uBAAuB;QACzC,KAAK,EAAE,4BAA4B;QACnC,kBAAkB,EAAE,yBAAyB;QAC7C,IAAI,EAAE,2BAA2B;QACjC,IAAI,EAAE,2BAA2B;QACjC,GAAG,EAAE,2BAA2B;KACjC,CAAA;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9B,kFAAkF,CAAA;QACpF,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,0BAA0B,CAAA;QACnE,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,0BAA0B,CAAA;IACvE,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACvE,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,0EAA0E;IAC1E,2DAA2D;IAC3D,sDAAsD;IAEtD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,MAAM,eAAe,GAAG,cAAc,CAAC,QAAQ,CAAA;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAE5C,+CAA+C;IAC/C,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IACjE,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IAED,uCAAuC;IACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IACtE,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED,6CAA6C;IAC7C,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IACjE,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,IAAkC,EAClC,MAAgD;IAEhD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAE5C,IAAI,OAAe,CAAA;IACnB,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,GAAG;gCACkB,MAAM,CAAC,MAAM;sCACP,MAAM,CAAC,YAAY;CACxD,CAAA;IACC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG;;;;;oBAKM,MAAM,CAAC,MAAM;0BACP,MAAM,CAAC,YAAY;;;;;;CAM5C,CAAA;IACC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,WAAmB;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IAE1D,MAAM,WAAW,GAAG;;;;;CAKrB,CAAA;IAEC,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACvD,6CAA6C;QAC7C,IACE,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACxC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC/B,CAAC;YACD,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;YAC7C,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;QAC1D,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;IACvD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prepares a Next.js standalone deployment by copying static and public files
|
|
3
|
+
* to the correct location within the standalone output directory.
|
|
4
|
+
*
|
|
5
|
+
* In an Nx monorepo, the standalone output structure is:
|
|
6
|
+
* .next/standalone/apps/storefront/server.js
|
|
7
|
+
*
|
|
8
|
+
* The server looks for static files relative to its location, so we need to copy:
|
|
9
|
+
* - .next/static -> .next/standalone/apps/storefront/.next/static
|
|
10
|
+
* - public -> .next/standalone/apps/storefront/public
|
|
11
|
+
*/
|
|
12
|
+
export declare function prepareStandaloneDeployment(appDir: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Prepares a NestJS application deployment by copying the built output
|
|
15
|
+
* and required files to a deployment staging directory.
|
|
16
|
+
*
|
|
17
|
+
* In an Nx monorepo, the build output is at dist/apps/application/
|
|
18
|
+
* We create a staging directory with:
|
|
19
|
+
* - Built JS files from dist/apps/application
|
|
20
|
+
* - Procfile from apps/application
|
|
21
|
+
* - .env file from apps/application or project root
|
|
22
|
+
*
|
|
23
|
+
* @param appDir - The application source directory (apps/application)
|
|
24
|
+
* @param projectRoot - The project root directory
|
|
25
|
+
* @returns The path to the deployment staging directory
|
|
26
|
+
*/
|
|
27
|
+
export declare function prepareApplicationDeployment(appDir: string, projectRoot: string): Promise<string>;
|
|
28
|
+
//# sourceMappingURL=standalone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../../src/lib/standalone.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAgDjB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Prepares a Next.js standalone deployment by copying static and public files
|
|
5
|
+
* to the correct location within the standalone output directory.
|
|
6
|
+
*
|
|
7
|
+
* In an Nx monorepo, the standalone output structure is:
|
|
8
|
+
* .next/standalone/apps/storefront/server.js
|
|
9
|
+
*
|
|
10
|
+
* The server looks for static files relative to its location, so we need to copy:
|
|
11
|
+
* - .next/static -> .next/standalone/apps/storefront/.next/static
|
|
12
|
+
* - public -> .next/standalone/apps/storefront/public
|
|
13
|
+
*/
|
|
14
|
+
export async function prepareStandaloneDeployment(appDir) {
|
|
15
|
+
const nextDir = path.join(appDir, '.next');
|
|
16
|
+
const standaloneDir = path.join(nextDir, 'standalone');
|
|
17
|
+
// In Nx monorepo, standalone output is at .next/standalone/apps/storefront/
|
|
18
|
+
const standaloneAppDir = path.join(standaloneDir, 'apps', 'storefront');
|
|
19
|
+
if (!fs.existsSync(standaloneAppDir)) {
|
|
20
|
+
throw new Error('Standalone build not found. Ensure next.config.js has output: "standalone"');
|
|
21
|
+
}
|
|
22
|
+
// Copy static files: .next/static -> .next/standalone/apps/storefront/.next/static
|
|
23
|
+
const staticSrc = path.join(nextDir, 'static');
|
|
24
|
+
const staticDest = path.join(standaloneAppDir, '.next', 'static');
|
|
25
|
+
if (fs.existsSync(staticSrc)) {
|
|
26
|
+
copyDirSync(staticSrc, staticDest);
|
|
27
|
+
}
|
|
28
|
+
// Copy public files: public -> .next/standalone/apps/storefront/public
|
|
29
|
+
const publicSrc = path.join(appDir, 'public');
|
|
30
|
+
const publicDest = path.join(standaloneAppDir, 'public');
|
|
31
|
+
if (fs.existsSync(publicSrc)) {
|
|
32
|
+
copyDirSync(publicSrc, publicDest);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Prepares a NestJS application deployment by copying the built output
|
|
37
|
+
* and required files to a deployment staging directory.
|
|
38
|
+
*
|
|
39
|
+
* In an Nx monorepo, the build output is at dist/apps/application/
|
|
40
|
+
* We create a staging directory with:
|
|
41
|
+
* - Built JS files from dist/apps/application
|
|
42
|
+
* - Procfile from apps/application
|
|
43
|
+
* - .env file from apps/application or project root
|
|
44
|
+
*
|
|
45
|
+
* @param appDir - The application source directory (apps/application)
|
|
46
|
+
* @param projectRoot - The project root directory
|
|
47
|
+
* @returns The path to the deployment staging directory
|
|
48
|
+
*/
|
|
49
|
+
export async function prepareApplicationDeployment(appDir, projectRoot) {
|
|
50
|
+
const distDir = path.join(projectRoot, 'dist', 'apps', 'application');
|
|
51
|
+
// Use .forgecart directory at project root to avoid Nx detecting it as a duplicate project
|
|
52
|
+
const deployDir = path.join(projectRoot, '.forgecart', 'application-deploy');
|
|
53
|
+
// Check if build output exists
|
|
54
|
+
if (!fs.existsSync(distDir)) {
|
|
55
|
+
throw new Error('Application build not found. Run the build first or check dist/apps/application exists.');
|
|
56
|
+
}
|
|
57
|
+
// Clean and create deploy directory
|
|
58
|
+
if (fs.existsSync(deployDir)) {
|
|
59
|
+
fs.rmSync(deployDir, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
fs.mkdirSync(deployDir, { recursive: true });
|
|
62
|
+
// Copy built files from dist/apps/application
|
|
63
|
+
copyDirSync(distDir, deployDir);
|
|
64
|
+
// Remove project.json if copied (causes Nx duplicate project error)
|
|
65
|
+
const projectJsonPath = path.join(deployDir, 'project.json');
|
|
66
|
+
if (fs.existsSync(projectJsonPath)) {
|
|
67
|
+
fs.unlinkSync(projectJsonPath);
|
|
68
|
+
}
|
|
69
|
+
// Copy Procfile
|
|
70
|
+
const procfileSrc = path.join(appDir, 'Procfile');
|
|
71
|
+
if (fs.existsSync(procfileSrc)) {
|
|
72
|
+
fs.copyFileSync(procfileSrc, path.join(deployDir, 'Procfile'));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
throw new Error('Procfile not found in application directory');
|
|
76
|
+
}
|
|
77
|
+
// Copy .env file - check app dir first, then project root
|
|
78
|
+
const envSrcApp = path.join(appDir, '.env');
|
|
79
|
+
const envSrcRoot = path.join(projectRoot, '.env');
|
|
80
|
+
const envDest = path.join(deployDir, '.env');
|
|
81
|
+
if (fs.existsSync(envSrcApp)) {
|
|
82
|
+
fs.copyFileSync(envSrcApp, envDest);
|
|
83
|
+
}
|
|
84
|
+
else if (fs.existsSync(envSrcRoot)) {
|
|
85
|
+
fs.copyFileSync(envSrcRoot, envDest);
|
|
86
|
+
}
|
|
87
|
+
// .env is optional - don't throw if not found
|
|
88
|
+
return deployDir;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Recursively copies a directory and its contents.
|
|
92
|
+
*/
|
|
93
|
+
function copyDirSync(src, dest) {
|
|
94
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
95
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
const srcPath = path.join(src, entry.name);
|
|
98
|
+
const destPath = path.join(dest, entry.name);
|
|
99
|
+
if (entry.isDirectory()) {
|
|
100
|
+
copyDirSync(srcPath, destPath);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
fs.copyFileSync(srcPath, destPath);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../../src/lib/standalone.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,16 +29,26 @@ export interface Deployment {
|
|
|
29
29
|
export interface ChannelInfo {
|
|
30
30
|
id: string;
|
|
31
31
|
code: string;
|
|
32
|
+
name: string;
|
|
33
|
+
domain: string;
|
|
34
|
+
hasApplication: boolean;
|
|
35
|
+
applicationName: string | null;
|
|
32
36
|
}
|
|
33
37
|
export interface DeploymentEnv {
|
|
34
38
|
key: string;
|
|
35
39
|
value: string;
|
|
36
40
|
}
|
|
41
|
+
export interface DeploymentLogEntry {
|
|
42
|
+
timestamp: string;
|
|
43
|
+
message: string;
|
|
44
|
+
type: string;
|
|
45
|
+
}
|
|
37
46
|
export interface InitOptions {
|
|
38
47
|
projectName?: string;
|
|
39
48
|
channelToken?: string;
|
|
40
49
|
withApplication?: boolean;
|
|
41
50
|
apiUrl?: string;
|
|
51
|
+
nxVersion?: string;
|
|
42
52
|
}
|
|
43
53
|
export interface DeployOptions {
|
|
44
54
|
type?: DeploymentType;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,oBAAY,cAAc;IACxB,UAAU,eAAe;IACzB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB,MAAM,EAAE,gBAAgB,CAAA;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AASA,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,2CAAyB,CAAA;IACzB,6CAA2B,CAAA;AAC7B,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;IACnB,mCAAe,CAAA;IACf,uCAAmB,CAAA;AACrB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Ora } from 'ora';
|
|
2
|
+
export declare function createSpinner(text: string): Ora;
|
|
3
|
+
export declare function withSpinner<T>(text: string, successText: string, failText: string, fn: () => Promise<T>): Promise<T>;
|
|
4
|
+
interface DeploymentLogEntry {
|
|
5
|
+
timestamp: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Displays a spinner with inline log streaming below it.
|
|
10
|
+
* Logs are displayed as they arrive from the subscription.
|
|
11
|
+
*/
|
|
12
|
+
export declare function withSpinnerAndLogs<T>(text: string, successText: string, failText: string, fn: () => Promise<T>, logStream?: AsyncIterableIterator<{
|
|
13
|
+
deploymentLogs: DeploymentLogEntry;
|
|
14
|
+
}>, onCancel?: () => void): Promise<T>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/utils/spinner.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAE9B,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAK/C;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED,UAAU,kBAAkB;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAAE,cAAc,EAAE,kBAAkB,CAAA;CAAE,CAAC,EACzE,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,OAAO,CAAC,CAAC,CAAC,CAgEZ"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
export function createSpinner(text) {
|
|
4
|
+
return ora({
|
|
5
|
+
text,
|
|
6
|
+
spinner: 'dots',
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
export async function withSpinner(text, successText, failText, fn) {
|
|
10
|
+
const spinner = createSpinner(text).start();
|
|
11
|
+
try {
|
|
12
|
+
const result = await fn();
|
|
13
|
+
spinner.succeed(successText);
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
spinner.fail(failText);
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Displays a spinner with inline log streaming below it.
|
|
23
|
+
* Logs are displayed as they arrive from the subscription.
|
|
24
|
+
*/
|
|
25
|
+
export async function withSpinnerAndLogs(text, successText, failText, fn, logStream, onCancel) {
|
|
26
|
+
const spinner = createSpinner(text).start();
|
|
27
|
+
let cancelled = false;
|
|
28
|
+
if (logStream) {
|
|
29
|
+
;
|
|
30
|
+
(async () => {
|
|
31
|
+
try {
|
|
32
|
+
for await (const result of logStream) {
|
|
33
|
+
if (cancelled)
|
|
34
|
+
break;
|
|
35
|
+
const log = result.deploymentLogs;
|
|
36
|
+
if (!log?.message)
|
|
37
|
+
continue;
|
|
38
|
+
let displayMessage = log.message;
|
|
39
|
+
try {
|
|
40
|
+
const parsed = JSON.parse(log.message);
|
|
41
|
+
if ('Message' in parsed) {
|
|
42
|
+
displayMessage = parsed.Message?.trim() || '';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Not JSON, use as-is
|
|
47
|
+
}
|
|
48
|
+
if (!displayMessage)
|
|
49
|
+
continue;
|
|
50
|
+
const timestamp = new Date(log.timestamp).toLocaleTimeString('en-US', {
|
|
51
|
+
hour12: false,
|
|
52
|
+
hour: '2-digit',
|
|
53
|
+
minute: '2-digit',
|
|
54
|
+
second: '2-digit',
|
|
55
|
+
});
|
|
56
|
+
spinner.clear();
|
|
57
|
+
console.log(` ${chalk.gray(timestamp)} ${displayMessage}`);
|
|
58
|
+
spinner.render();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Stream ended
|
|
63
|
+
}
|
|
64
|
+
})();
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const result = await fn();
|
|
68
|
+
cancelled = true;
|
|
69
|
+
// Close the async iterator to stop the WebSocket connection
|
|
70
|
+
if (logStream?.return) {
|
|
71
|
+
logStream.return(undefined);
|
|
72
|
+
}
|
|
73
|
+
onCancel?.();
|
|
74
|
+
spinner.succeed(successText);
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
cancelled = true;
|
|
79
|
+
// Close the async iterator to stop the WebSocket connection
|
|
80
|
+
if (logStream?.return) {
|
|
81
|
+
logStream.return(undefined);
|
|
82
|
+
}
|
|
83
|
+
onCancel?.();
|
|
84
|
+
spinner.fail(failText);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/utils/spinner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA+CpE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAMT;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAMT;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IACrD,IAAI,EAAE,cAAc,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,IAAI,CAcP"}
|
|
@@ -34,6 +34,20 @@ export function detectProjectType(dir) {
|
|
|
34
34
|
// Ignore parse errors
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
// Check for Nx monorepo NestJS project (no nest-cli.json or local package.json)
|
|
38
|
+
// Look for src/main.ts with NestJS imports
|
|
39
|
+
const mainTs = path.join(dir, 'src', 'main.ts');
|
|
40
|
+
if (fs.existsSync(mainTs)) {
|
|
41
|
+
try {
|
|
42
|
+
const content = fs.readFileSync(mainTs, 'utf-8');
|
|
43
|
+
if (content.includes('@nestjs/core') || content.includes('NestFactory')) {
|
|
44
|
+
return DeploymentType.APPLICATION;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Ignore read errors
|
|
49
|
+
}
|
|
50
|
+
}
|
|
37
51
|
return null;
|
|
38
52
|
}
|
|
39
53
|
export function validateChannelToken(token) {
|
|
@@ -45,11 +59,13 @@ export function isNxWorkspace(dir) {
|
|
|
45
59
|
}
|
|
46
60
|
export function hasStorefront(projectRoot, storefrontPath) {
|
|
47
61
|
const fullPath = path.join(projectRoot, storefrontPath);
|
|
48
|
-
return fs.existsSync(fullPath) &&
|
|
62
|
+
return (fs.existsSync(fullPath) &&
|
|
63
|
+
detectProjectType(fullPath) === DeploymentType.STOREFRONT);
|
|
49
64
|
}
|
|
50
65
|
export function hasApplication(projectRoot, applicationPath) {
|
|
51
66
|
const fullPath = path.join(projectRoot, applicationPath);
|
|
52
|
-
return fs.existsSync(fullPath) &&
|
|
67
|
+
return (fs.existsSync(fullPath) &&
|
|
68
|
+
detectProjectType(fullPath) === DeploymentType.APPLICATION);
|
|
53
69
|
}
|
|
54
70
|
export function getCurrentAppDir(projectRoot) {
|
|
55
71
|
const cwd = process.cwd();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
web:
|
|
1
|
+
web: node main.js
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Module } from '@nestjs/common'
|
|
2
|
+
import { ConfigModule } from '@nestjs/config'
|
|
3
|
+
import { AppController } from './app.controller'
|
|
4
|
+
import { AppService } from './app.service'
|
|
5
|
+
import { ForgeCartService, ProductEventListenerService } from '../services'
|
|
6
|
+
|
|
7
|
+
@Module({
|
|
8
|
+
imports: [
|
|
9
|
+
ConfigModule.forRoot({
|
|
10
|
+
isGlobal: true,
|
|
11
|
+
}),
|
|
12
|
+
],
|
|
13
|
+
controllers: [AppController],
|
|
14
|
+
providers: [AppService, ForgeCartService, ProductEventListenerService],
|
|
15
|
+
})
|
|
16
|
+
export class AppModule {}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common'
|
|
2
|
+
import { ConfigService } from '@nestjs/config'
|
|
3
|
+
import { ForgeCartSDK } from '@forgecart/sdk'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* ForgeCart SDK Service
|
|
7
|
+
*
|
|
8
|
+
* Singleton service that manages the ForgeCart SDK instance.
|
|
9
|
+
* The SDK is initialized once on module init to maintain
|
|
10
|
+
* persistent socket connections for real-time features.
|
|
11
|
+
*/
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class ForgeCartService implements OnModuleInit, OnModuleDestroy {
|
|
14
|
+
private sdk: ForgeCartSDK | null = null
|
|
15
|
+
|
|
16
|
+
constructor(private configService: ConfigService) {}
|
|
17
|
+
|
|
18
|
+
onModuleInit(): void {
|
|
19
|
+
const endpoint = this.configService.get<string>('FORGECART_API_URL')
|
|
20
|
+
const token = this.configService.get<string>('FORGECART_CHANNEL_TOKEN')
|
|
21
|
+
|
|
22
|
+
if (!token) {
|
|
23
|
+
throw new Error('FORGECART_CHANNEL_TOKEN environment variable is required')
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
this.sdk = new ForgeCartSDK({
|
|
27
|
+
endpoint: endpoint || 'http://localhost:3000',
|
|
28
|
+
token,
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
onModuleDestroy(): void {
|
|
33
|
+
if (this.sdk) {
|
|
34
|
+
this.sdk.dispose()
|
|
35
|
+
}
|
|
36
|
+
this.sdk = null
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get the ForgeCart SDK instance
|
|
41
|
+
*/
|
|
42
|
+
getSDK(): ForgeCartSDK {
|
|
43
|
+
if (!this.sdk) {
|
|
44
|
+
throw new Error('ForgeCart SDK not initialized')
|
|
45
|
+
}
|
|
46
|
+
return this.sdk
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Access Shop API operations
|
|
51
|
+
*/
|
|
52
|
+
get shop() {
|
|
53
|
+
return this.getSDK().shop
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Access Admin API operations (requires admin token)
|
|
58
|
+
*/
|
|
59
|
+
get admin() {
|
|
60
|
+
return this.getSDK().admin
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Injectable,
|
|
3
|
+
OnModuleInit,
|
|
4
|
+
OnModuleDestroy,
|
|
5
|
+
Logger,
|
|
6
|
+
} from '@nestjs/common'
|
|
7
|
+
import { ConfigService } from '@nestjs/config'
|
|
8
|
+
import { ForgeCartService } from './forgecart.service'
|
|
9
|
+
|
|
10
|
+
interface EventSubscription {
|
|
11
|
+
unsubscribe: () => void
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@Injectable()
|
|
15
|
+
export class ProductEventListenerService
|
|
16
|
+
implements OnModuleInit, OnModuleDestroy
|
|
17
|
+
{
|
|
18
|
+
private readonly logger = new Logger(ProductEventListenerService.name)
|
|
19
|
+
private subscriptions: EventSubscription[] = []
|
|
20
|
+
private isAuthenticated = false
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
private readonly forgeCart: ForgeCartService,
|
|
24
|
+
private readonly configService: ConfigService
|
|
25
|
+
) {}
|
|
26
|
+
|
|
27
|
+
async onModuleInit(): Promise<void> {
|
|
28
|
+
await this.initialize()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
onModuleDestroy(): void {
|
|
32
|
+
this.cleanup()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private async initialize(): Promise<void> {
|
|
36
|
+
const username = this.configService.get<string>('FORGECART_ADMIN_USERNAME')
|
|
37
|
+
const password = this.configService.get<string>('FORGECART_ADMIN_PASSWORD')
|
|
38
|
+
|
|
39
|
+
// Skip if credentials are not provided
|
|
40
|
+
if (!username || !password) {
|
|
41
|
+
this.logger.warn(
|
|
42
|
+
'FORGECART_ADMIN_USERNAME and FORGECART_ADMIN_PASSWORD not set. ' +
|
|
43
|
+
'Product event listeners will not be registered.'
|
|
44
|
+
)
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
// Login with admin credentials
|
|
50
|
+
const loginResult = await this.forgeCart.admin.administrator.login({
|
|
51
|
+
username,
|
|
52
|
+
password,
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
const login = (
|
|
56
|
+
loginResult as { login?: { __typename?: string; message?: string } }
|
|
57
|
+
)?.login
|
|
58
|
+
if (login?.__typename !== 'CurrentUser') {
|
|
59
|
+
this.logger.error(
|
|
60
|
+
'Admin login failed:',
|
|
61
|
+
login?.message || 'Unknown error'
|
|
62
|
+
)
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
this.isAuthenticated = true
|
|
67
|
+
this.logger.log('Successfully authenticated as admin')
|
|
68
|
+
|
|
69
|
+
// Register event handlers
|
|
70
|
+
this.registerEventHandlers()
|
|
71
|
+
} catch (error) {
|
|
72
|
+
this.logger.error('Failed to initialize product event listener:', error)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private registerEventHandlers(): void {
|
|
77
|
+
if (!this.isAuthenticated) return
|
|
78
|
+
|
|
79
|
+
const sdk = this.forgeCart.getSDK()
|
|
80
|
+
|
|
81
|
+
// Non-blocking handlers
|
|
82
|
+
const productUpdatedSub = sdk.admin.registerEventHandler(
|
|
83
|
+
'product.updated',
|
|
84
|
+
(event) => {
|
|
85
|
+
this.logger.log(`Product updated: ${JSON.stringify(event)}`)
|
|
86
|
+
this.handleProductUpdated(event)
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
this.subscriptions.push(productUpdatedSub)
|
|
90
|
+
|
|
91
|
+
const productCreatedSub = sdk.admin.registerEventHandler(
|
|
92
|
+
'product.created',
|
|
93
|
+
(event) => {
|
|
94
|
+
this.logger.log(`Product created: ${JSON.stringify(event)}`)
|
|
95
|
+
this.handleProductCreated(event)
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
this.subscriptions.push(productCreatedSub)
|
|
99
|
+
|
|
100
|
+
const productDeletedSub = sdk.admin.registerEventHandler(
|
|
101
|
+
'product.deleted',
|
|
102
|
+
(event) => {
|
|
103
|
+
this.logger.log(`Product deleted: ${JSON.stringify(event)}`)
|
|
104
|
+
this.handleProductDeleted(event)
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
this.subscriptions.push(productDeletedSub)
|
|
108
|
+
|
|
109
|
+
// Blocking handler (must complete within 1000ms)
|
|
110
|
+
const variantUpdatedSub = sdk.admin.registerBlockingEventHandler(
|
|
111
|
+
'product.variant.updated',
|
|
112
|
+
async (event) => {
|
|
113
|
+
this.logger.log(
|
|
114
|
+
`Product variant updated (blocking): ${JSON.stringify(event)}`
|
|
115
|
+
)
|
|
116
|
+
await this.handleVariantUpdated(event)
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
this.subscriptions.push(variantUpdatedSub)
|
|
120
|
+
|
|
121
|
+
this.logger.log('Product event handlers registered successfully')
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private handleProductUpdated(event: unknown): void {
|
|
125
|
+
// Implement custom logic here
|
|
126
|
+
this.logger.debug('handleProductUpdated called', event)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private handleProductCreated(event: unknown): void {
|
|
130
|
+
// Implement custom logic here
|
|
131
|
+
this.logger.debug('handleProductCreated called', event)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private handleProductDeleted(event: unknown): void {
|
|
135
|
+
// Implement custom logic here
|
|
136
|
+
this.logger.debug('handleProductDeleted called', event)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private async handleVariantUpdated(event: unknown): Promise<void> {
|
|
140
|
+
// Blocking handler - must complete within 1000ms
|
|
141
|
+
this.logger.debug('handleVariantUpdated called', event)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private cleanup(): void {
|
|
145
|
+
for (const subscription of this.subscriptions) {
|
|
146
|
+
subscription.unsubscribe()
|
|
147
|
+
}
|
|
148
|
+
this.subscriptions = []
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { waitForPortOpen } from '@nx/node/utils'
|
|
2
|
+
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
var __TEARDOWN_MESSAGE__: string
|
|
5
|
+
|
|
6
|
+
module.exports = async function () {
|
|
7
|
+
// Start services that the app needs to run (e.g. database, docker-compose, etc.).
|
|
8
|
+
console.log('\nSetting up...\n')
|
|
9
|
+
|
|
10
|
+
const host = process.env.HOST ?? 'localhost'
|
|
11
|
+
const port = process.env.PORT ? Number(process.env.PORT) : 8080 // Match application's default port
|
|
12
|
+
await waitForPortOpen(port, { host })
|
|
13
|
+
|
|
14
|
+
// Hint: Use `globalThis` to pass variables to global teardown.
|
|
15
|
+
globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
import axios from 'axios'
|
|
3
|
+
|
|
4
|
+
module.exports = async function () {
|
|
5
|
+
// Configure axios for tests to use.
|
|
6
|
+
const host = process.env.HOST ?? 'localhost'
|
|
7
|
+
const port = process.env.PORT ?? '8080' // Match application's default port
|
|
8
|
+
axios.defaults.baseURL = `http://${host}:${port}`
|
|
9
|
+
}
|