@doswiftly/cli 0.2.1 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +260 -0
  2. package/README.md +1 -1
  3. package/bin/doswiftly.js +0 -0
  4. package/dist/commands/dev.d.ts +7 -1
  5. package/dist/commands/dev.d.ts.map +1 -1
  6. package/dist/commands/dev.js +110 -51
  7. package/dist/commands/dev.js.map +1 -1
  8. package/dist/commands/env.d.ts.map +1 -1
  9. package/dist/commands/env.js +11 -1
  10. package/dist/commands/env.js.map +1 -1
  11. package/dist/commands/init.js +2 -2
  12. package/dist/commands/inspect.d.ts.map +1 -1
  13. package/dist/commands/inspect.js +5 -1
  14. package/dist/commands/inspect.js.map +1 -1
  15. package/dist/commands/proxy.d.ts.map +1 -1
  16. package/dist/commands/proxy.js +7 -1
  17. package/dist/commands/proxy.js.map +1 -1
  18. package/dist/commands/template.js +1 -1
  19. package/dist/config/types.d.ts +8 -0
  20. package/dist/config/types.d.ts.map +1 -1
  21. package/dist/config/types.js.map +1 -1
  22. package/dist/index.js +2 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/lib/api-url.d.ts +77 -8
  25. package/dist/lib/api-url.d.ts.map +1 -1
  26. package/dist/lib/api-url.js +54 -12
  27. package/dist/lib/api-url.js.map +1 -1
  28. package/dist/lib/config.d.ts +1 -0
  29. package/dist/lib/config.d.ts.map +1 -1
  30. package/dist/lib/config.js +9 -12
  31. package/dist/lib/config.js.map +1 -1
  32. package/dist/lib/i18n.d.ts +24 -0
  33. package/dist/lib/i18n.d.ts.map +1 -1
  34. package/dist/lib/i18n.js +48 -0
  35. package/dist/lib/i18n.js.map +1 -1
  36. package/dist/lib/proxy-server.d.ts +26 -0
  37. package/dist/lib/proxy-server.d.ts.map +1 -1
  38. package/dist/lib/proxy-server.js +70 -0
  39. package/dist/lib/proxy-server.js.map +1 -1
  40. package/package.json +13 -12
  41. package/templates/storefront-nextjs-shadcn/app/[locale]/products/[slug]/product-client.tsx +87 -2
  42. package/templates/storefront-nextjs-shadcn/app/[locale]/products/products-client.tsx +1 -1
  43. package/templates/storefront-nextjs-shadcn/codegen.ts +1 -1
  44. package/templates/storefront-nextjs-shadcn/components/cart/cart-item.tsx +18 -0
  45. package/templates/storefront-nextjs-shadcn/components/cart/cart-line.fragment.graphql +17 -1
  46. package/templates/storefront-nextjs-shadcn/components/home/collection-card.fragment.graphql +2 -1
  47. package/templates/storefront-nextjs-shadcn/components/layout/category-node.fragment.graphql +2 -1
  48. package/templates/storefront-nextjs-shadcn/components/product/add-to-cart-button.tsx +23 -3
  49. package/templates/storefront-nextjs-shadcn/components/product/filter-active-pills.tsx +1 -1
  50. package/templates/storefront-nextjs-shadcn/components/product/filter-mobile-sheet.tsx +1 -1
  51. package/templates/storefront-nextjs-shadcn/components/product/product-card.fragment.graphql +2 -1
  52. package/templates/storefront-nextjs-shadcn/components/product/product-configurator.fragment.graphql +43 -0
  53. package/templates/storefront-nextjs-shadcn/components/product/product-configurator.tsx +282 -0
  54. package/templates/storefront-nextjs-shadcn/components/product/product-detail.fragment.graphql +8 -1
  55. package/templates/storefront-nextjs-shadcn/components/product/product-image.tsx +7 -3
  56. package/templates/storefront-nextjs-shadcn/components/product/product-variant.fragment.graphql +2 -1
  57. package/templates/storefront-nextjs-shadcn/graphql/custom.example.graphql +100 -0
  58. package/templates/storefront-nextjs-shadcn/hooks/use-cart-actions.ts +26 -5
  59. package/templates/storefront-nextjs-shadcn/hooks/use-cart-sync.ts +26 -0
  60. package/templates/storefront-nextjs-shadcn/lib/image-loader.ts +12 -0
  61. package/templates/storefront-nextjs-shadcn/next.config.ts +6 -17
  62. package/templates/storefront-nextjs-shadcn/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"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"}
package/dist/lib/i18n.js CHANGED
@@ -86,6 +86,30 @@ const en = {
86
86
  failedFetchTeams: (e) => `Failed to fetch teams: ${e}`,
87
87
  failedFetchProjects: (e) => `Failed to fetch projects: ${e}`,
88
88
  failedCreateProject: 'Failed to create project',
89
+ devHeader: 'DoSwiftly Dev Server',
90
+ devLabelStorefront: 'Storefront:',
91
+ devLabelApiProxy: 'API Proxy:',
92
+ devLabelApi: 'API:',
93
+ devLabelShop: 'Shop:',
94
+ devProxyStarting: 'Starting API proxy...',
95
+ devProxyStarted: 'API proxy started',
96
+ devProxyFailed: 'Failed to start proxy',
97
+ devProxyContinuingNoProxy: 'Continuing without proxy - CORS errors may occur.',
98
+ devStopping: 'Stopping dev server...',
99
+ devExitedCode: (code) => `Dev server exited with code ${code}`,
100
+ devPortFallback: (from, to) => `Port ${from} is in use, using ${to} instead`,
101
+ devPortFallbackHint: 'Pass --strict-port to fail fast instead of auto-falling back.',
102
+ devPortInUseStrict: (port) => `Port ${port} is in use (strict-port mode)`,
103
+ devPortInUseStrictHint: 'Stop the conflicting process, pass --port <N>, or drop --strict-port.',
104
+ devPortRangeExhausted: (from, to) => `No free port found in range ${from}-${to}`,
105
+ devPortRangeHint: 'Stop a conflicting process or pass --port <N>.',
106
+ devScriptsDevHardcodedPort: (arg) => `Your package.json "dev" script contains a hardcoded ${arg} — this may override the CLI --port / PORT env.`,
107
+ devApiSourceProfile: (name) => `from profile "${name}"`,
108
+ devApiSourceEnv: (name) => `from env ${name}`,
109
+ devApiSourceLocalConfig: 'from doswiftly.config.ts',
110
+ devApiSourceDotEnvLocal: 'from .env.local',
111
+ devApiSourceFallback: 'default',
112
+ envProfileOverridesConfig: 'This profile overrides api.url from doswiftly.config.ts for dev, inspect, and proxy.',
89
113
  };
