cloudcommerce 0.0.41 → 0.0.44

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 (60) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/package.json +1 -1
  3. package/packages/api/lib/index.d.ts +9 -3
  4. package/packages/api/lib/index.js +12 -2
  5. package/packages/api/lib/index.js.map +1 -1
  6. package/packages/api/lib/types.d.ts +12 -2
  7. package/packages/api/package.json +1 -1
  8. package/packages/api/src/index.ts +28 -5
  9. package/packages/api/src/types.ts +13 -1
  10. package/packages/apps/discounts/lib/index.d.ts +3 -0
  11. package/packages/apps/discounts/lib/index.js +3 -1
  12. package/packages/apps/discounts/lib/index.js.map +1 -1
  13. package/packages/apps/discounts/package.json +3 -3
  14. package/packages/apps/discounts/src/index.ts +1 -1
  15. package/packages/apps/discounts/tsconfig.json +4 -1
  16. package/packages/cli/lib/build.js +5 -2
  17. package/packages/cli/package.json +1 -1
  18. package/packages/cli/src/build.ts +8 -5
  19. package/packages/events/CHANGELOG.md +1 -0
  20. package/packages/events/README.md +1 -0
  21. package/packages/events/package.json +36 -0
  22. package/packages/events/src/firebase.ts +30 -0
  23. package/packages/events/src/index.ts +1 -0
  24. package/packages/events/tsconfig.json +3 -0
  25. package/packages/firebase/lib/config.d.ts +5 -0
  26. package/packages/firebase/lib/config.js +5 -0
  27. package/packages/firebase/lib/config.js.map +1 -1
  28. package/packages/firebase/package.json +3 -2
  29. package/packages/firebase/src/config.ts +5 -0
  30. package/packages/modules/lib/firebase/ajv.js +33 -0
  31. package/packages/modules/lib/firebase/ajv.js.map +1 -0
  32. package/packages/modules/lib/firebase/call-app-module.js +76 -0
  33. package/packages/modules/lib/firebase/call-app-module.js.map +1 -0
  34. package/packages/modules/lib/firebase/checkout.js +1 -0
  35. package/packages/modules/lib/firebase/checkout.js.map +1 -0
  36. package/packages/modules/lib/firebase/handle-module.js +161 -0
  37. package/packages/modules/lib/firebase/handle-module.js.map +1 -0
  38. package/packages/modules/lib/firebase/proxy-apps.js +1 -0
  39. package/packages/modules/lib/firebase/proxy-apps.js.map +1 -0
  40. package/packages/modules/lib/firebase/serve-modules-api.js +57 -0
  41. package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -0
  42. package/packages/modules/lib/firebase.js +10 -3
  43. package/packages/modules/lib/firebase.js.map +1 -1
  44. package/packages/modules/lib/index.js +11 -7
  45. package/packages/modules/lib/index.js.map +1 -1
  46. package/packages/modules/package.json +5 -1
  47. package/packages/modules/src/firebase/ajv.ts +38 -0
  48. package/packages/modules/src/firebase/call-app-module.ts +86 -0
  49. package/packages/modules/src/firebase/{.gitkeep → checkout.ts} +0 -0
  50. package/packages/modules/src/firebase/handle-module.ts +197 -0
  51. package/packages/modules/src/firebase/proxy-apps.ts +0 -0
  52. package/packages/modules/src/firebase/serve-modules-api.ts +66 -0
  53. package/packages/modules/src/firebase.ts +10 -3
  54. package/packages/modules/src/index.ts +11 -8
  55. package/packages/passport/package.json +1 -1
  56. package/packages/ssr/package.json +1 -1
  57. package/packages/storefront/package.json +1 -1
  58. package/packages/types/index.ts +10 -4
  59. package/packages/types/package.json +1 -1
  60. package/pnpm-lock.yaml +79 -13
