@commercetools-frontend/mc-scripts 21.5.0 → 21.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -42
  3. package/application-runtime/dist/commercetools-frontend-mc-scripts-application-runtime.cjs.d.ts +1 -0
  4. package/application-runtime/dist/commercetools-frontend-mc-scripts-application-runtime.cjs.dev.js +7 -0
  5. package/application-runtime/dist/commercetools-frontend-mc-scripts-application-runtime.cjs.js +7 -0
  6. package/{build/config/application-runtime.js → application-runtime/dist/commercetools-frontend-mc-scripts-application-runtime.cjs.prod.js} +2 -2
  7. package/application-runtime/dist/commercetools-frontend-mc-scripts-application-runtime.esm.js +5 -0
  8. package/application-runtime/package.json +4 -0
  9. package/bin/cli.js +1 -1
  10. package/cli/dist/commercetools-frontend-mc-scripts-cli.cjs.d.ts +1 -0
  11. package/cli/dist/commercetools-frontend-mc-scripts-cli.cjs.dev.js +354 -0
  12. package/cli/dist/commercetools-frontend-mc-scripts-cli.cjs.js +7 -0
  13. package/cli/dist/commercetools-frontend-mc-scripts-cli.cjs.prod.js +354 -0
  14. package/cli/dist/commercetools-frontend-mc-scripts-cli.esm.js +338 -0
  15. package/cli/package.json +4 -0
  16. package/config/create-webpack-config-for-development.js +7 -1
  17. package/config/create-webpack-config-for-production.js +7 -1
  18. package/config/vendors-to-transpile.js +5 -1
  19. package/dist/build-8582b673.esm.js +209 -0
  20. package/dist/build-9395925a.cjs.prod.js +224 -0
  21. package/dist/build-97278377.cjs.dev.js +224 -0
  22. package/dist/build-vite-6c987a60.cjs.dev.js +109 -0
  23. package/dist/build-vite-76d44332.cjs.prod.js +109 -0
  24. package/dist/build-vite-a9602b19.esm.js +97 -0
  25. package/dist/commercetools-frontend-mc-scripts.cjs.d.ts +1 -0
  26. package/dist/commercetools-frontend-mc-scripts.cjs.dev.js +30 -0
  27. package/dist/commercetools-frontend-mc-scripts.cjs.js +7 -0
  28. package/dist/commercetools-frontend-mc-scripts.cjs.prod.js +30 -0
  29. package/dist/commercetools-frontend-mc-scripts.esm.js +22 -0
  30. package/dist/compile-html-0c588a89.cjs.dev.js +93 -0
  31. package/dist/compile-html-4832f8c5.esm.js +83 -0
  32. package/dist/compile-html-7654b5e6.cjs.prod.js +93 -0
  33. package/dist/config-sync-20bc05e8.esm.js +868 -0
  34. package/dist/config-sync-62824317.cjs.prod.js +887 -0
  35. package/dist/config-sync-d52e73f6.cjs.dev.js +892 -0
  36. package/dist/create-postcss-config-4cbe10ab.cjs.dev.js +90 -0
  37. package/dist/create-postcss-config-8ea16440.cjs.prod.js +90 -0
  38. package/{build/config/create-postcss-config.js → dist/create-postcss-config-c1aa3525.esm.js} +27 -25
  39. package/{build/config/create-webpack-config-for-development.js → dist/create-webpack-config-for-development-8a8b84d6.esm.js} +92 -56
  40. package/dist/create-webpack-config-for-development-a5e73092.cjs.prod.js +418 -0
  41. package/dist/create-webpack-config-for-development-e2735e02.cjs.dev.js +418 -0
  42. package/dist/create-webpack-config-for-production-4e7b56c0.cjs.prod.js +468 -0
  43. package/{build/config/create-webpack-config-for-production.js → dist/create-webpack-config-for-production-7dc669e5.esm.js} +117 -52
  44. package/dist/create-webpack-config-for-production-d9bf281c.cjs.dev.js +468 -0
  45. package/dist/declarations/src/application-runtime.d.ts +1 -0
  46. package/dist/declarations/src/cli.d.ts +4 -0
  47. package/dist/declarations/src/commands/build-vite.d.ts +2 -0
  48. package/dist/declarations/src/commands/build.d.ts +2 -0
  49. package/dist/declarations/src/commands/compile-html.d.ts +3 -0
  50. package/dist/declarations/src/commands/config-sync.d.ts +3 -0
  51. package/dist/declarations/src/commands/login.d.ts +2 -0
  52. package/dist/declarations/src/commands/serve.d.ts +2 -0
  53. package/dist/declarations/src/commands/start-vite.d.ts +2 -0
  54. package/dist/declarations/src/commands/start.d.ts +2 -0
  55. package/dist/declarations/src/config/create-postcss-config.d.ts +4 -0
  56. package/dist/declarations/src/config/create-webpack-config-for-development.d.ts +10 -0
  57. package/dist/declarations/src/config/create-webpack-config-for-production.d.ts +10 -0
  58. package/dist/declarations/src/config/has-jsx-runtime.d.ts +2 -0
  59. package/dist/declarations/src/config/paths.d.ts +12 -0
  60. package/dist/declarations/src/config/vendors-to-transpile.d.ts +2 -0
  61. package/dist/declarations/src/config/webpack-dev-server.config.d.ts +6 -0
  62. package/dist/declarations/src/deprecated-entry-points.d.ts +7 -0
  63. package/dist/declarations/src/generated/core.d.ts +710 -0
  64. package/dist/declarations/src/generated/settings.d.ts +2383 -0
  65. package/dist/declarations/src/index.d.ts +3 -0
  66. package/dist/declarations/src/postcss.d.ts +1 -0
  67. package/dist/declarations/src/types.d.ts +82 -0
  68. package/dist/declarations/src/utils/auth.d.ts +6 -0
  69. package/dist/declarations/src/utils/credentials-storage.d.ts +11 -0
  70. package/dist/declarations/src/utils/get-config-diff.d.ts +3 -0
  71. package/dist/declarations/src/utils/graphql-requests.d.ts +80 -0
  72. package/dist/declarations/src/utils/user-agent.d.ts +2 -0
  73. package/dist/declarations/src/version.d.ts +2 -0
  74. package/dist/declarations/src/webpack-plugins/final-stats-writer-plugin.d.ts +12 -0
  75. package/dist/declarations/src/webpack-plugins/local-html-webpack-plugin.d.ts +5 -0
  76. package/dist/declarations/src/webpack.d.ts +2 -0
  77. package/dist/has-jsx-runtime-0b03b72e.cjs.prod.js +17 -0
  78. package/dist/has-jsx-runtime-3d4bb633.cjs.dev.js +17 -0
  79. package/{build/config/has-jsx-runtime.js → dist/has-jsx-runtime-8314226e.esm.js} +1 -3
  80. package/dist/login-706ccc9a.cjs.prod.js +165 -0
  81. package/dist/login-779552b7.cjs.dev.js +165 -0
  82. package/dist/login-7d94659e.esm.js +155 -0
  83. package/dist/package-a98de907.esm.js +133 -0
  84. package/dist/package-aaf61bf0.cjs.dev.js +135 -0
  85. package/dist/package-b5c040f3.cjs.prod.js +135 -0
  86. package/dist/paths-16823f56.cjs.dev.js +55 -0
  87. package/dist/paths-76b66e74.cjs.prod.js +55 -0
  88. package/dist/paths-ed23d5a1.esm.js +46 -0
  89. package/dist/serve-12de323b.cjs.dev.js +70 -0
  90. package/dist/serve-784f4fcd.cjs.prod.js +70 -0
  91. package/dist/serve-d6b437b1.esm.js +62 -0
  92. package/dist/start-2b953ab0.cjs.dev.js +209 -0
  93. package/dist/start-e3ccd672.cjs.prod.js +209 -0
  94. package/dist/start-e924bd5d.esm.js +194 -0
  95. package/dist/start-vite-737bacca.cjs.dev.js +149 -0
  96. package/dist/start-vite-b0f58ae4.cjs.prod.js +149 -0
  97. package/dist/start-vite-ec5d40b5.esm.js +136 -0
  98. package/dist/user-agent-5da1830b.cjs.dev.js +106 -0
  99. package/dist/user-agent-8044acd6.esm.js +94 -0
  100. package/dist/user-agent-d18809af.cjs.prod.js +106 -0
  101. package/dist/vendors-to-transpile-367e0ba8.cjs.prod.js +5 -0
  102. package/dist/vendors-to-transpile-68e03526.esm.js +3 -0
  103. package/dist/vendors-to-transpile-b51af5d3.cjs.dev.js +5 -0
  104. package/package.json +50 -48
  105. package/postcss/dist/commercetools-frontend-mc-scripts-postcss.cjs.d.ts +1 -0
  106. package/postcss/dist/commercetools-frontend-mc-scripts-postcss.cjs.dev.js +14 -0
  107. package/postcss/dist/commercetools-frontend-mc-scripts-postcss.cjs.js +7 -0
  108. package/postcss/dist/commercetools-frontend-mc-scripts-postcss.cjs.prod.js +14 -0
  109. package/postcss/dist/commercetools-frontend-mc-scripts-postcss.esm.js +6 -0
  110. package/postcss/package.json +4 -0
  111. package/webpack/dist/commercetools-frontend-mc-scripts-webpack.cjs.d.ts +1 -0
  112. package/webpack/dist/commercetools-frontend-mc-scripts-webpack.cjs.dev.js +51 -0
  113. package/webpack/dist/commercetools-frontend-mc-scripts-webpack.cjs.js +7 -0
  114. package/webpack/dist/commercetools-frontend-mc-scripts-webpack.cjs.prod.js +51 -0
  115. package/webpack/dist/commercetools-frontend-mc-scripts-webpack.esm.js +42 -0
  116. package/webpack/package.json +4 -0
  117. package/build/bin/cli.js +0 -260
  118. package/build/commands/build-vite.js +0 -95
  119. package/build/commands/build.js +0 -140
  120. package/build/commands/compile-html.js +0 -53
  121. package/build/commands/config-sync.js +0 -171
  122. package/build/commands/login.js +0 -60
  123. package/build/commands/serve.js +0 -37
  124. package/build/commands/start-vite.js +0 -142
  125. package/build/commands/start.js +0 -108
  126. package/build/config/paths.js +0 -38
  127. package/build/config/vendors-to-transpile.js +0 -3
  128. package/build/config/webpack-dev-server.config.js +0 -71
  129. package/build/index.js +0 -16
  130. package/build/utils/auth.js +0 -34
  131. package/build/utils/auth.spec.js +0 -61
  132. package/build/utils/create-custom-application.settings.graphql +0 -8
  133. package/build/utils/credentials-storage.js +0 -72
  134. package/build/utils/credentials-storage.spec.js +0 -69
  135. package/build/utils/fetch-custom-application.settings.graphql +0 -35
  136. package/build/utils/fetch-user-organizations.core.graphql +0 -9
  137. package/build/utils/graphql-requests.js +0 -105
  138. package/build/utils/graphql-requests.spec.js +0 -159
  139. package/build/utils/require-graphql.js +0 -15
  140. package/build/utils/update-application-id-in-custom-application-config.js +0 -60
  141. package/build/utils/update-custom-application.settings.graphql +0 -13
  142. package/build/utils/user-agent.js +0 -15
  143. package/build/webpack-plugins/final-stats-writer-plugin.js +0 -50
  144. package/build/webpack-plugins/local-html-webpack-plugin.js +0 -38
