@jetshop/core 6.3.8-alpha.33 → 6.3.8

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 (96) hide show
  1. package/ChannelHandler/channelUtils.js +1 -1
  2. package/ChannelHandler/channelUtils.js.map +1 -1
  3. package/boot/apollo.js +39 -3
  4. package/boot/apollo.js.map +1 -1
  5. package/boot/client/startClient.js +16 -1
  6. package/boot/client/startClient.js.map +1 -1
  7. package/boot/server/IntervalQuery.d.ts +32 -0
  8. package/boot/server/IntervalQuery.js +95 -0
  9. package/boot/server/IntervalQuery.js.map +1 -0
  10. package/boot/server/IntervalQuery.test.js +276 -0
  11. package/boot/server/PersistedApolloClient.d.ts +20 -0
  12. package/boot/server/PersistedApolloClient.js +40 -0
  13. package/boot/server/PersistedApolloClient.js.map +1 -0
  14. package/boot/server/PersistedApolloClient.test.js +234 -0
  15. package/boot/server/createApolloServer.js +6 -0
  16. package/boot/server/createApolloServer.js.map +1 -1
  17. package/boot/server/createApolloServer.test.js +114 -0
  18. package/boot/server/createRenderer.d.ts +2 -2
  19. package/boot/server/createRenderer.js +25 -12
  20. package/boot/server/createRenderer.js.map +1 -1
  21. package/boot/server/createServer.js +11 -0
  22. package/boot/server/createServer.js.map +1 -1
  23. package/boot/server/getPreloadAssets.test.js +133 -0
  24. package/boot/server/index.d.ts +2 -0
  25. package/boot/server/index.js +16 -4
  26. package/boot/server/index.js.map +1 -1
  27. package/boot/server/persistedQueries/PersistedClient.d.ts +22 -0
  28. package/boot/server/persistedQueries/PersistedClient.js +58 -0
  29. package/boot/server/persistedQueries/PersistedClient.js.map +1 -0
  30. package/boot/server/persistedQueries/__tests__/getPersistedQueriesForRequest.test.js +201 -0
  31. package/boot/server/persistedQueries/__tests__/mockQuery.gql +6 -0
  32. package/boot/server/persistedQueries/getPersistedQueriesForRequest.d.ts +3 -0
  33. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js +27 -0
  34. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js.map +1 -0
  35. package/boot/server/saleSource.test.js +39 -0
  36. package/boot/server/salesSource.d.ts +8 -0
  37. package/boot/server/salesSource.js +16 -0
  38. package/boot/server/salesSource.js.map +1 -0
  39. package/components/Auth/formFieldsFromSettings.d.ts +1 -1
  40. package/components/ConfigProvider.d.ts +15 -3
  41. package/components/ConfigProvider.js.map +1 -1
  42. package/components/DynamicRoute/GenericError.js +4 -0
  43. package/components/DynamicRoute/GenericError.js.map +1 -1
  44. package/components/DynamicRoute/ProductRoute.js +11 -6
  45. package/components/DynamicRoute/ProductRoute.js.map +1 -1
  46. package/components/Pagination/PaginationProvider.d.ts +2 -0
  47. package/components/Pagination/PaginationProvider.js +10 -1
  48. package/components/Pagination/PaginationProvider.js.map +1 -1
  49. package/components/StructuredData/StructuredProductData.d.ts +1 -1
  50. package/errorReporting.browser.d.ts +3 -0
  51. package/errorReporting.browser.js +17 -0
  52. package/errorReporting.browser.js.map +1 -0
  53. package/errorReporting.d.ts +4 -0
  54. package/errorReporting.js +24 -0
  55. package/errorReporting.js.map +1 -0
  56. package/errorReporting.server.d.ts +3 -0
  57. package/errorReporting.server.js +12 -0
  58. package/errorReporting.server.js.map +1 -0
  59. package/errorReporting.shared.d.ts +5 -0
  60. package/errorReporting.shared.js +17 -0
  61. package/errorReporting.shared.js.map +1 -0
  62. package/global.d.ts +1 -0
  63. package/hooks/usePreconnectLinks.js +5 -1
  64. package/hooks/usePreconnectLinks.js.map +1 -1
  65. package/hooks/usePreconnectLinks.test.js +4 -0
  66. package/package.json +6 -5
  67. package/polyfills.d.ts +1 -0
  68. package/polyfills.js +58 -0
  69. package/polyfills.js.map +1 -0
  70. package/sentry/client.d.ts +1 -0
  71. package/sentry/client.js +30 -0
  72. package/sentry/client.js.map +1 -0
  73. package/sentry/common.d.ts +1 -0
  74. package/sentry/common.js +5 -0
  75. package/sentry/common.js.map +1 -0
  76. package/sentry/server.d.ts +1 -0
  77. package/sentry/server.js +20 -0
  78. package/sentry/server.js.map +1 -0
  79. package/sentry/utils.d.ts +1 -0
  80. package/sentry/utils.js +2 -0
  81. package/sentry/utils.js.map +1 -0
  82. package/boot/worker/createApolloServerWorker.d.ts +0 -18
  83. package/boot/worker/createApolloServerWorker.js +0 -119
  84. package/boot/worker/createApolloServerWorker.js.map +0 -1
  85. package/boot/worker/createRenderer.d.ts +0 -23
  86. package/boot/worker/createRenderer.js +0 -242
  87. package/boot/worker/createRenderer.js.map +0 -1
  88. package/boot/worker/getPrefetchFiles.d.ts +0 -10
  89. package/boot/worker/getPrefetchFiles.js +0 -20
  90. package/boot/worker/getPrefetchFiles.js.map +0 -1
  91. package/boot/worker/getPreloadAssets.d.ts +0 -10
  92. package/boot/worker/getPreloadAssets.js +0 -18
  93. package/boot/worker/getPreloadAssets.js.map +0 -1
  94. package/boot/worker/index.d.ts +0 -6
  95. package/boot/worker/index.js +0 -98
  96. package/boot/worker/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createServer.js","sourceRoot":"","sources":["createServer.ts"],"names":[],"mappings":"AACA,OAAO,OAAqD,MAAM,SAAS,CAAC;AAC5E,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,oBAAoB,MAAM,gDAAgD,CAAC;AAClF,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AAEzD,qEAAqE;AACrE,6EAA6E;AAC7E,2DAA2D;AAC3D,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAU,EAAE,EAAE;IAC9C,MAAM,GAAG,CAAC;AACZ,CAAC,CAAC,CAAC;AAeH,MAAM,YAAY,GAAG,CAAC,EACpB,YAAY,EACZ,WAAW,EAIZ,EAAW,EAAE;IACZ,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAE7B,IAAI,YAAY,EAAE;QAChB,YAAY,CAAC,eAAe,CAAC;YAC3B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;KACJ;IACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnE,GAAG,CAAC,GAAG,CACL,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;QAC5C,MAAM,EAAE,MAAM;KACf,CAAC,CACH,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"createServer.js","sourceRoot":"","sources":["createServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAEvC,OAAO,OAAqD,MAAM,SAAS,CAAC;AAC5E,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,oBAAoB,MAAM,gDAAgD,CAAC;AAClF,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AACzD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAE1C,qEAAqE;AACrE,6EAA6E;AAC7E,2DAA2D;AAC3D,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAU,EAAE,EAAE;IAC9C,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,CAAC;AACZ,CAAC,CAAC,CAAC;AAeH,MAAM,YAAY,GAAG,CAAC,EACpB,YAAY,EACZ,WAAW,EAIZ,EAAW,EAAE;IACZ,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,wEAAwE;IACxE,IAAI,cAAc,EAAE;QAClB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;KAC3C;IAED,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAE7B,IAAI,YAAY,EAAE;QAChB,YAAY,CAAC,eAAe,CAAC;YAC3B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;KACJ;IACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEnE,GAAG,CAAC,GAAG,CACL,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;QAC5C,MAAM,EAAE,MAAM;KACf,CAAC,CACH,CAAC;IAEF,8DAA8D;IAC9D,IAAI,cAAc,EAAE;QAClB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;KACzC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,133 @@
1
+ import { getPreloadLinkHeaderString } from './getPreloadAssets';
2
+
3
+ const preloadAssets = [
4
+ {
5
+ filename: 'static/js/bundle.js',
6
+ scriptType: 'script',
7
+ chunk: 'client',
8
+ url: 'http://localhost:3001/static/js/bundle.js',
9
+ path:
10
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/bundle.js',
11
+ type: 'mainAsset',
12
+ linkType: 'preload'
13
+ },
14
+ {
15
+ filename:
16
+ 'static/js/vendors~Auth-ForgotPassword~Auth-LogInPage~Auth-ResetPassword~Auth-Signup-SignUpPage~MyPages-MyPages~2700bb12.chunk.js',
17
+ scriptType: 'script',
18
+ chunk: 'ProductPage-ProductPage',
19
+ url:
20
+ 'http://localhost:3001/static/js/vendors~Auth-ForgotPassword~Auth-LogInPage~Auth-ResetPassword~Auth-Signup-SignUpPage~MyPages-MyPages~2700bb12.chunk.js',
21
+ path:
22
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/vendors~Auth-ForgotPassword~Auth-LogInPage~Auth-ResetPassword~Auth-Signup-SignUpPage~MyPages-MyPages~2700bb12.chunk.js',
23
+ type: 'mainAsset',
24
+ linkType: 'preload'
25
+ },
26
+ {
27
+ filename:
28
+ 'static/js/vendors~ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
29
+ scriptType: 'script',
30
+ chunk: 'ProductPage-ProductPage',
31
+ url:
32
+ 'http://localhost:3001/static/js/vendors~ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
33
+ path:
34
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/vendors~ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
35
+ type: 'mainAsset',
36
+ linkType: 'preload'
37
+ },
38
+ {
39
+ filename: 'static/css/vendors~ProductPage-ProductPage.chunk.css',
40
+ scriptType: 'style',
41
+ chunk: 'ProductPage-ProductPage',
42
+ url:
43
+ 'http://localhost:3001/static/css/vendors~ProductPage-ProductPage.chunk.css',
44
+ path:
45
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/css/vendors~ProductPage-ProductPage.chunk.css',
46
+ type: 'mainAsset',
47
+ linkType: 'preload'
48
+ },
49
+ {
50
+ filename: 'static/js/vendors~ProductPage-ProductPage.chunk.js',
51
+ scriptType: 'script',
52
+ chunk: 'ProductPage-ProductPage',
53
+ url:
54
+ 'http://localhost:3001/static/js/vendors~ProductPage-ProductPage.chunk.js',
55
+ path:
56
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/vendors~ProductPage-ProductPage.chunk.js',
57
+ type: 'mainAsset',
58
+ linkType: 'preload'
59
+ },
60
+ {
61
+ filename:
62
+ 'static/js/Auth-ForgotPassword~Auth-LogInPage~Auth-ResetPassword~Auth-Signup-SignUpPage~MyPages-MyPages~Product~4afdd4cd.chunk.js',
63
+ scriptType: 'script',
64
+ chunk: 'ProductPage-ProductPage',
65
+ url:
66
+ 'http://localhost:3001/static/js/Auth-ForgotPassword~Auth-LogInPage~Auth-ResetPassword~Auth-Signup-SignUpPage~MyPages-MyPages~Product~4afdd4cd.chunk.js',
67
+ path:
68
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/Auth-ForgotPassword~Auth-LogInPage~Auth-ResetPassword~Auth-Signup-SignUpPage~MyPages-MyPages~Product~4afdd4cd.chunk.js',
69
+ type: 'mainAsset',
70
+ linkType: 'preload'
71
+ },
72
+ {
73
+ filename:
74
+ 'static/js/ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~StartPage-StartPage~WindowedCategoryPage.chunk.js',
75
+ scriptType: 'script',
76
+ chunk: 'ProductPage-ProductPage',
77
+ url:
78
+ 'http://localhost:3001/static/js/ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~StartPage-StartPage~WindowedCategoryPage.chunk.js',
79
+ path:
80
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~StartPage-StartPage~WindowedCategoryPage.chunk.js',
81
+ type: 'mainAsset',
82
+ linkType: 'preload'
83
+ },
84
+ {
85
+ filename:
86
+ 'static/js/ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
87
+ scriptType: 'script',
88
+ chunk: 'ProductPage-ProductPage',
89
+ url:
90
+ 'http://localhost:3001/static/js/ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
91
+ path:
92
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/ProductPage-ProductPage~SearchPage-SearchPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
93
+ type: 'mainAsset',
94
+ linkType: 'preload'
95
+ },
96
+ {
97
+ filename:
98
+ 'static/js/MyPages-MyPages~ProductPage-ProductPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
99
+ scriptType: 'script',
100
+ chunk: 'ProductPage-ProductPage',
101
+ url:
102
+ 'http://localhost:3001/static/js/MyPages-MyPages~ProductPage-ProductPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
103
+ path:
104
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/MyPages-MyPages~ProductPage-ProductPage~StandardCategoryPage~WindowedCategoryPage.chunk.js',
105
+ type: 'mainAsset',
106
+ linkType: 'preload'
107
+ },
108
+ {
109
+ filename: 'static/js/ProductPage-ProductPage.chunk.js',
110
+ scriptType: 'script',
111
+ chunk: 'ProductPage-ProductPage',
112
+ url: 'http://localhost:3001/static/js/ProductPage-ProductPage.chunk.js',
113
+ path:
114
+ '/Users/rsingh/Projects/hyperlab/jetshop-flight/packages/template-trend/build/client/static/js/ProductPage-ProductPage.chunk.js',
115
+ type: 'mainAsset',
116
+ linkType: 'preload'
117
+ }
118
+ ];
119
+
120
+ describe('Get Preload Assets', () => {
121
+ it('Will generate a Link header string with a set of preload assets including css and js', () => {
122
+ expect(getPreloadLinkHeaderString(preloadAssets)).toMatchSnapshot();
123
+ });
124
+
125
+ it('Will return an empty string if there are no preload assets', () => {
126
+ expect(getPreloadLinkHeaderString([])).toEqual('');
127
+ });
128
+
129
+ it('Will return an empty string if preload assets are undefined or null', () => {
130
+ expect(getPreloadLinkHeaderString(undefined)).toEqual('');
131
+ expect(getPreloadLinkHeaderString(null)).toEqual('');
132
+ });
133
+ });
@@ -5,3 +5,5 @@ export interface TranslationsPromises {
5
5
  [locale: string]: () => Promise<any>;
6
6
  }
7
7
  export declare const createApp: (Component: React.ReactElement<any>, userConfig: BootOptions) => Promise<Express>;
8
+ declare const boot: () => void;
9
+ export default boot;
@@ -8,21 +8,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import paths from '@jetshop/react-scripts/config/paths';
11
+ import * as Sentry from '../../sentry/server';
11
12
  import fs from 'fs';
12
13
  // Increase global max sockets to fix issues with pending requests queuing up.
13
14
  // See http://glynnbird.tumblr.com/post/54587194641/increasing-number-of-outgoing-http-sockets-in
14
15
  import http from 'http';
15
16
  import https from 'https';
16
17
  import checkRequiredFiles from 'react-dev-utils/checkRequiredFiles';
18
+ import throwErrorInDev from '../../helpers/throwErrorInDev';
17
19
  import asyncErrorHandler from './asyncErrorHandler';
18
20
  import createApolloServer from './createApolloServer';
19
21
  import createRenderer from './createRenderer';
20
22
  import createServer from './createServer';
23
+ import { PersistedApolloClient } from './PersistedApolloClient';
21
24
  import { addMissingConfig } from '../addMissingConfig';
22
25
  import { createGraphqlServer, storeapiExtension } from '../../server/graphql';
23
26
  import trackingMiddleware from '../../server/tracking/middleware';
24
27
  import { getHeaders } from '../../helpers/getHeaders';
25
- import { createClient } from '../apollo';
26
28
  // This is used to insure parity between client and server when doing internationalization as node only comes with the english locale by default
27
29
  require('./overwriteServerIntl.js');
28
30
  http.globalAgent.maxSockets = https.globalAgent.maxSockets = Infinity;
@@ -60,11 +62,16 @@ function validateBootOptions(opts) {
60
62
  export const createApp = (Component, userConfig) => __awaiter(void 0, void 0, void 0, function* () {
61
63
  var _a, _b;
62
64
  const config = validateBootOptions(userConfig);
63
- const { apolloConfig, schemaExtensions, apolloServerplugins, server, serverTrackers } = config;
65
+ const { apolloConfig, sentry, schemaExtensions, apolloServerplugins, server, serverTrackers } = config;
64
66
  if (!checkRequiredFiles([templatePath, loadableStatsPath])) {
65
67
  console.error('checkRequiredFiles failed!');
66
68
  process.exit(1);
67
69
  }
70
+ if (__USE_SENTRY__) {
71
+ if (sentry) {
72
+ Sentry.init(sentry.serverDSN);
73
+ }
74
+ }
68
75
  const template = fs.readFileSync(templatePath, 'utf8');
69
76
  const middlewares = [];
70
77
  if ((_b = (_a = server === null || server === void 0 ? void 0 : server.graphql) === null || _a === void 0 ? void 0 : _a.extensions) === null || _b === void 0 ? void 0 : _b.length) {
@@ -105,10 +112,15 @@ export const createApp = (Component, userConfig) => __awaiter(void 0, void 0, vo
105
112
  apolloServer,
106
113
  middlewares
107
114
  });
108
- const { client } = createClient({ apolloConfig });
115
+ const globalClient = new PersistedApolloClient({
116
+ createClientOpts: { apolloConfig }
117
+ });
109
118
  const renderer = createRenderer(template, Component, Object.assign({ loadableStatsPath,
110
- schema, globalClient: client, trackers: config.trackers || [] }, config));
119
+ schema,
120
+ globalClient, trackers: config.trackers || [] }, config));
111
121
  app.use(asyncErrorHandler(renderer));
112
122
  return app;
113
123
  });