90
114
  const pl = {
91
115
  wizardTitle: 'DoSwiftly CLI - Inicjalizacja projektu',
@@ -171,6 +195,30 @@ const pl = {
171
195
  failedFetchTeams: (e) => `Nie udalo sie pobrac zespolow: ${e}`,
172
196
  failedFetchProjects: (e) => `Nie udalo sie pobrac projektow: ${e}`,
173
197
  failedCreateProject: 'Nie udalo sie utworzyc projektu',
198
+ devHeader: 'Serwer deweloperski DoSwiftly',
199
+ devLabelStorefront: 'Sklep:',
200
+ devLabelApiProxy: 'Proxy API:',
201
+ devLabelApi: 'API:',
202
+ devLabelShop: 'Sklep (slug):',
203
+ devProxyStarting: 'Uruchamiam proxy API...',
204
+ devProxyStarted: 'Proxy API uruchomione',
205
+ devProxyFailed: 'Nie udalo sie uruchomic proxy',
206
+ devProxyContinuingNoProxy: 'Kontynuuje bez proxy - mozliwe bledy CORS.',
207
+ devStopping: 'Zatrzymuje serwer deweloperski...',
208
+ devExitedCode: (code) => `Serwer deweloperski zakonczony z kodem ${code}`,
209
+ devPortFallback: (from, to) => `Port ${from} jest zajety, uzywam ${to}`,
210
+ devPortFallbackHint: 'Uzyj --strict-port aby zamiast auto-fallbacku przerwac od razu.',
211
+ devPortInUseStrict: (port) => `Port ${port} jest zajety (tryb --strict-port)`,
212
+ devPortInUseStrictHint: 'Zatrzymaj konfliktujacy proces, uzyj --port <N> albo usun --strict-port.',
213
+ devPortRangeExhausted: (from, to) => `Brak wolnego portu w zakresie ${from}-${to}`,
214
+ devPortRangeHint: 'Zatrzymaj konfliktujacy proces albo uzyj --port <N>.',
215
+ devScriptsDevHardcodedPort: (arg) => `Skrypt "dev" w package.json zawiera na stale ${arg} - moze nadpisac --port / PORT env.`,
216
+ devApiSourceProfile: (name) => `z profilu "${name}"`,
217
+ devApiSourceEnv: (name) => `ze zmiennej ${name}`,
218
+ devApiSourceLocalConfig: 'z doswiftly.config.ts',
219
+ devApiSourceDotEnvLocal: 'z .env.local',
220
+ devApiSourceFallback: 'domyslny',
221
+ envProfileOverridesConfig: 'Ten profil nadpisuje api.url z doswiftly.config.ts dla komend dev, inspect i proxy.',
174
222
  };
175
223
  const messages = { en, pl };
176
224
  let currentLocale = 'en';
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2IH,MAAM,EAAE,GAAa;IACnB,WAAW,EAAE,oCAAoC;IACjD,SAAS,EAAE,qBAAqB;IAChC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAElC,eAAe,EAAE,kBAAkB;IACnC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG;IACnD,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,gBAAgB;IAC/B,YAAY,EAAE,kBAAkB;IAChC,WAAW,EAAE,8CAA8C;IAC3D,eAAe,EAAE,0BAA0B;IAC3C,iBAAiB,EAAE,wBAAwB;IAC3C,kBAAkB,EAAE,6BAA6B;IACjD,SAAS,EAAE,kCAAkC;IAC7C,kBAAkB,EAAE,gDAAgD;IAEpE,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE;IAC/D,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI;IAClC,OAAO,EAAE,kCAAkC;IAC3C,cAAc,EAAE,4CAA4C;IAE5D,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9B,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,sBAAsB;IAClC,iBAAiB,EAAE,wDAAwD;IAC3E,aAAa,EAAE,uCAAuC;IACtD,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,uDAAuD,EAAE,EAAE;IACnF,aAAa,EAAE,yBAAyB;IACxC,YAAY,EAAE,qCAAqC;IAEnD,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,+BAA+B;IAC7C,gBAAgB,EAAE,wBAAwB;IAC1C,iBAAiB,EAAE,uBAAuB;IAC1C,WAAW,EAAE,8CAA8C;IAC3D,cAAc,EAAE,iBAAiB;IACjC,cAAc,EAAE,sDAAsD;IAEtE,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,WAAW;IACrB,GAAG,EAAE,qBAAqB;IAC1B,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,uBAAuB;IACpC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,WAAW;IACzC,cAAc,EAAE,sBAAsB;IAEtC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,6BAA6B;IACvC,UAAU,EAAE,kBAAkB;IAC9B,QAAQ,EAAE,4BAA4B;IAEtC,YAAY,EAAE,kBAAkB;IAChC,eAAe,EAAE,qBAAqB;IACtC,mBAAmB,EAAE,yBAAyB;IAC9C,kBAAkB,EAAE,wBAAwB;IAC5C,eAAe,EAAE,6BAA6B;IAC9C,gBAAgB,EAAE,wBAAwB;IAC1C,cAAc,EAAE,iCAAiC;IACjD,cAAc,EAAE,4BAA4B;IAE5C,cAAc,EAAE,iBAAiB;IACjC,aAAa,EAAE,wBAAwB;IACvC,aAAa,EAAE,qBAAqB;IACpC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,oBAAoB,IAAI,OAAO,EAAE,UAAU;IACtE,YAAY,EAAE,gBAAgB;IAC9B,SAAS,EAAE,aAAa;IACxB,aAAa,EAAE,8CAA8C;IAE7D,uBAAuB,EAAE,2BAA2B;IACpD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE;IAC3C,kBAAkB,EAAE,sBAAsB;IAC1C,gBAAgB,EAAE,sCAAsC;IACxD,iBAAiB,EAAE,uBAAuB;IAC1C,gBAAgB,EAAE,iCAAiC;IACnD,cAAc,EAAE,yCAAyC;IACzD,eAAe,EAAE,oBAAoB;IACrC,kBAAkB,EAAE,oCAAoC;IACxD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gDAAgD,CAAC,GAAG;IAChF,cAAc,EAAE,aAAa;IAC7B,eAAe,EAAE,sBAAsB;IAEvC,WAAW,EAAE,eAAe;IAC5B,YAAY,EAAE,2BAA2B;IACzC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,EAAE;IACtD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,EAAE;IAC5D,mBAAmB,EAAE,0BAA0B;IAE/C,SAAS,EAAE,sBAAsB;IACjC,kBAAkB,EAAE,aAAa;IACjC,gBAAgB,EAAE,YAAY;IAC9B,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,OAAO;IACrB,gBAAgB,EAAE,uBAAuB;IACzC,eAAe,EAAE,mBAAmB;IACpC,cAAc,EAAE,uBAAuB;IACvC,yBAAyB,EAAE,mDAAmD;IAC9E,WAAW,EAAE,wBAAwB;IACrC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,+BAA+B,IAAI,EAAE;IAC9D,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,qBAAqB,EAAE,UAAU;IAC5E,mBAAmB,EAAE,+DAA+D;IACpF,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,+BAA+B;IACzE,sBAAsB,EAAE,uEAAuE;IAC/F,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,+BAA+B,IAAI,IAAI,EAAE,EAAE;IAChF,gBAAgB,EAAE,gDAAgD;IAClE,0BAA0B,EAAE,CAAC,GAAG,EAAE,EAAE,CAClC,uDAAuD,GAAG,iDAAiD;IAC7G,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,IAAI,GAAG;IACvD,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;IAC7C,uBAAuB,EAAE,0BAA0B;IACnD,uBAAuB,EAAE,iBAAiB;IAC1C,oBAAoB,EAAE,SAAS;IAE/B,yBAAyB,EACvB,sFAAsF;CACzF,CAAC;AAEF,MAAM,EAAE,GAAa;IACnB,WAAW,EAAE,wCAAwC;IACrD,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAElC,eAAe,EAAE,kBAAkB;IACnC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG;IAChD,YAAY,EAAE,4BAA4B;IAC1C,aAAa,EAAE,gBAAgB;IAC/B,YAAY,EAAE,qBAAqB;IACnC,WAAW,EAAE,qCAAqC;IAClD,eAAe,EAAE,sBAAsB;IACvC,iBAAiB,EAAE,wBAAwB;IAC3C,kBAAkB,EAAE,0BAA0B;IAC9C,SAAS,EAAE,qCAAqC;IAChD,kBAAkB,EAAE,kDAAkD;IAEtE,UAAU,EAAE,gBAAgB;IAC5B,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE;IACrF,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI;IACtC,OAAO,EAAE,iCAAiC;IAC1C,cAAc,EAAE,yCAAyC;IAEzD,aAAa,EAAE,iBAAiB;IAChC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE;IAC/B,MAAM,EAAE,aAAa;IACrB,UAAU,EAAE,yBAAyB;IACrC,iBAAiB,EAAE,mDAAmD;IACtE,aAAa,EAAE,4CAA4C;IAC3D,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,mDAAmD,EAAE,EAAE;IAC/E,aAAa,EAAE,sBAAsB;IACrC,YAAY,EAAE,kCAAkC;IAEhD,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,+BAA+B;IAC7C,gBAAgB,EAAE,qBAAqB;IACvC,iBAAiB,EAAE,yBAAyB;IAC5C,WAAW,EAAE,qDAAqD;IAClE,cAAc,EAAE,kBAAkB;IAClC,cAAc,EAAE,mDAAmD;IAEnE,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,cAAc;IACxB,GAAG,EAAE,qBAAqB;IAC1B,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,0BAA0B;IACvC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,WAAW;IACzC,cAAc,EAAE,wBAAwB;IAExC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,kCAAkC;IAC5C,UAAU,EAAE,qBAAqB;IACjC,QAAQ,EAAE,oBAAoB;IAE9B,YAAY,EAAE,sBAAsB;IACpC,eAAe,EAAE,uBAAuB;IACxC,mBAAmB,EAAE,wBAAwB;IAC7C,kBAAkB,EAAE,0BAA0B;IAC9C,eAAe,EAAE,oCAAoC;IACrD,gBAAgB,EAAE,yBAAyB;IAC3C,cAAc,EAAE,kCAAkC;IAClD,cAAc,EAAE,4BAA4B;IAE5C,cAAc,EAAE,mBAAmB;IACnC,aAAa,EAAE,0BAA0B;IACzC,aAAa,EAAE,iBAAiB;IAChC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,yBAAyB,IAAI,OAAO,EAAE,UAAU;IAC3E,YAAY,EAAE,iBAAiB;IAC/B,SAAS,EAAE,iBAAiB;IAC5B,aAAa,EAAE,6CAA6C;IAE5D,uBAAuB,EAAE,4BAA4B;IACrD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE;IAC3C,kBAAkB,EAAE,oBAAoB;IACxC,gBAAgB,EAAE,mCAAmC;IACrD,iBAAiB,EAAE,sBAAsB;IACzC,gBAAgB,EAAE,gCAAgC;IAClD,cAAc,EAAE,sDAAsD;IACtE,eAAe,EAAE,sBAAsB;IACvC,kBAAkB,EAAE,yCAAyC;IAC7D,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gDAAgD,CAAC,GAAG;IAChF,cAAc,EAAE,iBAAiB;IACjC,eAAe,EAAE,qBAAqB;IAEtC,WAAW,EAAE,uBAAuB;IACpC,YAAY,EAAE,+BAA+B;IAC7C,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kCAAkC,CAAC,EAAE;IAC9D,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,EAAE;IAClE,mBAAmB,EAAE,iCAAiC;IAEtD,SAAS,EAAE,+BAA+B;IAC1C,kBAAkB,EAAE,QAAQ;IAC5B,gBAAgB,EAAE,YAAY;IAC9B,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,eAAe;IAC7B,gBAAgB,EAAE,yBAAyB;IAC3C,eAAe,EAAE,uBAAuB;IACxC,cAAc,EAAE,+BAA+B;IAC/C,yBAAyB,EAAE,4CAA4C;IACvE,WAAW,EAAE,mCAAmC;IAChD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,0CAA0C,IAAI,EAAE;IACzE,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,wBAAwB,EAAE,EAAE;IACvE,mBAAmB,EAAE,iEAAiE;IACtF,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,mCAAmC;IAC7E,sBAAsB,EAAE,0EAA0E;IAClG,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,iCAAiC,IAAI,IAAI,EAAE,EAAE;IAClF,gBAAgB,EAAE,sDAAsD;IACxE,0BAA0B,EAAE,CAAC,GAAG,EAAE,EAAE,CAClC,gDAAgD,GAAG,qCAAqC;IAC1F,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,GAAG;IACpD,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,EAAE;IAChD,uBAAuB,EAAE,uBAAuB;IAChD,uBAAuB,EAAE,cAAc;IACvC,oBAAoB,EAAE,UAAU;IAEhC,yBAAyB,EACvB,qFAAqF;CACxF,CAAC;AAEF,MAAM,QAAQ,GAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACtD,IAAI,aAAa,GAAW,IAAI,CAAC;AAEjC;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClF,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,CAAC;IACf,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -20,8 +20,34 @@ interface RequestLogEntry {
20
20
  export declare function isRemoteUrl(url: string): boolean;
21
21
  /**
22
22
  * Find a free TCP port. Tries `preferred` first; falls back to OS-assigned.
23
+ *
24
+ * Semantics are intentionally "preferred, or anything free" — suitable for
25
+ * internal services (e.g. the API proxy port) where the exact number is
26
+ * unimportant. For user-facing ports (storefront dev server) prefer
27
+ * {@link findSequentialFreePort}, which keeps the port close to the requested
28
+ * value so developer muscle memory is preserved.
23
29
  */
24
30
  export declare function findFreePort(preferred?: number): Promise<number>;
31
+ /**
32
+ * Thrown by {@link findSequentialFreePort} when no port in the probed range
33
+ * could be bound. Holds the inclusive start + end of the range so callers can
34
+ * render an actionable error for the user.
35
+ */
36
+ export declare class PortRangeExhaustedError extends Error {
37
+ readonly start: number;
38
+ readonly end: number;
39
+ constructor(start: number, end: number);
40
+ }
41
+ /**
42
+ * Try `preferred`, then `preferred+1`, `preferred+2`, … up to `maxAttempts`
43
+ * total ports. Returns the first port that is free on `host`.
44
+ *
45
+ * Use this for user-facing ports where the developer expects a small, legible
46
+ * fallback (3000 → 3001 → 3002) instead of a random OS-assigned port.
47
+ *
48
+ * @throws {PortRangeExhaustedError} When all probed ports are in use.
49
+ */
50
+ export declare function findSequentialFreePort(preferred: number, maxAttempts?: number, host?: string): Promise<number>;
25
51
  /**
26
52
  * Build request headers for the upstream target.
27
53
  * Forwards everything except hop-by-hop and `origin`.
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-server.d.ts","sourceRoot":"","sources":["../../src/lib/proxy-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,MAAM,CAAC;AAQrE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AA+CD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBtE;AAaD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,EAC3C,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB;AA+ID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CA2BhG;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,EAAE,CAElD"}
1
+ {"version":3,"file":"proxy-server.d.ts","sourceRoot":"","sources":["../../src/lib/proxy-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,MAAM,CAAC;AAQrE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AA+CD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBtE;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,GAAG,EAAE,MAAM,CAAC;gBAEhB,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAMvC;AAqCD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,MAAW,EACxB,IAAI,GAAE,MAAkB,GACvB,OAAO,CAAC,MAAM,CAAC,CASjB;AAaD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,EAC3C,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB;AA+ID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CA2BhG;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,EAAE,CAElD"}
@@ -60,6 +60,12 @@ export function isRemoteUrl(url) {
60
60
  }
61
61
  /**
62
62
  * Find a free TCP port. Tries `preferred` first; falls back to OS-assigned.
63
+ *
64
+ * Semantics are intentionally "preferred, or anything free" — suitable for
65
+ * internal services (e.g. the API proxy port) where the exact number is
66
+ * unimportant. For user-facing ports (storefront dev server) prefer
67
+ * {@link findSequentialFreePort}, which keeps the port close to the requested
68
+ * value so developer muscle memory is preserved.
63
69
  */
64
70
  export function findFreePort(preferred = 4001) {
65
71
  return new Promise((resolve, reject) => {
@@ -83,6 +89,70 @@ export function findFreePort(preferred = 4001) {
83
89
  });
84
90
  });
85
91
  }
92
+ /**
93
+ * Thrown by {@link findSequentialFreePort} when no port in the probed range
94
+ * could be bound. Holds the inclusive start + end of the range so callers can
95
+ * render an actionable error for the user.
96
+ */
97
+ export class PortRangeExhaustedError extends Error {
98
+ start;
99
+ end;
100
+ constructor(start, end) {
101
+ super(`No free TCP port found in range ${start}-${end}`);
102
+ this.name = 'PortRangeExhaustedError';
103
+ this.start = start;
104
+ this.end = end;
105
+ }
106
+ }
107
+ /**
108
+ * Check whether a specific TCP port is bindable on both IPv4 and IPv6.
109
+ *
110
+ * Next.js and most Node.js dev servers call `server.listen(port)` without a
111
+ * host argument — Node then binds dual-stack IPv6 (`::`). On Windows that
112
+ * exclusively holds the port, so a single-family probe on `0.0.0.0` would
113
+ * report "free" and the framework would immediately crash with
114
+ * `EADDRINUSE :::<port>`. Require BOTH families free to match what the
115
+ * spawned framework will actually do.
116
+ *
117
+ * Hosts passing an IPv6 address already go through the `::` probe below, so
118
+ * the caller-supplied `host` is only used as the IPv4 target.
119
+ */
120
+ function isPortFree(port, host) {
121
+ const probe = (target) => new Promise((resolve) => {
122
+ const server = net.createServer();
123
+ server.unref();
124
+ server.once('error', (err) => {
125
+ // EADDRNOTAVAIL = address family not available (e.g. IPv6 disabled on
126
+ // the host). Treat as "free" so we don't falsely reject ports on
127
+ // IPv4-only systems. Every other error (EADDRINUSE, EACCES, …) means
128
+ // the port really is busy.
129
+ resolve(err.code === 'EADDRNOTAVAIL');
130
+ });
131
+ server.listen(port, target, () => {
132
+ server.close(() => resolve(true));
133
+ });
134
+ });
135
+ return Promise.all([probe(host), probe('::')]).then(([v4Free, v6Free]) => v4Free && v6Free);
136
+ }
137
+ /**
138
+ * Try `preferred`, then `preferred+1`, `preferred+2`, … up to `maxAttempts`
139
+ * total ports. Returns the first port that is free on `host`.
140
+ *
141
+ * Use this for user-facing ports where the developer expects a small, legible
142
+ * fallback (3000 → 3001 → 3002) instead of a random OS-assigned port.
143
+ *
144
+ * @throws {PortRangeExhaustedError} When all probed ports are in use.
145
+ */
146
+ export async function findSequentialFreePort(preferred, maxAttempts = 10, host = '0.0.0.0') {
147
+ const attempts = Math.max(1, maxAttempts);
148
+ for (let offset = 0; offset < attempts; offset++) {
149
+ const candidate = preferred + offset;
150
+ if (await isPortFree(candidate, host)) {
151
+ return candidate;
152
+ }
153
+ }
154
+ throw new PortRangeExhaustedError(preferred, preferred + attempts - 1);
155
+ }
86
156
  /**
87
157
  * Returns `true` if the origin matches localhost (any port).
88
158
  */
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-server.js","sourceRoot":"","sources":["../../src/lib/proxy-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy-server.js","sourceRoot":"","sources":["../../src/lib/proxy-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAmC,MAAM,MAAM,CAAC;AACrE,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAsBrC,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,mBAAmB;IACnB,IAAI;IACJ,SAAS;IACT,SAAS;IACT,qBAAqB;IACrB,oBAAoB;CACrB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,oBAAoB,GAAG;IAC3B,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,aAAa;IACb,sBAAsB;IACtB,kBAAkB;IAClB,yBAAyB;IACzB,cAAc;IACd,kBAAkB;IAClB,wBAAwB;IACxB,QAAQ;CACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAE5C,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,iFAAiF;QACjF,yDAAyD;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB,IAAI;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,kDAAkD;YAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YACpC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE;gBACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChC,KAAK,CAAS;IACd,GAAG,CAAS;IAE5B,YAAY,KAAa,EAAE,GAAW;QACpC,KAAK,CAAC,mCAAmC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,KAAK,GAAG,CAAC,MAAc,EAAoB,EAAE,CACjD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YAClD,sEAAsE;YACtE,iEAAiE;YACjE,qEAAqE;YACrE,2BAA2B;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACjD,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,IAAI,MAAM,CACvC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAiB,EACjB,cAAsB,EAAE,EACxB,OAAe,SAAS;IAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC1C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;QACrC,IAAI,MAAM,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,8CAA8C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,eAA2C,EAC3C,UAAkB,EAClB,eAAuB;IAEvB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAC5C,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS,CAAC,gFAAgF;QACzI,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;IAE7B,2DAA2D;IAC3D,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAC;IAC3C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAmB,EAAE,MAA0B;IACvE,MAAM,UAAU,GAAG,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAC1F,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC;IACzD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,wCAAwC,CAAC,CAAC;IACxF,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;IACpE,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,oBAAoB,CAAC,CAAC;IACrE,GAAG,CAAC,SAAS,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;IAC1D,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,WAAW,GAAsB,EAAE,CAAC;AAE1C,SAAS,cAAc,CAAC,KAAsB;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACvG,MAAM,WAAW,GAA0C;QACzD,GAAG,EAAE,KAAK,CAAC,IAAI;QACf,IAAI,EAAE,KAAK,CAAC,KAAK;QACjB,GAAG,EAAE,KAAK,CAAC,MAAM;QACjB,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,MAAM,EAAE,KAAK,CAAC,GAAG;KAClB,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;IAEzD,OAAO,CACL,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QAC7D,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;QACrC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;QACjD,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG;QACnD,GAAG,KAAK,CAAC,IAAI,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,KAAK,UAAU,YAAY,CACzB,GAAoB,EACpB,GAAmB,EACnB,OAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;IAC5B,MAAM,SAAS,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;IAEnD,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,IAAI,IAAI,OAAO,SAAS,EAAE,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,uBAAuB;QACvB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnE,yBAAyB;QACzB,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEhF,kBAAkB;QAClB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YACtC,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAChD,MAAM,EAAE,MAAe;SACxB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAElD,mDAAmD;QACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,mBAAmB,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;gBAC5F,OAAO;YACT,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,mBAAmB;QACnB,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE1C,MAAM;QACN,MAAM,QAAQ,GAAoB;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM;YACN,IAAI;YACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ;SACT,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG;YAAE,WAAW,CAAC,KAAK,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1D,gBAAgB;QAChB,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,QAAQ,GAAoB;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM;YACN,IAAI;YACJ,MAAM,EAAE,GAAG;YACX,QAAQ;SACT,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1D,MAAM,CAAC,KAAK,CAAC,gBAAiB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAEzD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,SAAS,CAAC;YACb,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,4BAA6B,KAAe,CAAC,OAAO,EAAE;SAChE,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAoB,EAAE,GAAmB;IAChE,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9C,MAAM,CAAC,KAAK,CAAC,0BAA2B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AAC1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doswiftly/cli",
3
- "version": "0.2.1",
3
+ "version": "0.2.6",
4
4
  "description": "DoSwiftly CLI - Scaffold and deploy e-commerce storefronts",
5
5
  "homepage": "https://doswiftly.pl",
6
6
  "publishConfig": {
@@ -27,16 +27,10 @@
27
27
  "files": [
28
28
  "dist",
29
29
  "bin",
30
- "templates"
30
+ "templates",
31
+ "CHANGELOG.md",
32
+ "README.md"
31
33
  ],
32
- "scripts": {
33
- "build": "tsc",
34
- "dev": "tsc --watch",
35
- "clean": "rimraf dist",
36
- "prepublishOnly": "pnpm run clean && pnpm run build",
37
- "test": "vitest run",
38
- "test:watch": "vitest"
39
- },
40
34
  "keywords": [
41
35
  "doswiftly",
42
36
  "cli",
@@ -50,7 +44,7 @@
50
44
  "@clack/core": "^0.4.1",
51
45
  "@clack/prompts": "^0.10.0",
52
46
  "@inquirer/prompts": "^7.2.0",
53
- "axios": "^1.13.5",
47
+ "axios": "^1.15.0",
54
48
  "chalk": "^5.3.0",
55
49
  "picocolors": "^1.1.1",
56
50
  "chokidar": "^4.0.1",
@@ -81,5 +75,12 @@
81
75
  "engines": {
82
76
  "node": ">=18.0.0",
83
77
  "pnpm": ">=9.0.0"
78
+ },
79
+ "scripts": {
80
+ "build": "tsc",
81
+ "dev": "tsc --watch",
82
+ "clean": "rimraf dist",
83
+ "test": "vitest run",
84
+ "test:watch": "vitest"
84
85
  }
85
- }
86
+ }
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useState, useEffect } from "react";
3
+ import { useState, useEffect, useMemo, useCallback } from "react";
4
4
  import { useTranslations } from "next-intl";
