tinacms 2.6.0 → 2.6.1
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/client.js +71 -41
- package/dist/client.mjs +48 -30
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{node-cache-4c336858.mjs → node-cache-5e8db9f0.mjs} +23 -10
- package/dist/unifiedClient/index.d.ts +8 -1
- package/package.json +4 -3
package/dist/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function(global, factory) {
|
|
2
|
-
typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.tinacms = {}));
|
|
3
|
-
})(this, function(exports2) {
|
|
2
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("async-lock")) : typeof define === "function" && define.amd ? define(["exports", "async-lock"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.tinacms = {}, global.NOOP));
|
|
3
|
+
})(this, function(exports2, AsyncLock) {
|
|
4
4
|
"use strict";
|
|
5
5
|
const TINA_HOST = "content.tinajs.io";
|
|
6
6
|
class TinaClient {
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
if (this.cacheDir && typeof window === "undefined" && typeof require !== "undefined") {
|
|
27
27
|
const { NodeCache: NodeCache2 } = await Promise.resolve().then(() => nodeCache);
|
|
28
28
|
this.cache = await NodeCache2(this.cacheDir);
|
|
29
|
+
this.cacheLock = new AsyncLock();
|
|
29
30
|
}
|
|
30
31
|
} catch (e) {
|
|
31
32
|
console.error(e);
|
|
@@ -62,42 +63,58 @@
|
|
|
62
63
|
...providedFetchOptions
|
|
63
64
|
};
|
|
64
65
|
let key = "";
|
|
66
|
+
let result;
|
|
65
67
|
if (this.cache) {
|
|
66
68
|
key = this.cache.makeKey(bodyString);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
`Unable to fetch, please see our FAQ for more information: https://tina.io/docs/errors/faq/
|
|
86
|
-
Errors:
|
|
87
|
-
${json.errors.map((error) => error.message).join("\n")}`
|
|
69
|
+
await this.cacheLock.acquire(key, async () => {
|
|
70
|
+
result = await this.cache.get(key);
|
|
71
|
+
if (!result) {
|
|
72
|
+
result = await requestFromServer(
|
|
73
|
+
url,
|
|
74
|
+
args.query,
|
|
75
|
+
optionsObject,
|
|
76
|
+
errorPolicyDefined
|
|
77
|
+
);
|
|
78
|
+
await this.cache.set(key, result);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
} else {
|
|
82
|
+
result = await requestFromServer(
|
|
83
|
+
url,
|
|
84
|
+
args.query,
|
|
85
|
+
optionsObject,
|
|
86
|
+
errorPolicyDefined
|
|
88
87
|
);
|
|
89
88
|
}
|
|
90
|
-
const result = {
|
|
91
|
-
data: json == null ? void 0 : json.data,
|
|
92
|
-
errors: (json == null ? void 0 : json.errors) || null,
|
|
93
|
-
query: args.query
|
|
94
|
-
};
|
|
95
|
-
if (this.cache) {
|
|
96
|
-
await this.cache.set(key, result);
|
|
97
|
-
}
|
|
98
89
|
return result;
|
|
99
90
|
}
|
|
100
91
|
}
|
|
92
|
+
async function requestFromServer(url, query, optionsObject, errorPolicyDefined) {
|
|
93
|
+
const res = await fetch(url, optionsObject);
|
|
94
|
+
if (!res.ok) {
|
|
95
|
+
let additionalInfo = "";
|
|
96
|
+
if (res.status === 401) {
|
|
97
|
+
additionalInfo = "Please check that your client ID, URL and read only token are configured properly.";
|
|
98
|
+
}
|
|
99
|
+
throw new Error(
|
|
100
|
+
`Server responded with status code ${res.status}, ${res.statusText}. ${additionalInfo ? additionalInfo : ""} Please see our FAQ for more information: https://tina.io/docs/errors/faq/`
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
const json = await res.json();
|
|
104
|
+
if (json.errors && errorPolicyDefined === "throw") {
|
|
105
|
+
throw new Error(
|
|
106
|
+
`Unable to fetch, please see our FAQ for more information: https://tina.io/docs/errors/faq/
|
|
107
|
+
Errors:
|
|
108
|
+
${json.errors.map((error) => error.message).join("\n")}`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
const result = {
|
|
112
|
+
data: json == null ? void 0 : json.data,
|
|
113
|
+
errors: (json == null ? void 0 : json.errors) || null,
|
|
114
|
+
query
|
|
115
|
+
};
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
101
118
|
function createClient(args) {
|
|
102
119
|
const client = new TinaClient(args);
|
|
103
120
|
return client;
|
|
@@ -129,22 +146,35 @@
|
|
|
129
146
|
return createHash("sha256").update(input).digest("hex");
|
|
130
147
|
},
|
|
131
148
|
get: async (key) => {
|
|
149
|
+
let readValue;
|
|
150
|
+
const cacheFilename = `${cacheDir}/${key}`;
|
|
132
151
|
try {
|
|
133
|
-
const data = await fs.promises.readFile(
|
|
134
|
-
|
|
152
|
+
const data = await fs.promises.readFile(cacheFilename, "utf-8");
|
|
153
|
+
readValue = JSON.parse(data);
|
|
135
154
|
} catch (e) {
|
|
136
|
-
if (e.code
|
|
137
|
-
|
|
155
|
+
if (e.code !== "ENOENT") {
|
|
156
|
+
console.error(
|
|
157
|
+
`Failed to read cache file to ${cacheFilename}: ${e.message}`
|
|
158
|
+
);
|
|
138
159
|
}
|
|
139
|
-
throw e;
|
|
140
160
|
}
|
|
161
|
+
return readValue;
|
|
141
162
|
},
|
|
142
163
|
set: async (key, value) => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
JSON.stringify(value),
|
|
146
|
-
|
|
147
|
-
|
|
164
|
+
const cacheFilename = `${cacheDir}/${key}`;
|
|
165
|
+
try {
|
|
166
|
+
await fs.promises.writeFile(cacheFilename, JSON.stringify(value), {
|
|
167
|
+
encoding: "utf-8",
|
|
168
|
+
flag: "wx"
|
|
169
|
+
// Don't overwrite existing caches
|
|
170
|
+
});
|
|
171
|
+
} catch (e) {
|
|
172
|
+
if (e.code !== "EEXIST") {
|
|
173
|
+
console.error(
|
|
174
|
+
`Failed to write cache file to ${cacheFilename}: ${e.message}`
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
148
178
|
}
|
|
149
179
|
};
|
|
150
180
|
};
|
package/dist/client.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import AsyncLock from "async-lock";
|
|
1
2
|
const TINA_HOST = "content.tinajs.io";
|
|
2
3
|
class TinaClient {
|
|
3
4
|
constructor({
|
|
@@ -20,8 +21,9 @@ class TinaClient {
|
|
|
20
21
|
}
|
|
21
22
|
try {
|
|
22
23
|
if (this.cacheDir && typeof window === "undefined" && typeof require !== "undefined") {
|
|
23
|
-
const { NodeCache } = await import("./node-cache-
|
|
24
|
+
const { NodeCache } = await import("./node-cache-5e8db9f0.mjs");
|
|
24
25
|
this.cache = await NodeCache(this.cacheDir);
|
|
26
|
+
this.cacheLock = new AsyncLock();
|
|
25
27
|
}
|
|
26
28
|
} catch (e) {
|
|
27
29
|
console.error(e);
|
|
@@ -58,42 +60,58 @@ class TinaClient {
|
|
|
58
60
|
...providedFetchOptions
|
|
59
61
|
};
|
|
60
62
|
let key = "";
|
|
63
|
+
let result;
|
|
61
64
|
if (this.cache) {
|
|
62
65
|
key = this.cache.makeKey(bodyString);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
await this.cacheLock.acquire(key, async () => {
|
|
67
|
+
result = await this.cache.get(key);
|
|
68
|
+
if (!result) {
|
|
69
|
+
result = await requestFromServer(
|
|
70
|
+
url,
|
|
71
|
+
args.query,
|
|
72
|
+
optionsObject,
|
|
73
|
+
errorPolicyDefined
|
|
74
|
+
);
|
|
75
|
+
await this.cache.set(key, result);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
79
|
+
result = await requestFromServer(
|
|
80
|
+
url,
|
|
81
|
+
args.query,
|
|
82
|
+
optionsObject,
|
|
83
|
+
errorPolicyDefined
|
|
76
84
|
);
|
|
77
85
|
}
|
|
78
|
-
const json = await res.json();
|
|
79
|
-
if (json.errors && errorPolicyDefined === "throw") {
|
|
80
|
-
throw new Error(
|
|
81
|
-
`Unable to fetch, please see our FAQ for more information: https://tina.io/docs/errors/faq/
|
|
82
|
-
Errors:
|
|
83
|
-
${json.errors.map((error) => error.message).join("\n")}`
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
const result = {
|
|
87
|
-
data: json == null ? void 0 : json.data,
|
|
88
|
-
errors: (json == null ? void 0 : json.errors) || null,
|
|
89
|
-
query: args.query
|
|
90
|
-
};
|
|
91
|
-
if (this.cache) {
|
|
92
|
-
await this.cache.set(key, result);
|
|
93
|
-
}
|
|
94
86
|
return result;
|
|
95
87
|
}
|
|
96
88
|
}
|
|
89
|
+
async function requestFromServer(url, query, optionsObject, errorPolicyDefined) {
|
|
90
|
+
const res = await fetch(url, optionsObject);
|
|
91
|
+
if (!res.ok) {
|
|
92
|
+
let additionalInfo = "";
|
|
93
|
+
if (res.status === 401) {
|
|
94
|
+
additionalInfo = "Please check that your client ID, URL and read only token are configured properly.";
|
|
95
|
+
}
|
|
96
|
+
throw new Error(
|
|
97
|
+
`Server responded with status code ${res.status}, ${res.statusText}. ${additionalInfo ? additionalInfo : ""} Please see our FAQ for more information: https://tina.io/docs/errors/faq/`
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
const json = await res.json();
|
|
101
|
+
if (json.errors && errorPolicyDefined === "throw") {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`Unable to fetch, please see our FAQ for more information: https://tina.io/docs/errors/faq/
|
|
104
|
+
Errors:
|
|
105
|
+
${json.errors.map((error) => error.message).join("\n")}`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
const result = {
|
|
109
|
+
data: json == null ? void 0 : json.data,
|
|
110
|
+
errors: (json == null ? void 0 : json.errors) || null,
|
|
111
|
+
query
|
|
112
|
+
};
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
97
115
|
function createClient(args) {
|
|
98
116
|
const client = new TinaClient(args);
|
|
99
117
|
return client;
|
package/dist/index.js
CHANGED
|
@@ -10179,7 +10179,7 @@ flowchart TD
|
|
|
10179
10179
|
"Event Log"
|
|
10180
10180
|
));
|
|
10181
10181
|
};
|
|
10182
|
-
const version = "2.6.
|
|
10182
|
+
const version = "2.6.1";
|
|
10183
10183
|
const Nav = ({
|
|
10184
10184
|
isLocalMode,
|
|
10185
10185
|
className = "",
|
package/dist/index.mjs
CHANGED
|
@@ -10206,7 +10206,7 @@ const SyncStatus = ({ cms, setEventsOpen }) => {
|
|
|
10206
10206
|
"Event Log"
|
|
10207
10207
|
));
|
|
10208
10208
|
};
|
|
10209
|
-
const version = "2.6.
|
|
10209
|
+
const version = "2.6.1";
|
|
10210
10210
|
const Nav = ({
|
|
10211
10211
|
isLocalMode,
|
|
10212
10212
|
className = "",
|
|
@@ -25,22 +25,35 @@ const NodeCache = async (dir) => {
|
|
|
25
25
|
return createHash("sha256").update(input).digest("hex");
|
|
26
26
|
},
|
|
27
27
|
get: async (key) => {
|
|
28
|
+
let readValue;
|
|
29
|
+
const cacheFilename = `${cacheDir}/${key}`;
|
|
28
30
|
try {
|
|
29
|
-
const data = await fs.promises.readFile(
|
|
30
|
-
|
|
31
|
+
const data = await fs.promises.readFile(cacheFilename, "utf-8");
|
|
32
|
+
readValue = JSON.parse(data);
|
|
31
33
|
} catch (e) {
|
|
32
|
-
if (e.code
|
|
33
|
-
|
|
34
|
+
if (e.code !== "ENOENT") {
|
|
35
|
+
console.error(
|
|
36
|
+
`Failed to read cache file to ${cacheFilename}: ${e.message}`
|
|
37
|
+
);
|
|
34
38
|
}
|
|
35
|
-
throw e;
|
|
36
39
|
}
|
|
40
|
+
return readValue;
|
|
37
41
|
},
|
|
38
42
|
set: async (key, value) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
JSON.stringify(value),
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
const cacheFilename = `${cacheDir}/${key}`;
|
|
44
|
+
try {
|
|
45
|
+
await fs.promises.writeFile(cacheFilename, JSON.stringify(value), {
|
|
46
|
+
encoding: "utf-8",
|
|
47
|
+
flag: "wx"
|
|
48
|
+
// Don't overwrite existing caches
|
|
49
|
+
});
|
|
50
|
+
} catch (e) {
|
|
51
|
+
if (e.code !== "EEXIST") {
|
|
52
|
+
console.error(
|
|
53
|
+
`Failed to write cache file to ${cacheFilename}: ${e.message}`
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
44
57
|
}
|
|
45
58
|
};
|
|
46
59
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import AsyncLock from 'async-lock';
|
|
2
|
+
import type { GraphQLError } from 'graphql';
|
|
1
3
|
import type { Config } from '@tinacms/schema-tools';
|
|
2
4
|
import type { Cache } from '../cache/index';
|
|
3
5
|
export declare const TINA_HOST = "content.tinajs.io";
|
|
@@ -25,12 +27,17 @@ export declare class TinaClient<GenQueries> {
|
|
|
25
27
|
queries: GenQueries;
|
|
26
28
|
errorPolicy: Config['client']['errorPolicy'];
|
|
27
29
|
initialized: boolean;
|
|
30
|
+
cacheLock: AsyncLock | undefined;
|
|
28
31
|
cacheDir: string;
|
|
29
32
|
cache: Cache;
|
|
30
33
|
constructor({ token, url, queries, errorPolicy, cacheDir, }: TinaClientArgs<GenQueries>);
|
|
31
34
|
init(): Promise<void>;
|
|
32
35
|
request<DataType extends Record<string, any> = any>({ errorPolicy, ...args }: TinaClientRequestArgs, options: {
|
|
33
36
|
fetchOptions?: Parameters<typeof fetch>[1];
|
|
34
|
-
}): Promise<
|
|
37
|
+
}): Promise<{
|
|
38
|
+
data: DataType;
|
|
39
|
+
errors: GraphQLError[] | null;
|
|
40
|
+
query: string;
|
|
41
|
+
}>;
|
|
35
42
|
}
|
|
36
43
|
export declare function createClient<GenQueries>(args: TinaClientArgs<GenQueries>): TinaClient<GenQueries>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinacms",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"exports": {
|
|
@@ -92,6 +92,7 @@
|
|
|
92
92
|
"@udecode/plate-resizable": "36.0.0",
|
|
93
93
|
"@udecode/plate-slash-command": "^36.0.0",
|
|
94
94
|
"@udecode/plate-table": "36.5.8",
|
|
95
|
+
"async-lock": "^1.4.1",
|
|
95
96
|
"class-variance-authority": "^0.7.0",
|
|
96
97
|
"clsx": "^2.1.1",
|
|
97
98
|
"cmdk": "^1.0.4",
|
|
@@ -129,8 +130,8 @@
|
|
|
129
130
|
"yup": "^1.4.0",
|
|
130
131
|
"zod": "^3.23.8",
|
|
131
132
|
"@tinacms/mdx": "1.5.4",
|
|
132
|
-
"@tinacms/
|
|
133
|
-
"@tinacms/
|
|
133
|
+
"@tinacms/search": "1.0.37",
|
|
134
|
+
"@tinacms/schema-tools": "1.7.0"
|
|
134
135
|
},
|
|
135
136
|
"devDependencies": {
|
|
136
137
|
"@graphql-tools/utils": "^10.5.6",
|