@datocms/cma-client 5.8.1 → 6.1.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.
- package/dist/cjs/generated/Client.js +1 -1
- package/dist/cjs/resources/Upload.js +139 -0
- package/dist/cjs/resources/Upload.js.map +1 -1
- package/dist/cjs/utilities/defaultFieldMetadata.js +130 -0
- package/dist/cjs/utilities/defaultFieldMetadata.js.map +1 -0
- package/dist/cjs/utilities/environmentSettings.js +65 -0
- package/dist/cjs/utilities/environmentSettings.js.map +1 -0
- package/dist/esm/generated/Client.js +25 -23
- package/dist/esm/generated/Client.js.map +1 -1
- package/dist/esm/generated/resources/BuildEvent.js +5 -44
- package/dist/esm/generated/resources/BuildEvent.js.map +1 -1
- package/dist/esm/generated/resources/Item.js +5 -44
- package/dist/esm/generated/resources/Item.js.map +1 -1
- package/dist/esm/generated/resources/ItemVersion.js +5 -44
- package/dist/esm/generated/resources/ItemVersion.js.map +1 -1
- package/dist/esm/generated/resources/SearchIndexEvent.js +5 -44
- package/dist/esm/generated/resources/SearchIndexEvent.js.map +1 -1
- package/dist/esm/generated/resources/SearchResult.js +5 -44
- package/dist/esm/generated/resources/SearchResult.js.map +1 -1
- package/dist/esm/generated/resources/Upload.js +5 -44
- package/dist/esm/generated/resources/Upload.js.map +1 -1
- package/dist/esm/generated/resources/UploadSmartTag.js +5 -44
- package/dist/esm/generated/resources/UploadSmartTag.js.map +1 -1
- package/dist/esm/generated/resources/UploadTag.js +5 -44
- package/dist/esm/generated/resources/UploadTag.js.map +1 -1
- package/dist/esm/generated/resources/WebhookCall.js +5 -44
- package/dist/esm/generated/resources/WebhookCall.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/resources/Role.js +23 -25
- package/dist/esm/resources/Role.js.map +1 -1
- package/dist/esm/resources/Upload.d.ts +53 -40
- package/dist/esm/resources/Upload.js +68 -0
- package/dist/esm/resources/Upload.js.map +1 -1
- package/dist/esm/utilities/buildBlockRecord.js +4 -1
- package/dist/esm/utilities/buildBlockRecord.js.map +1 -1
- package/dist/esm/utilities/defaultFieldMetadata.d.ts +84 -0
- package/dist/esm/utilities/defaultFieldMetadata.js +113 -0
- package/dist/esm/utilities/defaultFieldMetadata.js.map +1 -0
- package/dist/esm/utilities/duplicateBlockRecord.js +25 -47
- package/dist/esm/utilities/duplicateBlockRecord.js.map +1 -1
- package/dist/esm/utilities/environmentSettings.d.ts +35 -0
- package/dist/esm/utilities/environmentSettings.js +49 -0
- package/dist/esm/utilities/environmentSettings.js.map +1 -0
- package/dist/esm/utilities/inspectItem.js +1 -12
- package/dist/esm/utilities/inspectItem.js.map +1 -1
- package/dist/esm/utilities/nonRecursiveBlocks.js +109 -260
- package/dist/esm/utilities/nonRecursiveBlocks.js.map +1 -1
- package/dist/esm/utilities/normalizedFieldValues.js +30 -53
- package/dist/esm/utilities/normalizedFieldValues.js.map +1 -1
- package/dist/esm/utilities/recursiveBlocks.js +108 -131
- package/dist/esm/utilities/recursiveBlocks.js.map +1 -1
- package/dist/esm/utilities/schemaRepository.js +266 -333
- package/dist/esm/utilities/schemaRepository.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/resources/Upload.d.ts +53 -40
- package/dist/types/utilities/defaultFieldMetadata.d.ts +84 -0
- package/dist/types/utilities/environmentSettings.d.ts +35 -0
- package/package.json +3 -3
- package/src/generated/Client.ts +1 -1
- package/src/index.ts +1 -1
- package/src/resources/Upload.ts +87 -31
- package/src/utilities/defaultFieldMetadata.ts +193 -0
- package/src/utilities/environmentSettings.ts +80 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type * as ApiTypes from '../generated/ApiTypes.js';
|
|
2
|
+
import type { Client } from '../generated/Client.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Every boolean an environment reports about itself in `site.meta`: the
|
|
6
|
+
* product-update opt-ins (`improved_items_listing`, `milliseconds_in_datetime`,
|
|
7
|
+
* `non_localized_focal_points`, …) plus the plain state flags.
|
|
8
|
+
*
|
|
9
|
+
* Derived from the generated type rather than listed, so a flag added to the
|
|
10
|
+
* schema is usable here as soon as the types are regenerated, with nothing to
|
|
11
|
+
* keep in sync.
|
|
12
|
+
*/
|
|
13
|
+
export type EnvironmentFlag = {
|
|
14
|
+
[K in keyof ApiTypes.SiteMeta]-?: boolean extends ApiTypes.SiteMeta[K]
|
|
15
|
+
? K
|
|
16
|
+
: never;
|
|
17
|
+
}[keyof ApiTypes.SiteMeta];
|
|
18
|
+
|
|
19
|
+
/** How long a fetched `site` is reused before we ask again. */
|
|
20
|
+
const TTL_MS = 20 * 60 * 1000;
|
|
21
|
+
|
|
22
|
+
type Cache = { promise: Promise<ApiTypes.Site>; expiresAt: number };
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Keyed by client, so the cache covers every resource that asks and dies with
|
|
26
|
+
* the client that owns it.
|
|
27
|
+
*/
|
|
28
|
+
const caches = new WeakMap<Client, Cache>();
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* `site.find()`, memoized per client for {@link TTL_MS}.
|
|
32
|
+
*
|
|
33
|
+
* The promise is cached rather than its result, so concurrent callers share one
|
|
34
|
+
* request instead of firing one each — the difference between one lookup and
|
|
35
|
+
* ten thousand when a batch job starts. A failed lookup is not cached.
|
|
36
|
+
*
|
|
37
|
+
* Everything expires on the same clock, including flags that in practice never
|
|
38
|
+
* change back: re-reading `site` every twenty minutes costs nothing next to the
|
|
39
|
+
* work these clients are doing, and it means a client stays correct across an
|
|
40
|
+
* activation that happens while it runs.
|
|
41
|
+
*/
|
|
42
|
+
export function fetchEnvironmentSettings(
|
|
43
|
+
client: Client,
|
|
44
|
+
): Promise<ApiTypes.Site> {
|
|
45
|
+
const cached = caches.get(client);
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
|
|
48
|
+
if (cached && cached.expiresAt > now) {
|
|
49
|
+
return cached.promise;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const promise = client.site.find();
|
|
53
|
+
|
|
54
|
+
// A failed lookup must not be cached, or every later caller inherits it
|
|
55
|
+
promise.catch(() => {
|
|
56
|
+
if (caches.get(client)?.promise === promise) {
|
|
57
|
+
caches.delete(client);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
caches.set(client, { promise, expiresAt: now + TTL_MS });
|
|
62
|
+
|
|
63
|
+
return promise;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Whether a `site.meta` flag is on for the environment this client talks to.
|
|
68
|
+
*
|
|
69
|
+
* An API predating a flag omits it from the meta entirely, which the types
|
|
70
|
+
* don't admit but runtime does — so anything short of an explicit `true` reads
|
|
71
|
+
* as off.
|
|
72
|
+
*/
|
|
73
|
+
export async function isEnvironmentFlagActive(
|
|
74
|
+
client: Client,
|
|
75
|
+
flag: EnvironmentFlag,
|
|
76
|
+
): Promise<boolean> {
|
|
77
|
+
const site = await fetchEnvironmentSettings(client);
|
|
78
|
+
|
|
79
|
+
return (site.meta as Partial<ApiTypes.SiteMeta> | undefined)?.[flag] === true;
|
|
80
|
+
}
|