124
+ const boot = () => throwErrorInDev(true, `Update your server.js to use the named import 'createApp' instead of 'boot', see https://docs.dev.jetshop.se/migrating/3-and-below#change-server-entry-point`);
125
+ export default boot;
114
126
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,qCAAqC,CAAC;AAExD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,8EAA8E;AAC9E,iGAAiG;AACjG,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AAEpE,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,gJAAgJ;AAChJ,OAAO,CAAC,0BAA0B,CAAC,CAAC;AACpC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC;AAEtE,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;AACpD,MAAM,iBAAiB,GAAG,KAAK,CAAC,cAAc,GAAG,sBAAsB,CAAC;AAMxE,SAAS,mBAAmB,CAAC,IAAiB;;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,0CAAE,UAAU,CAAC,MAAM,EAAE;QAC3C,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACnE,MAAM,CAAC,IAAI,CACT,mNAAmN,CACpN,CAAC;SACH;KACF;IAED,IACE,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAChC,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAChC;QACA,MAAM,CAAC,IAAI,CACT,qBAAqB,IAAI,CAAC,gBAAgB,CAAC,MAAM,4GAA4G,CAC9J,CAAC;KACH;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;YAC1B,MAAM,CAAC,IAAI,CACT,kEAAkE,CACnE,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY;YAC7B,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC3E,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc;YAC7B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YAEvC,MAAM,CAAC,IAAI,CACT,yGAAyG,CAC1G,CAAC;KACL;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,MAAM,IAAI,KAAK,CACb,+DAA+D,MAAM;aAClE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;aACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;KACH;IAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,SAAkC,EAClC,UAAuB,EACL,EAAE;;IACpB,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,EACJ,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,EACN,cAAc,EACf,GAAG,MAAM,CAAC;IAEX,IAAI,CAAC,kBAAkB,CAAC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,EAAE;QAC1D,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,0CAAE,UAAU,0CAAE,MAAM,EAAE;QACvC,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,MAAM,mBAAmB,CAAC;gBACjC,UAAU,EAAE;oBACV,iBAAiB,CAAC;wBAChB,KAAK,EAAE,YAAY,CAAC,KAAK;wBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;wBAC3B,QAAQ,EAAE,YAAY,CAAC,UAAU;qBAClC,CAAC;iBACH,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;aACpC,CAAC;SACH,CAAC,CAAC;KACJ;IACD,WAAW,CAAC,IAAI,CAAC;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,kBAAkB,CAAC,cAAc,IAAI,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,WAAW,CAAC,IAAI,CAAC;QACf,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,iDAAiD;IACjD,IAAI,YAAY,GAAiB,IAAI,CAAC;IACtC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,YAAY,CAAC,aAAa,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC;YACpC,YAAY;YACZ,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;QACH,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,MAAM,GAAG,GAAG,YAAY,CAAC;QACvB,YAAY;QACZ,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,kBACjD,iBAAiB;QACjB,MAAM,EACN,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,IAC5B,MAAM,EACT,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC;AACb,CAAC,CAAA,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ApolloConfig } from '../../../components/ConfigProvider';
2
+ import { CreateClientOpts } from '../../apollo';
3
+ export type PersistedQueries = ApolloConfig['persistedQueries'];
4
+ export type PersistedQuery = ApolloConfig['persistedQueries'][0];
5
+ export type ChannelHeaders = {
6
+ currency: string;
7
+ channelid: number;
8
+ culture: string;
9
+ country: string;
10
+ name: string;
11
+ } | {};
12
+ export declare class PersistedClient {
13
+ private intervalQueries;
14
+ private opts;
15
+ constructor(opts: CreateClientOpts & {
16
+ headers?: ChannelHeaders;
17
+ });
18
+ private watch;
19
+ private getPendingResponse;
20
+ private combineCaches;
21
+ extractCache(): Promise<any>;
22
+ }
@@ -0,0 +1,58 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ import merge from 'lodash.merge';
22
+ import { IntervalQuery } from '../IntervalQuery';
23
+ export class PersistedClient {
24
+ constructor(opts) {
25
+ this.intervalQueries = [];
26
+ this.opts = opts;
27
+ this.watch(this.opts.apolloConfig.persistedQueries);
28
+ }
29
+ watch(queries = []) {
30
+ const _a = this.opts, { headers } = _a, createClientOpts = __rest(_a, ["headers"]);
31
+ const intervalQueries = queries.map(({ query, variables }) => {
32
+ return new IntervalQuery({
33
+ query,
34
+ variables,
35
+ createClientOpts,
36
+ headers,
37
+ pollInterval: 30000
38
+ });
39
+ });
40
+ this.intervalQueries = intervalQueries;
41
+ }
42
+ getPendingResponse() {
43
+ return this.intervalQueries.map(iq => iq.getPendingResponse());
44
+ }
45
+ combineCaches() {
46
+ const extractedCaches = this.intervalQueries.map(iq => iq.extractCache());
47
+ return extractedCaches.reduce((prev, curr) => {
48
+ return merge(prev, curr);
49
+ }, {});
50
+ }
51
+ extractCache() {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ yield Promise.all(this.getPendingResponse());
54
+ return this.combineCaches();
55
+ });
56
+ }
57
+ }
58
+ //# sourceMappingURL=PersistedClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistedClient.js","sourceRoot":"","sources":["PersistedClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAejD,MAAM,OAAO,eAAe;IAI1B,YAAY,IAAqD;QAHzD,oBAAe,GAAyB,EAAE,CAAC;QAIjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;IACO,KAAK,CAAC,UAA4B,EAAE;QAC1C,MAAM,KAAmC,IAAI,CAAC,IAAI,EAA5C,EAAE,OAAO,OAAmC,EAA9B,gBAAgB,cAA9B,WAAgC,CAAY,CAAC;QAEnD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;YAC3D,OAAO,IAAI,aAAa,CAAC;gBACvB,KAAK;gBACL,SAAS;gBACT,gBAAgB;gBAChB,OAAO;gBACP,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IACO,kBAAkB;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACjE,CAAC;IACO,aAAa;QACnB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QAE1E,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YAC3C,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IACY,YAAY;;YACvB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAE7C,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9B,CAAC;KAAA;CACF"}
@@ -0,0 +1,201 @@
1
+ import { getPersistedQueriesForRequest } from '../getPersistedQueriesForRequest';
2
+ import aQuery from './mockQuery.gql';
3
+ import nock from 'nock';
4
+ import { ApolloError } from '@apollo/client';
5
+ import { ChannelHandler } from '../../../../ChannelHandler/ChannelHandler';
6
+
7
+ beforeAll(() => {
8
+ jest.useFakeTimers();
9
+ nock.disableNetConnect();
10
+ });
11
+ afterAll(() => {
12
+ jest.useRealTimers();
13
+ nock.enableNetConnect();
14
+ });
15
+ afterEach(() => {
16
+ jest.restoreAllMocks();
17
+ jest.clearAllTimers();
18
+ nock.enableNetConnect();
19
+ });
20
+
21
+ const apolloConfig = {
22
+ shopid: '...',
23
+ graphQLURI: 'http://localhost/graphql',
24
+ token: '...',
25
+ enableGateway: false,
26
+ persistedQueries: [{ query: aQuery }]
27
+ };
28
+
29
+ const defaultChannel = {
30
+ id: 1,
31
+ language: { name: 'English' },
32
+ currency: { name: 'Dollarydoos' },
33
+ country: {
34
+ id: 1234,
35
+ code: 'UK'
36
+ }
37
+ };
38
+
39
+ function mockResponse(resp, { statusCode = 200, errors } = {}) {
40
+ const data = {
41
+ errors,
42
+ data: resp && {
43
+ [resp.name]: resp.values.map((val) =>
44
+ Object.assign({ __typename: resp.name }, val)
45
+ )
46
+ }
47
+ };
48
+
49
+ const res = jest.fn(() => data);
50
+ nock('http://localhost').post('/graphql').reply(statusCode, res);
51
+ return res;
52
+ }
53
+
54
+ describe('getPersistedQueriesForRequest', () => {
55
+ let opts;
56
+
57
+ beforeEach(() => {
58
+ const channelHandler = new ChannelHandler({
59
+ selectedChannel: defaultChannel
60
+ });
61
+
62
+ opts = {
63
+ apolloConfig,
64
+ channelHandler,
65
+ authHandler: {
66
+ getAuthHeaders: () => {},
67
+ loadAuthToken: () => {},
68
+ authToken: ''
69
+ },
70
+ previewHandler: {
71
+ getPreviewHeaders: () => {},
72
+ preview: false
73
+ }
74
+ };
75
+ });
76
+ afterEach(() => {
77
+ opts = {};
78
+ });
79
+
80
+ test('creates an object keyed by the channel', async () => {
81
+ const clients = {};
82
+
83
+ mockResponse({
84
+ name: 'dogs',
85
+ values: [{ id: 1, name: 'Roger' }]
86
+ });
87
+
88
+ const newChannel = {
89
+ id: 2,
90
+ language: { name: 'Deutsch' },
91
+ currency: { name: 'Deutschmarks' },
92
+ country: {
93
+ id: 1923,
94
+ code: 'DE'
95
+ }
96
+ };
97
+
98
+ // First request comes in at channel 2…
99
+ opts.channelHandler.setSelectedChannel(newChannel);
100
+ getPersistedQueriesForRequest(clients, {
101
+ ...opts
102
+ });
103
+
104
+ // It's added to the clients object
105
+ expect(Object.keys(clients).length).toBe(1);
106
+ expect(Object.keys(clients)).toEqual(
107
+ expect.arrayContaining(['2_Deutsch_Deutschmarks'])
108
+ );
109
+
110
+ mockResponse({
111
+ name: 'dogs',
112
+ values: [{ id: 1, name: 'Roger' }]
113
+ });
114
+
115
+ // Another request comes in on channel 1…
116
+ opts.channelHandler.setSelectedChannel(defaultChannel);
117
+ getPersistedQueriesForRequest(clients, opts);
118
+
119
+ // Now both are kept in memory
120
+ expect(Object.keys(clients).length).toBe(2);
121
+ expect(Object.keys(clients)).toEqual(
122
+ expect.arrayContaining([
123
+ '2_Deutsch_Deutschmarks',
124
+ '1_English_Dollarydoos'
125
+ ])
126
+ );
127
+ });
128
+ test('requests on the same channel do not create new cache entries', async () => {
129
+ const clients = {};
130
+
131
+ mockResponse({
132
+ name: 'dogs',
133
+ values: [{ id: 1, name: 'Roger' }]
134
+ });
135
+
136
+ // A request comes in on channel 1…
137
+ getPersistedQueriesForRequest(clients, opts);
138
+
139
+ // And then another!
140
+ getPersistedQueriesForRequest(clients, opts);
141
+
142
+ // Only one entry in the cache tho
143
+ const keys = Object.keys(clients);
144
+ expect(keys.length).toBe(1);
145
+ expect(keys).toEqual(expect.arrayContaining(['1_English_Dollarydoos']));
146
+ });
147
+ test('propagates errors', async () => {
148
+ const clients = {};
149
+
150
+ mockResponse(null, {
151
+ errors: [
152
+ {
153
+ message: 'Something went wrong',
154
+ extensions: { code: 'an error occurred' }
155
+ }
156
+ ]
157
+ });
158
+
159
+ // A request comes in on channel 1…
160
+
161
+ try {
162
+ await getPersistedQueriesForRequest(clients, opts).extractCache();
163
+ } catch (err) {
164
+ expect(err).toBeInstanceOf(ApolloError);
165
+ expect(err.message).toBe(`GraphQL error: Something went wrong`);
166
+ }
167
+ expect.assertions(2);
168
+ });
169
+ it('response updates cache', async () => {
170
+ const clients = {};
171
+ mockResponse({
172
+ name: 'dogs',
173
+ values: [{ id: 1, name: 'Roger' }]
174
+ });
175
+
176
+ // A request comes in on channel 1…
177
+ getPersistedQueriesForRequest(clients, opts);
178
+
179
+ const firstCache = await clients['1_English_Dollarydoos'].extractCache();
180
+
181
+ expect(firstCache['dogs:1']).toEqual(
182
+ expect.objectContaining({ name: 'Roger' })
183
+ );
184
+
185
+ const mock = mockResponse({
186
+ name: 'dogs',
187
+ values: [{ id: 1, name: 'Updated name' }]
188
+ });
189
+
190
+ // The timer ticks over, firing off another request which should have the
191
+ // updated return value
192
+ jest.advanceTimersByTime(30000);
193
+ expect(mock).toHaveBeenCalled();
194
+
195
+ const updatedCache = await clients['1_English_Dollarydoos'].extractCache();
196
+
197
+ expect(updatedCache['dogs:1']).toEqual(
198
+ expect.objectContaining({ name: 'Updated name' })
199
+ );
200
+ });
201
+ });
@@ -0,0 +1,6 @@
1
+ query Doggos {
2
+ dogs {
3
+ id
4
+ name
5
+ }
6
+ }
@@ -0,0 +1,3 @@
1
+ import { CreateClientOpts } from '../../apollo';
2
+ import { PersistedClient } from './PersistedClient';
3
+ export declare function getPersistedQueriesForRequest(persistedQueryClients: any, opts: CreateClientOpts): PersistedClient;
@@ -0,0 +1,27 @@
1
+ import { PersistedClient } from './PersistedClient';
2
+ export function getPersistedQueriesForRequest(persistedQueryClients, opts) {
3
+ const { apolloConfig, authHandler, previewHandler, channelHandler } = opts;
4
+ const queriesToPersist = apolloConfig.persistedQueries || [];
5
+ // When auth is enabled or we are in a preview route, we don't want to cache
6
+ if (!!(authHandler === null || authHandler === void 0 ? void 0 : authHandler.authToken) || (previewHandler === null || previewHandler === void 0 ? void 0 : previewHandler.preview))
7
+ return null;
8
+ // If there are no persisted queries in the config, we have nothing to cache
9
+ if (queriesToPersist.length === 0)
10
+ return null;
11
+ let client;
12
+ const channel = channelHandler.getSelectedChannel();
13
+ if (channel.requiresAuth)
14
+ return null;
15
+ // Create a key unique to this selected channel, lang, currency
16
+ const key = `${channel.id}_${channel.language.name}_${channel.currency.name}`;
17
+ const headers = channelHandler.getChannelHeaders();
18
+ if (key in persistedQueryClients) {
19
+ client = persistedQueryClients[key];
20
+ }
21
+ else {
22
+ const newClient = new PersistedClient(Object.assign(Object.assign({}, opts), { headers }));
23
+ client = persistedQueryClients[key] = newClient;
24
+ }
25
+ return client;
26
+ }
27
+ //# sourceMappingURL=getPersistedQueriesForRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPersistedQueriesForRequest.js","sourceRoot":"","sources":["getPersistedQueriesForRequest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,6BAA6B,CAC3C,qBAA0B,EAC1B,IAAsB;IAEtB,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAE3E,MAAM,gBAAgB,GAAG,YAAY,CAAC,gBAAgB,IAAI,EAAE,CAAC;IAE7D,4EAA4E;IAC5E,IAAI,CAAC,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,CAAA,KAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,CAAA;QAAE,OAAO,IAAI,CAAC;IAErE,4EAA4E;IAC5E,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,IAAI,MAAuB,CAAC;IAE5B,MAAM,OAAO,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;IAEpD,IAAI,OAAO,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAEtC,+DAA+D;IAC/D,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE9E,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;IAEnD,IAAI,GAAG,IAAI,qBAAqB,EAAE;QAChC,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;KACrC;SAAM;QACL,MAAM,SAAS,GAAG,IAAI,eAAe,iCAAM,IAAI,KAAE,OAAO,IAAG,CAAC;QAE5D,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;KACjD;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { salesSourceMiddleware } from './salesSource';
2
+ import { Cookies } from 'react-cookie';
3
+
4
+ describe('Sales source test', () => {
5
+ it('Will set the sales source cookie', () => {
6
+ const cookies = new Cookies();
7
+ salesSourceMiddleware({
8
+ queryObject: {
9
+ SalesSource: 'test'
10
+ },
11
+ cookies
12
+ });
13
+ expect(cookies.get('SalesSource')).toBe('test');
14
+ });
15
+
16
+ it('Will remove the sales source cookie', () => {
17
+ const cookies = new Cookies();
18
+ cookies.set('SalesSource', 'test');
19
+ expect(cookies.get('SalesSource')).toBe('test');
20
+ salesSourceMiddleware({
21
+ queryObject: {
22
+ SalesSource: 'remove'
23
+ },
24
+ cookies
25
+ });
26
+ expect(cookies.get('SalesSource')).toBeFalsy();
27
+ });
28
+
29
+ it('Will set the cookie regardless of case', () => {
30
+ const cookies = new Cookies();
31
+ salesSourceMiddleware({
32
+ queryObject: {
33
+ salEsSoUrCe: 'test'
34
+ },
35
+ cookies
36
+ });
37
+ expect(cookies.get('SalesSource')).toBe('test');
38
+ });
39
+ });
@@ -0,0 +1,8 @@
1
+ import { Cookies } from 'react-cookie';
2
+ declare function salesSourceMiddleware({ queryObject, cookies }: {
3
+ queryObject: {
4
+ [key: string]: string;
5
+ };
6
+ cookies: Cookies;
7
+ }): void;
8
+ export { salesSourceMiddleware };
@@ -0,0 +1,16 @@
1
+ function salesSourceMiddleware({ queryObject, cookies }) {
2
+ const caseInsensitiveSalesSourceKey = Object.keys(queryObject).find(key => key.toLowerCase() === 'salessource');
3
+ const salesSourceParam = queryObject[caseInsensitiveSalesSourceKey];
4
+ if (salesSourceParam === 'remove') {
5
+ cookies.remove('SalesSource');
6
+ }
7
+ else {
8
+ const expires = new Date();
9
+ expires.setFullYear(new Date().getFullYear() + 10);
10
+ cookies.set('SalesSource', salesSourceParam, {
11
+ expires
12
+ });
13
+ }
14
+ }
15
+ export { salesSourceMiddleware };
16
+ //# sourceMappingURL=salesSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"salesSource.js","sourceRoot":"","sources":["salesSource.ts"],"names":[],"mappings":"AAEA,SAAS,qBAAqB,CAAC,EAC7B,WAAW,EACX,OAAO,EAMR;IACC,MAAM,6BAA6B,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CACjE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,aAAa,CAC3C,CAAC;IACF,MAAM,gBAAgB,GAAG,WAAW,CAAC,6BAA6B,CAAC,CAAC;IACpE,IAAI,gBAAgB,KAAK,QAAQ,EAAE;QACjC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;KAC/B;SAAM;QACL,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,EAAE;YAC3C,OAAO;SACR,CAAC,CAAC;KACJ;AACH,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { CountrySettings } from '@jetshop/core/types';
2
2
  import { CustomerField } from '@jetshop/core/types';
3
- export declare const getFieldType: (name: string) => "text" | "email" | "tel" | "password";
3
+ export declare const getFieldType: (name: string) => "text" | "tel" | "email" | "password";
4
4
  export declare function formFieldsFromSettings(selectedCountrySettings: CountrySettings, isUserTypeBusiness?: boolean): {
5
5
  allFields: {
6
6
  type: string;