@@ -0,0 +1,66 @@
1
+ import type { Request, Response } from 'firebase-functions';
2
+ import { schemas } from '../index';
3
+ import handleModule from './handle-module';
4
+
5
+ export default (
6
+ req: Request,
7
+ res: Response,
8
+ apiAuth: { authenticationId: string, apiKey: string },
9
+ ) => {
10
+ const { method } = req;
11
+ if (method !== 'POST' && method !== 'GET') {
12
+ return res.sendStatus(405);
13
+ }
14
+ if (
15
+ method === 'POST'
16
+ && (!req.body || typeof req.body !== 'object' || Array.isArray(req.body))
17
+ ) {
18
+ return res.sendStatus(400);
19
+ }
20
+
21
+ let { url } = req;
22
+ if (url.endsWith('.json')) {
23
+ url = url.slice(0, -5);
24
+ }
25
+ const modName = url.split('/')[1];
26
+ const sendSchema = (isResponseSchema = false) => {
27
+ return res.status(200)
28
+ .setHeader('Cache-Control', 'public, max-age=3600')
29
+ .send(schemas[modName][isResponseSchema ? 'response' : 'params']);
30
+ };
31
+
32
+ if (modName === '@checkout') {
33
+ if (url === '/@checkout') {
34
+ return res.status(200).send({
35
+ status: 200,
36
+ message: 'CHECKOUT',
37
+ });
38
+ }
39
+ if (url === '/@checkout/schema') {
40
+ return sendSchema();
41
+ }
42
+ return res.sendStatus(404);
43
+ }
44
+
45
+ if (schemas[modName]) {
46
+ const { params: schema, response: responseSchema } = schemas[modName];
47
+ if (!schema.$schema) {
48
+ schema.$schema = 'http://json-schema.org/draft-06/schema#';
49
+ schema.title = `Module \`${modName}\`: Params model`;
50
+ }
51
+ if (!responseSchema.$schema) {
52
+ responseSchema.$schema = 'http://json-schema.org/draft-06/schema#';
53
+ responseSchema.title = `Module \`${modName}\`: App response model`;
54
+ }
55
+ if (url === `/${modName}/schema`) {
56
+ return sendSchema();
57
+ }
58
+ if (url === `/${modName}/response_schema`) {
59
+ return sendSchema(true);
60
+ }
61
+ if (url === `/${modName}`) {
62
+ return handleModule(modName, schema, responseSchema, req, res, apiAuth);
63
+ }
64
+ }
65
+ return res.sendStatus(404);
66
+ };
@@ -6,11 +6,18 @@ import { initializeApp } from 'firebase-admin/app';
6
6
  // eslint-disable-next-line import/no-unresolved
7
7
  import { onRequest } from 'firebase-functions/v2/https';
8
8
  import config from '@cloudcommerce/firebase/lib/config';
9
+ import getEnv from '@cloudcommerce/firebase/lib/env';
10
+ import serveModulesApi from './firebase/serve-modules-api';
9
11
 
10
12
  initializeApp();
11
- const options = config.get().httpsFunctionOptions;
13
+ const { httpsFunctionOptions } = config.get();
12
14
 
