@remkoj/optimizely-graph-client 1.0.4 → 2.0.0-pre1
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.
- package/dist/admin-api/client/OptimizelyGraphAdminApi.js +1 -1
- package/dist/admin-api/client/core/OpenAPI.js +1 -1
- package/dist/admin-api/client/index.d.ts +1 -0
- package/dist/admin-api/client/index.js +1 -0
- package/dist/admin-api/client/index.js.map +1 -1
- package/dist/admin-api/client/models/DeleteMode.d.ts +5 -0
- package/dist/admin-api/client/models/DeleteMode.js +11 -0
- package/dist/admin-api/client/models/DeleteMode.js.map +1 -0
- package/dist/admin-api/client/models/PropertyType_V3.d.ts +2 -0
- package/dist/admin-api/client/services/DefinitionV3Service.d.ts +25 -11
- package/dist/admin-api/client/services/DefinitionV3Service.js +25 -12
- package/dist/admin-api/client/services/DefinitionV3Service.js.map +1 -1
- package/dist/admin-api/client/services/LogsService.d.ts +1 -1
- package/dist/admin-api/client/services/LogsService.js +1 -1
- package/dist/admin-api/client/services/ResourcesService.d.ts +20 -2
- package/dist/admin-api/client/services/ResourcesService.js +40 -2
- package/dist/admin-api/client/services/ResourcesService.js.map +1 -1
- package/dist/admin-api/client/services/WebhooksService.d.ts +10 -8
- package/dist/admin-api/client/services/WebhooksService.js +10 -8
- package/dist/admin-api/client/services/WebhooksService.js.map +1 -1
- package/dist/admin-api/request/request.js +0 -1
- package/dist/admin-api/request/request.js.map +1 -1
- package/dist/client/client.js +3 -1
- package/dist/client/client.js.map +1 -1
- package/dist/client/types.d.ts +21 -0
- package/dist/services/channel-repository/definition.d.ts +7 -1
- package/dist/services/channel-repository/definition.js +14 -0
- package/dist/services/channel-repository/definition.js.map +1 -1
- package/dist/services/channel-repository/repository.js +3 -3
- package/dist/services/channel-repository/repository.js.map +1 -1
- package/dist/services/channel-repository/types.d.ts +9 -5
- package/dist/services/index.d.ts +5 -3
- package/dist/services/index.js +2 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/routing/index.d.ts +4 -83
- package/dist/services/routing/index.js +2 -242
- package/dist/services/routing/index.js.map +1 -1
- package/dist/services/routing/queries/getAllRoutes.d.ts +28 -0
- package/dist/services/routing/queries/getAllRoutes.js +31 -0
- package/dist/services/routing/queries/getAllRoutes.js.map +1 -0
- package/dist/services/routing/queries/getRouteById.d.ts +13 -0
- package/dist/services/routing/queries/getRouteById.js +24 -0
- package/dist/services/routing/queries/getRouteById.js.map +1 -0
- package/dist/services/routing/queries/getRouteByPath.d.ts +12 -0
- package/dist/services/routing/queries/getRouteByPath.js +30 -0
- package/dist/services/routing/queries/getRouteByPath.js.map +1 -0
- package/dist/services/routing/resolver.d.ts +45 -0
- package/dist/services/routing/resolver.js +137 -0
- package/dist/services/routing/resolver.js.map +1 -0
- package/dist/services/routing/types.d.ts +3 -18
- package/dist/services/types.d.ts +14 -0
- package/dist/services/types.js +2 -0
- package/dist/services/types.js.map +1 -0
- package/dist/services/utils.d.ts +69 -0
- package/dist/services/utils.js +135 -0
- package/dist/services/utils.js.map +1 -0
- package/package.json +11 -6
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// Import GraphQL Client
|
|
2
|
+
import createClient, { isContentGraphClient } from '../../client/index.js';
|
|
3
|
+
// Import GraphQL Queries
|
|
4
|
+
import * as GetRouteById from './queries/getRouteById.js';
|
|
5
|
+
import * as GetAllRoutes from './queries/getAllRoutes.js';
|
|
6
|
+
import * as GetRouteByPath from './queries/getRouteByPath.js';
|
|
7
|
+
// Main router class
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export class RouteResolver {
|
|
12
|
+
/**
|
|
13
|
+
* Create a new Route Resolver
|
|
14
|
+
*
|
|
15
|
+
* @param client ContentGraph configuration override
|
|
16
|
+
* @param apolloConfig Apollo Client configuration override
|
|
17
|
+
*/
|
|
18
|
+
constructor(clientOrConfig) {
|
|
19
|
+
this._cgClient = isContentGraphClient(clientOrConfig) ? clientOrConfig : createClient(clientOrConfig);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Retrieve all registered routes for the provided domain - all domains if none specified
|
|
23
|
+
*
|
|
24
|
+
* @param domain The domain to filter on
|
|
25
|
+
* @returns The list of routes
|
|
26
|
+
*/
|
|
27
|
+
async getRoutes(domain) {
|
|
28
|
+
this._cgClient.updateFlags({ queryCache: false }, true);
|
|
29
|
+
let page = await this._cgClient.request(GetAllRoutes.query, { domain }).catch(e => {
|
|
30
|
+
if (this._cgClient.debug)
|
|
31
|
+
console.error("[RouteResolver] Error while fetching routes", e);
|
|
32
|
+
return undefined;
|
|
33
|
+
});
|
|
34
|
+
let results = page?.Content?.items ?? [];
|
|
35
|
+
const totalCount = page?.Content?.total ?? 0;
|
|
36
|
+
const cursor = page?.Content?.cursor ?? '';
|
|
37
|
+
if (totalCount > 0 && cursor !== '' && totalCount > results.length)
|
|
38
|
+
while ((page?.Content?.items?.length ?? 0) > 0 && results.length < totalCount) {
|
|
39
|
+
page = await this._cgClient.request({
|
|
40
|
+
document: GetAllRoutes.query,
|
|
41
|
+
variables: {
|
|
42
|
+
cursor,
|
|
43
|
+
domain
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
results = results.concat(page.Content?.items ?? []);
|
|
47
|
+
}
|
|
48
|
+
this._cgClient.restoreFlags();
|
|
49
|
+
return results.map(this.tryConvertResponse.bind(this)).filter(this.isNotNullOrUndefined);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Retrieve route details by path
|
|
53
|
+
*
|
|
54
|
+
* @param path
|
|
55
|
+
* @param domain
|
|
56
|
+
* @returns The route information for the path
|
|
57
|
+
*/
|
|
58
|
+
async getContentInfoByPath(path, domain) {
|
|
59
|
+
if (this._cgClient.debug)
|
|
60
|
+
console.log(`Resolving content info for ${path} on ${domain ? domain : "all domains"}`);
|
|
61
|
+
const resultSet = await this._cgClient.request({
|
|
62
|
+
document: GetRouteByPath.query,
|
|
63
|
+
variables: { path, domain }
|
|
64
|
+
});
|
|
65
|
+
if ((resultSet.Content?.items?.length ?? 0) === 0) {
|
|
66
|
+
if (this._cgClient.debug)
|
|
67
|
+
console.warn("No items in the resultset");
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
if ((resultSet.Content?.items?.length ?? 0) > 1)
|
|
71
|
+
throw new Error("Ambiguous URL provided, did you omit the siteId in a multi-channel setup?");
|
|
72
|
+
if (this._cgClient.debug)
|
|
73
|
+
console.log(`Resolved content info for ${path} to:`, resultSet.Content.items[0]);
|
|
74
|
+
return this.convertResponse(resultSet.Content.items[0]);
|
|
75
|
+
}
|
|
76
|
+
async getContentInfoById(key, locale, version) {
|
|
77
|
+
const variables = { key, version: version?.toString(), locale: locale?.replaceAll('-', '_') };
|
|
78
|
+
if (this._cgClient.debug)
|
|
79
|
+
console.log("Resolving content by id:", JSON.stringify(variables));
|
|
80
|
+
const resultSet = await this._cgClient.request({
|
|
81
|
+
document: GetRouteById.query,
|
|
82
|
+
variables
|
|
83
|
+
});
|
|
84
|
+
if (resultSet.Content?.total >= 1) {
|
|
85
|
+
if (this._cgClient.debug && resultSet.Content?.total > 1)
|
|
86
|
+
console.warn(`Received multiple entries with this ID, returning the first one from: ${(resultSet.Content?.items || []).map(x => { return `${x._metadata.key} (version: ${x._metadata.version}, locale: ${x._metadata.locale})`; }).join('; ')}`);
|
|
87
|
+
return this.convertResponse(resultSet.Content.items[0]);
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Extract a content link from a route definition
|
|
93
|
+
*
|
|
94
|
+
* @param route The route to parse
|
|
95
|
+
* @returns The ContentLink, with locale information
|
|
96
|
+
*/
|
|
97
|
+
routeToContentLink(route) {
|
|
98
|
+
return {
|
|
99
|
+
key: route.key,
|
|
100
|
+
version: route.version,
|
|
101
|
+
locale: route.locale
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
convertResponse(item) {
|
|
105
|
+
let itemUrl = new URL('http://localhost');
|
|
106
|
+
try {
|
|
107
|
+
itemUrl = new URL(item._metadata.url.path, item._metadata.url.domain);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
//Ignore
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
locale: item._metadata.locale,
|
|
114
|
+
path: item._metadata.url.path,
|
|
115
|
+
url: itemUrl,
|
|
116
|
+
slug: "",
|
|
117
|
+
changed: item.changed ? new Date(item.changed) : null,
|
|
118
|
+
contentType: item._metadata.types,
|
|
119
|
+
version: item._metadata.version,
|
|
120
|
+
key: item._metadata.key
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
tryConvertResponse(item) {
|
|
124
|
+
try {
|
|
125
|
+
return this.convertResponse(item);
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
console.error(`Unable to convert ${JSON.stringify(item)} to Route`, e);
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
isNotNullOrUndefined(input) {
|
|
133
|
+
return input != null && input != undefined;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export default RouteResolver;
|
|
137
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/services/routing/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,10 @@
|
|
|
1
|
-
export type ContentLink = {
|
|
2
|
-
id: number;
|
|
3
|
-
workId?: number | null;
|
|
4
|
-
guidValue?: string | null;
|
|
5
|
-
} | {
|
|
6
|
-
id?: number | null;
|
|
7
|
-
workId?: number | null;
|
|
8
|
-
guidValue: string;
|
|
9
|
-
};
|
|
10
|
-
export type ContentLinkWithLocale = ContentLink & {
|
|
11
|
-
locale?: string;
|
|
12
|
-
};
|
|
13
1
|
export type Route = {
|
|
14
|
-
|
|
2
|
+
locale: string;
|
|
15
3
|
path: string;
|
|
16
4
|
url: URL;
|
|
17
5
|
slug: string;
|
|
18
6
|
changed: Date | null;
|
|
19
|
-
published: Date | null;
|
|
20
7
|
contentType: string[];
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
guid: string;
|
|
24
|
-
siteId: string;
|
|
8
|
+
version?: string | null;
|
|
9
|
+
key: string;
|
|
25
10
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ContentLink = {
|
|
2
|
+
key: string;
|
|
3
|
+
version?: string | null;
|
|
4
|
+
};
|
|
5
|
+
export type InlineContentLink = {
|
|
6
|
+
key?: null | undefined;
|
|
7
|
+
version?: null;
|
|
8
|
+
};
|
|
9
|
+
export type ContentLinkWithLocale<LocaleType = string> = ContentLink & {
|
|
10
|
+
locale?: LocaleType;
|
|
11
|
+
};
|
|
12
|
+
export type InlineContentLinkWithLocale<LocaleType = string> = InlineContentLink & {
|
|
13
|
+
locale?: LocaleType;
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/services/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ContentLink, ContentLinkWithLocale, InlineContentLink, InlineContentLinkWithLocale } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Transform a locale code (e.g. en-US) to a Optimizely Graph compatible locale
|
|
4
|
+
* (e.g. en_US).
|
|
5
|
+
*
|
|
6
|
+
* @param locale The locale to transform
|
|
7
|
+
* @returns The Optimizely Graph safe locale
|
|
8
|
+
*/
|
|
9
|
+
export declare function localeToGraphLocale<T>(locale: T): T extends string ? string : never;
|
|
10
|
+
/**
|
|
11
|
+
* Tranform an Optimizely Graph locale (e.g. en_US) to an ISO locale (e.g. en-US)
|
|
12
|
+
*
|
|
13
|
+
* @param graphLocale The locale as supported by Optimizely Graph
|
|
14
|
+
* @returns The ISO Locale
|
|
15
|
+
*/
|
|
16
|
+
export declare function graphLocaleToLocale<T>(graphLocale: T): T extends string ? string : never;
|
|
17
|
+
/**
|
|
18
|
+
* Check if two ContentLinks point to the same content item, if either of the
|
|
19
|
+
* links set the version or locale, these values must be equal across the ContentLinks
|
|
20
|
+
*
|
|
21
|
+
* @param link1 The first compared link
|
|
22
|
+
* @param link2 The second compared link
|
|
23
|
+
* @returns True if they links point to the same content item, False otherwise
|
|
24
|
+
*/
|
|
25
|
+
export declare function contentLinkIsEqual(link1: ContentLink | ContentLinkWithLocale, link2: ContentLink | ContentLinkWithLocale): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Check if two ContentLinks point to the same content item, if either of the
|
|
28
|
+
* links set the version or locale, these values must be equal across the ContentLinks
|
|
29
|
+
*
|
|
30
|
+
* @param link1 The first compared link
|
|
31
|
+
* @param link2 The second compared link
|
|
32
|
+
* @returns True if they links point to the same content item, False otherwise
|
|
33
|
+
*/
|
|
34
|
+
export declare function contentLinkIsEqualIgnoreVersion(link1: ContentLink | ContentLinkWithLocale, link2: ContentLink | ContentLinkWithLocale): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Test if the provided value can be understood as a ContentLink
|
|
37
|
+
*
|
|
38
|
+
* @param toTest The value under test
|
|
39
|
+
* @returns True if the object can be understood as a ContentLink, False otherwise
|
|
40
|
+
*/
|
|
41
|
+
export declare function isContentLink(toTest: any): toTest is ContentLink;
|
|
42
|
+
export declare function isContentLinkWithLocale(toTest: any): toTest is ContentLinkWithLocale;
|
|
43
|
+
/**
|
|
44
|
+
* Test if the variable is an
|
|
45
|
+
*
|
|
46
|
+
* @param toTest
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
export declare function isInlineContentLink(toTest: any): toTest is InlineContentLinkWithLocale;
|
|
50
|
+
type Nullable<T> = {
|
|
51
|
+
[K in keyof T]?: T[K] | null;
|
|
52
|
+
} | null | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Take the normalizable value
|
|
55
|
+
*
|
|
56
|
+
* @param toNormalize
|
|
57
|
+
* @returns
|
|
58
|
+
*/
|
|
59
|
+
export declare function normalizeContentLink(toNormalize: Nullable<ContentLink | InlineContentLink>): ContentLink | InlineContentLink | undefined;
|
|
60
|
+
export declare function normalizeContentLinkWithLocale<LT = string>(toNormalize: Nullable<ContentLinkWithLocale<LT>>): ContentLinkWithLocale<LT> | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Create a textual representation of a content link
|
|
63
|
+
*
|
|
64
|
+
* @param contentLink The (inline) content link to transform to a string
|
|
65
|
+
* @param unique Set to true to ensure that this method returns a string that can be used as key
|
|
66
|
+
* @returns The textual representation of the ContentLink
|
|
67
|
+
*/
|
|
68
|
+
export declare function contentLinkToString(contentLink: ContentLink | InlineContentLink | null | undefined, unique?: boolean): string;
|
|
69
|
+
export {};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform a locale code (e.g. en-US) to a Optimizely Graph compatible locale
|
|
3
|
+
* (e.g. en_US).
|
|
4
|
+
*
|
|
5
|
+
* @param locale The locale to transform
|
|
6
|
+
* @returns The Optimizely Graph safe locale
|
|
7
|
+
*/
|
|
8
|
+
export function localeToGraphLocale(locale) {
|
|
9
|
+
if (typeof (locale) != 'string' || (locale.length != 2 && locale.length != 5))
|
|
10
|
+
throw new Error(`The value ${locale} is not a supported ISO locale`);
|
|
11
|
+
return locale.replaceAll('-', '_');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Tranform an Optimizely Graph locale (e.g. en_US) to an ISO locale (e.g. en-US)
|
|
15
|
+
*
|
|
16
|
+
* @param graphLocale The locale as supported by Optimizely Graph
|
|
17
|
+
* @returns The ISO Locale
|
|
18
|
+
*/
|
|
19
|
+
export function graphLocaleToLocale(graphLocale) {
|
|
20
|
+
if (typeof (graphLocale) != 'string' || (graphLocale.length != 2 && graphLocale.length != 5))
|
|
21
|
+
throw new Error(`The value ${graphLocale} is not a supported ISO locale`);
|
|
22
|
+
return graphLocale.replaceAll('_', '-');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if two ContentLinks point to the same content item, if either of the
|
|
26
|
+
* links set the version or locale, these values must be equal across the ContentLinks
|
|
27
|
+
*
|
|
28
|
+
* @param link1 The first compared link
|
|
29
|
+
* @param link2 The second compared link
|
|
30
|
+
* @returns True if they links point to the same content item, False otherwise
|
|
31
|
+
*/
|
|
32
|
+
export function contentLinkIsEqual(link1, link2) {
|
|
33
|
+
if (link1.key != link2.key)
|
|
34
|
+
return false;
|
|
35
|
+
if ((link1.version || link2.version) && link1.version != link2.version)
|
|
36
|
+
return false;
|
|
37
|
+
if ((link1.locale || link2.locale) && link1.locale != link2.locale)
|
|
38
|
+
return false;
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if two ContentLinks point to the same content item, if either of the
|
|
43
|
+
* links set the version or locale, these values must be equal across the ContentLinks
|
|
44
|
+
*
|
|
45
|
+
* @param link1 The first compared link
|
|
46
|
+
* @param link2 The second compared link
|
|
47
|
+
* @returns True if they links point to the same content item, False otherwise
|
|
48
|
+
*/
|
|
49
|
+
export function contentLinkIsEqualIgnoreVersion(link1, link2) {
|
|
50
|
+
if (link1.key != link2.key)
|
|
51
|
+
return false;
|
|
52
|
+
if ((link1.locale || link2.locale) && link1.locale != link2.locale)
|
|
53
|
+
return false;
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Test if the provided value can be understood as a ContentLink
|
|
58
|
+
*
|
|
59
|
+
* @param toTest The value under test
|
|
60
|
+
* @returns True if the object can be understood as a ContentLink, False otherwise
|
|
61
|
+
*/
|
|
62
|
+
export function isContentLink(toTest) {
|
|
63
|
+
// It must be an object
|
|
64
|
+
if (typeof (toTest) != 'object' || toTest == null)
|
|
65
|
+
return false;
|
|
66
|
+
// The object must have a key, string, miniumum length 1 char
|
|
67
|
+
return typeof (toTest.key) == 'string' && toTest.key.length > 0;
|
|
68
|
+
}
|
|
69
|
+
export function isContentLinkWithLocale(toTest) {
|
|
70
|
+
if (!isContentLink(toTest))
|
|
71
|
+
return false;
|
|
72
|
+
const locale = toTest.locale;
|
|
73
|
+
return locale == undefined || locale == null || (typeof (locale) == 'string' && locale.length >= 2 && locale.length <= 5);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Test if the variable is an
|
|
77
|
+
*
|
|
78
|
+
* @param toTest
|
|
79
|
+
* @returns
|
|
80
|
+
*/
|
|
81
|
+
export function isInlineContentLink(toTest) {
|
|
82
|
+
if (typeof toTest != 'object' || toTest == null)
|
|
83
|
+
return false;
|
|
84
|
+
return toTest.key == null &&
|
|
85
|
+
(toTest.version == null || toTest.version == undefined) &&
|
|
86
|
+
(typeof toTest.locale == 'string' || toTest.locale == null || toTest.locale == undefined);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Take the normalizable value
|
|
90
|
+
*
|
|
91
|
+
* @param toNormalize
|
|
92
|
+
* @returns
|
|
93
|
+
*/
|
|
94
|
+
export function normalizeContentLink(toNormalize) {
|
|
95
|
+
if (!(isContentLink(toNormalize) || isInlineContentLink(toNormalize)))
|
|
96
|
+
return undefined;
|
|
97
|
+
const newLink = {
|
|
98
|
+
key: toNormalize.key
|
|
99
|
+
};
|
|
100
|
+
if (toNormalize.version)
|
|
101
|
+
newLink.version = toNormalize.version.toString();
|
|
102
|
+
return toNormalize;
|
|
103
|
+
}
|
|
104
|
+
export function normalizeContentLinkWithLocale(toNormalize) {
|
|
105
|
+
const normalized = normalizeContentLink(toNormalize);
|
|
106
|
+
if (toNormalize?.locale != undefined && !(typeof (toNormalize?.locale) == 'string' && (toNormalize.locale.length == 2 || toNormalize.locale.length == 5)))
|
|
107
|
+
normalized.locale = toNormalize.locale;
|
|
108
|
+
return normalized;
|
|
109
|
+
}
|
|
110
|
+
function generateUniqueKey(prefix = "inline::") {
|
|
111
|
+
try {
|
|
112
|
+
return prefix + crypto.randomUUID().replaceAll('-', '');
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
console.warn("💥 Crypto library unavailable, expect key collisions");
|
|
116
|
+
return prefix + 'default';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Create a textual representation of a content link
|
|
121
|
+
*
|
|
122
|
+
* @param contentLink The (inline) content link to transform to a string
|
|
123
|
+
* @param unique Set to true to ensure that this method returns a string that can be used as key
|
|
124
|
+
* @returns The textual representation of the ContentLink
|
|
125
|
+
*/
|
|
126
|
+
export function contentLinkToString(contentLink, unique = false) {
|
|
127
|
+
if (!contentLink)
|
|
128
|
+
return unique ? generateUniqueKey('no-content::') : '[no content]';
|
|
129
|
+
return [
|
|
130
|
+
contentLink.key == null ? (unique ? generateUniqueKey() : "[inline content]") : contentLink.key,
|
|
131
|
+
contentLink.version,
|
|
132
|
+
contentLink.locale
|
|
133
|
+
].filter(x => x).join('::');
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/services/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remkoj/optimizely-graph-client",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "2.0.0-pre1",
|
|
5
5
|
"packageManager": "yarn@4.1.1",
|
|
6
6
|
"repository": "https://github.com/remkoj/optimizely-dxp-clients.git",
|
|
7
7
|
"author": "Remko Jantzen <693172+remkoj@users.noreply.github.com>",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"./router": "./dist/services/routing/index.js",
|
|
20
20
|
"./channels": "./dist/services/channel-repository/index.js",
|
|
21
21
|
"./admin": "./dist/admin-api/index.js",
|
|
22
|
-
"./codegen": "./dist/codegen.js"
|
|
22
|
+
"./codegen": "./dist/codegen.js",
|
|
23
|
+
"./utils": "./dist/services/utils.js"
|
|
23
24
|
},
|
|
24
25
|
"typesVersions": {
|
|
25
26
|
"*": {
|
|
@@ -43,18 +44,21 @@
|
|
|
43
44
|
],
|
|
44
45
|
"codegen": [
|
|
45
46
|
"dist/codegen.d.ts"
|
|
47
|
+
],
|
|
48
|
+
"utils": [
|
|
49
|
+
"./dist/services/utils.d.ts"
|
|
46
50
|
]
|
|
47
51
|
}
|
|
48
52
|
},
|
|
49
53
|
"devDependencies": {
|
|
50
54
|
"@types/crypto-js": "^4.2.2",
|
|
51
|
-
"@types/node": "^20.12.
|
|
55
|
+
"@types/node": "^20.12.7",
|
|
52
56
|
"graphql": "^16.8.1",
|
|
53
57
|
"graphql-request": "^6.1.0",
|
|
54
58
|
"openapi-typescript-codegen": "^0.29.0",
|
|
55
59
|
"prop-types": "^15.8.1",
|
|
56
60
|
"scheduler": "^0.23.0",
|
|
57
|
-
"typescript": "^5.4.
|
|
61
|
+
"typescript": "^5.4.5"
|
|
58
62
|
},
|
|
59
63
|
"dependencies": {
|
|
60
64
|
"crypto-js": "^4.2.0"
|
|
@@ -66,8 +70,9 @@
|
|
|
66
70
|
"clean": "tsc --build --clean",
|
|
67
71
|
"compile-ts": "tsc --build",
|
|
68
72
|
"prepare": "openapi --input https://cg.optimizely.com/app/swagger/swagger.json --output ./src/admin-api/client --name OptimizelyGraphAdminApi && node ./build/update-imports.cjs && tsc --build",
|
|
69
|
-
"watch": "tsc --watch",
|
|
73
|
+
"watch": "yarn tsc --watch",
|
|
70
74
|
"recompile": "tsc --build --clean && tsc --build --force",
|
|
71
75
|
"generate-admin": "openapi --input https://cg.optimizely.com/app/swagger/swagger.json --output ./src/admin-api/client --name OptimizelyGraphAdminApi && node ./build/update-imports.cjs"
|
|
72
|
-
}
|
|
76
|
+
},
|
|
77
|
+
"stableVersion": "1.0.4"
|
|
73
78
|
}
|