@tinacms/cli 1.6.13 → 1.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.
package/dist/index.js
CHANGED
|
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
19
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
24
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
25
|
mod
|
|
22
26
|
));
|
|
@@ -31,7 +35,7 @@ module.exports = __toCommonJS(src_exports);
|
|
|
31
35
|
var import_clipanion8 = require("clipanion");
|
|
32
36
|
|
|
33
37
|
// package.json
|
|
34
|
-
var version = "1.
|
|
38
|
+
var version = "1.8.0";
|
|
35
39
|
|
|
36
40
|
// src/next/commands/dev-command/index.ts
|
|
37
41
|
var import_clipanion2 = require("clipanion");
|
|
@@ -57,7 +61,10 @@ function isUnicodeSupported() {
|
|
|
57
61
|
if (process.platform !== "win32") {
|
|
58
62
|
return process.env.TERM !== "linux";
|
|
59
63
|
}
|
|
60
|
-
return Boolean(process.env.CI) || Boolean(process.env.WT_SESSION) ||
|
|
64
|
+
return Boolean(process.env.CI) || Boolean(process.env.WT_SESSION) || // Windows Terminal
|
|
65
|
+
Boolean(process.env.TERMINUS_SUBLIME) || // Terminus (<0.2.27)
|
|
66
|
+
process.env.ConEmuTask === "{cmd::Cmder}" || // ConEmu and cmder
|
|
67
|
+
process.env.TERM_PROGRAM === "Terminus-Sublime" || process.env.TERM_PROGRAM === "vscode" || process.env.TERM === "xterm-256color" || process.env.TERM === "alacritty" || process.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
|
|
61
68
|
}
|
|
62
69
|
|
|
63
70
|
// src/logger/index.ts
|
|
@@ -212,7 +219,7 @@ var ConfigManager = class {
|
|
|
212
219
|
this.generatedCachePath = import_path.default.join(
|
|
213
220
|
this.generatedFolderPath,
|
|
214
221
|
".cache",
|
|
215
|
-
String(new Date().getTime())
|
|
222
|
+
String((/* @__PURE__ */ new Date()).getTime())
|
|
216
223
|
);
|
|
217
224
|
this.generatedGraphQLGQLPath = import_path.default.join(
|
|
218
225
|
this.generatedFolderPath,
|
|
@@ -355,17 +362,22 @@ var ConfigManager = class {
|
|
|
355
362
|
);
|
|
356
363
|
}
|
|
357
364
|
getTinaGraphQLVersion() {
|
|
358
|
-
var _a, _b;
|
|
359
365
|
if (this.tinaGraphQLVersionFromCLI) {
|
|
360
|
-
|
|
366
|
+
const version2 = this.tinaGraphQLVersionFromCLI.split(".");
|
|
367
|
+
return {
|
|
368
|
+
fullVersion: this.tinaGraphQLVersionFromCLI,
|
|
369
|
+
major: version2[0] || "x",
|
|
370
|
+
minor: version2[1] || "x",
|
|
371
|
+
patch: version2[2] || "x"
|
|
372
|
+
};
|
|
361
373
|
}
|
|
362
374
|
const generatedSchema = import_fs_extra.default.readJSONSync(this.generatedSchemaJSONPath);
|
|
363
|
-
if (!generatedSchema || !(typeof (generatedSchema == null ? void 0 : generatedSchema.version) !== "undefined")
|
|
375
|
+
if (!generatedSchema || !(typeof (generatedSchema == null ? void 0 : generatedSchema.version) !== "undefined")) {
|
|
364
376
|
throw new Error(
|
|
365
377
|
`Can not find Tina GraphQL version in ${this.generatedSchemaJSONPath}`
|
|
366
378
|
);
|
|
367
379
|
}
|
|
368
|
-
return
|
|
380
|
+
return generatedSchema.version;
|
|
369
381
|
}
|
|
370
382
|
printGeneratedClientFilePath() {
|
|
371
383
|
if (this.isUsingTs()) {
|
|
@@ -394,6 +406,9 @@ var ConfigManager = class {
|
|
|
394
406
|
}
|
|
395
407
|
throw `No path provided to print`;
|
|
396
408
|
}
|
|
409
|
+
/**
|
|
410
|
+
* Given a filepath without an extension, find the first match (eg. tsx, ts, jsx, js)
|
|
411
|
+
*/
|
|
397
412
|
async getPathWithExtension(filepath) {
|
|
398
413
|
const extensions = ["tsx", "ts", "jsx", "js"];
|
|
399
414
|
let result;
|
|
@@ -427,7 +442,10 @@ var ConfigManager = class {
|
|
|
427
442
|
}
|
|
428
443
|
async loadConfigFile(generatedFolderPath, configFilePath) {
|
|
429
444
|
const tmpdir = import_path.default.join(import_os.default.tmpdir(), Date.now().toString());
|
|
430
|
-
const
|
|
445
|
+
const preBuildConfigPath = import_path.default.join(
|
|
446
|
+
this.generatedFolderPath,
|
|
447
|
+
"config.prebuild.jsx"
|
|
448
|
+
);
|
|
431
449
|
const outfile = import_path.default.join(tmpdir, "config.build.jsx");
|
|
432
450
|
const outfile2 = import_path.default.join(tmpdir, "config.build.js");
|
|
433
451
|
const tempTSConfigFile = import_path.default.join(tmpdir, "tsconfig.json");
|
|
@@ -441,7 +459,7 @@ var ConfigManager = class {
|
|
|
441
459
|
logLevel: "silent",
|
|
442
460
|
packages: "external",
|
|
443
461
|
ignoreAnnotations: true,
|
|
444
|
-
outfile:
|
|
462
|
+
outfile: preBuildConfigPath,
|
|
445
463
|
loader: loaders,
|
|
446
464
|
metafile: true
|
|
447
465
|
});
|
|
@@ -464,6 +482,7 @@ var ConfigManager = class {
|
|
|
464
482
|
await esbuild.build({
|
|
465
483
|
entryPoints: [outfile],
|
|
466
484
|
bundle: true,
|
|
485
|
+
// Suppress warning about comparison with -0 from client module
|
|
467
486
|
logLevel: "silent",
|
|
468
487
|
platform: "node",
|
|
469
488
|
outfile: outfile2,
|
|
@@ -481,7 +500,7 @@ var ConfigManager = class {
|
|
|
481
500
|
import_fs_extra.default.removeSync(outfile2);
|
|
482
501
|
return {
|
|
483
502
|
config: result.default,
|
|
484
|
-
prebuildPath:
|
|
503
|
+
prebuildPath: preBuildConfigPath,
|
|
485
504
|
watchList: flattenedList
|
|
486
505
|
};
|
|
487
506
|
}
|
|
@@ -570,19 +589,19 @@ var devHTML = (port) => `<!DOCTYPE html>
|
|
|
570
589
|
window.$RefreshReg$ = () => {}
|
|
571
590
|
window.$RefreshSig$ = () => (type) => type
|
|
572
591
|
window.__vite_plugin_react_preamble_installed__ = true
|
|
573
|
-
|
|
574
|
-
<script type="module" src="http://localhost:${port}/@vite/client"
|
|
592
|
+
</script>
|
|
593
|
+
<script type="module" src="http://localhost:${port}/@vite/client"></script>
|
|
575
594
|
<script>
|
|
576
595
|
function handleLoadError() {
|
|
577
596
|
// Assets have failed to load
|
|
578
597
|
document.getElementById('root').innerHTML = '${errorHTML}';
|
|
579
598
|
}
|
|
580
|
-
|
|
599
|
+
</script>
|
|
581
600
|
<script
|
|
582
601
|
type="module"
|
|
583
602
|
src="http://localhost:${port}/src/main.tsx"
|
|
584
603
|
onerror="handleLoadError()"
|
|
585
|
-
|
|
604
|
+
></script>
|
|
586
605
|
<body class="tina-tailwind">
|
|
587
606
|
<div id="root"></div>
|
|
588
607
|
</body>
|
|
@@ -628,6 +647,7 @@ var import_defaultTheme = __toESM(require("tailwindcss/defaultTheme.js"));
|
|
|
628
647
|
var tinaTailwind = (spaPath, prebuildFilePath) => {
|
|
629
648
|
return {
|
|
630
649
|
name: "vite-plugin-tina",
|
|
650
|
+
// @ts-ignore
|
|
631
651
|
config: (viteConfig) => {
|
|
632
652
|
const plugins = [];
|
|
633
653
|
const content = [
|
|
@@ -939,7 +959,6 @@ async function listFilesRecursively({
|
|
|
939
959
|
}
|
|
940
960
|
var createConfig = async ({
|
|
941
961
|
configManager,
|
|
942
|
-
database,
|
|
943
962
|
apiURL,
|
|
944
963
|
plugins = [],
|
|
945
964
|
noWatch,
|
|
@@ -999,6 +1018,8 @@ var createConfig = async ({
|
|
|
999
1018
|
if (configManager.config.build.basePath) {
|
|
1000
1019
|
basePath = configManager.config.build.basePath;
|
|
1001
1020
|
}
|
|
1021
|
+
const fullVersion = configManager.getTinaGraphQLVersion();
|
|
1022
|
+
const version2 = `${fullVersion.major}.${fullVersion.minor}`;
|
|
1002
1023
|
const config2 = {
|
|
1003
1024
|
root: configManager.spaRootPath,
|
|
1004
1025
|
base: `/${basePath ? `${(0, import_normalize_path2.default)(basePath)}/` : ""}${(0, import_normalize_path2.default)(
|
|
@@ -1010,15 +1031,33 @@ var createConfig = async ({
|
|
|
1010
1031
|
dedupe: ["graphql", "tinacms", "react", "react-dom", "react-router-dom"]
|
|
1011
1032
|
},
|
|
1012
1033
|
define: {
|
|
1034
|
+
/**
|
|
1035
|
+
* Since we prebuild the config.ts, it's possible for modules to be loaded which make
|
|
1036
|
+
* use of `process`. The main scenario where this is an issue is when co-locating schema
|
|
1037
|
+
* definitions with source files, and specifically source files which impor from NextJS.
|
|
1038
|
+
*
|
|
1039
|
+
* Some examples of what NextJS uses for `process.env` are:
|
|
1040
|
+
* - `process.env.__NEXT_TRAILING_SLASH`
|
|
1041
|
+
* - `process.env.__NEXT_CROSS_ORIGIN`
|
|
1042
|
+
* - `process.env.__NEXT_I18N_SUPPORT`
|
|
1043
|
+
*
|
|
1044
|
+
* Also, interestingly some of the advice for handling this doesn't work, references to replacing
|
|
1045
|
+
* `process.env` with `{}` are problematic, because browsers don't understand the `{}.` syntax,
|
|
1046
|
+
* but node does. This was a surprise, but using `new Object()` seems to do the trick.
|
|
1047
|
+
*/
|
|
1013
1048
|
"process.env": `new Object(${JSON.stringify(publicEnv)})`,
|
|
1049
|
+
// Used by picomatch https://github.com/micromatch/picomatch/blob/master/lib/utils.js#L4
|
|
1014
1050
|
"process.platform": `"${process.platform}"`,
|
|
1015
1051
|
__API_URL__: `"${apiURL}"`,
|
|
1016
1052
|
__BASE_PATH__: `"${((_e = (_d = configManager.config) == null ? void 0 : _d.build) == null ? void 0 : _e.basePath) || ""}"`,
|
|
1017
|
-
__TINA_GRAPHQL_VERSION__:
|
|
1053
|
+
__TINA_GRAPHQL_VERSION__: version2
|
|
1018
1054
|
},
|
|
1019
1055
|
logLevel: "error",
|
|
1056
|
+
// Vite import warnings are noisy
|
|
1020
1057
|
optimizeDeps: {
|
|
1021
1058
|
force: true,
|
|
1059
|
+
// Not 100% sure why this isn't being picked up automatically, this works from within the monorepo
|
|
1060
|
+
// but breaks externally
|
|
1022
1061
|
include: ["react/jsx-runtime", "react/jsx-dev-runtime"]
|
|
1023
1062
|
},
|
|
1024
1063
|
server: {
|
|
@@ -1026,6 +1065,7 @@ var createConfig = async ({
|
|
|
1026
1065
|
watch: noWatch ? {
|
|
1027
1066
|
ignored: ["**/*"]
|
|
1028
1067
|
} : {
|
|
1068
|
+
// Ignore everything except for the alias fields we specified above
|
|
1029
1069
|
ignored: [
|
|
1030
1070
|
`${configManager.tinaFolderPath}/**/!(config.prebuild.jsx|_graphql.json)`
|
|
1031
1071
|
]
|
|
@@ -1041,8 +1081,13 @@ var createConfig = async ({
|
|
|
1041
1081
|
rollupOptions
|
|
1042
1082
|
},
|
|
1043
1083
|
plugins: [
|
|
1084
|
+
/**
|
|
1085
|
+
* `splitVendorChunkPlugin` is needed because `tinacms` is quite large,
|
|
1086
|
+
* Vite's chunking strategy chokes on memory issues for smaller machines (ie. on CI).
|
|
1087
|
+
*/
|
|
1044
1088
|
(0, import_plugin_react.default)({
|
|
1045
1089
|
babel: {
|
|
1090
|
+
// Supresses the warning [NOTE] babel The code generator has deoptimised the styling of
|
|
1046
1091
|
compact: true
|
|
1047
1092
|
}
|
|
1048
1093
|
}),
|
|
@@ -1119,8 +1164,7 @@ var createMediaRouter = (config2) => {
|
|
|
1119
1164
|
};
|
|
1120
1165
|
var parseMediaFolder = (str) => {
|
|
1121
1166
|
let returnString = str;
|
|
1122
|
-
if (returnString.startsWith("/"))
|
|
1123
|
-
returnString = returnString.substr(1);
|
|
1167
|
+
if (returnString.startsWith("/")) returnString = returnString.substr(1);
|
|
1124
1168
|
if (returnString.endsWith("/"))
|
|
1125
1169
|
returnString = returnString.substr(0, returnString.length - 1);
|
|
1126
1170
|
return returnString;
|
|
@@ -1387,6 +1431,7 @@ function viteTransformExtension({
|
|
|
1387
1431
|
return {
|
|
1388
1432
|
code: res.code,
|
|
1389
1433
|
map: null
|
|
1434
|
+
// TODO:
|
|
1390
1435
|
};
|
|
1391
1436
|
}
|
|
1392
1437
|
}
|
|
@@ -1407,6 +1452,14 @@ var createDevServer = async (configManager, database, searchIndex, apiURL, noWat
|
|
|
1407
1452
|
apiURL,
|
|
1408
1453
|
plugins,
|
|
1409
1454
|
noWatch,
|
|
1455
|
+
/**
|
|
1456
|
+
* Ensure Vite's import scan uses the spaMainPath as the input
|
|
1457
|
+
* so it properly finds everything. This is for dev only, and when
|
|
1458
|
+
* running the server outside of this monorepo vite fails to find
|
|
1459
|
+
* and optimize the imports, so you get errors about it not being
|
|
1460
|
+
* able to find an export from a module, and it's always a CJS
|
|
1461
|
+
* module that Vite would usually transform to an ES module.
|
|
1462
|
+
*/
|
|
1410
1463
|
rollupOptions: {
|
|
1411
1464
|
input: configManager.spaMainPath,
|
|
1412
1465
|
onwarn(warning, warn) {
|
|
@@ -1532,6 +1585,7 @@ var GenericSdkVisitor = class extends import_visitor_plugin_common.ClientSideBas
|
|
|
1532
1585
|
node,
|
|
1533
1586
|
documentVariableName,
|
|
1534
1587
|
operationType,
|
|
1588
|
+
// This is the only line that is different
|
|
1535
1589
|
operationResultType: `{data: ${operationResultType}, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: ${operationVariablesTypes}, query: string}`,
|
|
1536
1590
|
operationVariablesTypes
|
|
1537
1591
|
});
|
|
@@ -1580,6 +1634,8 @@ var plugin = (schema, documents, config2) => {
|
|
|
1580
1634
|
const visitor = new GenericSdkVisitor(schema, allFragments, config2);
|
|
1581
1635
|
const visitorResult = (0, import_graphql3.visit)(allAst, { leave: visitor });
|
|
1582
1636
|
return {
|
|
1637
|
+
// We will take care of imports
|
|
1638
|
+
// prepend: visitor.getImports(),
|
|
1583
1639
|
content: [
|
|
1584
1640
|
visitor.fragments,
|
|
1585
1641
|
...visitorResult.definitions.filter((t) => typeof t === "string"),
|
|
@@ -1595,6 +1651,7 @@ var generateTypes = async (schema, queryPathGlob = process.cwd(), fragDocPath =
|
|
|
1595
1651
|
docs = await loadGraphQLDocuments(queryPathGlob);
|
|
1596
1652
|
fragDocs = await loadGraphQLDocuments(fragDocPath);
|
|
1597
1653
|
const res = await (0, import_core.codegen)({
|
|
1654
|
+
// Filename is not used. This is because the typescript plugin returns a string instead of writing to a file.
|
|
1598
1655
|
filename: process.cwd(),
|
|
1599
1656
|
schema: (0, import_graphql5.parse)((0, import_graphql5.printSchema)(schema)),
|
|
1600
1657
|
documents: [...docs, ...fragDocs],
|
|
@@ -1629,9 +1686,12 @@ var loadGraphQLDocuments = async (globPath) => {
|
|
|
1629
1686
|
loaders: [new import_graphql_file_loader.GraphQLFileLoader()]
|
|
1630
1687
|
});
|
|
1631
1688
|
} catch (e) {
|
|
1632
|
-
if (
|
|
1633
|
-
|
|
1634
|
-
|
|
1689
|
+
if (
|
|
1690
|
+
// https://www.graphql-tools.com/docs/documents-loading#no-files-found
|
|
1691
|
+
(e.message || "").includes(
|
|
1692
|
+
"Unable to find any GraphQL type definitions for the following pointers:"
|
|
1693
|
+
)
|
|
1694
|
+
) {
|
|
1635
1695
|
} else {
|
|
1636
1696
|
throw e;
|
|
1637
1697
|
}
|
|
@@ -1788,16 +1848,14 @@ var Codegen = class {
|
|
|
1788
1848
|
const branch = (_a = this.configManager.config) == null ? void 0 : _a.branch;
|
|
1789
1849
|
const clientId = (_b = this.configManager.config) == null ? void 0 : _b.clientId;
|
|
1790
1850
|
const token = (_c = this.configManager.config) == null ? void 0 : _c.token;
|
|
1791
|
-
const
|
|
1851
|
+
const fullVersion = this.configManager.getTinaGraphQLVersion();
|
|
1852
|
+
const version2 = `${fullVersion.major}.${fullVersion.minor}`;
|
|
1792
1853
|
const baseUrl = ((_d = this.configManager.config.tinaioConfig) == null ? void 0 : _d.contentApiUrlOverride) || `https://${TINA_HOST}`;
|
|
1793
1854
|
if ((!branch || !clientId || !token) && !this.port && !this.configManager.config.contentApiUrlOverride) {
|
|
1794
1855
|
const missing = [];
|
|
1795
|
-
if (!branch)
|
|
1796
|
-
|
|
1797
|
-
if (!
|
|
1798
|
-
missing.push("clientId");
|
|
1799
|
-
if (!token)
|
|
1800
|
-
missing.push("token");
|
|
1856
|
+
if (!branch) missing.push("branch");
|
|
1857
|
+
if (!clientId) missing.push("clientId");
|
|
1858
|
+
if (!token) missing.push("token");
|
|
1801
1859
|
throw new Error(
|
|
1802
1860
|
`Client not configured properly. Missing ${missing.join(
|
|
1803
1861
|
", "
|
|
@@ -1951,7 +2009,11 @@ schema {
|
|
|
1951
2009
|
}
|
|
1952
2010
|
};
|
|
1953
2011
|
var maybeWarnFragmentSize = async (filepath) => {
|
|
1954
|
-
if (
|
|
2012
|
+
if (
|
|
2013
|
+
// is the file bigger than 100kb?
|
|
2014
|
+
(await import_fs_extra4.default.stat(filepath)).size > // convert to 100 kb to bytes
|
|
2015
|
+
100 * 1024
|
|
2016
|
+
) {
|
|
1955
2017
|
console.warn(
|
|
1956
2018
|
"Warning: frags.gql is very large (>100kb). Consider setting the reference depth to 1 or 0. See code snippet below."
|
|
1957
2019
|
);
|
|
@@ -1979,6 +2041,7 @@ var import_many_level = require("many-level");
|
|
|
1979
2041
|
var import_memory_level = require("memory-level");
|
|
1980
2042
|
var createDBServer = (port) => {
|
|
1981
2043
|
const levelHost = new import_many_level.ManyLevelHost(
|
|
2044
|
+
// @ts-ignore
|
|
1982
2045
|
new import_memory_level.MemoryLevel({
|
|
1983
2046
|
valueEncoding: "json"
|
|
1984
2047
|
})
|
|
@@ -2253,6 +2316,7 @@ var import_search = require("@tinacms/search");
|
|
|
2253
2316
|
var DevCommand = class extends BaseCommand {
|
|
2254
2317
|
constructor() {
|
|
2255
2318
|
super(...arguments);
|
|
2319
|
+
// NOTE: camelCase commands for string options don't work if there's an `=` used https://github.com/arcanis/clipanion/issues/141
|
|
2256
2320
|
this.watchFolders = import_clipanion2.Option.String("-w,--watchFolders", {
|
|
2257
2321
|
description: "DEPRECATED - a list of folders (relative to where this is being run) that the cli will watch for changes"
|
|
2258
2322
|
});
|
|
@@ -2471,6 +2535,20 @@ ${dangerText(e.message)}
|
|
|
2471
2535
|
heading: "Tina Dev Server is running...",
|
|
2472
2536
|
items: [
|
|
2473
2537
|
...summaryItems
|
|
2538
|
+
// {
|
|
2539
|
+
// emoji: '📚',
|
|
2540
|
+
// heading: 'Useful links',
|
|
2541
|
+
// subItems: [
|
|
2542
|
+
// {
|
|
2543
|
+
// key: 'Custom queries',
|
|
2544
|
+
// value: 'https://tina.io/querying',
|
|
2545
|
+
// },
|
|
2546
|
+
// {
|
|
2547
|
+
// key: 'Visual editing',
|
|
2548
|
+
// value: 'https://tina.io/visual-editing',
|
|
2549
|
+
// },
|
|
2550
|
+
// ],
|
|
2551
|
+
// },
|
|
2474
2552
|
]
|
|
2475
2553
|
});
|
|
2476
2554
|
await this.startSubCommand();
|
|
@@ -2582,7 +2660,7 @@ var buildProductionSpa = async (configManager, database, apiURL) => {
|
|
|
2582
2660
|
// src/next/commands/build-command/index.ts
|
|
2583
2661
|
var import_schema_tools2 = require("@tinacms/schema-tools");
|
|
2584
2662
|
var import_graphql12 = require("graphql");
|
|
2585
|
-
var
|
|
2663
|
+
var import_core3 = require("@graphql-inspector/core");
|
|
2586
2664
|
|
|
2587
2665
|
// src/next/commands/build-command/waitForDB.ts
|
|
2588
2666
|
var import_progress = __toESM(require("progress"));
|
|
@@ -2684,6 +2762,20 @@ var waitForDB = async (config2, apiUrl, previewName, verbose) => {
|
|
|
2684
2762
|
|
|
2685
2763
|
// src/next/commands/build-command/index.ts
|
|
2686
2764
|
var import_search2 = require("@tinacms/search");
|
|
2765
|
+
|
|
2766
|
+
// src/utils/index.ts
|
|
2767
|
+
var import_core2 = require("@graphql-inspector/core");
|
|
2768
|
+
var getFaqLink = (type) => {
|
|
2769
|
+
switch (type) {
|
|
2770
|
+
case import_core2.ChangeType.FieldRemoved: {
|
|
2771
|
+
return "https://tina.io/docs/introduction/faq#how-do-i-resolve-the-local-graphql-schema-doesnt-match-the-remote-graphql-schema-errors";
|
|
2772
|
+
}
|
|
2773
|
+
default:
|
|
2774
|
+
return null;
|
|
2775
|
+
}
|
|
2776
|
+
};
|
|
2777
|
+
|
|
2778
|
+
// src/next/commands/build-command/index.ts
|
|
2687
2779
|
var BuildCommand = class extends BaseCommand {
|
|
2688
2780
|
constructor() {
|
|
2689
2781
|
super(...arguments);
|
|
@@ -2699,6 +2791,9 @@ var BuildCommand = class extends BaseCommand {
|
|
|
2699
2791
|
this.tinaGraphQLVersion = import_clipanion3.Option.String("--tina-graphql-version", {
|
|
2700
2792
|
description: "Specify the version of @tinacms/graphql to use (defaults to latest)"
|
|
2701
2793
|
});
|
|
2794
|
+
/**
|
|
2795
|
+
* This option allows the user to skip the tina cloud checks if they want to. This could be useful for mismatched GraphQL versions or if they want to build only using the local client and never connect to Tina Cloud
|
|
2796
|
+
*/
|
|
2702
2797
|
this.skipCloudChecks = import_clipanion3.Option.Boolean("--skip-cloud-checks", false, {
|
|
2703
2798
|
description: "Skips checking the provided cloud config."
|
|
2704
2799
|
});
|
|
@@ -3113,7 +3208,7 @@ ${dangerText(e.message)}
|
|
|
3113
3208
|
);
|
|
3114
3209
|
const { config: config2 } = configManager;
|
|
3115
3210
|
const token = config2.token;
|
|
3116
|
-
const { remoteSchema,
|
|
3211
|
+
const { remoteSchema, remoteProjectVersion } = await fetchRemoteGraphqlSchema({
|
|
3117
3212
|
url: apiURL,
|
|
3118
3213
|
token
|
|
3119
3214
|
});
|
|
@@ -3133,7 +3228,7 @@ Additional info: Branch: ${config2.branch}, Client ID: ${config2.clientId} `;
|
|
|
3133
3228
|
const localSchemaDocument = await database.getGraphQLSchemaFromBridge();
|
|
3134
3229
|
const localGraphqlSchema = (0, import_graphql12.buildASTSchema)(localSchemaDocument);
|
|
3135
3230
|
try {
|
|
3136
|
-
const diffResult = await (0,
|
|
3231
|
+
const diffResult = await (0, import_core3.diff)(localGraphqlSchema, remoteGqlSchema);
|
|
3137
3232
|
if (diffResult.length === 0) {
|
|
3138
3233
|
bar2.tick({
|
|
3139
3234
|
prog: "\u2705"
|
|
@@ -3142,21 +3237,29 @@ Additional info: Branch: ${config2.branch}, Client ID: ${config2.clientId} `;
|
|
|
3142
3237
|
bar2.tick({
|
|
3143
3238
|
prog: "\u274C"
|
|
3144
3239
|
});
|
|
3145
|
-
|
|
3240
|
+
const type = diffResult[0].type;
|
|
3241
|
+
const reason = diffResult[0].message;
|
|
3242
|
+
const errorLevel = diffResult[0].criticality.level;
|
|
3243
|
+
const faqLink = getFaqLink(type);
|
|
3244
|
+
const tinaGraphQLVersion = configManager.getTinaGraphQLVersion();
|
|
3245
|
+
let errorMessage = `The local GraphQL schema doesn't match the remote GraphQL schema. Please push up your changes to GitHub to update your remote GraphQL schema. ${faqLink && `
|
|
3246
|
+
Check out '${faqLink}' for possible solutions.`}`;
|
|
3146
3247
|
errorMessage += `
|
|
3147
3248
|
|
|
3148
3249
|
Additional info:
|
|
3149
3250
|
|
|
3150
3251
|
`;
|
|
3151
3252
|
if (config2 == null ? void 0 : config2.branch) {
|
|
3152
|
-
errorMessage += `
|
|
3253
|
+
errorMessage += ` Branch: ${config2.branch}, Client ID: ${config2.clientId}
|
|
3153
3254
|
`;
|
|
3154
3255
|
}
|
|
3155
|
-
errorMessage += `
|
|
3256
|
+
errorMessage += ` Local GraphQL version: ${tinaGraphQLVersion.fullVersion} / Remote GraphQL version: ${remoteProjectVersion}
|
|
3156
3257
|
`;
|
|
3157
|
-
errorMessage += `
|
|
3258
|
+
errorMessage += ` Last indexed at: ${new Date(
|
|
3158
3259
|
timestamp
|
|
3159
3260
|
).toUTCString()}
|
|
3261
|
+
`;
|
|
3262
|
+
errorMessage += ` Reason: [${errorLevel} - ${type}] ${reason}
|
|
3160
3263
|
`;
|
|
3161
3264
|
throw new Error(errorMessage);
|
|
3162
3265
|
}
|
|
@@ -3305,7 +3408,8 @@ var fetchRemoteGraphqlSchema = async ({
|
|
|
3305
3408
|
const data = await res.json();
|
|
3306
3409
|
return {
|
|
3307
3410
|
remoteSchema: data == null ? void 0 : data.data,
|
|
3308
|
-
|
|
3411
|
+
remoteRuntimeVersion: res.headers.get("tinacms-grapqhl-version"),
|
|
3412
|
+
remoteProjectVersion: res.headers.get("tinacms-graphql-project-version")
|
|
3309
3413
|
};
|
|
3310
3414
|
};
|
|
3311
3415
|
var fetchSchemaSha = async ({
|
|
@@ -3430,6 +3534,7 @@ var auditDocuments = async (args) => {
|
|
|
3430
3534
|
logger.error(import_chalk5.default.red(err.message));
|
|
3431
3535
|
if (err.originalError.originalError) {
|
|
3432
3536
|
logger.error(
|
|
3537
|
+
// @ts-ignore FIXME: this doesn't seem right
|
|
3433
3538
|
import_chalk5.default.red(` ${err.originalError.originalError.message}`)
|
|
3434
3539
|
);
|
|
3435
3540
|
}
|
|
@@ -3635,7 +3740,9 @@ var detectEnvironment = async ({
|
|
|
3635
3740
|
const usingSrc = import_fs_extra8.default.pathExistsSync(import_path7.default.join(baseDir, "src")) && (import_fs_extra8.default.pathExistsSync(import_path7.default.join(baseDir, "src", "app")) || import_fs_extra8.default.pathExistsSync(import_path7.default.join(baseDir, "src", "pages")));
|
|
3636
3741
|
const tinaFolder = import_path7.default.join(baseDir, "tina");
|
|
3637
3742
|
const tinaConfigExists = Boolean(
|
|
3638
|
-
|
|
3743
|
+
// Does the tina folder exist?
|
|
3744
|
+
await import_fs_extra8.default.pathExists(tinaFolder) && // Does the tina folder contain a config file?
|
|
3745
|
+
(await import_fs_extra8.default.readdir(tinaFolder)).find((x) => x.includes("config"))
|
|
3639
3746
|
);
|
|
3640
3747
|
const pagesDir = [baseDir, usingSrc ? "src" : false, "pages"].filter(
|
|
3641
3748
|
Boolean
|
|
@@ -3870,6 +3977,7 @@ var supportedDatabaseAdapters = {
|
|
|
3870
3977
|
{
|
|
3871
3978
|
from: "mongodb",
|
|
3872
3979
|
imported: [],
|
|
3980
|
+
// not explicitly imported
|
|
3873
3981
|
packageName: "mongodb"
|
|
3874
3982
|
}
|
|
3875
3983
|
]
|
|
@@ -3942,6 +4050,10 @@ var chooseDatabaseAdapter = async ({
|
|
|
3942
4050
|
title: "MongoDB",
|
|
3943
4051
|
value: "mongodb"
|
|
3944
4052
|
}
|
|
4053
|
+
// {
|
|
4054
|
+
// title: "I'll create my own database adapter",
|
|
4055
|
+
// value: 'other',
|
|
4056
|
+
// },
|
|
3945
4057
|
]
|
|
3946
4058
|
}
|
|
3947
4059
|
]);
|
|
@@ -4219,6 +4331,7 @@ async function configure(env, opts) {
|
|
|
4219
4331
|
packageManager,
|
|
4220
4332
|
forestryMigrate: false,
|
|
4221
4333
|
isLocalEnvVarName: "TINA_PUBLIC_IS_LOCAL",
|
|
4334
|
+
// TODO: give this a better default
|
|
4222
4335
|
typescript: false
|
|
4223
4336
|
};
|
|
4224
4337
|
if (config2.framework.name === "next") {
|
|
@@ -4322,15 +4435,25 @@ var import_js_yaml = __toESM(require("js-yaml"));
|
|
|
4322
4435
|
var import_zod = __toESM(require("zod"));
|
|
4323
4436
|
|
|
4324
4437
|
// src/cmds/forestry-migrate/util/errorSingleton.ts
|
|
4325
|
-
var ErrorSingleton = class {
|
|
4438
|
+
var ErrorSingleton = class _ErrorSingleton {
|
|
4439
|
+
/**
|
|
4440
|
+
* The Singleton's constructor should always be private to prevent direct
|
|
4441
|
+
* construction calls with the `new` operator.
|
|
4442
|
+
*/
|
|
4326
4443
|
constructor() {
|
|
4327
4444
|
}
|
|
4445
|
+
/**
|
|
4446
|
+
* The static method that controls the access to the singleton instance.
|
|
4447
|
+
*
|
|
4448
|
+
* This implementation let you subclass the Singleton class while keeping
|
|
4449
|
+
* just one instance of each subclass around.
|
|
4450
|
+
*/
|
|
4328
4451
|
static getInstance() {
|
|
4329
|
-
if (!
|
|
4330
|
-
|
|
4331
|
-
|
|
4452
|
+
if (!_ErrorSingleton.instance) {
|
|
4453
|
+
_ErrorSingleton.instance = new _ErrorSingleton();
|
|
4454
|
+
_ErrorSingleton.instance.collectionNameErrors = [];
|
|
4332
4455
|
}
|
|
4333
|
-
return
|
|
4456
|
+
return _ErrorSingleton.instance;
|
|
4334
4457
|
}
|
|
4335
4458
|
addErrorName(error) {
|
|
4336
4459
|
this.collectionNameErrors.push(error);
|
|
@@ -4373,8 +4496,7 @@ var makeFieldsWithInternalCode = ({
|
|
|
4373
4496
|
if (hasBody) {
|
|
4374
4497
|
return [bodyField, `__TINA_INTERNAL__:::...${field}():::`];
|
|
4375
4498
|
} else {
|
|
4376
|
-
if (spread)
|
|
4377
|
-
return `__TINA_INTERNAL__:::...${field}():::`;
|
|
4499
|
+
if (spread) return `__TINA_INTERNAL__:::...${field}():::`;
|
|
4378
4500
|
return `__TINA_INTERNAL__:::${field}():::`;
|
|
4379
4501
|
}
|
|
4380
4502
|
};
|
|
@@ -4458,6 +4580,7 @@ var forestryConfigSchema = import_zod.default.object({
|
|
|
4458
4580
|
)
|
|
4459
4581
|
});
|
|
4460
4582
|
var forestryFieldWithoutField = import_zod.default.object({
|
|
4583
|
+
// TODO: maybe better type this?
|
|
4461
4584
|
type: import_zod.default.union([
|
|
4462
4585
|
import_zod.default.literal("text"),
|
|
4463
4586
|
import_zod.default.literal("datetime"),
|
|
@@ -4481,6 +4604,7 @@ var forestryFieldWithoutField = import_zod.default.object({
|
|
|
4481
4604
|
default: import_zod.default.any().optional(),
|
|
4482
4605
|
template: import_zod.default.string().optional(),
|
|
4483
4606
|
config: import_zod.default.object({
|
|
4607
|
+
// min and max are used for lists
|
|
4484
4608
|
min: import_zod.default.number().optional().nullable(),
|
|
4485
4609
|
max: import_zod.default.number().optional().nullable(),
|
|
4486
4610
|
required: import_zod.default.boolean().optional().nullable(),
|
|
@@ -4494,6 +4618,7 @@ var forestryFieldWithoutField = import_zod.default.object({
|
|
|
4494
4618
|
import_zod.default.literal("pages"),
|
|
4495
4619
|
import_zod.default.literal("documents"),
|
|
4496
4620
|
import_zod.default.literal("simple"),
|
|
4621
|
+
// TODO: I want to ignore this key if its invalid
|
|
4497
4622
|
import_zod.default.string()
|
|
4498
4623
|
]).optional().nullable(),
|
|
4499
4624
|
section: import_zod.default.string().optional().nullable()
|
|
@@ -4529,6 +4654,7 @@ var transformForestryFieldsToTinaFields = ({
|
|
|
4529
4654
|
}
|
|
4530
4655
|
let field;
|
|
4531
4656
|
switch (forestryField2.type) {
|
|
4657
|
+
// Single filed types
|
|
4532
4658
|
case "text":
|
|
4533
4659
|
field = {
|
|
4534
4660
|
type: "string",
|
|
@@ -4608,6 +4734,7 @@ var transformForestryFieldsToTinaFields = ({
|
|
|
4608
4734
|
);
|
|
4609
4735
|
}
|
|
4610
4736
|
break;
|
|
4737
|
+
// List Types
|
|
4611
4738
|
case "list":
|
|
4612
4739
|
field = {
|
|
4613
4740
|
type: "string",
|
|
@@ -4630,6 +4757,7 @@ var transformForestryFieldsToTinaFields = ({
|
|
|
4630
4757
|
}
|
|
4631
4758
|
};
|
|
4632
4759
|
break;
|
|
4760
|
+
// Object (Group) types
|
|
4633
4761
|
case "field_group":
|
|
4634
4762
|
field = {
|
|
4635
4763
|
type: "object",
|
|
@@ -4670,6 +4798,7 @@ var transformForestryFieldsToTinaFields = ({
|
|
|
4670
4798
|
});
|
|
4671
4799
|
const fieldsString = stringifyLabelWithField(template2.label);
|
|
4672
4800
|
const t = {
|
|
4801
|
+
// @ts-ignore
|
|
4673
4802
|
fields: makeFieldsWithInternalCode({
|
|
4674
4803
|
hasBody: false,
|
|
4675
4804
|
field: fieldsString
|
|
@@ -4707,6 +4836,7 @@ var transformForestryFieldsToTinaFields = ({
|
|
|
4707
4836
|
spread: true
|
|
4708
4837
|
});
|
|
4709
4838
|
tinaFields.push(
|
|
4839
|
+
// @ts-ignore
|
|
4710
4840
|
field2
|
|
4711
4841
|
);
|
|
4712
4842
|
break;
|
|
@@ -4766,6 +4896,7 @@ var parseSections = ({ val }) => {
|
|
|
4766
4896
|
|
|
4767
4897
|
// src/cmds/forestry-migrate/index.ts
|
|
4768
4898
|
var BODY_FIELD = {
|
|
4899
|
+
// This is the body field
|
|
4769
4900
|
type: "rich-text",
|
|
4770
4901
|
name: "body",
|
|
4771
4902
|
label: "Body of Document",
|
|
@@ -4824,8 +4955,7 @@ var generateAllTemplates = async ({
|
|
|
4824
4955
|
};
|
|
4825
4956
|
var generateCollectionFromForestrySection = (args) => {
|
|
4826
4957
|
const { section, templateMap } = args;
|
|
4827
|
-
if (section.read_only)
|
|
4828
|
-
return;
|
|
4958
|
+
if (section.read_only) return;
|
|
4829
4959
|
let format3 = "md";
|
|
4830
4960
|
if (section.new_doc_ext) {
|
|
4831
4961
|
const ext = checkExt(section.new_doc_ext);
|
|
@@ -4892,12 +5022,14 @@ var generateCollectionFromForestrySection = (args) => {
|
|
|
4892
5022
|
if (((forestryTemplates == null ? void 0 : forestryTemplates.length) || 0) > 1) {
|
|
4893
5023
|
c = {
|
|
4894
5024
|
...baseCollection,
|
|
5025
|
+
// @ts-expect-error
|
|
4895
5026
|
templates: forestryTemplates.map((tem) => {
|
|
4896
5027
|
const currentTemplate = templateMap.get(tem);
|
|
4897
5028
|
const fieldsString = stringifyLabelWithField(
|
|
4898
5029
|
currentTemplate.templateObj.label
|
|
4899
5030
|
);
|
|
4900
5031
|
return {
|
|
5032
|
+
// fields: [BODY_FIELD],
|
|
4901
5033
|
fields: makeFieldsWithInternalCode({
|
|
4902
5034
|
hasBody,
|
|
4903
5035
|
field: fieldsString,
|
|
@@ -4915,6 +5047,8 @@ var generateCollectionFromForestrySection = (args) => {
|
|
|
4915
5047
|
const fieldsString = stringifyLabelWithField(template.templateObj.label);
|
|
4916
5048
|
c = {
|
|
4917
5049
|
...baseCollection,
|
|
5050
|
+
// fields: [BODY_FIELD],
|
|
5051
|
+
// @ts-expect-error
|
|
4918
5052
|
fields: makeFieldsWithInternalCode({
|
|
4919
5053
|
field: fieldsString,
|
|
4920
5054
|
hasBody,
|
|
@@ -5662,6 +5796,7 @@ var makeImportsVisitor = (sourceFile, importMap) => (ctx) => (node) => {
|
|
|
5662
5796
|
) : [];
|
|
5663
5797
|
const newImports = [
|
|
5664
5798
|
.../* @__PURE__ */ new Set([
|
|
5799
|
+
// we use Set to remove duplicates
|
|
5665
5800
|
...existingImports,
|
|
5666
5801
|
...imports
|
|
5667
5802
|
])
|
|
@@ -5816,6 +5951,7 @@ var addSelfHostedTinaAuthToConfig = async (config2, configFile) => {
|
|
|
5816
5951
|
);
|
|
5817
5952
|
const { configImports, configAuthProviderClass, extraTinaCollections } = config2.authProvider;
|
|
5818
5953
|
const importMap = {
|
|
5954
|
+
// iterate over configImports and add them to the import map
|
|
5819
5955
|
...configImports.reduce((acc, { from, imported }) => {
|
|
5820
5956
|
acc[from] = imported;
|
|
5821
5957
|
return acc;
|
|
@@ -5990,7 +6126,13 @@ async function apply({
|
|
|
5990
6126
|
config: config2
|
|
5991
6127
|
});
|
|
5992
6128
|
}
|
|
5993
|
-
if (
|
|
6129
|
+
if (
|
|
6130
|
+
// if the config was just generated we do not need to update the config file because it will be generated correctly
|
|
6131
|
+
env.tinaConfigExists && // Are we running tinacms init backend
|
|
6132
|
+
params.isBackendInit && // Do the user choose the 'self-host' option
|
|
6133
|
+
config2.hosting === "self-host" && // the user did not choose the 'tina-cloud' auth provider
|
|
6134
|
+
(((_a = config2.authProvider) == null ? void 0 : _a.name) || "") !== "tina-cloud"
|
|
6135
|
+
) {
|
|
5994
6136
|
await addSelfHostedTinaAuthToConfig(config2, env.generatedFiles["config"]);
|
|
5995
6137
|
}
|
|
5996
6138
|
logNextSteps({
|
|
@@ -6283,6 +6425,7 @@ var other = ({ packageManager }) => {
|
|
|
6283
6425
|
const packageManagers = {
|
|
6284
6426
|
pnpm: `pnpm`,
|
|
6285
6427
|
npm: `npx`,
|
|
6428
|
+
// npx is the way to run executables that aren't in your "scripts"
|
|
6286
6429
|
yarn: `yarn`
|
|
6287
6430
|
};
|
|
6288
6431
|
return `${packageManagers[packageManager]} tinacms dev -c "<your dev command>"`;
|
|
@@ -6295,6 +6438,7 @@ var frameworkDevCmds = {
|
|
|
6295
6438
|
const packageManagers = {
|
|
6296
6439
|
pnpm: `pnpm`,
|
|
6297
6440
|
npm: `npm run`,
|
|
6441
|
+
// npx is the way to run executables that aren't in your "scripts"
|
|
6298
6442
|
yarn: `yarn`
|
|
6299
6443
|
};
|
|
6300
6444
|
return `${packageManagers[packageManager]} dev`;
|
|
@@ -6552,5 +6696,3 @@ cli.register(import_clipanion8.Builtins.DefinitionsCommand);
|
|
|
6552
6696
|
cli.register(import_clipanion8.Builtins.HelpCommand);
|
|
6553
6697
|
cli.register(import_clipanion8.Builtins.VersionCommand);
|
|
6554
6698
|
var src_default = cli;
|
|
6555
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
6556
|
-
0 && (module.exports = {});
|
|
@@ -36,7 +36,8 @@ export declare const fetchRemoteGraphqlSchema: ({ url, token, }: {
|
|
|
36
36
|
token?: string;
|
|
37
37
|
}) => Promise<{
|
|
38
38
|
remoteSchema: any;
|
|
39
|
-
|
|
39
|
+
remoteRuntimeVersion: string;
|
|
40
|
+
remoteProjectVersion: string;
|
|
40
41
|
}>;
|
|
41
42
|
export declare const fetchSchemaSha: ({ url, token, }: {
|
|
42
43
|
url: string;
|
|
@@ -55,7 +55,12 @@ export declare class ConfigManager {
|
|
|
55
55
|
shouldSkipSDK(): boolean;
|
|
56
56
|
processConfig(): Promise<void>;
|
|
57
57
|
getTinaFolderPath(rootPath: any): Promise<string>;
|
|
58
|
-
getTinaGraphQLVersion():
|
|
58
|
+
getTinaGraphQLVersion(): {
|
|
59
|
+
fullVersion: string;
|
|
60
|
+
major: string;
|
|
61
|
+
minor: string;
|
|
62
|
+
patch: string;
|
|
63
|
+
};
|
|
59
64
|
printGeneratedClientFilePath(): string;
|
|
60
65
|
printGeneratedTypesFilePath(): string;
|
|
61
66
|
printoutputHTMLFilePath(): string;
|
|
@@ -22,7 +22,7 @@ interface StaticMediaItem {
|
|
|
22
22
|
export interface StaticMedia {
|
|
23
23
|
[offset: string]: StaticMediaItem[];
|
|
24
24
|
}
|
|
25
|
-
export declare const createConfig: ({ configManager,
|
|
25
|
+
export declare const createConfig: ({ configManager, apiURL, plugins, noWatch, rollupOptions, }: {
|
|
26
26
|
configManager: ConfigManager;
|
|
27
27
|
database: Database;
|
|
28
28
|
apiURL: string;
|
package/dist/utils/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinacms/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"cors": "^2.8.5",
|
|
66
66
|
"crypto-js": "^4.2.0",
|
|
67
67
|
"dotenv": "^16.4.5",
|
|
68
|
-
"esbuild": "^0.
|
|
68
|
+
"esbuild": "^0.24.0",
|
|
69
69
|
"fs-extra": "^11.2.0",
|
|
70
70
|
"graphql": "15.8.0",
|
|
71
71
|
"js-yaml": "^4.1.0",
|
|
@@ -84,12 +84,12 @@
|
|
|
84
84
|
"vite": "^4.5.5",
|
|
85
85
|
"yup": "^1.4.0",
|
|
86
86
|
"zod": "^3.23.8",
|
|
87
|
-
"@tinacms/
|
|
88
|
-
"@tinacms/
|
|
87
|
+
"@tinacms/app": "2.1.15",
|
|
88
|
+
"@tinacms/graphql": "1.5.10",
|
|
89
89
|
"@tinacms/metrics": "1.0.8",
|
|
90
|
-
"
|
|
91
|
-
"@tinacms/
|
|
92
|
-
"tinacms": "
|
|
90
|
+
"tinacms": "2.6.0",
|
|
91
|
+
"@tinacms/schema-tools": "1.7.0",
|
|
92
|
+
"@tinacms/search": "1.0.37"
|
|
93
93
|
},
|
|
94
94
|
"publishConfig": {
|
|
95
95
|
"registry": "https://registry.npmjs.org"
|