13
- export const modulesApi = onRequest(options, (request, response) => {
15
+ export const modulesApi = onRequest(httpsFunctionOptions, (req, res) => {
16
+ const { authenticationId, apiKey } = getEnv();
17
+ // Hide API key for security
14
18
  process.env.ECOM_API_KEY = '***';
15
- response.send('Hello modules!');
19
+ serveModulesApi(req, res, {
20
+ authenticationId,
21
+ apiKey,
22
+ });
16
23
  });
@@ -4,18 +4,21 @@ import * as listPayments from '../schemas/list_payments.cjs';
4
4
  import * as createTransaction from '../schemas/create_transaction.cjs';
5
5
  import * as checkout from '../schemas/@checkout.cjs';
6
6
 
7
+ const schemas = {
8
+ calculate_shipping: calculateShipping,
9
+ apply_discount: applyDiscount,
10
+ list_payments: listPayments,
11
+ create_transaction: createTransaction,
12
+ '@checkout': checkout,
13
+ };
14
+
7
15
  export default {
8
16
  calculateShipping,
9
17
  applyDiscount,
10
18
  listPayments,
11
19
  createTransaction,
12
20
  checkout,
13
-
14
- schemas: {
15
- calculate_shipping: calculateShipping,
16
- apply_discount: applyDiscount,
17
- list_payments: listPayments,
18
- create_transaction: createTransaction,
19
- '@checkout': checkout,
20
- },
21
+ schemas,
21
22
  };
23
+
24
+ export { schemas };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/passport",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce customers authentication (passport) API",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/ssr",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce storefront SSR",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/storefront",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce storefront with Astro",
6
6
  "main": "src/index.js",
7
7
  "repository": {
@@ -26,16 +26,21 @@ import type { CreateTransactionResponse } from './modules/create_transaction:res
26
26
  import type { CheckoutBody } from './modules/@checkout:params';
27
27
 
28
28
  type AppEventsTopic = 'orders-new'
29
- | 'orders-setAnyStatus'
29
+ | 'orders-anyStatusSet'
30
30
  | 'orders-paid'
31
31
  | 'orders-readyForShipping'
32
32
  | 'orders-delivered'
33
33
  | 'orders-cancelled'
34
34
  | 'products-new'
35
- | 'products-setQuantity'
36
- | 'products-setPrice'
35
+ | 'products-quantitySet'
36
+ | 'products-priceSet'
37
37
  | 'carts-new'
38
- | 'carts-setCustomer';
38
+ | 'carts-customerSet';
39
+
40
+ type AppModuleName = 'apply_discount'
41
+ | 'calculate_shipping'
42
+ | 'list_payments'
43
+ | 'create_transaction';
39
44
 
40
45
  export type {
41
46
  Products,
@@ -54,6 +59,7 @@ export type {
54
59
  ResourceListResult,
55
60
  EventsResult,
56
61
  AppEventsTopic,
62
+ AppModuleName,
57
63
  ApplyDiscountParams,
58
64
  ApplyDiscountResponse,
59
65
  CalculateShippingParams,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/types",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce reusable type definitions",
6
6
  "main": "index.ts",
7
7
  "repository": {
package/pnpm-lock.yaml CHANGED
@@ -75,6 +75,25 @@ importers:
75
75
  md5: 2.3.0
76
76
  zx: 7.0.7
77
77
 
78
+ packages/events:
79
+ specifiers:
80
+ '@cloudcommerce/api': workspace:*
81
+ '@cloudcommerce/firebase': workspace:^0.0.43
82
+ '@cloudcommerce/types': workspace:*
83
+ '@firebase/app-types': ^0.7.0
84
+ firebase-admin: ^11.0.1
85
+ firebase-functions: ^3.22.0
86
+ source-map-support: ^0.5.21
87
+ dependencies:
88
+ '@cloudcommerce/api': link:../api
89
+ '@cloudcommerce/firebase': link:../firebase
90
+ firebase-admin: 11.0.1_@firebase+app-types@0.7.0
91
+ firebase-functions: 3.22.0_firebase-admin@11.0.1
92
+ source-map-support: 0.5.21
93
+ devDependencies:
94
+ '@cloudcommerce/types': link:../types
95
+ '@firebase/app-types': 0.7.0
96
+
78
97
  packages/firebase:
79
98
  specifiers:
80
99
  '@cloudcommerce/api': workspace:*
@@ -98,15 +117,23 @@ importers:
98
117
 
99
118
  packages/modules:
100
119
  specifiers:
120
+ '@cloudcommerce/api': workspace:*
121
+ '@cloudcommerce/app-discounts': workspace:^0.0.43
101
122
  '@cloudcommerce/firebase': workspace:*
102
123
  '@cloudcommerce/types': workspace:*
103
124
  '@firebase/app-types': ^0.7.0
125
+ ajv: ^8.11.0
126
+ axios: ^0.27.2
104
127
  firebase-admin: ^11.0.1
105
128
  firebase-functions: ^3.22.0
106
129
  json-schema-to-typescript: ^11.0.1
107
130
  source-map-support: ^0.5.21
108
131
  dependencies:
132
+ '@cloudcommerce/api': link:../api
133
+ '@cloudcommerce/app-discounts': link:../apps/discounts
109
134
  '@cloudcommerce/firebase': link:../firebase
135
+ ajv: 8.11.0
136
+ axios: 0.27.2
110
137
  firebase-admin: 11.0.1_@firebase+app-types@0.7.0
111
138
  firebase-functions: 3.22.0_firebase-admin@11.0.1
112
139
  source-map-support: 0.5.21
@@ -171,36 +198,36 @@ importers:
171
198
 
172
199
  store:
173
200
  specifiers:
174
- '@cloudcommerce/cli': ^0.0.40
201
+ '@cloudcommerce/cli': ^0.0.43
175
202
  dependencies:
176
203
  '@cloudcommerce/cli': link:../packages/cli
177
204
 
178
205
  store/functions/core:
179
206
  specifiers:
180
- '@cloudcommerce/firebase': ^0.0.40
207
+ '@cloudcommerce/firebase': ^0.0.43
181
208
  dependencies:
182
209
  '@cloudcommerce/firebase': link:../../../packages/firebase
183
210
 
184
211
  store/functions/modules:
185
212
  specifiers:
186
- '@cloudcommerce/firebase': ^0.0.40
187
- '@cloudcommerce/modules': ^0.0.40
213
+ '@cloudcommerce/firebase': ^0.0.43
214
+ '@cloudcommerce/modules': ^0.0.43
188
215
  dependencies:
189
216
  '@cloudcommerce/firebase': link:../../../packages/firebase
190
217
  '@cloudcommerce/modules': link:../../../packages/modules
191
218
 
192
219
  store/functions/passport:
193
220
  specifiers:
194
- '@cloudcommerce/firebase': ^0.0.40
195
- '@cloudcommerce/passport': ^0.0.40
221
+ '@cloudcommerce/firebase': ^0.0.43
222
+ '@cloudcommerce/passport': ^0.0.43
196
223
  dependencies:
197
224
  '@cloudcommerce/firebase': link:../../../packages/firebase
198
225
  '@cloudcommerce/passport': link:../../../packages/passport
199
226
 
200
227
  store/functions/ssr:
201
228
  specifiers:
202
- '@cloudcommerce/firebase': ^0.0.40
203
- '@cloudcommerce/ssr': ^0.0.40
229
+ '@cloudcommerce/firebase': ^0.0.43
230
+ '@cloudcommerce/ssr': ^0.0.43
204
231
  dependencies:
205
232
  '@cloudcommerce/firebase': link:../../../packages/firebase
206
233
  '@cloudcommerce/ssr': link:../../../packages/ssr
@@ -1514,7 +1541,6 @@ packages:
1514
1541
  json-schema-traverse: 1.0.0
1515
1542
  require-from-string: 2.0.2
1516
1543
  uri-js: 4.4.1
1517
- dev: true
1518
1544
 
1519
1545
  /ansi-align/3.0.1:
1520
1546
  resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
@@ -1716,11 +1742,24 @@ packages:
1716
1742
  dev: false
1717
1743
  optional: true
1718
1744
 
1745
+ /asynckit/0.4.0:
1746
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
1747
+ dev: false
1748
+
1719
1749
  /available-typed-arrays/1.0.5:
1720
1750
  resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
1721
1751
  engines: {node: '>= 0.4'}
1722
1752
  dev: false
1723
1753
 
1754
+ /axios/0.27.2:
1755
+ resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
1756
+ dependencies:
1757
+ follow-redirects: 1.15.1
1758
+ form-data: 4.0.0
1759
+ transitivePeerDependencies:
1760
+ - debug
1761
+ dev: false
1762
+
1724
1763
  /bail/2.0.2:
1725
1764
  resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
1726
1765
  dev: false
@@ -1986,6 +2025,13 @@ packages:
1986
2025
  /color-name/1.1.4:
1987
2026
  resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1988
2027
 
2028
+ /combined-stream/1.0.8:
2029
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
2030
+ engines: {node: '>= 0.8'}
2031
+ dependencies:
2032
+ delayed-stream: 1.0.0
2033
+ dev: false
2034
+
1989
2035
  /comma-separated-tokens/2.0.2:
1990
2036
  resolution: {integrity: sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==}
1991
2037
  dev: false
@@ -2389,6 +2435,11 @@ packages:
2389
2435
  has-property-descriptors: 1.0.0
2390
2436
  object-keys: 1.1.1
2391
2437
 
2438
+ /delayed-stream/1.0.0:
2439
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
2440
+ engines: {node: '>=0.4.0'}
2441
+ dev: false
2442
+
2392
2443
  /depd/2.0.0:
2393
2444
  resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
2394
2445
  engines: {node: '>= 0.8'}
@@ -3574,12 +3625,31 @@ packages:
3574
3625
  resolution: {integrity: sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==}
3575
3626
  dev: true
3576
3627
 
3628
+ /follow-redirects/1.15.1:
3629
+ resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==}
3630
+ engines: {node: '>=4.0'}
3631
+ peerDependencies:
3632
+ debug: '*'
3633
+ peerDependenciesMeta:
3634
+ debug:
3635
+ optional: true
3636
+ dev: false
3637
+
3577
3638
  /for-each/0.3.3:
3578
3639
  resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
3579
3640
  dependencies:
3580
3641
  is-callable: 1.2.4
3581
3642
  dev: false
3582
3643
 
3644
+ /form-data/4.0.0:
3645
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
3646
+ engines: {node: '>= 6'}
3647
+ dependencies:
3648
+ asynckit: 0.4.0
3649
+ combined-stream: 1.0.8
3650
+ mime-types: 2.1.35
3651
+ dev: false
3652
+
3583
3653
  /formdata-polyfill/4.0.10:
3584
3654
  resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
3585
3655
  engines: {node: '>=12.20.0'}
@@ -4568,7 +4638,6 @@ packages:
4568
4638
 
4569
4639
  /json-schema-traverse/1.0.0:
4570
4640
  resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
4571
- dev: true
4572
4641
 
4573
4642
  /json-stable-stringify-without-jsonify/1.0.1:
4574
4643
  resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -6038,7 +6107,6 @@ packages:
6038
6107
  /punycode/2.1.1:
6039
6108
  resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
6040
6109
  engines: {node: '>=6'}
6041
- dev: true
6042
6110
 
6043
6111
  /q/1.5.1:
6044
6112
  resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
@@ -6242,7 +6310,6 @@ packages:
6242
6310
  /require-from-string/2.0.2:
6243
6311
  resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
6244
6312
  engines: {node: '>=0.10.0'}
6245
- dev: true
6246
6313
 
6247
6314
  /resolve-from/4.0.0:
6248
6315
  resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
@@ -7261,7 +7328,6 @@ packages:
7261
7328
  resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
7262
7329
  dependencies:
7263
7330
  punycode: 2.1.1
7264
- dev: true
7265
7331
 
7266
7332
  /util-deprecate/1.0.2:
7267
7333
  resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}