@pronto-tools-and-more/pronto 12.24.0 → 12.26.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pronto-tools-and-more/pronto",
3
- "version": "12.24.0",
3
+ "version": "12.26.0",
4
4
  "description": "",
5
5
  "main": "src/main.js",
6
6
  "type": "module",
@@ -17,16 +17,16 @@
17
17
  "@lvce-editor/ipc": "^13.7.0",
18
18
  "@lvce-editor/json-rpc": "^5.4.0",
19
19
  "@lvce-editor/verror": "^1.6.0",
20
- "@pronto-tools-and-more/file-watcher": "12.24.0",
21
- "@pronto-tools-and-more/files": "12.24.0",
22
- "@pronto-tools-and-more/network-process": "12.24.0",
23
- "@pronto-tools-and-more/sass-compiler": "12.24.0",
24
- "@pronto-tools-and-more/components-renderer": "12.24.0",
25
- "@pronto-tools-and-more/components": "12.24.0",
26
- "@pronto-tools-and-more/schema-process": "12.24.0",
27
- "@pronto-tools-and-more/diff-process": "12.24.0",
28
- "@pronto-tools-and-more/type-checker": "12.24.0",
29
- "@pronto-tools-and-more/custom-js-functions": "12.24.0",
20
+ "@pronto-tools-and-more/file-watcher": "12.26.0",
21
+ "@pronto-tools-and-more/files": "12.26.0",
22
+ "@pronto-tools-and-more/network-process": "12.26.0",
23
+ "@pronto-tools-and-more/sass-compiler": "12.26.0",
24
+ "@pronto-tools-and-more/components-renderer": "12.26.0",
25
+ "@pronto-tools-and-more/components": "12.26.0",
26
+ "@pronto-tools-and-more/schema-process": "12.26.0",
27
+ "@pronto-tools-and-more/diff-process": "12.26.0",
28
+ "@pronto-tools-and-more/type-checker": "12.26.0",
29
+ "@pronto-tools-and-more/custom-js-functions": "12.26.0",
30
30
  "execa": "^9.5.2",
31
31
  "express": "^4.21.2"
32
32
  },
@@ -14,6 +14,7 @@ import * as ProxyPath from "../ProxyPath/ProxyPath.js";
14
14
  export const create = ({
15
15
  root,
16
16
  appId,
17
+ releaseAppId,
17
18
  baseUrl,
18
19
  rootSassFile,
19
20
  contentUrl,
@@ -29,6 +30,7 @@ export const create = ({
29
30
  resourceDynamicUrlsInViewsJson,
30
31
  injectCustomJs,
31
32
  shimConfigLoader,
33
+ apiUrl,
32
34
  }) => {
33
35
  const app = express();
34
36
  const storeFrontPath = join(root, "src", "default", "storefront");
@@ -90,7 +92,8 @@ export const create = ({
90
92
  injectCustomJs,
91
93
  })
92
94
  );
93
- app.use("/api", HandleApi.handleApi({ appId }));
95
+ app.use("/api", HandleApi.handleApi({ appId, apiUrl }));
96
+ app.use("/prod-api", HandleApi.handleApi({ appId: releaseAppId, apiUrl }));
94
97
  app.use("*", HandleCss.handleCss(storeFrontPath, rootSassFile));
95
98
  app.use(express.static(FilesPath.filesPath));
96
99
  app.use(express.static(storeFrontPath));
@@ -126,6 +126,17 @@ export const build = async () => {
126
126
  )
127
127
  );
128
128
  }
129
+
130
+ if (
131
+ tag &&
132
+ Config.pushToReleaseOnGitTag &&
133
+ existsSync(join(dist, "src", "default", "storefront", "robots.prod.txt"))
134
+ ) {
135
+ await cp(
136
+ join(dist, "src", "default", "storefront", "robots.prod.txt"),
137
+ join(dist, "src", "default", "storefront", "robots.txt")
138
+ );
139
+ }
129
140
  if (Config.validateSchema) {
130
141
  await ValidateAllSchemas.validateAllSchemas();
131
142
  }
@@ -117,3 +117,6 @@ export const resourceDynamicUrlsInViewsJson =
117
117
  export const injectCustomJs = config.injectCustomJs || false;
118
118
 
119
119
  export const shimConfigLoader = config.shimConfigLoader || false;