@@ -1,61 +0,0 @@
1
- "use strict";
2
-
3
- const {
4
- rest
5
- } = require('msw');
6
-
7
- const {
8
- setupServer
9
- } = require('msw/node');
10
-
11
- const {
12
- getAuthToken
13
- } = require('./auth');
14
-
15
- const mockServer = setupServer();
16
- afterEach(() => {
17
- mockServer.resetHandlers();
18
- });
19
- beforeAll(() => mockServer.listen({
20
- onUnhandledRequest: 'error'
21
- }));
22
- afterAll(() => mockServer.close());
23
- const mcApiUrl = 'https://mc-api.europe-west1.gcp.commercetools.com';
24
- describe('when login details are correct', () => {
25
- beforeEach(() => {
26
- mockServer.use(rest.post(`${mcApiUrl}/tokens/cli`, (req, res, ctx) => {
27
- return res(ctx.status(200), ctx.json({
28
- token: 'hello-world',
29
- expiresAt: Math.floor(Date.now() / 1000) + 60 * 60 * 36 // 1,5 days
30
-
31
- }));
32
- }));
33
- });
34
- it('should match returned credentials', async () => {
35
- const sessionData = await getAuthToken(mcApiUrl, {
36
- email: 'user@email.com',
37
- password: 'secret'
38
- });
39
- expect(sessionData).toEqual({
40
- token: 'hello-world',
41
- expiresAt: expect.any(Number)
42
- });
43
- expect(sessionData.expiresAt).toBeGreaterThan(Math.floor(Date.now() / 1000));
44
- expect(sessionData.expiresAt).toBeLessThanOrEqual(Math.floor(Date.now() / 1000) + 60 * 60 * 36);
45
- });
46
- });
47
- describe('when login details are incorrect', () => {
48
- beforeEach(() => {
49
- mockServer.use(rest.post(`${mcApiUrl}/tokens/cli`, (req, res, ctx) => {
50
- return res(ctx.status(400), ctx.json({
51
- message: 'Invalid email or password'
52
- }));
53
- }));
54
- });
55
- it('should throw error', async () => {
56
- await expect(async () => await getAuthToken(mcApiUrl, {
57
- email: 'user@email.com',
58
- password: 'secret'
59
- })).rejects.toThrow('Invalid email or password');
60
- });
61
- });
@@ -1,8 +0,0 @@
1
- mutation CreateCustomApplicationFromCli(
2
- $organizationId: String!
3
- $data: CustomApplicationDraftDataInput!
4
- ) {
5
- createCustomApplication(organizationId: $organizationId, data: $data) {
6
- id
7
- }
8
- }
@@ -1,72 +0,0 @@
1
- "use strict";
2
-
3
- const fs = require('fs');
4
-
5
- const path = require('path');
6
-
7
- const homedir = require('os').homedir();
8
-
9
- const credentialsFolderPath = path.join(homedir, `.commercetools`);
10
- const credentialsFilePath = path.join(credentialsFolderPath, 'mc-credentials.json');
11
-
12
- class CredentialsStorage {
13
- static location = credentialsFilePath;
14
-
15
- constructor() {
16
- // Ensure the credentials file is present
17
- if (!fs.existsSync(credentialsFilePath)) {
18
- fs.mkdirSync(credentialsFolderPath, {
19
- recursive: true
20
- }); // Initialize with an empty object
21
-
22
- this._writeCredentials({});
23
- }
24
- }
25
-
26
- _writeCredentials(credentials) {
27
- fs.writeFileSync(credentialsFilePath, JSON.stringify(credentials, null, 2), {
28
- encoding: 'utf8'
29
- });
30
- }
31
-
32
- _loadCredentials() {
33
- const data = fs.readFileSync(credentialsFilePath, {
34
- encoding: 'utf8'
35
- });
36
- return JSON.parse(data);
37
- }
38
-
39
- getToken(environmentKey) {
40
- const allCredentials = this._loadCredentials();
41
-
42
- if (!this.isSessionValid(environmentKey)) {
43
- return null;
44
- }
45
-
46
- return allCredentials[environmentKey].token;
47
- }
48
-
49
- setToken(environmentKey, credentials) {
50
- const allCredentials = this._loadCredentials();
51
-
52
- allCredentials[environmentKey] = credentials;
53
-
54
- this._writeCredentials(allCredentials);
55
- }
56
-
57
- isSessionValid(environmentKey) {
58
- const allCredentials = this._loadCredentials();
59
-
60
- const credentials = allCredentials[environmentKey];
61
-
62
- if (!credentials) {
63
- return false;
64
- }
65
-
66
- const now = Math.floor(Date.now() / 1000);
67
- return now < credentials.expiresAt;
68
- }
69
-
70
- }
71
-
72
- module.exports = CredentialsStorage;
@@ -1,69 +0,0 @@
1
- "use strict";
2
-
3
- const mock = require('mock-fs');
4
-
5
- const CredentialsStorage = require('./credentials-storage');
6
-
7
- afterEach(() => {
8
- mock.restore();
9
- });
10
- const mcApiUrl = 'https://mc-api.europe-west1.gcp.commercetools.com';
11
- describe('when session is valid', () => {
12
- let credentialsStorage;
13
- beforeEach(() => {
14
- mock({
15
- [CredentialsStorage.location]: JSON.stringify({
16
- [mcApiUrl]: {
17
- token: 'hello-world',
18
- expiresAt: Math.floor(Date.now() / 1000) + 60 * 60 * 36
19
- }
20
- })
21
- });
22
- credentialsStorage = new CredentialsStorage();
23
- });
24
- it('should load credentials and update token', () => {
25
- expect(credentialsStorage.getToken(mcApiUrl)).toBe('hello-world');
26
- expect(credentialsStorage.isSessionValid(mcApiUrl)).toBe(true);
27
- const newSessionData = {
28
- token: 'fizz-buzz',
29
- expiresAt: Math.floor(Date.now() / 1000) + 60 * 60 * 36
30
- };
31
- credentialsStorage.setToken(mcApiUrl, newSessionData);
32
- expect(credentialsStorage.getToken(mcApiUrl)).toBe('fizz-buzz');
33
- });
34
- });
35
- describe('when session is expired', () => {
36
- let credentialsStorage;
37
- beforeEach(() => {
38
- mock({
39
- [CredentialsStorage.location]: JSON.stringify({
40
- [mcApiUrl]: {
41
- token: 'hello-world',
42
- expiresAt: Math.floor(Date.now() / 1000) - 1
43
- }
44
- })
45
- });
46
- credentialsStorage = new CredentialsStorage();
47
- });
48
- it('should not load credentials', () => {
49
- expect(credentialsStorage.isSessionValid(mcApiUrl)).toBe(false);
50
- expect(credentialsStorage.getToken(mcApiUrl)).toBe(null);
51
- });
52
- });
53
- describe('when credentials file is missing', () => {
54
- let credentialsStorage;
55
- beforeEach(() => {
56
- mock({});
57
- credentialsStorage = new CredentialsStorage();
58
- });
59
- it('should not load credentials and update token', () => {
60
- expect(credentialsStorage.getToken(mcApiUrl)).toBe(null);
61
- expect(credentialsStorage.isSessionValid(mcApiUrl)).toBe(false);
62
- const newSessionData = {
63
- token: 'fizz-buzz',
64
- expiresAt: Math.floor(Date.now() / 1000) + 60 * 60 * 36
65
- };
66
- credentialsStorage.setToken(mcApiUrl, newSessionData);
67
- expect(credentialsStorage.getToken(mcApiUrl)).toBe('fizz-buzz');
68
- });
69
- });
@@ -1,35 +0,0 @@
1
- query FetchCustomApplicationFromCli($entryPointUriPath: String!) {
2
- organizationExtensionForCustomApplication(
3
- entryPointUriPath: $entryPointUriPath
4
- ) {
5
- organizationId
6
- application {
7
- id
8
- entryPointUriPath
9
- name
10
- description
11
- url
12
- icon
13
- permissions {
14
- name
15
- oAuthScopes
16
- }
17
- mainMenuLink {
18
- defaultLabel
19
- labelAllLocales {
20
- locale
21
- value
22
- }
23
- }
24
- submenuLinks {
25
- uriPath
26
- defaultLabel
27
- permissions
28
- labelAllLocales {
29
- locale
30
- value
31
- }
32
- }
33
- }
34
- }
35
- }
@@ -1,9 +0,0 @@
1
- query FetchMyOrganizationsFromCli {
2
- myOrganizations {
3
- total
4
- results {
5
- id
6
- name
7
- }
8
- }
9
- }
@@ -1,105 +0,0 @@
1
- "use strict";
2
-
3
- const {
4
- GraphQLClient
5
- } = require('graphql-request');
6
-
7
- const {
8
- GRAPHQL_TARGETS
9
- } = require('@commercetools-frontend/constants');
10
-
11
- const userAgent = require('./user-agent');
12
-
13
- const requireGraphqlHelper = require('./require-graphql');
14
-
15
- const requireGraphql = requireGraphqlHelper(__dirname);
16
- const FetchCustomApplicationFromCli = requireGraphql('./fetch-custom-application.settings.graphql');
17
- const UpdateCustomApplicationFromCli = requireGraphql('./update-custom-application.settings.graphql');
18
- const CreateCustomApplicationFromCli = requireGraphql('./create-custom-application.settings.graphql');
19
- const FetchMyOrganizationsFromCli = requireGraphql('./fetch-user-organizations.core.graphql');
20
-
21
- const graphQLClient = (uri, token, target = GRAPHQL_TARGETS.SETTINGS_SERVICE) => new GraphQLClient(`${uri}/graphql`, {
22
- headers: {
23
- Accept: 'application/json',
24
- 'Content-Type': 'application/json',
25
- 'x-graphql-target': target,
26
- 'x-mc-cli-access-token': token,
27
- 'x-user-agent': userAgent
28
- }
29
- });
30
-
31
- const fetchCustomApplication = async ({
32
- mcApiUrl,
33
- token,
34
- entryPointUriPath
35
- }) => {
36
- const variables = {
37
- entryPointUriPath
38
- };
39
-
40
- try {
41
- const customAppData = await graphQLClient(mcApiUrl, token).request(FetchCustomApplicationFromCli, variables);
42
- return customAppData.organizationExtensionForCustomApplication;
43
- } catch (error) {
44
- throw new Error(error.response.message);
45
- }
46
- };
47
-
48
- const updateCustomApplication = async ({
49
- mcApiUrl,
50
- token,
51
- applicationId,
52
- organizationId,
53
- data
54
- }) => {
55
- const variables = {
56
- organizationId,
57
- applicationId,
58
- data
59
- };
60
-
61
- try {
62
- const updatedCustomAppsData = await graphQLClient(mcApiUrl, token).request(UpdateCustomApplicationFromCli, variables);
63
- return updatedCustomAppsData.updateCustomApplication;
64
- } catch (error) {
65
- throw new Error(error.response.message);
66
- }
67
- };
68
-
69
- const createCustomApplication = async ({
70
- mcApiUrl,
71
- token,
72
- organizationId,
73
- data
74
- }) => {
75
- const variables = {
76
- organizationId,
77
- data
78
- };
79
-
80
- try {
81
- const createdCustomAppData = await graphQLClient(mcApiUrl, token).request(CreateCustomApplicationFromCli, variables);
82
- return createdCustomAppData.createCustomApplication;
83
- } catch (error) {
84
- throw new Error(error.response.message);
85
- }
86
- };
87
-
88
- const fetchUserOrganizations = async ({
89
- mcApiUrl,
90
- token
91
- }) => {
92
- try {
93
- const userOrganizations = await graphQLClient(mcApiUrl, token, GRAPHQL_TARGETS.ADMINISTRATION_SERVICE).request(FetchMyOrganizationsFromCli);
94
- return userOrganizations.myOrganizations;
95
- } catch (error) {
96
- throw new Error(error.response.message);
97
- }
98
- };
99
-
100
- module.exports = {
101
- fetchCustomApplication,
102
- updateCustomApplication,
103
- createCustomApplication,
104
- fetchUserOrganizations
105
- };
@@ -1,159 +0,0 @@
1
- "use strict";
2
-
3
- const {
4
- graphql
5
- } = require('msw');
6
-
7
- const {
8
- setupServer
9
- } = require('msw/node');
10
-
11
- const {
12
- createCustomApplication,
13
- updateCustomApplication,
14
- fetchCustomApplication,
15
- fetchUserOrganizations
16
- } = require('./graphql-requests');
17
-
18
- const mockServer = setupServer();
19
- afterEach(() => {
20
- mockServer.resetHandlers();
21
- });
22
- beforeAll(() => mockServer.listen({
23
- onUnhandledRequest: 'bypass'
24
- }));
25
- afterAll(() => mockServer.close());
26
- const mcApiUrl = 'https://mc-api.europe-west1.gcp.commercetools.com';
27
- describe('fetch custom application data', () => {
28
- beforeEach(() => {
29
- mockServer.use(graphql.query('FetchCustomApplicationFromCli', (req, res, ctx) => {
30
- return res(ctx.data({
31
- organizationExtensionForCustomApplication: {
32
- id: 'test-id',
33
- organizationId: 'org-id',
34
- application: {
35
- url: 'https://test.com',
36
- name: 'Test name',
37
- description: 'Test description',
38
- entryPointUriPath: 'test-custom-app',
39
- icon: '<svg><path fill="#000000"></path></svg>',
40
- submenuLinks: [],
41
- mainMenuLink: [],
42
- permissions: [{
43
- oAuthScopes: ['view_products', 'view_customers'],
44
- name: 'viewTestCustomApp'
45
- }, {
46
- oAuthScopes: [],
47
- name: 'manageTestCustomApp'
48
- }]
49
- }
50
- }
51
- }));
52
- }));
53
- });
54
- it('should match returned data', async () => {
55
- const organizationExtensionForCustomApplication = await fetchCustomApplication({
56
- entryPointUriPath: 'test-custom-app',
57
- mcApiUrl,
58
- token: 'test-token'
59
- });
60
- expect(organizationExtensionForCustomApplication.application.entryPointUriPath).toEqual('test-custom-app');
61
- expect(organizationExtensionForCustomApplication.id).toEqual('test-id');
62
- expect(organizationExtensionForCustomApplication.organizationId).toEqual('org-id');
63
- });
64
- });
65
- describe('register custom application', () => {
66
- beforeEach(() => {
67
- mockServer.use(graphql.mutation('CreateCustomApplicationFromCli', (req, res, ctx) => {
68
- return res(ctx.data({
69
- createCustomApplication: {
70
- id: 'new-test-id',
71
- application: {
72
- url: 'https://test.com',
73
- name: 'New Test name',
74
- description: 'Test description',
75
- entryPointUriPath: 'new-test-custom-app',
76
- icon: '<svg><path fill="#000000"></path></svg>',
77
- submenuLinks: [],
78
- mainMenuLink: [],
79
- permissions: [{
80
- oAuthScopes: ['view_products', 'view_customers'],
81
- name: 'viewNewTestCustomApp'
82
- }, {
83
- oAuthScopes: [],
84
- name: 'manageNewTestCustomApp'
85
- }]
86
- }
87
- }
88
- }));
89
- }));
90
- });
91
- it('should match returned data', async () => {
92
- const createdCustomAppsData = await createCustomApplication({
93
- entryPointUriPath: 'new-test-custom-app',
94
- mcApiUrl,
95
- token: 'new-test-token'
96
- });
97
- expect(createdCustomAppsData.application.entryPointUriPath).toEqual('new-test-custom-app');
98
- expect(createdCustomAppsData.id).toEqual('new-test-id');
99
- });
100
- });
101
- describe('update custom application', () => {
102
- beforeEach(() => {
103
- mockServer.use(graphql.mutation('UpdateCustomApplicationFromCli', (req, res, ctx) => {
104
- return res(ctx.data({
105
- updateCustomApplication: {
106
- id: 'test-id',
107
- application: {
108
- url: 'https://test.com',
109
- name: 'Updated Test name',
110
- description: 'Updated Test description',
111
- entryPointUriPath: 'updated-test-custom-app',
112
- icon: '<svg><path fill="#000000"></path></svg>',
113
- submenuLinks: [],
114
- mainMenuLink: [],
115
- permissions: [{
116
- oAuthScopes: ['view_products', 'view_customers'],
117
- name: 'viewNewTestCustomApp'
118
- }, {
119
- oAuthScopes: [],
120
- name: 'manageNewTestCustomApp'
121
- }]
122
- }
123
- }
124
- }));
125
- }));
126
- });
127
- it('should match returned data', async () => {
128
- const updatedCustomAppsData = await updateCustomApplication({
129
- entryPointUriPath: 'updated-test-custom-app',
130
- mcApiUrl,
131
- token: 'test-token'
132
- });
133
- expect(updatedCustomAppsData.application.name).toEqual('Updated Test name');
134
- expect(updatedCustomAppsData.application.description).toEqual('Updated Test description');
135
- });
136
- });
137
- describe('fetch user organizations', () => {
138
- beforeEach(() => {
139
- mockServer.use(graphql.query('FetchMyOrganizationsFromCli', (req, res, ctx) => {
140
- return res(ctx.data({
141
- myOrganizations: {
142
- total: 1,
143
- results: [{
144
- id: 'test-organization-id',
145
- name: 'test-organization-name'
146
- }]
147
- }
148
- }));
149
- }));
150
- });
151
- it('should match returned data', async () => {
152
- const data = await fetchUserOrganizations({
153
- mcApiUrl,
154
- token: 'test-token'
155
- });
156
- expect(data.results[0].id).toEqual('test-organization-id');
157
- expect(data.results[0].name).toEqual('test-organization-name');
158
- });
159
- });
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- const path = require('path');
4
-
5
- const {
6
- readFileSync
7
- } = require('fs'); // At the moment there is no proper way of loading `.graphql` files
8
- // in nodejs. This workaround basically uses `readFileSync` to read the file
9
- // content as a string.
10
- // https://github.com/apollographql/graphql-tools/issues/273
11
-
12
-
13
- const requireGraphql = folderPath => filePath => readFileSync(path.join(folderPath, filePath), 'utf-8');
14
-
15
- module.exports = requireGraphql;
@@ -1,60 +0,0 @@
1
- "use strict";
2
-
3
- const fs = require('fs');
4
-
5
- const rcfile = require('rcfile');
6
-
7
- const prettier = require('prettier');
8
-
9
- const babel = require('@babel/core');
10
-
11
- const {
12
- getConfigPath
13
- } = require('@commercetools-frontend/application-config');
14
-
15
- function updateApplicationIdInCustomApplicationConfig(applicationId) {
16
- const filePath = getConfigPath();
17
-
18
- if (filePath.endsWith('.json')) {
19
- const customApplicationConfig = require(filePath);
20
-
21
- customApplicationConfig.env.production.applicationId = applicationId;
22
- const prettierConfig = rcfile('prettier');
23
- const formattedData = prettier.format(JSON.stringify(customApplicationConfig), { ...prettierConfig,
24
- parser: 'json'
25
- });
26
- fs.writeFileSync(filePath, formattedData, {
27
- encoding: 'utf8'
28
- });
29
- return;
30
- }
31
-
32
- const result = babel.transformFileSync(filePath, {
33
- plugins: [function replaceCustomApplicationConfig() {
34
- return {
35
- visitor: {
36
- Identifier(nodePath) {
37
- if (nodePath.isIdentifier({
38
- name: 'applicationId'
39
- })) {
40
- if (nodePath.findParent(parentPath => parentPath.get('key').isIdentifier({
41
- name: 'env'
42
- }))) {
43
- nodePath.parent.value = babel.types.stringLiteral(applicationId);
44
- }
45
- }
46
- }
47
-
48
- }
49
- };
50
- }],
51
- retainLines: true
52
- });
53
- const prettierConfig = rcfile('prettier');
54
- const formattedData = prettier.format(result.code, prettierConfig);
55
- fs.writeFileSync(filePath, formattedData, {
56
- encoding: 'utf8'
57
- });
58
- }
59
-
60
- module.exports = updateApplicationIdInCustomApplicationConfig;
@@ -1,13 +0,0 @@
1
- mutation UpdateCustomApplicationFromCli(
2
- $organizationId: String!
3
- $data: CustomApplicationDraftDataInput!
4
- $applicationId: ID!
5
- ) {
6
- updateCustomApplication(
7
- organizationId: $organizationId
8
- data: $data
9
- applicationId: $applicationId
10
- ) {
11
- id
12
- }
13
- }
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- const createHttpUserAgent = require('@commercetools/http-user-agent');
4
-
5
- const pkgJson = require('../../package.json');
6
-
7
- const userAgent = createHttpUserAgent({
8
- name: 'cli-login',
9
- libraryName: 'mc-scripts',
10
- libraryVersion: pkgJson.version,
11
- contactUrl: 'https://git.io/fjuyC',
12
- // points to the appkit repo issues
13
- contactEmail: 'support@commercetools.com'
14
- });
15
- module.exports = userAgent;
@@ -1,50 +0,0 @@
1
- "use strict";
2
-
3
- const fs = require('fs');
4
-
5
- const path = require('path');
6
-
7
- class FinalStatsWriterPlugin {
8
- // Expected options:
9
- // - `outputPath`
10
- // - `includeFields`
11
- constructor(config) {
12
- if (!config) throw new Error('Missing config options');
13
- this.config = config;
14
- }
15
-
16
- apply(compiler) {
17
- // This is the only hook that return the `stats` plugin
18
- // with the `time` info. It also contains all the stats that
19
- // we would get from the original `emit` hook.
20
- // https://webpack.js.org/api/compiler-hooks/#done
21
- // https://webpack.js.org/api/plugins/#plugin-types
22
- if (compiler.hooks) {
23
- compiler.hooks.done.tap('custom-stats-writer-plugin', this.writeStats.bind(this));
24
- } else {
25
- compiler.plugin('done', this.writeStats.bind(this));
26
- }
27
- }
28
-
29
- writeStats(stats) {
30
- let finalStats = stats.toJson(); // Filter only included fields
31
-
32
- if (this.config.includeFields) {
33
- finalStats = this.config.includeFields.reduce((aggregatedStats, key) => // eslint-disable-next-line
34
- Object.assign({}, aggregatedStats, {
35
- [key]: finalStats[key]
36
- }), {});
37
- }
38
-
39
- try {
40
- fs.accessSync(this.config.outputPath, fs.F_OK);
41
- fs.writeFileSync(path.join(this.config.outputPath, 'stats.json'), JSON.stringify(finalStats, null, 2));
42
- } catch (error) {
43
- // eslint-disable-next-line no-console
44
- console.warn(`[FinalStatsWriterPlugin] The dist folder could not be found at ${this.config.outputPath}. Check the console for errors during the webpack compilation.`);
45
- }
46
- }
47
-
48
- }
49
-
50
- module.exports = FinalStatsWriterPlugin;