5
+ import { toast } from "sonner";
5
6
  import { useProduct } from "@/lib/graphql/hooks";
6
7
  import { useCurrencyStore } from "@doswiftly/storefront-sdk/react";
7
8
  import { ProductGallery } from "@/components/product/product-gallery";
@@ -9,6 +10,12 @@ import { ProductPrice } from "@/components/product/product-price";
9
10
  import { ProductVariantSelector } from "@/components/product/product-variant-selector";
10
11
  import { ProductQuantitySelector } from "@/components/product/product-quantity-selector";
11
12
  import { AddToCartButton } from "@/components/product/add-to-cart-button";
13
+ import {
14
+ ProductConfigurator,
15
+ computeConfiguratorSurcharge,
16
+ findMissingRequiredFields,
17
+ type ProductConfiguratorSelection,
18
+ } from "@/components/product/product-configurator";
12
19
  import { StockIndicator } from "@/components/product/stock-indicator";
13
20
  import { SimilarProducts } from "@/components/product/similar-products";
14
21
  import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
@@ -39,6 +46,12 @@ export function ProductClient({ product: initialProduct, similarProducts = [] }:
39
46
  const t = useTranslations("productPage");
40
47
  const [selectedVariant, setSelectedVariant] = useState(initialProduct.variants[0]);
41
48
  const [quantity, setQuantity] = useState(1);
49
+ // Faza 1 — state konfiguratora (Finiszer, nr telefonu itd.) per attributeDefinitionId.
50
+ // Wysyłany do cartLinesAdd jako `attributeSelections`, backend waliduje + snapshotuje.
51
+ const [configuratorSelections, setConfiguratorSelections] = useState<
52
+ Record<string, ProductConfiguratorSelection>
53
+ >({});
54
+ const [showConfigValidation, setShowConfigValidation] = useState(false);
42
55
 
43
56
  // Get user's preferred currency from store
44
57
  const currency = useCurrencyStore((s) => s.currency);
@@ -102,6 +115,59 @@ export function ProductClient({ product: initialProduct, similarProducts = [] }:
102
115
  parseFloat(selectedVariant.compareAtPrice.amount) >
103
116
  parseFloat(selectedVariant.price.amount);
104
117
 
118
+ // Faza 1 — Customer-filled attributes z Product.attributes (CUSTOMER + BOTH).
119
+ // Puste gdy sklep nie używa konfiguratorów — sekcja nie renderuje się wtedy.
120
+ const configuratorAttributes = product.attributes ?? [];
121
+
122
+ const handleConfiguratorChange = useCallback(
123
+ (definitionId: string, selection: ProductConfiguratorSelection) => {
124
+ setConfiguratorSelections((prev) => ({ ...prev, [definitionId]: selection }));
125
+ // Wyczyść validation stan po każdej zmianie — użytkownik dostaje drugą szansę
126
+ // zamiast utrzymujących się czerwonych ramek.
127
+ if (showConfigValidation) setShowConfigValidation(false);
128
+ },
129
+ [showConfigValidation],
130
+ );
131
+
132
+ // Live surcharge preview — doliczane do ceny wariantu na przycisku (jak Shopify Dynamic Checkout).
133
+ const surcharge = useMemo(
134
+ () => computeConfiguratorSurcharge(configuratorAttributes, configuratorSelections),
135
+ [configuratorAttributes, configuratorSelections],
136
+ );
137
+
138
+ const displayPrice = useMemo(() => {
139
+ if (surcharge === 0) return selectedVariant.price;
140
+ const base = parseFloat(selectedVariant.price.amount);
141
+ const total = base + surcharge / 100;
142
+ return {
143
+ amount: total.toFixed(2),
144
+ currencyCode: selectedVariant.price.currencyCode,
145
+ };
146
+ }, [selectedVariant.price, surcharge]);
147
+
148
+ const attributeSelectionsForCart = useMemo(
149
+ () =>
150
+ Object.values(configuratorSelections)
151
+ .filter((s) => s.optionId || s.textValue)
152
+ .map((s) => ({
153
+ attributeDefinitionId: s.attributeDefinitionId,
154
+ optionId: s.optionId ?? undefined,
155
+ optionIds: s.optionIds ?? undefined,
156
+ textValue: s.textValue ?? undefined,
157
+ })),
158
+ [configuratorSelections],
159
+ );
160
+
161
+ const validateConfiguratorBeforeAdd = useCallback(() => {
162
+ const missing = findMissingRequiredFields(configuratorAttributes, configuratorSelections);
163
+ if (missing.length > 0) {
164
+ setShowConfigValidation(true);
165
+ toast.error(`Wypełnij wymagane pola: ${missing.join(", ")}`);
166
+ return false;
167
+ }
168
+ return true;
169
+ }, [configuratorAttributes, configuratorSelections]);
170
+
105
171
  return (
106
172
  <div className="space-y-16">
107
173
  {/* Product Details */}
@@ -138,13 +204,19 @@ export function ProductClient({ product: initialProduct, similarProducts = [] }:
138
204
  </div>
139
205
 
140
206
  {/* Price - suppressHydrationWarning prevents mismatch during currency switch */}
207
+ {/* Faza 1 — displayPrice uwzględnia doliczone surcharge z konfiguratora (live preview). */}
141
208
  <div suppressHydrationWarning>
142
209
  <ProductPrice
143
- price={selectedVariant.price}
210
+ price={displayPrice}
144
211
  compareAtPrice={selectedVariant.compareAtPrice || undefined}
145
212
  showCompareAt
146
213
  size="xl"
147
214
  />
215
+ {surcharge > 0 && (
216
+ <p className="mt-1 text-xs text-muted-foreground">
217
+ Cena zawiera dopłaty z konfiguratora poniżej.
218
+ </p>
219
+ )}
148
220
  </div>
149
221
 
150
222
  {/* Stock */}
@@ -169,6 +241,17 @@ export function ProductClient({ product: initialProduct, similarProducts = [] }:
169
241
  />
170
242
  )}
171
243
 
244
+ {/* Faza 1 — Customer configurator (Finiszer, nr telefonu serwisu, itd.). */}
245
+ {configuratorAttributes.length > 0 && (
246
+ <ProductConfigurator
247
+ attributes={configuratorAttributes}
248
+ selections={configuratorSelections}
249
+ onChange={handleConfiguratorChange}
250
+ currency={selectedVariant.price.currencyCode}
251
+ showValidation={showConfigValidation}
252
+ />
253
+ )}
254
+
172
255
  {/* Quantity & Add to Cart */}
173
256
  <div className="space-y-4">
174
257
  <div className="flex items-center gap-4">
@@ -189,6 +272,8 @@ export function ProductClient({ product: initialProduct, similarProducts = [] }:
189
272
  image={selectedVariant.image || product.images[0]}
190
273
  available={selectedVariant.available}
191
274
  quantity={quantity}
275
+ attributeSelections={attributeSelectionsForCart}
276
+ onBeforeAdd={validateConfiguratorBeforeAdd}
192
277
  fullWidth
193
278
  size="lg"
194
279
  />
@@ -25,7 +25,7 @@ import { cn } from "@/lib/utils";
25
25
  /**
26
26
  * ProductsClient — Dynamic product listing with API-driven filters.
27
27
  *
28
- * UX patterns from BigCommerce Catalyst + Saleor Storefront:
28
+ * UX patterns:
29
29
  * - useTransition wraps all filter updates (non-blocking UI)
30
30
  * - keepPreviousData prevents skeleton flash on filter changes
31
31
  * - data-pending CSS opacity dimming during transitions
@@ -11,7 +11,7 @@ import type { CodegenConfig } from '@graphql-codegen/cli';
11
11
  * No running backend needed — schema is synced as a file.
12
12
  *
13
13
  * Architecture decision: https://github.com/dotansimha/graphql-typed-document-node
14
- * Inspired by: Saleor Storefront (client-preset + TypedDocumentString)
14
+ * Approach: client-preset + TypedDocumentString (no runtime GraphQL dep).
15
15
  *
16
16
  * To update schema after backend changes:
17
17
  * cd packages/@doswiftly/storefront-operations && pnpm run sync
@@ -66,6 +66,24 @@ export function CartItem({
66
66
  {item.variantTitle}
67
67
  </p>
68
68
  )}
69
+ {/* Faza 1 — configurator selections z Product.attributes.
70
+ SEPARATE_LINE items są osobnymi fakturowanymi pozycjami; tutaj
71
+ pokazujemy snapshot dla klarownego feedback-u w koszyku. */}
72
+ {item.attributeSelections.length > 0 && (
73
+ <ul className="mt-2 space-y-0.5 text-xs text-muted-foreground">
74
+ {item.attributeSelections.map((sel) => (
75
+ <li key={sel.attributeDefinitionId} className="flex items-center gap-1">
76
+ <span className="font-medium text-foreground/80">{sel.attributeName}:</span>
77
+ <span>{sel.optionLabel ?? sel.textValue ?? "—"}</span>
78
+ {sel.billingMode === "SEPARATE_LINE" && sel.surchargeAmount > 0 && (
79
+ <span className="text-[10px] text-muted-foreground/80">
80
+ (+{formatAmount(sel.surchargeAmount / 100, item.price.currencyCode)} — osobna pozycja faktury)
81
+ </span>
82
+ )}
83
+ </li>
84
+ ))}
85
+ </ul>
86
+ )}
69
87
  </div>
70
88
 
71
89
  {/* Remove button */}
@@ -28,8 +28,9 @@ fragment CartLineFields on CartLine {
28
28
  currencyCode
29
29
  }
30
30
  image {
31
- url
31
+ url(transform: { maxWidth: 300 })
32
32
  altText
33
+ thumbhash
33
34
  }
34
35
  selectedOptions {
35
36
  name
@@ -50,4 +51,19 @@ fragment CartLineFields on CartLine {
50
51
  currencyCode
51
52
  }
52
53
  }
54
+ # Faza 1 — Customer-filled attributes snapshot per cart line.
55
+ # Rendered in cart-item.tsx so the shopper sees their configurator choices
56
+ # (Finiszer, service phone, etc.) with surcharge contribution to line total.
57
+ attributeSelections {
58
+ attributeDefinitionId
59
+ attributeName
60
+ type
61
+ fillingMode
62
+ billingMode
63
+ optionId
64
+ optionLabel
65
+ textValue
66
+ surchargeAmount
67
+ surchargeType
68
+ }
53
69
  }
@@ -13,9 +13,10 @@ fragment CollectionCardFields on Collection {
13
13
  title
14
14
  description
15
15
  image {
16
- url
16
+ url(transform: { maxWidth: 800 })
17
17
  altText
18
18
  width
19
19
  height
20
+ thumbhash
20
21
  }
21
22
  }
@@ -16,7 +16,8 @@ fragment CategoryNodeFields on Category {
16
16
  path
17
17
  sortOrder
18
18
  image {
19
- url
19
+ url(transform: { maxWidth: 800 })
20
20
  altText
21
+ thumbhash
21
22
  }
22
23
  }
@@ -3,6 +3,7 @@
3
3
  import { useState, useRef, useEffect } from "react";
4
4
  import { useTranslations } from "next-intl";
5
5
  import { ShoppingCart, Check } from "lucide-react";
6
+ import type { CartAttributeSelectionInput } from "@doswiftly/storefront-sdk";
6
7
  import { Button } from "@/components/ui/button";
7
8
  import { Spinner } from "@/components/ui/spinner";
8
9
  import { cn } from "@/lib/utils";
@@ -31,7 +32,21 @@ export interface AddToCartButtonProps {
31
32
  className?: string;
32
33
  size?: "sm" | "md" | "lg";
33
34
  fullWidth?: boolean;
34
-
35
+
36
+ /**
37
+ * Faza 1 — configurator selections captured on the product page.
38
+ * Przekazywane jako `cartLinesAdd.lines[].attributeSelections` do backendu
39
+ * (walidacja + snapshot surcharge/taxRate server-side).
40
+ */
41
+ attributeSelections?: CartAttributeSelectionInput[];
42
+
43
+ /**
44
+ * Called before firing the mutation. Zwrócenie `false` anuluje dodanie —
45
+ * używane gdy rodzic waliduje required-fields konfiguratora i pokazuje błąd
46
+ * zamiast wywoływać backend.
47
+ */
48
+ onBeforeAdd?: () => boolean;
49
+
35
50
  // Optional custom handler (overrides default GraphQL behavior)
36
51
  onAddToCart?: (variantId: string, quantity: number) => Promise<void>;
37
52
  }
@@ -70,6 +85,8 @@ export function AddToCartButton({
70
85
  available = true,
71
86
  quantity = 1,
72
87
  disabled = false,
88
+ attributeSelections,
89
+ onBeforeAdd,
73
90
  onAddToCart,
74
91
  className,
75
92
  size = "md",
@@ -92,14 +109,17 @@ export function AddToCartButton({
92
109
  const handleClick = async () => {
93
110
  if (disabled || isLoading) return;
94
111
 
112
+ // Rodzic ma możliwość anulować akcję — np. configurator required-field walidacja.
113
+ if (onBeforeAdd && onBeforeAdd() === false) return;
114
+
95
115
  try {
96
116
  // Use custom handler if provided, otherwise use GraphQL integration
97
117
  if (onAddToCart) {
98
118
  await onAddToCart(variantId, quantity);
99
119
  } else {
100
- await addToCart(variantId, quantity);
120
+ await addToCart(variantId, quantity, attributeSelections);
101
121
  }
102
-
122
+
103
123
  setIsAdded(true);
104
124
 
105
125
  // Clear any existing timeout
@@ -21,7 +21,7 @@ interface FilterActivePillsProps {
21
21
  /**
22
22
  * FilterActivePills - Shows active filters as removable badges
23
23
  *
24
- * Pattern from Saleor Storefront:
24
+ * Pattern:
25
25
  * - Each pill shows "Label: Value" with X button
26
26
  * - "Clear all" link at the end
27
27
  * - Horizontally scrollable on mobile