120
+
121
+ export const apiUrl =
122
+ process.env.API_URL || "https://catalog.purplemanager.com/graphql";
@@ -28,6 +28,8 @@ export const createServer = async (root, errorColor) => {
28
28
  resourceDynamicUrlsInViewsJson: Config.resourceDynamicUrlsInViewsJson,
29
29
  injectCustomJs: Config.injectCustomJs,
30
30
  shimConfigLoader: Config.shimConfigLoader,
31
+ releaseAppId: Config.releaseAppId,
32
+ apiUrl: Config.apiUrl,
31
33
  });
32
34
  const server = http.createServer(app);
33
35
  const webSocketServer = new ws.WebSocketServer({
@@ -0,0 +1,41 @@
1
+ import * as GraphQlQueryPathSegments from "../GraphQlQueryPathSegments/GraphQlQueryPathSegments.js";
2
+
3
+ export const getPostIds = async ({ appId, apiUrl, slug }) => {
4
+ const realBottom = {
5
+ ...GraphQlQueryPathSegments.bottom,
6
+ appInfo: {
7
+ ...GraphQlQueryPathSegments.bottom.appInfo,
8
+ appId,
9
+ },
10
+ pathSegments: [slug],
11
+ };
12
+ const response = await fetch(apiUrl, {
13
+ method: "POST",
14
+ headers: {
15
+ Accept: "application/json",
16
+ "Content-Type": "application/json",
17
+ },
18
+ body: JSON.stringify({
19
+ operationName: GraphQlQueryPathSegments.queryName,
20
+ query: GraphQlQueryPathSegments.top,
21
+ variables: realBottom,
22
+ }),
23
+ });
24
+ const result = await response.json();
25
+ // @ts-ignore
26
+ if (result && result.error) {
27
+ // @ts-ignore
28
+ throw new Error(`api error: ${result.error}`);
29
+ }
30
+ // @ts-ignore
31
+ const realData = result.data.catalog.lookupPathSegments
32
+ .flatMap((item) => item.matches)
33
+ .map((match) => {
34
+ const { __typename, ...rest } = match;
35
+ return rest;
36
+ })
37
+ .map((match) => {
38
+ return match.id;
39
+ });
40
+ return realData;
41
+ };
@@ -0,0 +1,227 @@
1
+ export const top = `query CatalogCollections($appInfo: AppInfo!, $deviceInfo: DeviceInfo!, $authorization: Authorization!, $filter: CollectionFilter, $sort: [CollectionComparator!], $first: Int, $after: String, $includeElements: Boolean!, $elementsFirst: Int, $elementsAfter: String, $includeBundledContent: Boolean!, $includeResources: Boolean!, $includeBlocks: Boolean!, $includeHtml: Boolean!, $includeContentSeoMetadata: Boolean!, $propertyFilter: PropertyFilter) {
2
+ catalog(
3
+ appInfo: $appInfo
4
+ deviceInfo: $deviceInfo
5
+ authorization: $authorization
6
+ ) {
7
+ collectionsConnection(
8
+ filter: $filter
9
+ sort: $sort
10
+ first: $first
11
+ after: $after
12
+ ) {
13
+ pageInfo {
14
+ hasNextPage
15
+ endCursor
16
+ }
17
+ edges {
18
+ node {
19
+ id
20
+ name
21
+ properties {
22
+ key
23
+ value
24
+ }
25
+ elementsConnection(first: $elementsFirst, after: $elementsAfter) @include(if: $includeElements) {
26
+ pageInfo {
27
+ hasNextPage
28
+ endCursor
29
+ }
30
+ edges {
31
+ node {
32
+ __typename
33
+ ... on ContentElement {
34
+ id
35
+ sortIndex
36
+ content {
37
+ ...ContentFragment
38
+ ...IssueFragment
39
+ ...PostFragment
40
+ ...BundleFragment
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ fragment ContentFragment on Content {
53
+ __typename
54
+ id
55
+ version
56
+ name
57
+ description
58
+ index
59
+ alias
60
+ externalId
61
+ publicationDate
62
+ unpublishDate
63
+ lastModified
64
+ access
65
+ productId
66
+ purchaseData {
67
+ purchased
68
+ purchasedBy
69
+ }
70
+ publication {
71
+ id
72
+ }
73
+ properties(filter: $propertyFilter) {
74
+ key
75
+ value
76
+ }
77
+ seoMetadata @include(if: $includeContentSeoMetadata) {
78
+ key
79
+ value
80
+ }
81
+ thumbnails {
82
+ kind
83
+ url
84
+ properties {
85
+ key
86
+ value
87
+ }
88
+ }
89
+ categories
90
+ tags
91
+ }
92
+
93
+ fragment IssueFragment on Issue {
94
+ contentLength
95
+ numberOfPages
96
+ previewContentLength
97
+ resources @include(if: $includeResources) {
98
+ id
99
+ url
100
+ type
101
+ contentLength
102
+ properties {
103
+ key
104
+ value
105
+ type
106
+ }
107
+ }
108
+ }
109
+
110
+ fragment PostFragment on Post {
111
+ postType
112
+ bundleId
113
+ bundles {
114
+ id
115
+ bundleType
116
+ }
117
+ taxonomies {
118
+ ...TaxonomySummaryFragment
119
+ }
120
+ authors {
121
+ name
122
+ email
123
+ }
124
+ bundleId
125
+ content @include(if: $includeBlocks) {
126
+ ...ContentBlockFragment
127
+ }
128
+ previewContentBlocks @include(if: $includeBlocks) {
129
+ ...ContentBlockFragment
130
+ }
131
+ contentHtml @include(if: $includeHtml)
132
+ previewContentHtml @include(if: $includeHtml)
133
+ resources @include(if: $includeResources) {
134
+ id
135
+ url
136
+ type
137
+ contentLength
138
+ properties {
139
+ key
140
+ value
141
+ type
142
+ }
143
+ }
144
+ }
145
+
146
+ fragment ContentBlockFragment on ContentBlock {
147
+ id
148
+ type
149
+ parentId
150
+ children
151
+ sequence
152
+ html
153
+ level
154
+ properties {
155
+ key
156
+ value
157
+ type
158
+ }
159
+ }
160
+
161
+ fragment BundleFragment on Bundle {
162
+ bundleType
163
+ taxonomies {
164
+ ...TaxonomySummaryFragment
165
+ }
166
+ authors {
167
+ name
168
+ email
169
+ }
170
+ contents @include(if: $includeBundledContent) {
171
+ id
172
+ content {
173
+ ...ContentFragment
174
+ ...PostFragment
175
+ }
176
+ }
177
+ }
178
+
179
+ fragment TaxonomySummaryFragment on Taxonomy {
180
+ id
181
+ internalId
182
+ name
183
+ type
184
+ parentId
185
+ seoMetadata @include(if: $includeContentSeoMetadata) {
186
+ key
187
+ value
188
+ }
189
+ properties {
190
+ key
191
+ value
192
+ }
193
+ }`;
194
+
195
+ export const bottom = {
196
+ filter: {
197
+ name: {
198
+ value: "",
199
+ },
200
+ },
201
+ first: 24,
202
+ includeElements: true,
203
+ elementsFirst: 100,
204
+ includeBlocks: false,
205
+ includeHtml: false,
206
+ includeResources: false,
207
+ includeBundledContent: false,
208
+ includeContentSeoMetadata: false,
209
+ appInfo: {
210
+ appId: "",
211
+ appVersion: "1.0-SNAPSHOT",
212
+ preview: true,
213
+ },
214
+ deviceInfo: {
215
+ deviceId: "editor-preview",
216
+ deviceModel: "web",
217
+ locale: "de_DE",
218
+ smallestScreenWidthDp: 0,
219
+ deviceOs: "web",
220
+ platform: "WEB",
221
+ },
222
+ authorization: {
223
+ subscriptionCodes: [],
224
+ },
225
+ };
226
+
227
+ export const queryName = "CatalogCollections";
@@ -0,0 +1,227 @@
1
+ export const top = `query CatalogCollections($appInfo: AppInfo!, $deviceInfo: DeviceInfo!, $authorization: Authorization!, $filter: CollectionFilter, $sort: [CollectionComparator!], $first: Int, $after: String, $includeElements: Boolean!, $elementsFirst: Int, $elementsAfter: String, $includeBundledContent: Boolean!, $includeResources: Boolean!, $includeBlocks: Boolean!, $includeHtml: Boolean!, $includeContentSeoMetadata: Boolean!, $propertyFilter: PropertyFilter) {
2
+ catalog(
3
+ appInfo: $appInfo
4
+ deviceInfo: $deviceInfo
5
+ authorization: $authorization
6
+ ) {
7
+ collectionsConnection(
8
+ filter: $filter
9
+ sort: $sort
10
+ first: $first
11
+ after: $after
12
+ ) {
13
+ pageInfo {
14
+ hasNextPage
15
+ endCursor
16
+ }
17
+ edges {
18
+ node {
19
+ id
20
+ name
21
+ properties {
22
+ key
23
+ value
24
+ }
25
+ elementsConnection(first: $elementsFirst, after: $elementsAfter) @include(if: $includeElements) {
26
+ pageInfo {
27
+ hasNextPage
28
+ endCursor
29
+ }
30
+ edges {
31
+ node {
32
+ __typename
33
+ ... on ContentElement {
34
+ id
35
+ sortIndex
36
+ content {
37
+ ...ContentFragment
38
+ ...IssueFragment
39
+ ...PostFragment
40
+ ...BundleFragment
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ fragment ContentFragment on Content {
53
+ __typename
54
+ id
55
+ version
56
+ name
57
+ description
58
+ index
59
+ alias
60
+ externalId
61
+ publicationDate
62
+ unpublishDate
63
+ lastModified
64
+ access
65
+ productId
66
+ purchaseData {
67
+ purchased
68
+ purchasedBy
69
+ }
70
+ publication {
71
+ id
72
+ }
73
+ properties(filter: $propertyFilter) {
74
+ key
75
+ value
76
+ }
77
+ seoMetadata @include(if: $includeContentSeoMetadata) {
78
+ key
79
+ value
80
+ }
81
+ thumbnails {
82
+ kind
83
+ url
84
+ properties {
85
+ key
86
+ value
87
+ }
88
+ }
89
+ categories
90
+ tags
91
+ }
92
+
93
+ fragment IssueFragment on Issue {
94
+ contentLength
95
+ numberOfPages
96
+ previewContentLength
97
+ resources @include(if: $includeResources) {
98
+ id
99
+ url
100
+ type
101
+ contentLength
102
+ properties {
103
+ key
104
+ value
105
+ type
106
+ }
107
+ }
108
+ }
109
+
110
+ fragment PostFragment on Post {
111
+ postType
112
+ bundleId
113
+ bundles {
114
+ id
115
+ bundleType
116
+ }
117
+ taxonomies {
118
+ ...TaxonomySummaryFragment
119
+ }
120
+ authors {
121
+ name
122
+ email
123
+ }
124
+ bundleId
125
+ content @include(if: $includeBlocks) {
126
+ ...ContentBlockFragment
127
+ }
128
+ previewContentBlocks @include(if: $includeBlocks) {
129
+ ...ContentBlockFragment
130
+ }
131
+ contentHtml @include(if: $includeHtml)
132
+ previewContentHtml @include(if: $includeHtml)
133
+ resources @include(if: $includeResources) {
134
+ id
135
+ url
136
+ type
137
+ contentLength
138
+ properties {
139
+ key
140
+ value
141
+ type
142
+ }
143
+ }
144
+ }
145
+
146
+ fragment ContentBlockFragment on ContentBlock {
147
+ id
148
+ type
149
+ parentId
150
+ children
151
+ sequence
152
+ html
153
+ level
154
+ properties {
155
+ key
156
+ value
157
+ type
158
+ }
159
+ }
160
+
161
+ fragment BundleFragment on Bundle {
162
+ bundleType
163
+ taxonomies {
164
+ ...TaxonomySummaryFragment
165
+ }
166
+ authors {
167
+ name
168
+ email
169
+ }
170
+ contents @include(if: $includeBundledContent) {
171
+ id
172
+ content {
173
+ ...ContentFragment
174
+ ...PostFragment
175
+ }
176
+ }
177
+ }
178
+
179
+ fragment TaxonomySummaryFragment on Taxonomy {
180
+ id
181
+ internalId
182
+ name
183
+ type
184
+ parentId
185
+ seoMetadata @include(if: $includeContentSeoMetadata) {
186
+ key
187
+ value
188
+ }
189
+ properties {
190
+ key
191
+ value
192
+ }
193
+ }`;
194
+
195
+ export const bottom = {
196
+ filter: {
197
+ name: {
198
+ value: "",
199
+ },
200
+ },
201
+ first: 24,
202
+ includeElements: false,
203
+ elementsFirst: 100,
204
+ includeBlocks: false,
205
+ includeHtml: false,
206
+ includeResources: false,
207
+ includeBundledContent: false,
208
+ includeContentSeoMetadata: false,
209
+ appInfo: {
210
+ appId: "",
211
+ appVersion: "1.0-SNAPSHOT",
212
+ preview: true,
213
+ },
214
+ deviceInfo: {
215
+ deviceId: "editor-preview",
216
+ deviceModel: "web",
217
+ locale: "de_DE",
218
+ smallestScreenWidthDp: 0,
219
+ deviceOs: "web",
220
+ platform: "WEB",
221
+ },
222
+ authorization: {
223
+ subscriptionCodes: [],
224
+ },
225
+ };
226
+
227
+ export const queryName = "CatalogCollections";
@@ -1,34 +1,48 @@
1
+ import * as HandleApiArticle from "../HandleApiArticle/HandleApiArticle.js";
2
+ import * as HandleApiAuthors from "../HandleApiAuthors/HandleApiAuthors.js";
1
3
  import * as HandleCategories from "../HandleApiCategories/HandleApiCategories.js";
4
+ import * as HandleApiCollection from "../HandleApiCollection/HandleApiCollection.js";
2
5
  import * as HandleApiDossier from "../HandleApiDossier/HandleApiDossier.js";
3
6
  import * as HandleDossiers from "../HandleApiDossiers/HandleApiDossiers.js";
4
7
  import * as HandleApiIndex from "../HandleApiIndex/HandleApiIndex.js";
5
8
  import * as HandleApiIssues from "../HandleApiIssues/HandleApiIssues.js";
6
- import * as HandleApiAuthors from "../HandleApiAuthors/HandleApiAuthors.js";
7
- import * as HandleApiArticle from "../HandleApiArticle/HandleApiArticle.js";
9
+ import * as HandleApiCollections from "../HandleApiCollections/HandleApiCollections.js";
8
10
 
9
11
  export const handleApi =
10
- ({ appId }) =>
12
+ ({ appId, apiUrl }) =>
11
13
  (req, res) => {
12
14
  if (req.url === "/") {
13
15
  return HandleApiIndex.handleIndex(req, res);
14
16
  }
15
17
  if (req.url === "/categories") {
16
- return HandleCategories.handleCategories(appId)(req, res);
18
+ return HandleCategories.handleCategories({ appId, apiUrl })(req, res);
17
19
  }
18
20
  if (req.url === "/dossiers") {
19
- return HandleDossiers.handleDossiers(appId)(req, res);
21
+ return HandleDossiers.handleDossiers({ appId, apiUrl })(req, res);
20
22
  }
21
23
  if (req.url.startsWith("/dossiers")) {
22
- return HandleApiDossier.handleDossier(appId)(req, res);
24
+ return HandleApiDossier.handleDossier({ appId, apiUrl })(req, res);
23
25
  }
24
26
  if (req.url === "/issues") {
25
- return HandleApiIssues.handleIssues(appId)(req, res);
27
+ return HandleApiIssues.handleIssues({ appId, apiUrl })(req, res);
26
28
  }
27
29
  if (req.url === "/authors") {
28
- return HandleApiAuthors.handleAuthors(appId)(req, res);
30
+ return HandleApiAuthors.handleAuthors({ appId, apiUrl })(req, res);
29
31
  }
30
32
  if (req.url.startsWith("/articles")) {
31
- return HandleApiArticle.handleApiArticle(appId)(req, res);
33
+ return HandleApiArticle.handleApiArticle({ appId, apiUrl })(req, res);
34
+ }
35
+ if (req.url === "/collections" || req.url === "/collections/") {
36
+ return HandleApiCollections.handleApiCollections({ appId, apiUrl })(
37
+ req,
38
+ res
39
+ );
40
+ }
41
+ if (req.url.startsWith("/collections")) {
42
+ return HandleApiCollection.handleApiCollection({ appId, apiUrl })(
43
+ req,
44
+ res
45
+ );
32
46
  }
33
47
  res.statusCode = 404;
34
48
  return res.end("not found");