@tinacms/cli 0.0.0-c6915ea-20250421012527 → 0.0.0-c706b9f-20251222081038

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
@@ -1,53 +1,20 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name2 in all)
9
- __defProp(target, name2, { get: all[name2], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
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.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
-
29
1
  // src/index.ts
30
- var index_exports = {};
31
- __export(index_exports, {
32
- default: () => index_default
33
- });
34
- module.exports = __toCommonJS(index_exports);
35
- var import_clipanion8 = require("clipanion");
2
+ import { Cli, Builtins } from "clipanion";
36
3
 
37
4
  // package.json
38
- var version = "1.9.5";
5
+ var version = "2.0.5";
39
6
 
40
7
  // src/next/commands/dev-command/index.ts
41
- var import_path5 = __toESM(require("path"));
42
- var import_graphql10 = require("@tinacms/graphql");
43
- var import_search = require("@tinacms/search");
44
- var import_async_lock = __toESM(require("async-lock"));
45
- var import_chokidar = __toESM(require("chokidar"));
46
- var import_clipanion2 = require("clipanion");
47
- var import_fs_extra6 = __toESM(require("fs-extra"));
8
+ import path8 from "path";
9
+ import { FilesystemBridge as FilesystemBridge2, buildSchema } from "@tinacms/graphql";
10
+ import { LocalSearchIndexClient, SearchIndexer } from "@tinacms/search";
11
+ import AsyncLock from "async-lock";
12
+ import chokidar from "chokidar";
13
+ import { Command as Command2, Option as Option2 } from "clipanion";
14
+ import fs7 from "fs-extra";
48
15
 
49
16
  // src/logger/index.ts
50
- var import_chalk = __toESM(require("chalk"));
17
+ import chalk from "chalk";
51
18
 
52
19
  // src/logger/is-unicode-supported.ts
53
20
  function isUnicodeSupported() {
@@ -61,15 +28,15 @@ function isUnicodeSupported() {
61
28
  }
62
29
 
63
30
  // src/logger/index.ts
64
- var import_log4js = __toESM(require("log4js"));
65
- var logger = import_log4js.default.getLogger();
66
- import_log4js.default.configure({
67
- appenders: {
68
- out: { type: "stdout", layout: { type: "messagePassThrough" } }
69
- },
70
- categories: { default: { appenders: ["out"], level: "info" } }
71
- });
72
- logger.level = "info";
31
+ var logger = {
32
+ level: "info",
33
+ info: (msg) => process.stdout.write(msg + "\n"),
34
+ warn: (msg) => process.stdout.write(msg + "\n"),
35
+ error: (msg) => process.stderr.write(msg + "\n"),
36
+ debug: (msg) => {
37
+ if (logger.level === "debug") process.stdout.write(msg + "\n");
38
+ }
39
+ };
73
40
  function ansiRegex() {
74
41
  const pattern = [
75
42
  "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
@@ -88,18 +55,18 @@ ${message}
88
55
  return ln.length > sum ? ln.length : sum;
89
56
  }, 0) + 2;
90
57
  const msg = lines.map(
91
- (ln) => `${import_chalk.default.gray(bar)} ${import_chalk.default.white(ln)}${" ".repeat(
58
+ (ln) => `${chalk.gray(bar)} ${chalk.white(ln)}${" ".repeat(
92
59
  len - strip(ln).length
93
- )}${import_chalk.default.gray(bar)}`
60
+ )}${chalk.gray(bar)}`
94
61
  ).join("\n");
95
62
  const underscoreLen = len - title.length - 1 > 0 ? len - title.length - 1 : 0;
96
63
  process.stdout.write(
97
- `${import_chalk.default.gray(bar)}
98
- ${import_chalk.default.green("\u25CB")} ${import_chalk.default.reset(
64
+ `${chalk.gray(bar)}
65
+ ${chalk.green("\u25CB")} ${chalk.reset(
99
66
  title
100
- )} ${import_chalk.default.gray("\u2500".repeat(underscoreLen) + "\u256E")}
67
+ )} ${chalk.gray("\u2500".repeat(underscoreLen) + "\u256E")}
101
68
  ${msg}
102
- ${import_chalk.default.gray(
69
+ ${chalk.gray(
103
70
  "\u251C" + "\u2500".repeat(len + 2) + "\u256F"
104
71
  )}
105
72
  `
@@ -116,11 +83,11 @@ var summary = (content) => {
116
83
  });
117
84
  });
118
85
  content.items.forEach((item) => {
119
- outString.push(`${item.emoji} ${import_chalk.default.cyan(item.heading)}`);
86
+ outString.push(`${item.emoji} ${chalk.cyan(item.heading)}`);
120
87
  item.subItems.forEach((subItem) => {
121
88
  const spaces = longestKey - subItem.key.length + 4;
122
89
  outString.push(
123
- ` ${subItem.key}:${[...Array(spaces)].join(" ")}${import_chalk.default.cyan(
90
+ ` ${subItem.key}:${[...Array(spaces)].join(" ")}${chalk.cyan(
124
91
  subItem.value
125
92
  )}`
126
93
  );
@@ -158,12 +125,12 @@ var S_WARN = s("\u25B2", "!");
158
125
  var S_ERROR = s("\u25A0", "x");
159
126
 
160
127
  // src/utils/spinner.ts
161
- var import_cli_spinner = require("cli-spinner");
128
+ import { Spinner } from "cli-spinner";
162
129
  async function localSpin({
163
130
  waitFor,
164
131
  text
165
132
  }) {
166
- const spinner = new import_cli_spinner.Spinner({
133
+ const spinner = new Spinner({
167
134
  text: `${text} %s`,
168
135
  stream: process.stderr,
169
136
  onTick: function(msg) {
@@ -194,32 +161,32 @@ function spin({
194
161
  }
195
162
 
196
163
  // src/utils/theme.ts
197
- var import_chalk2 = __toESM(require("chalk"));
198
- var successText = import_chalk2.default.bold.green;
199
- var focusText = import_chalk2.default.bold;
200
- var dangerText = import_chalk2.default.bold.red;
201
- var neutralText = import_chalk2.default.bold.cyan;
202
- var linkText = import_chalk2.default.bold.cyan;
203
- var labelText = import_chalk2.default.bold;
204
- var cmdText = import_chalk2.default.inverse;
164
+ import chalk2 from "chalk";
165
+ var successText = chalk2.bold.green;
166
+ var focusText = chalk2.bold;
167
+ var dangerText = chalk2.bold.red;
168
+ var neutralText = chalk2.bold.cyan;
169
+ var linkText = chalk2.bold.cyan;
170
+ var labelText = chalk2.bold;
171
+ var cmdText = chalk2.inverse;
205
172
  var indentedCmd = (str) => {
206
173
  return ` \u2503 ` + str;
207
174
  };
208
175
  var indentText = (str) => {
209
176
  return String(str).split("\n").map((line) => ` ${line}`).join("\n");
210
177
  };
211
- var logText = import_chalk2.default.italic.gray;
212
- var warnText = import_chalk2.default.yellowBright.bgBlack;
213
- var titleText = import_chalk2.default.bgHex("d2f1f8").hex("ec4816");
214
- var CONFIRMATION_TEXT = import_chalk2.default.dim("enter to confirm");
178
+ var logText = chalk2.italic.gray;
179
+ var warnText = chalk2.yellowBright.bgBlack;
180
+ var titleText = chalk2.bgHex("d2f1f8").hex("ec4816");
181
+ var CONFIRMATION_TEXT = chalk2.dim("enter to confirm");
215
182
 
216
183
  // src/next/codegen/index.ts
217
- var import_fs_extra = __toESM(require("fs-extra"));
218
- var import_path = __toESM(require("path"));
219
- var import_graphql5 = require("graphql");
184
+ import fs from "fs-extra";
185
+ import path from "path";
186
+ import { buildASTSchema, printSchema as printSchema2 } from "graphql";
220
187
 
221
188
  // src/next/codegen/codegen/index.ts
222
- var import_graphql4 = require("graphql");
189
+ import { parse, printSchema } from "graphql";
223
190
 
224
191
  // src/next/codegen/codegen/plugin.ts
225
192
  var AddGeneratedClientFunc = (apiURL) => {
@@ -288,37 +255,44 @@ var AddGeneratedClient = (apiURL) => ({
288
255
  });
289
256
 
290
257
  // src/next/codegen/codegen/index.ts
291
- var import_graphql_file_loader = require("@graphql-tools/graphql-file-loader");
292
- var import_core = require("@graphql-codegen/core");
293
- var import_load = require("@graphql-tools/load");
294
- var import_typescript_operations = require("@graphql-codegen/typescript-operations");
295
- var import_typescript = require("@graphql-codegen/typescript");
258
+ import { GraphQLFileLoader } from "@graphql-tools/graphql-file-loader";
259
+ import { codegen } from "@graphql-codegen/core";
260
+ import { loadDocuments } from "@graphql-tools/load";
261
+ import { plugin as typescriptOperationsPlugin } from "@graphql-codegen/typescript-operations";
262
+ import { plugin as typescriptPlugin } from "@graphql-codegen/typescript";
296
263
 
297
264
  // src/next/codegen/codegen/sdkPlugin/index.ts
298
- var import_graphql2 = require("graphql");
299
- var import_graphql3 = require("graphql");
265
+ import { visit } from "graphql";
266
+ import {
267
+ concatAST,
268
+ Kind as Kind2
269
+ } from "graphql";
300
270
 
301
271
  // src/next/codegen/codegen/sdkPlugin/visitor.ts
302
- var import_visitor_plugin_common = require("@graphql-codegen/visitor-plugin-common");
303
- var import_auto_bind = __toESM(require("auto-bind"));
304
- var import_graphql = require("graphql");
305
- var GenericSdkVisitor = class extends import_visitor_plugin_common.ClientSideBaseVisitor {
272
+ import {
273
+ ClientSideBaseVisitor,
274
+ DocumentMode,
275
+ indentMultiline
276
+ } from "@graphql-codegen/visitor-plugin-common";
277
+ import autoBind from "auto-bind";
278
+ import { Kind, print } from "graphql";
279
+ var GenericSdkVisitor = class extends ClientSideBaseVisitor {
280
+ _operationsToInclude = [];
306
281
  constructor(schema, fragments, rawConfig) {
307
282
  super(schema, fragments, rawConfig, {
308
283
  usingObservableFrom: rawConfig.usingObservableFrom
309
284
  });
310
- this._operationsToInclude = [];
311
- (0, import_auto_bind.default)(this);
285
+ autoBind(this);
312
286
  if (this.config.usingObservableFrom) {
313
287
  this._additionalImports.push(this.config.usingObservableFrom);
314
288
  }
315
- if (this.config.documentMode !== import_visitor_plugin_common.DocumentMode.string) {
289
+ if (this.config.documentMode !== DocumentMode.string) {
316
290
  }
317
291
  }
318
292
  buildOperation(node, documentVariableName, operationType, operationResultType, operationVariablesTypes) {
319
293
  if (node.name == null) {
320
294
  throw new Error(
321
- "Plugin 'generic-sdk' cannot generate SDK for unnamed operation.\n\n" + (0, import_graphql.print)(node)
295
+ "Plugin 'generic-sdk' cannot generate SDK for unnamed operation.\n\n" + print(node)
322
296
  );
323
297
  } else {
324
298
  this._operationsToInclude.push({
@@ -336,14 +310,14 @@ var GenericSdkVisitor = class extends import_visitor_plugin_common.ClientSideBas
336
310
  const usingObservable = !!this.config.usingObservableFrom;
337
311
  const allPossibleActions = this._operationsToInclude.map((o) => {
338
312
  const optionalVariables = !o.node.variableDefinitions || o.node.variableDefinitions.length === 0 || o.node.variableDefinitions.every(
339
- (v) => v.type.kind !== import_graphql.Kind.NON_NULL_TYPE || v.defaultValue
313
+ (v) => v.type.kind !== Kind.NON_NULL_TYPE || v.defaultValue
340
314
  );
341
315
  const returnType = usingObservable && o.operationType === "Subscription" ? "Observable" : "Promise";
342
316
  return `${o.node.name.value}(variables${optionalVariables ? "?" : ""}: ${o.operationVariablesTypes}, options?: C): ${returnType}<${o.operationResultType}> {
343
317
  return requester<${o.operationResultType}, ${o.operationVariablesTypes}>(${o.documentVariableName}, variables, options);
344
318
  }`;
345
- }).map((s2) => (0, import_visitor_plugin_common.indentMultiline)(s2, 2));
346
- return `export type Requester<C= {}> = <R, V>(doc: ${this.config.documentMode === import_visitor_plugin_common.DocumentMode.string ? "string" : "DocumentNode"}, vars?: V, options?: C) => ${usingObservable ? "Promise<R> & Observable<R>" : "Promise<R>"}
319
+ }).map((s2) => indentMultiline(s2, 2));
320
+ return `export type Requester<C= {}> = <R, V>(doc: ${this.config.documentMode === DocumentMode.string ? "string" : "DocumentNode"}, vars?: V, options?: C) => ${usingObservable ? "Promise<R> & Observable<R>" : "Promise<R>"}
347
321
  export function getSdk<C>(requester: Requester<C>) {
348
322
  return {
349
323
  ${allPossibleActions.join(",\n")}
@@ -355,14 +329,14 @@ var GenericSdkVisitor = class extends import_visitor_plugin_common.ClientSideBas
355
329
 
356
330
  // src/next/codegen/codegen/sdkPlugin/index.ts
357
331
  var plugin = (schema, documents, config2) => {
358
- const allAst = (0, import_graphql3.concatAST)(
332
+ const allAst = concatAST(
359
333
  documents.reduce((prev, v) => {
360
334
  return [...prev, v.document];
361
335
  }, [])
362
336
  );
363
337
  const allFragments = [
364
338
  ...allAst.definitions.filter(
365
- (d) => d.kind === import_graphql3.Kind.FRAGMENT_DEFINITION
339
+ (d) => d.kind === Kind2.FRAGMENT_DEFINITION
366
340
  ).map((fragmentDef) => ({
367
341
  node: fragmentDef,
368
342
  name: fragmentDef.name.value,
@@ -372,7 +346,7 @@ var plugin = (schema, documents, config2) => {
372
346
  ...config2.externalFragments || []
373
347
  ];
374
348
  const visitor = new GenericSdkVisitor(schema, allFragments, config2);
375
- const visitorResult = (0, import_graphql2.visit)(allAst, { leave: visitor });
349
+ const visitorResult = visit(allAst, { leave: visitor });
376
350
  return {
377
351
  // We will take care of imports
378
352
  // prepend: visitor.getImports(),
@@ -390,10 +364,10 @@ var generateTypes = async (schema, queryPathGlob = process.cwd(), fragDocPath =
390
364
  let fragDocs = [];
391
365
  docs = await loadGraphQLDocuments(queryPathGlob);
392
366
  fragDocs = await loadGraphQLDocuments(fragDocPath);
393
- const res = await (0, import_core.codegen)({
367
+ const res = await codegen({
394
368
  // Filename is not used. This is because the typescript plugin returns a string instead of writing to a file.
395
369
  filename: process.cwd(),
396
- schema: (0, import_graphql4.parse)((0, import_graphql4.printSchema)(schema)),
370
+ schema: parse(printSchema(schema)),
397
371
  documents: [...docs, ...fragDocs],
398
372
  config: {},
399
373
  plugins: [
@@ -406,10 +380,10 @@ var generateTypes = async (schema, queryPathGlob = process.cwd(), fragDocPath =
406
380
  ],
407
381
  pluginMap: {
408
382
  typescript: {
409
- plugin: import_typescript.plugin
383
+ plugin: typescriptPlugin
410
384
  },
411
385
  typescriptOperations: {
412
- plugin: import_typescript_operations.plugin
386
+ plugin: typescriptOperationsPlugin
413
387
  },
414
388
  typescriptSdk: {
415
389
  plugin
@@ -422,8 +396,8 @@ var generateTypes = async (schema, queryPathGlob = process.cwd(), fragDocPath =
422
396
  var loadGraphQLDocuments = async (globPath) => {
423
397
  let result = [];
424
398
  try {
425
- result = await (0, import_load.loadDocuments)(globPath, {
426
- loaders: [new import_graphql_file_loader.GraphQLFileLoader()]
399
+ result = await loadDocuments(globPath, {
400
+ loaders: [new GraphQLFileLoader()]
427
401
  });
428
402
  } catch (e) {
429
403
  if (
@@ -440,11 +414,27 @@ var loadGraphQLDocuments = async (globPath) => {
440
414
  };
441
415
 
442
416
  // src/next/codegen/index.ts
443
- var import_esbuild = require("esbuild");
444
- var import_graphql6 = require("@tinacms/graphql");
445
- var import_normalize_path = __toESM(require("normalize-path"));
417
+ import { transform } from "esbuild";
418
+ import { mapUserFields } from "@tinacms/graphql";
419
+ import normalizePath from "normalize-path";
446
420
  var TINA_HOST = "content.tinajs.io";
447
421
  var Codegen = class {
422
+ configManager;
423
+ port;
424
+ schema;
425
+ queryDoc;
426
+ fragDoc;
427
+ isLocal;
428
+ // The API url used in the client
429
+ apiURL;
430
+ // This is always the local URL.
431
+ localUrl;
432
+ // production url
433
+ productionUrl;
434
+ graphqlSchemaDoc;
435
+ tinaSchema;
436
+ lookup;
437
+ noClientBuildCache;
448
438
  constructor({
449
439
  configManager,
450
440
  port,
@@ -460,7 +450,7 @@ var Codegen = class {
460
450
  this.graphqlSchemaDoc = graphqlSchemaDoc;
461
451
  this.configManager = configManager;
462
452
  this.port = port;
463
- this.schema = (0, import_graphql5.buildASTSchema)(graphqlSchemaDoc);
453
+ this.schema = buildASTSchema(graphqlSchemaDoc);
464
454
  this.tinaSchema = tinaSchema;
465
455
  this.queryDoc = queryDoc;
466
456
  this.fragDoc = fragDoc;
@@ -468,19 +458,19 @@ var Codegen = class {
468
458
  this.noClientBuildCache = noClientBuildCache;
469
459
  }
470
460
  async writeConfigFile(fileName, data) {
471
- const filePath = import_path.default.join(
461
+ const filePath = path.join(
472
462
  this.configManager.generatedFolderPath,
473
463
  fileName
474
464
  );
475
- await import_fs_extra.default.ensureFile(filePath);
476
- await import_fs_extra.default.outputFile(filePath, data);
465
+ await fs.ensureFile(filePath);
466
+ await fs.outputFile(filePath, data);
477
467
  if (this.configManager.hasSeparateContentRoot()) {
478
- const filePath2 = import_path.default.join(
468
+ const filePath2 = path.join(
479
469
  this.configManager.generatedFolderPathContentRepo,
480
470
  fileName
481
471
  );
482
- await import_fs_extra.default.ensureFile(filePath2);
483
- await import_fs_extra.default.outputFile(filePath2, data);
472
+ await fs.ensureFile(filePath2);
473
+ await fs.outputFile(filePath2, data);
484
474
  }
485
475
  }
486
476
  async removeGeneratedFilesIfExists() {
@@ -512,11 +502,11 @@ var Codegen = class {
512
502
  await this.removeGeneratedFilesIfExists();
513
503
  return apiURL;
514
504
  }
515
- await import_fs_extra.default.outputFile(
505
+ await fs.outputFile(
516
506
  this.configManager.generatedQueriesFilePath,
517
507
  this.queryDoc
518
508
  );
519
- await import_fs_extra.default.outputFile(
509
+ await fs.outputFile(
520
510
  this.configManager.generatedFragmentsFilePath,
521
511
  this.fragDoc
522
512
  );
@@ -524,21 +514,21 @@ var Codegen = class {
524
514
  const { clientString } = await this.genClient();
525
515
  const databaseClientString = this.configManager.hasSelfHostedConfig() ? await this.genDatabaseClient() : "";
526
516
  const { codeString, schemaString } = await this.genTypes();
527
- await import_fs_extra.default.outputFile(
517
+ await fs.outputFile(
528
518
  this.configManager.generatedGraphQLGQLPath,
529
519
  schemaString
530
520
  );
531
521
  if (this.configManager.isUsingTs()) {
532
- await import_fs_extra.default.outputFile(
522
+ await fs.outputFile(
533
523
  this.configManager.generatedTypesTSFilePath,
534
524
  codeString
535
525
  );
536
- await import_fs_extra.default.outputFile(
526
+ await fs.outputFile(
537
527
  this.configManager.generatedClientTSFilePath,
538
528
  clientString
539
529
  );
540
530
  if (this.configManager.hasSelfHostedConfig()) {
541
- await import_fs_extra.default.outputFile(
531
+ await fs.outputFile(
542
532
  this.configManager.generatedDatabaseClientTSFilePath,
543
533
  databaseClientString
544
534
  );
@@ -547,35 +537,35 @@ var Codegen = class {
547
537
  await unlinkIfExists(this.configManager.generatedTypesDFilePath);
548
538
  await unlinkIfExists(this.configManager.generatedTypesJSFilePath);
549
539
  } else {
550
- await import_fs_extra.default.outputFile(
540
+ await fs.outputFile(
551
541
  this.configManager.generatedTypesDFilePath,
552
542
  codeString
553
543
  );
554
- const jsTypes = await (0, import_esbuild.transform)(codeString, { loader: "ts" });
555
- await import_fs_extra.default.outputFile(
544
+ const jsTypes = await transform(codeString, { loader: "ts" });
545
+ await fs.outputFile(
556
546
  this.configManager.generatedTypesJSFilePath,
557
547
  jsTypes.code
558
548
  );
559
- await import_fs_extra.default.outputFile(
549
+ await fs.outputFile(
560
550
  this.configManager.generatedClientDFilePath,
561
551
  clientString
562
552
  );
563
- const jsClient = await (0, import_esbuild.transform)(clientString, { loader: "ts" });
564
- await import_fs_extra.default.outputFile(
553
+ const jsClient = await transform(clientString, { loader: "ts" });
554
+ await fs.outputFile(
565
555
  this.configManager.generatedClientJSFilePath,
566
556
  jsClient.code
567
557
  );
568
558
  await unlinkIfExists(this.configManager.generatedTypesTSFilePath);
569
559
  await unlinkIfExists(this.configManager.generatedClientTSFilePath);
570
560
  if (this.configManager.hasSelfHostedConfig()) {
571
- const jsDatabaseClient = await (0, import_esbuild.transform)(databaseClientString, {
561
+ const jsDatabaseClient = await transform(databaseClientString, {
572
562
  loader: "ts"
573
563
  });
574
- await import_fs_extra.default.outputFile(
564
+ await fs.outputFile(
575
565
  this.configManager.generatedDatabaseClientJSFilePath,
576
566
  jsDatabaseClient.code
577
567
  );
578
- await import_fs_extra.default.outputFile(
568
+ await fs.outputFile(
579
569
  this.configManager.generatedDatabaseClientDFilePath,
580
570
  databaseClientString
581
571
  );
@@ -587,13 +577,12 @@ var Codegen = class {
587
577
  return apiURL;
588
578
  }
589
579
  _createApiUrl() {
590
- var _a, _b, _c, _d;
591
- const branch = (_a = this.configManager.config) == null ? void 0 : _a.branch;
592
- const clientId = (_b = this.configManager.config) == null ? void 0 : _b.clientId;
593
- const token = (_c = this.configManager.config) == null ? void 0 : _c.token;
580
+ const branch = this.configManager.config?.branch;
581
+ const clientId = this.configManager.config?.clientId;
582
+ const token = this.configManager.config?.token;
594
583
  const fullVersion = this.configManager.getTinaGraphQLVersion();
595
584
  const version2 = `${fullVersion.major}.${fullVersion.minor}`;
596
- const baseUrl = ((_d = this.configManager.config.tinaioConfig) == null ? void 0 : _d.contentApiUrlOverride) || `https://${TINA_HOST}`;
585
+ const baseUrl = this.configManager.config.tinaioConfig?.contentApiUrlOverride || `https://${TINA_HOST}`;
597
586
  if ((!branch || !clientId || !token) && !this.port && !this.configManager.config.contentApiUrlOverride) {
598
587
  const missing = [];
599
588
  if (!branch) missing.push("branch");
@@ -602,7 +591,7 @@ var Codegen = class {
602
591
  throw new Error(
603
592
  `Client not configured properly. Missing ${missing.join(
604
593
  ", "
605
- )}. Please visit https://tina.io/docs/tina-cloud/overview for more information`
594
+ )}. Please visit https://tina.io/docs/r/what-is-tinacloud for more information`
606
595
  );
607
596
  }
608
597
  let localUrl = `http://localhost:${this.port}/graphql`;
@@ -621,18 +610,17 @@ var Codegen = class {
621
610
  return this.apiURL;
622
611
  }
623
612
  async genDatabaseClient() {
624
- var _a, _b;
625
613
  const authCollection = this.tinaSchema.getCollections().find((c) => c.isAuthCollection);
626
614
  let authFields = [];
627
615
  if (authCollection) {
628
- const usersFields = (0, import_graphql6.mapUserFields)(authCollection, []);
616
+ const usersFields = mapUserFields(authCollection, []);
629
617
  if (usersFields.length === 0) {
630
618
  throw new Error("No user field found");
631
619
  }
632
620
  if (usersFields.length > 1) {
633
621
  throw new Error("Only one user field is allowed");
634
622
  }
635
- authFields = (_b = (_a = usersFields[0]) == null ? void 0 : _a.collectable) == null ? void 0 : _b.fields.map((f) => {
623
+ authFields = usersFields[0]?.collectable?.fields.map((f) => {
636
624
  if (f.type !== "password" && f.type !== "object") {
637
625
  if (f.uid) {
638
626
  return `id:${f.name}`;
@@ -710,13 +698,12 @@ export default databaseClient;
710
698
  `;
711
699
  }
712
700
  async genClient() {
713
- var _a, _b, _c;
714
- const token = (_a = this.configManager.config) == null ? void 0 : _a.token;
715
- const errorPolicy = (_c = (_b = this.configManager.config) == null ? void 0 : _b.client) == null ? void 0 : _c.errorPolicy;
701
+ const token = this.configManager.config?.token;
702
+ const errorPolicy = this.configManager.config?.client?.errorPolicy;
716
703
  const apiURL = this.getApiURL();
717
704
  const clientString = `import { createClient } from "tinacms/dist/client";
718
705
  import { queries } from "./types";
719
- export const client = createClient({ ${this.noClientBuildCache === false ? `cacheDir: '${(0, import_normalize_path.default)(
706
+ export const client = createClient({ ${this.noClientBuildCache === false ? `cacheDir: '${normalizePath(
720
707
  this.configManager.generatedCachePath
721
708
  )}', ` : ""}url: '${apiURL}', token: '${token}', queries, ${errorPolicy ? `errorPolicy: '${errorPolicy}'` : ""} });
722
709
  export default client;
@@ -742,7 +729,7 @@ export default client;
742
729
  ${typescriptTypes}
743
730
  `;
744
731
  const schemaString = `# DO NOT MODIFY THIS FILE. This file is automatically generated by Tina
745
- ${(0, import_graphql5.printSchema)(this.schema)}
732
+ ${printSchema2(this.schema)}
746
733
  schema {
747
734
  query: Query
748
735
  mutation: Mutation
@@ -754,7 +741,7 @@ schema {
754
741
  var maybeWarnFragmentSize = async (filepath) => {
755
742
  if (
756
743
  // is the file bigger than 100kb?
757
- (await import_fs_extra.default.stat(filepath)).size > // convert to 100 kb to bytes
744
+ (await fs.stat(filepath)).size > // convert to 100 kb to bytes
758
745
  100 * 1024
759
746
  ) {
760
747
  console.warn(
@@ -771,19 +758,34 @@ var maybeWarnFragmentSize = async (filepath) => {
771
758
  }
772
759
  };
773
760
  var unlinkIfExists = async (filepath) => {
774
- if (import_fs_extra.default.existsSync(filepath)) {
775
- import_fs_extra.default.unlinkSync(filepath);
761
+ if (fs.existsSync(filepath)) {
762
+ fs.unlinkSync(filepath);
776
763
  }
777
764
  };
778
765
 
779
766
  // src/next/config-manager.ts
780
- var import_fs_extra2 = __toESM(require("fs-extra"));
781
- var import_path2 = __toESM(require("path"));
782
- var import_os = __toESM(require("os"));
783
- var esbuild = __toESM(require("esbuild"));
784
- var dotenv = __toESM(require("dotenv"));
785
- var import_normalize_path2 = __toESM(require("normalize-path"));
786
- var import_chalk3 = __toESM(require("chalk"));
767
+ import fs2 from "fs-extra";
768
+ import path3 from "path";
769
+ import os from "os";
770
+ import { pathToFileURL } from "url";
771
+ import * as esbuild from "esbuild";
772
+ import * as dotenv from "dotenv";
773
+ import normalizePath2 from "normalize-path";
774
+ import chalk3 from "chalk";
775
+ import { createRequire } from "module";
776
+
777
+ // src/utils/path.ts
778
+ import path2 from "path";
779
+ function stripNativeTrailingSlash(p) {
780
+ const { root } = path2.parse(p);
781
+ let str = p;
782
+ while (str.length > root.length && str.endsWith(path2.sep)) {
783
+ str = str.slice(0, -1);
784
+ }
785
+ return str;
786
+ }
787
+
788
+ // src/next/config-manager.ts
787
789
  var TINA_FOLDER = "tina";
788
790
  var LEGACY_TINA_FOLDER = ".tina";
789
791
  var GENERATED_FOLDER = "__generated__";
@@ -792,17 +794,57 @@ var GRAPHQL_GQL_FILE = "schema.gql";
792
794
  var SCHEMA_JSON_FILE = "_schema.json";
793
795
  var LOOKUP_JSON_FILE = "_lookup.json";
794
796
  var ConfigManager = class {
797
+ config;
798
+ rootPath;
799
+ tinaFolderPath;
800
+ isUsingLegacyFolder;
801
+ tinaConfigFilePath;
802
+ tinaSpaPackagePath;
803
+ contentRootPath;
804
+ envFilePath;
805
+ generatedCachePath;
806
+ generatedFolderPath;
807
+ generatedFolderPathContentRepo;
808
+ generatedGraphQLGQLPath;
809
+ generatedGraphQLJSONPath;
810
+ generatedSchemaJSONPath;
811
+ generatedLookupJSONPath;
812
+ generatedTypesTSFilePath;
813
+ generatedTypesJSFilePath;
814
+ generatedTypesDFilePath;
815
+ generatedClientTSFilePath;
816
+ generatedClientJSFilePath;
817
+ generatedClientDFilePath;
818
+ generatedDatabaseClientJSFilePath;
819
+ generatedDatabaseClientTSFilePath;
820
+ generatedDatabaseClientDFilePath;
821
+ generatedQueriesFilePath;
822
+ generatedFragmentsFilePath;
823
+ generatedQueriesAndFragmentsGlob;
824
+ userQueriesAndFragmentsGlob;
825
+ publicFolderPath;
826
+ outputFolderPath;
827
+ outputHTMLFilePath;
828
+ outputGitignorePath;
829
+ selfHostedDatabaseFilePath;
830
+ prebuildFilePath;
831
+ spaRootPath;
832
+ spaMainPath;
833
+ spaHTMLPath;
834
+ tinaGraphQLVersionFromCLI;
835
+ legacyNoSDK;
836
+ watchList;
795
837
  constructor({
796
838
  rootPath = process.cwd(),
797
839
  tinaGraphQLVersion,
798
840
  legacyNoSDK
799
841
  }) {
800
- this.rootPath = (0, import_normalize_path2.default)(rootPath);
842
+ this.rootPath = normalizePath2(rootPath);
801
843
  this.tinaGraphQLVersionFromCLI = tinaGraphQLVersion;
802
844
  this.legacyNoSDK = legacyNoSDK;
803
845
  }
804
846
  isUsingTs() {
805
- return [".ts", ".tsx"].includes(import_path2.default.extname(this.tinaConfigFilePath));
847
+ return [".ts", ".tsx"].includes(path3.extname(this.tinaConfigFilePath));
806
848
  }
807
849
  hasSelfHostedConfig() {
808
850
  return !!this.selfHostedDatabaseFilePath;
@@ -811,20 +853,20 @@ var ConfigManager = class {
811
853
  return this.rootPath !== this.contentRootPath;
812
854
  }
813
855
  shouldSkipSDK() {
814
- var _a;
815
856
  if (this.legacyNoSDK) {
816
857
  return this.legacyNoSDK;
817
858
  }
818
- return ((_a = this.config.client) == null ? void 0 : _a.skip) || false;
859
+ return this.config.client?.skip || false;
819
860
  }
820
861
  async processConfig() {
862
+ const require2 = createRequire(import.meta.url);
821
863
  this.tinaFolderPath = await this.getTinaFolderPath(this.rootPath);
822
- this.envFilePath = import_path2.default.resolve(
823
- import_path2.default.join(this.tinaFolderPath, "..", ".env")
864
+ this.envFilePath = path3.resolve(
865
+ path3.join(this.tinaFolderPath, "..", ".env")
824
866
  );
825
867
  dotenv.config({ path: this.envFilePath });
826
868
  this.tinaConfigFilePath = await this.getPathWithExtension(
827
- import_path2.default.join(this.tinaFolderPath, "config")
869
+ path3.join(this.tinaFolderPath, "config")
828
870
  );
829
871
  if (!this.tinaConfigFilePath) {
830
872
  throw new Error(
@@ -832,89 +874,89 @@ var ConfigManager = class {
832
874
  );
833
875
  }
834
876
  this.selfHostedDatabaseFilePath = await this.getPathWithExtension(
835
- import_path2.default.join(this.tinaFolderPath, "database")
877
+ path3.join(this.tinaFolderPath, "database")
836
878
  );
837
- this.generatedFolderPath = import_path2.default.join(this.tinaFolderPath, GENERATED_FOLDER);
838
- this.generatedCachePath = import_path2.default.join(
879
+ this.generatedFolderPath = path3.join(this.tinaFolderPath, GENERATED_FOLDER);
880
+ this.generatedCachePath = path3.join(
839
881
  this.generatedFolderPath,
840
882
  ".cache",
841
883
  String((/* @__PURE__ */ new Date()).getTime())
842
884
  );
843
- this.generatedGraphQLGQLPath = import_path2.default.join(
885
+ this.generatedGraphQLGQLPath = path3.join(
844
886
  this.generatedFolderPath,
845
887
  GRAPHQL_GQL_FILE
846
888
  );
847
- this.generatedGraphQLJSONPath = import_path2.default.join(
889
+ this.generatedGraphQLJSONPath = path3.join(
848
890
  this.generatedFolderPath,
849
891
  GRAPHQL_JSON_FILE
850
892
  );
851
- this.generatedSchemaJSONPath = import_path2.default.join(
893
+ this.generatedSchemaJSONPath = path3.join(
852
894
  this.generatedFolderPath,
853
895
  SCHEMA_JSON_FILE
854
896
  );
855
- this.generatedLookupJSONPath = import_path2.default.join(
897
+ this.generatedLookupJSONPath = path3.join(
856
898
  this.generatedFolderPath,
857
899
  LOOKUP_JSON_FILE
858
900
  );
859
- this.generatedQueriesFilePath = import_path2.default.join(
901
+ this.generatedQueriesFilePath = path3.join(
860
902
  this.generatedFolderPath,
861
903
  "queries.gql"
862
904
  );
863
- this.generatedFragmentsFilePath = import_path2.default.join(
905
+ this.generatedFragmentsFilePath = path3.join(
864
906
  this.generatedFolderPath,
865
907
  "frags.gql"
866
908
  );
867
- this.generatedTypesTSFilePath = import_path2.default.join(
909
+ this.generatedTypesTSFilePath = path3.join(
868
910
  this.generatedFolderPath,
869
911
  "types.ts"
870
912
  );
871
- this.generatedTypesJSFilePath = import_path2.default.join(
913
+ this.generatedTypesJSFilePath = path3.join(
872
914
  this.generatedFolderPath,
873
915
  "types.js"
874
916
  );
875
- this.generatedTypesDFilePath = import_path2.default.join(
917
+ this.generatedTypesDFilePath = path3.join(
876
918
  this.generatedFolderPath,
877
919
  "types.d.ts"
878
920
  );
879
- this.userQueriesAndFragmentsGlob = import_path2.default.join(
921
+ this.userQueriesAndFragmentsGlob = path3.join(
880
922
  this.tinaFolderPath,
881
923
  "queries/**/*.{graphql,gql}"
882
924
  );
883
- this.generatedQueriesAndFragmentsGlob = import_path2.default.join(
925
+ this.generatedQueriesAndFragmentsGlob = path3.join(
884
926
  this.generatedFolderPath,
885
927
  "*.{graphql,gql}"
886
928
  );
887
- this.generatedClientTSFilePath = import_path2.default.join(
929
+ this.generatedClientTSFilePath = path3.join(
888
930
  this.generatedFolderPath,
889
931
  "client.ts"
890
932
  );
891
- this.generatedClientJSFilePath = import_path2.default.join(
933
+ this.generatedClientJSFilePath = path3.join(
892
934
  this.generatedFolderPath,
893
935
  "client.js"
894
936
  );
895
- this.generatedClientDFilePath = import_path2.default.join(
937
+ this.generatedClientDFilePath = path3.join(
896
938
  this.generatedFolderPath,
897
939
  "client.d.ts"
898
940
  );
899
- this.generatedDatabaseClientDFilePath = import_path2.default.join(
941
+ this.generatedDatabaseClientDFilePath = path3.join(
900
942
  this.generatedFolderPath,
901
943
  "databaseClient.d.ts"
902
944
  );
903
- this.generatedDatabaseClientTSFilePath = import_path2.default.join(
945
+ this.generatedDatabaseClientTSFilePath = path3.join(
904
946
  this.generatedFolderPath,
905
947
  "databaseClient.ts"
906
948
  );
907
- this.generatedDatabaseClientJSFilePath = import_path2.default.join(
949
+ this.generatedDatabaseClientJSFilePath = path3.join(
908
950
  this.generatedFolderPath,
909
951
  "databaseClient.js"
910
952
  );
911
- const clientExists = this.isUsingTs() ? await import_fs_extra2.default.pathExists(this.generatedClientTSFilePath) : await import_fs_extra2.default.pathExists(this.generatedClientJSFilePath);
953
+ const clientExists = this.isUsingTs() ? await fs2.pathExists(this.generatedClientTSFilePath) : await fs2.pathExists(this.generatedClientJSFilePath);
912
954
  if (!clientExists) {
913
955
  const file = "export default ()=>({})\nexport const client = ()=>({})";
914
956
  if (this.isUsingTs()) {
915
- await import_fs_extra2.default.outputFile(this.generatedClientTSFilePath, file);
957
+ await fs2.outputFile(this.generatedClientTSFilePath, file);
916
958
  } else {
917
- await import_fs_extra2.default.outputFile(this.generatedClientJSFilePath, file);
959
+ await fs2.outputFile(this.generatedClientJSFilePath, file);
918
960
  }
919
961
  }
920
962
  const { config: config2, prebuildPath, watchList } = await this.loadConfigFile(
@@ -924,30 +966,29 @@ var ConfigManager = class {
924
966
  this.watchList = watchList;
925
967
  this.config = config2;
926
968
  this.prebuildFilePath = prebuildPath;
927
- this.publicFolderPath = import_path2.default.join(
969
+ this.publicFolderPath = path3.join(
928
970
  this.rootPath,
929
971
  this.config.build.publicFolder
930
972
  );
931
- this.outputFolderPath = import_path2.default.join(
973
+ this.outputFolderPath = path3.join(
932
974
  this.publicFolderPath,
933
975
  this.config.build.outputFolder
934
976
  );
935
- this.outputHTMLFilePath = import_path2.default.join(this.outputFolderPath, "index.html");
936
- this.outputGitignorePath = import_path2.default.join(this.outputFolderPath, ".gitignore");
937
- const fullLocalContentPath = import_path2.default.join(
938
- this.tinaFolderPath,
939
- this.config.localContentPath || ""
977
+ this.outputHTMLFilePath = path3.join(this.outputFolderPath, "index.html");
978
+ this.outputGitignorePath = path3.join(this.outputFolderPath, ".gitignore");
979
+ const fullLocalContentPath = stripNativeTrailingSlash(
980
+ path3.join(this.tinaFolderPath, this.config.localContentPath || "")
940
981
  );
941
982
  if (this.config.localContentPath) {
942
- const localContentPathExists = await import_fs_extra2.default.pathExists(fullLocalContentPath);
983
+ const localContentPathExists = await fs2.pathExists(fullLocalContentPath);
943
984
  if (localContentPathExists) {
944
985
  logger.info(`Using separate content repo at ${fullLocalContentPath}`);
945
986
  this.contentRootPath = fullLocalContentPath;
946
987
  } else {
947
988
  logger.warn(
948
- `${import_chalk3.default.yellow("Warning:")} The localContentPath ${import_chalk3.default.cyan(
989
+ `${chalk3.yellow("Warning:")} The localContentPath ${chalk3.cyan(
949
990
  fullLocalContentPath
950
- )} does not exist. Please create it or remove the localContentPath from your config file at ${import_chalk3.default.cyan(
991
+ )} does not exist. Please create it or remove the localContentPath from your config file at ${chalk3.cyan(
951
992
  this.tinaConfigFilePath
952
993
  )}`
953
994
  );
@@ -956,22 +997,22 @@ var ConfigManager = class {
956
997
  if (!this.contentRootPath) {
957
998
  this.contentRootPath = this.rootPath;
958
999
  }
959
- this.generatedFolderPathContentRepo = import_path2.default.join(
1000
+ this.generatedFolderPathContentRepo = path3.join(
960
1001
  await this.getTinaFolderPath(this.contentRootPath),
961
1002
  GENERATED_FOLDER
962
1003
  );
963
- this.spaMainPath = require.resolve("@tinacms/app");
964
- this.spaRootPath = import_path2.default.join(this.spaMainPath, "..", "..");
1004
+ this.spaMainPath = require2.resolve("@tinacms/app");
1005
+ this.spaRootPath = path3.join(this.spaMainPath, "..", "..");
965
1006
  }
966
1007
  async getTinaFolderPath(rootPath) {
967
- const tinaFolderPath = import_path2.default.join(rootPath, TINA_FOLDER);
968
- const tinaFolderExists = await import_fs_extra2.default.pathExists(tinaFolderPath);
1008
+ const tinaFolderPath = path3.join(rootPath, TINA_FOLDER);
1009
+ const tinaFolderExists = await fs2.pathExists(tinaFolderPath);
969
1010
  if (tinaFolderExists) {
970
1011
  this.isUsingLegacyFolder = false;
971
1012
  return tinaFolderPath;
972
1013
  }
973
- const legacyFolderPath = import_path2.default.join(rootPath, LEGACY_TINA_FOLDER);
974
- const legacyFolderExists = await import_fs_extra2.default.pathExists(legacyFolderPath);
1014
+ const legacyFolderPath = path3.join(rootPath, LEGACY_TINA_FOLDER);
1015
+ const legacyFolderExists = await fs2.pathExists(legacyFolderPath);
975
1016
  if (legacyFolderExists) {
976
1017
  this.isUsingLegacyFolder = true;
977
1018
  return legacyFolderPath;
@@ -990,8 +1031,8 @@ var ConfigManager = class {
990
1031
  patch: version2[2] || "x"
991
1032
  };
992
1033
  }
993
- const generatedSchema = import_fs_extra2.default.readJSONSync(this.generatedSchemaJSONPath);
994
- if (!generatedSchema || !(typeof (generatedSchema == null ? void 0 : generatedSchema.version) !== "undefined")) {
1034
+ const generatedSchema = fs2.readJSONSync(this.generatedSchemaJSONPath);
1035
+ if (!generatedSchema || !(typeof generatedSchema?.version !== "undefined")) {
995
1036
  throw new Error(
996
1037
  `Can not find Tina GraphQL version in ${this.generatedSchemaJSONPath}`
997
1038
  );
@@ -1037,7 +1078,7 @@ var ConfigManager = class {
1037
1078
  return;
1038
1079
  }
1039
1080
  const filepathWithExtension = `${filepath}.${ext}`;
1040
- const exists = import_fs_extra2.default.existsSync(filepathWithExtension);
1081
+ const exists = fs2.existsSync(filepathWithExtension);
1041
1082
  if (exists) {
1042
1083
  result = filepathWithExtension;
1043
1084
  }
@@ -1046,33 +1087,45 @@ var ConfigManager = class {
1046
1087
  return result;
1047
1088
  }
1048
1089
  async loadDatabaseFile() {
1049
- const tmpdir = import_path2.default.join(import_os.default.tmpdir(), Date.now().toString());
1050
- const outfile = import_path2.default.join(tmpdir, "database.build.js");
1090
+ const tmpdir = path3.join(os.tmpdir(), Date.now().toString());
1091
+ const outfile = path3.join(tmpdir, "database.build.mjs");
1051
1092
  await esbuild.build({
1052
1093
  entryPoints: [this.selfHostedDatabaseFilePath],
1053
1094
  bundle: true,
1054
1095
  platform: "node",
1096
+ format: "esm",
1055
1097
  outfile,
1056
- loader: loaders
1098
+ loader: loaders,
1099
+ // Provide a require() polyfill for ESM bundles containing CommonJS packages.
1100
+ // Some bundled packages (e.g., 'scmp' used by 'mongodb-level') use require('crypto').
1101
+ // When esbuild inlines these CommonJS packages, it keeps the require() calls,
1102
+ // but ESM doesn't have a global require. This banner creates one using Node.js's
1103
+ // official createRequire API, allowing the bundled CommonJS code to work in ESM.
1104
+ banner: {
1105
+ js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
1106
+ }
1057
1107
  });
1058
- const result = require(outfile);
1059
- import_fs_extra2.default.removeSync(outfile);
1108
+ const result = await import(pathToFileURL(outfile).href);
1109
+ fs2.removeSync(outfile);
1060
1110
  return result.default;
1061
1111
  }
1062
1112
  async loadConfigFile(generatedFolderPath, configFilePath) {
1063
- const tmpdir = import_path2.default.join(import_os.default.tmpdir(), Date.now().toString());
1064
- const preBuildConfigPath = import_path2.default.join(
1113
+ const tmpdir = path3.join(os.tmpdir(), Date.now().toString());
1114
+ const preBuildConfigPath = path3.join(
1065
1115
  this.generatedFolderPath,
1066
1116
  "config.prebuild.jsx"
1067
1117
  );
1068
- const outfile = import_path2.default.join(tmpdir, "config.build.jsx");
1069
- const outfile2 = import_path2.default.join(tmpdir, "config.build.js");
1070
- const tempTSConfigFile = import_path2.default.join(tmpdir, "tsconfig.json");
1071
- import_fs_extra2.default.outputFileSync(tempTSConfigFile, "{}");
1118
+ const outfile = path3.join(tmpdir, "config.build.jsx");
1119
+ const outfile2 = path3.join(tmpdir, "config.build.mjs");
1120
+ const tempTSConfigFile = path3.join(tmpdir, "tsconfig.json");
1121
+ const esmRequireBanner = {
1122
+ js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
1123
+ };
1124
+ fs2.outputFileSync(tempTSConfigFile, "{}");
1072
1125
  const result2 = await esbuild.build({
1073
1126
  entryPoints: [configFilePath],
1074
1127
  bundle: true,
1075
- target: ["es2020"],
1128
+ target: ["esnext"],
1076
1129
  platform: "browser",
1077
1130
  format: "esm",
1078
1131
  logLevel: "silent",
@@ -1092,31 +1145,34 @@ var ConfigManager = class {
1092
1145
  await esbuild.build({
1093
1146
  entryPoints: [configFilePath],
1094
1147
  bundle: true,
1095
- target: ["es2020"],
1148
+ target: ["esnext"],
1096
1149
  logLevel: "silent",
1097
1150
  platform: "node",
1151
+ format: "esm",
1098
1152
  outfile,
1099
- loader: loaders
1153
+ loader: loaders,
1154
+ banner: esmRequireBanner
1100
1155
  });
1101
1156
  await esbuild.build({
1102
1157
  entryPoints: [outfile],
1103
1158
  bundle: true,
1104
- // Suppress warning about comparison with -0 from client module
1105
1159
  logLevel: "silent",
1106
1160
  platform: "node",
1161
+ target: ["esnext"],
1162
+ format: "esm",
1107
1163
  outfile: outfile2,
1108
1164
  loader: loaders
1109
1165
  });
1110
1166
  let result;
1111
1167
  try {
1112
- result = require(outfile2);
1168
+ result = await import(pathToFileURL(outfile2).href);
1113
1169
  } catch (e) {
1114
1170
  console.error("Unexpected error loading config");
1115
1171
  console.error(e);
1116
1172
  throw e;
1117
1173
  }
1118
- import_fs_extra2.default.removeSync(outfile);
1119
- import_fs_extra2.default.removeSync(outfile2);
1174
+ fs2.removeSync(outfile);
1175
+ fs2.removeSync(outfile2);
1120
1176
  return {
1121
1177
  config: result.default,
1122
1178
  prebuildPath: preBuildConfigPath,
@@ -1151,24 +1207,28 @@ var loaders = {
1151
1207
  };
1152
1208
 
1153
1209
  // src/next/database.ts
1154
- var import_graphql7 = require("@tinacms/graphql");
1155
- var import_readable_stream = require("readable-stream");
1156
- var import_net = require("net");
1157
- var import_many_level = require("many-level");
1158
- var import_memory_level = require("memory-level");
1210
+ import {
1211
+ createDatabaseInternal,
1212
+ FilesystemBridge,
1213
+ TinaLevelClient
1214
+ } from "@tinacms/graphql";
1215
+ import { pipeline } from "readable-stream";
1216
+ import { createServer } from "net";
1217
+ import { ManyLevelHost } from "many-level";
1218
+ import { MemoryLevel } from "memory-level";
1159
1219
  var createDBServer = (port) => {
1160
- const levelHost = new import_many_level.ManyLevelHost(
1220
+ const levelHost = new ManyLevelHost(
1161
1221
  // @ts-ignore
1162
- new import_memory_level.MemoryLevel({
1222
+ new MemoryLevel({
1163
1223
  valueEncoding: "json"
1164
1224
  })
1165
1225
  );
1166
- const dbServer = (0, import_net.createServer)(function(socket) {
1167
- return (0, import_readable_stream.pipeline)(socket, levelHost.createRpcStream(), socket, () => {
1226
+ const dbServer = createServer(function(socket) {
1227
+ return pipeline(socket, levelHost.createRpcStream(), socket, () => {
1168
1228
  });
1169
1229
  });
1170
1230
  dbServer.once("error", (err) => {
1171
- if ((err == null ? void 0 : err.code) === "EADDRINUSE") {
1231
+ if (err?.code === "EADDRINUSE") {
1172
1232
  throw new Error(
1173
1233
  `Tina Dev server is already in use. Datalayer server is busy on port ${port}`
1174
1234
  );
@@ -1178,7 +1238,7 @@ var createDBServer = (port) => {
1178
1238
  };
1179
1239
  async function createAndInitializeDatabase(configManager, datalayerPort, bridgeOverride) {
1180
1240
  let database;
1181
- const bridge = bridgeOverride || new import_graphql7.FilesystemBridge(configManager.rootPath, configManager.contentRootPath);
1241
+ const bridge = bridgeOverride || new FilesystemBridge(configManager.rootPath, configManager.contentRootPath);
1182
1242
  if (configManager.hasSelfHostedConfig() && configManager.config.contentApiUrlOverride) {
1183
1243
  database = await configManager.loadDatabaseFile();
1184
1244
  database.bridge = bridge;
@@ -1190,9 +1250,9 @@ async function createAndInitializeDatabase(configManager, datalayerPort, bridgeO
1190
1250
  )} but there was no "contentApiUrlOverride" set. Falling back to built-in datalayer`
1191
1251
  );
1192
1252
  }
1193
- const level = new import_graphql7.TinaLevelClient(datalayerPort);
1253
+ const level = new TinaLevelClient(datalayerPort);
1194
1254
  level.openConnection();
1195
- database = (0, import_graphql7.createDatabaseInternal)({
1255
+ database = createDatabaseInternal({
1196
1256
  bridge,
1197
1257
  level,
1198
1258
  tinaDirectory: configManager.isUsingLegacyFolder ? LEGACY_TINA_FOLDER : TINA_FOLDER
@@ -1202,17 +1262,17 @@ async function createAndInitializeDatabase(configManager, datalayerPort, bridgeO
1202
1262
  }
1203
1263
 
1204
1264
  // src/next/commands/baseCommands.ts
1205
- var import_clipanion = require("clipanion");
1206
- var import_chalk4 = __toESM(require("chalk"));
1265
+ import { Command, Option } from "clipanion";
1266
+ import chalk4 from "chalk";
1207
1267
 
1208
1268
  // src/utils/start-subprocess.ts
1209
- var import_child_process = __toESM(require("child_process"));
1269
+ import childProcess from "child_process";
1210
1270
  var startSubprocess2 = async ({ command: command2 }) => {
1211
1271
  if (typeof command2 === "string") {
1212
1272
  const commands = command2.split(" ");
1213
1273
  const firstCommand = commands[0];
1214
1274
  const args = commands.slice(1) || [];
1215
- const ps = import_child_process.default.spawn(firstCommand, args, {
1275
+ const ps = childProcess.spawn(firstCommand, args, {
1216
1276
  stdio: "inherit",
1217
1277
  shell: true
1218
1278
  });
@@ -1236,45 +1296,42 @@ stack: ${code.stack || "No stack was provided"}`);
1236
1296
  };
1237
1297
 
1238
1298
  // src/next/commands/baseCommands.ts
1239
- var import_graphql8 = require("@tinacms/graphql");
1240
- var import_fs_extra3 = __toESM(require("fs-extra"));
1241
- var BaseCommand = class extends import_clipanion.Command {
1242
- constructor() {
1243
- super(...arguments);
1244
- this.experimentalDataLayer = import_clipanion.Option.Boolean("--experimentalData", {
1245
- description: "DEPRECATED - Build the server with additional data querying capabilities"
1246
- });
1247
- this.isomorphicGitBridge = import_clipanion.Option.Boolean("--isomorphicGitBridge", {
1248
- description: "DEPRECATED - Enable Isomorphic Git Bridge Implementation"
1249
- });
1250
- this.port = import_clipanion.Option.String("-p,--port", "4001", {
1251
- description: "Specify a port to run the server on. (default 4001)"
1252
- });
1253
- this.datalayerPort = import_clipanion.Option.String("--datalayer-port", "9000", {
1254
- description: "Specify a port to run the datalayer server on. (default 9000)"
1255
- });
1256
- this.subCommand = import_clipanion.Option.String("-c,--command", {
1257
- description: "The sub-command to run"
1258
- });
1259
- this.rootPath = import_clipanion.Option.String("--rootPath", {
1260
- description: "Specify the root directory to run the CLI from (defaults to current working directory)"
1261
- });
1262
- this.verbose = import_clipanion.Option.Boolean("-v,--verbose", false, {
1263
- description: "increase verbosity of logged output"
1264
- });
1265
- this.noSDK = import_clipanion.Option.Boolean("--noSDK", false, {
1266
- description: "DEPRECATED - This should now be set in the config at client.skip = true'. Don't generate the generated client SDK"
1267
- });
1268
- this.noTelemetry = import_clipanion.Option.Boolean("--noTelemetry", false, {
1269
- description: "Disable anonymous telemetry that is collected"
1270
- });
1271
- }
1299
+ import { getChangedFiles, getSha, shaExists } from "@tinacms/graphql";
1300
+ import fs3 from "fs-extra";
1301
+ var BaseCommand = class extends Command {
1302
+ experimentalDataLayer = Option.Boolean("--experimentalData", {
1303
+ description: "DEPRECATED - Build the server with additional data querying capabilities"
1304
+ });
1305
+ isomorphicGitBridge = Option.Boolean("--isomorphicGitBridge", {
1306
+ description: "DEPRECATED - Enable Isomorphic Git Bridge Implementation"
1307
+ });
1308
+ port = Option.String("-p,--port", "4001", {
1309
+ description: "Specify a port to run the server on. (default 4001)"
1310
+ });
1311
+ datalayerPort = Option.String("--datalayer-port", "9000", {
1312
+ description: "Specify a port to run the datalayer server on. (default 9000)"
1313
+ });
1314
+ subCommand = Option.String("-c,--command", {
1315
+ description: "The sub-command to run"
1316
+ });
1317
+ rootPath = Option.String("--rootPath", {
1318
+ description: "Specify the root directory to run the CLI from (defaults to current working directory)"
1319
+ });
1320
+ verbose = Option.Boolean("-v,--verbose", false, {
1321
+ description: "increase verbosity of logged output"
1322
+ });
1323
+ noSDK = Option.Boolean("--noSDK", false, {
1324
+ description: "DEPRECATED - This should now be set in the config at client.skip = true'. Don't generate the generated client SDK"
1325
+ });
1326
+ noTelemetry = Option.Boolean("--noTelemetry", false, {
1327
+ description: "Disable anonymous telemetry that is collected"
1328
+ });
1272
1329
  async startSubCommand() {
1273
1330
  let subProc;
1274
1331
  if (this.subCommand) {
1275
1332
  subProc = await startSubprocess2({ command: this.subCommand });
1276
1333
  logger.info(
1277
- `Running web application with command: ${import_chalk4.default.cyan(this.subCommand)}`
1334
+ `Running web application with command: ${chalk4.cyan(this.subCommand)}`
1278
1335
  );
1279
1336
  }
1280
1337
  function exitHandler(options, exitCode) {
@@ -1319,11 +1376,10 @@ var BaseCommand = class extends import_clipanion.Command {
1319
1376
  const warnings = [];
1320
1377
  await spin({
1321
1378
  waitFor: async () => {
1322
- var _a, _b;
1323
1379
  const rootPath = configManager.rootPath;
1324
1380
  let sha;
1325
1381
  try {
1326
- sha = await (0, import_graphql8.getSha)({ fs: import_fs_extra3.default, dir: rootPath });
1382
+ sha = await getSha({ fs: fs3, dir: rootPath });
1327
1383
  } catch (e) {
1328
1384
  if (partialReindex) {
1329
1385
  console.error(
@@ -1333,7 +1389,7 @@ var BaseCommand = class extends import_clipanion.Command {
1333
1389
  }
1334
1390
  }
1335
1391
  const lastSha = await database.getMetadata("lastSha");
1336
- const exists = lastSha && await (0, import_graphql8.shaExists)({ fs: import_fs_extra3.default, dir: rootPath, sha: lastSha });
1392
+ const exists = lastSha && await shaExists({ fs: fs3, dir: rootPath, sha: lastSha });
1337
1393
  let res;
1338
1394
  if (partialReindex && lastSha && exists && sha) {
1339
1395
  const pathFilter = {};
@@ -1344,18 +1400,18 @@ var BaseCommand = class extends import_clipanion.Command {
1344
1400
  }
1345
1401
  for (const collection of tinaSchema.getCollections()) {
1346
1402
  pathFilter[collection.path] = {
1347
- matches: ((_a = collection.match) == null ? void 0 : _a.exclude) || ((_b = collection.match) == null ? void 0 : _b.include) ? tinaSchema.getMatches({ collection }) : void 0
1403
+ matches: collection.match?.exclude || collection.match?.include ? tinaSchema.getMatches({ collection }) : void 0
1348
1404
  };
1349
1405
  }
1350
- const { added, modified, deleted } = await (0, import_graphql8.getChangedFiles)({
1351
- fs: import_fs_extra3.default,
1406
+ const { added, modified, deleted } = await getChangedFiles({
1407
+ fs: fs3,
1352
1408
  dir: rootPath,
1353
1409
  from: lastSha,
1354
1410
  to: sha,
1355
1411
  pathFilter
1356
1412
  });
1357
1413
  const tinaPathUpdates = modified.filter(
1358
- (path14) => path14.startsWith(".tina/__generated__/_schema.json") || path14.startsWith("tina/tina-lock.json")
1414
+ (path15) => path15.startsWith(".tina/__generated__/_schema.json") || path15.startsWith("tina/tina-lock.json")
1359
1415
  );
1360
1416
  if (tinaPathUpdates.length > 0) {
1361
1417
  res = await database.indexContent({
@@ -1379,7 +1435,7 @@ var BaseCommand = class extends import_clipanion.Command {
1379
1435
  if (sha) {
1380
1436
  await database.setMetadata("lastSha", sha);
1381
1437
  }
1382
- if (res == null ? void 0 : res.warnings) {
1438
+ if (res?.warnings) {
1383
1439
  warnings.push(...res.warnings);
1384
1440
  }
1385
1441
  },
@@ -1433,7 +1489,7 @@ var errorHTML = `<style type="text/css">
1433
1489
  the assets for this page.
1434
1490
  </p>
1435
1491
  <p>
1436
- Please visit <a href="https://tina.io/docs/tina-cloud/faq/#how-do-i-resolve-failed-loading-tinacms-assets-error">this doc</a> for help.
1492
+ Please visit <a href="https://tina.io/docs/r/FAQ/#13-how-do-i-resolve-failed-loading-tinacms-assets-error">this doc</a> for help.
1437
1493
  </p>
1438
1494
  </div>
1439
1495
  </div>`.trim().replace(/[\r\n\s]+/g, " ");
@@ -1471,34 +1527,38 @@ var devHTML = (port) => `<!DOCTYPE html>
1471
1527
  </html>`;
1472
1528
 
1473
1529
  // src/next/commands/dev-command/server/index.ts
1474
- var import_vite3 = require("vite");
1530
+ import { createServer as createViteServer } from "vite";
1475
1531
 
1476
1532
  // src/next/vite/index.ts
1477
- var import_node_path2 = __toESM(require("path"));
1478
- var import_plugin_react = __toESM(require("@vitejs/plugin-react"));
1479
- var import_fs_extra4 = __toESM(require("fs-extra"));
1480
- var import_normalize_path3 = __toESM(require("normalize-path"));
1481
- var import_vite = require("vite");
1533
+ import path5 from "node:path";
1534
+ import react from "@vitejs/plugin-react";
1535
+ import fs4 from "fs-extra";
1536
+ import normalizePath3 from "normalize-path";
1537
+ import {
1538
+ splitVendorChunkPlugin
1539
+ } from "vite";
1482
1540
 
1483
1541
  // src/next/vite/tailwind.ts
1484
- var import_node_path = __toESM(require("path"));
1485
- var import_aspect_ratio = __toESM(require("@tailwindcss/aspect-ratio"));
1486
- var import_container_queries = __toESM(require("@tailwindcss/container-queries"));
1487
- var import_typography = __toESM(require("@tailwindcss/typography"));
1488
- var import_tailwindcss = __toESM(require("tailwindcss"));
1489
- var import_defaultTheme = __toESM(require("tailwindcss/defaultTheme.js"));
1542
+ import path4 from "node:path";
1543
+ import aspectRatio from "@tailwindcss/aspect-ratio";
1544
+ import containerQueries from "@tailwindcss/container-queries";
1545
+ import twTypography from "@tailwindcss/typography";
1546
+ import tailwind from "tailwindcss";
1547
+ import defaultTheme from "tailwindcss/defaultTheme.js";
1548
+ import { createRequire as createRequire2 } from "module";
1490
1549
  var tinaTailwind = (spaPath, prebuildFilePath) => {
1491
1550
  return {
1492
1551
  name: "vite-plugin-tina",
1493
1552
  // @ts-ignore
1494
1553
  config: (viteConfig) => {
1554
+ const require2 = createRequire2(import.meta.url);
1495
1555
  const plugins = [];
1496
1556
  const content = [
1497
- import_node_path.default.join(spaPath, "src/**/*.{vue,js,ts,jsx,tsx,svelte}"),
1557
+ path4.join(spaPath, "src/**/*.{vue,js,ts,jsx,tsx,svelte}"),
1498
1558
  prebuildFilePath,
1499
- require.resolve("tinacms")
1559
+ require2.resolve("tinacms")
1500
1560
  ];
1501
- const tw = (0, import_tailwindcss.default)({
1561
+ const tw = tailwind({
1502
1562
  theme: {
1503
1563
  columns: {
1504
1564
  auto: "auto",
@@ -1650,7 +1710,7 @@ var tinaTailwind = (spaPath, prebuildFilePath) => {
1650
1710
  },
1651
1711
  boxShadow: {
1652
1712
  xs: "0 0 0 1px rgba(0, 0, 0, 0.05)",
1653
- outline: "0 0 0 3px rgba(66, 153, 225, 0.5)"
1713
+ outline: "0 0 0 3px rgba(194, 65, 12, 0.2)"
1654
1714
  },
1655
1715
  colors: {
1656
1716
  blue: {
@@ -1686,6 +1746,9 @@ var tinaTailwind = (spaPath, prebuildFilePath) => {
1686
1746
  500: "#EC4815",
1687
1747
  600: "#DC4419"
1688
1748
  },
1749
+ "tina-orange": "#EC4815",
1750
+ "tina-orange-dark": "#C2410C",
1751
+ "tina-orange-light": "#FFF7ED",
1689
1752
  background: "#FFFFFF",
1690
1753
  foreground: "#0A0A0A",
1691
1754
  muted: "#F5F5F5",
@@ -1704,10 +1767,10 @@ var tinaTailwind = (spaPath, prebuildFilePath) => {
1704
1767
  "accent-foreground": "#171717",
1705
1768
  destructive: "#FF3B3B",
1706
1769
  "destructive-foreground": "#FAFAFA",
1707
- ring: "#0A0A0A"
1770
+ ring: "#C2410C"
1708
1771
  },
1709
1772
  fontFamily: {
1710
- sans: ["Inter", ...import_defaultTheme.default.fontFamily.sans]
1773
+ sans: ["Inter", ...defaultTheme.fontFamily.sans]
1711
1774
  },
1712
1775
  lineHeight: {
1713
1776
  3: "12px",
@@ -1732,9 +1795,9 @@ var tinaTailwind = (spaPath, prebuildFilePath) => {
1732
1795
  },
1733
1796
  content,
1734
1797
  plugins: [
1735
- (0, import_typography.default)({ className: "tina-prose" }),
1736
- import_aspect_ratio.default,
1737
- import_container_queries.default
1798
+ twTypography({ className: "tina-prose" }),
1799
+ aspectRatio,
1800
+ containerQueries
1738
1801
  ]
1739
1802
  });
1740
1803
  plugins.push(tw);
@@ -1755,35 +1818,35 @@ async function listFilesRecursively({
1755
1818
  config: config2,
1756
1819
  roothPath
1757
1820
  }) {
1758
- const fullDirectoryPath = import_node_path2.default.join(
1821
+ const fullDirectoryPath = path5.join(
1759
1822
  roothPath,
1760
1823
  config2.publicFolder,
1761
1824
  directoryPath
1762
1825
  );
1763
- const exists = await import_fs_extra4.default.pathExists(fullDirectoryPath);
1826
+ const exists = await fs4.pathExists(fullDirectoryPath);
1764
1827
  if (!exists) {
1765
1828
  return { "0": [] };
1766
1829
  }
1767
- const items = await import_fs_extra4.default.readdir(fullDirectoryPath);
1830
+ const items = await fs4.readdir(fullDirectoryPath);
1768
1831
  const staticMediaItems = [];
1769
1832
  for (const item of items) {
1770
- const itemPath = import_node_path2.default.join(fullDirectoryPath, item);
1771
- const stats = await import_fs_extra4.default.promises.lstat(itemPath);
1833
+ const itemPath = path5.join(fullDirectoryPath, item);
1834
+ const stats = await fs4.promises.lstat(itemPath);
1772
1835
  const staticMediaItem = {
1773
1836
  id: item,
1774
1837
  filename: item,
1775
1838
  type: stats.isDirectory() ? "dir" : "file",
1776
1839
  directory: `${directoryPath.replace(config2.mediaRoot, "")}`,
1777
- src: `/${import_node_path2.default.join(directoryPath, item)}`,
1840
+ src: `/${path5.join(directoryPath, item)}`,
1778
1841
  thumbnails: {
1779
- "75x75": `/${import_node_path2.default.join(directoryPath, item)}`,
1780
- "400x400": `/${import_node_path2.default.join(directoryPath, item)}`,
1781
- "1000x1000": `/${import_node_path2.default.join(directoryPath, item)}`
1842
+ "75x75": `/${path5.join(directoryPath, item)}`,
1843
+ "400x400": `/${path5.join(directoryPath, item)}`,
1844
+ "1000x1000": `/${path5.join(directoryPath, item)}`
1782
1845
  }
1783
1846
  };
1784
1847
  if (stats.isDirectory()) {
1785
1848
  staticMediaItem.children = await listFilesRecursively({
1786
- directoryPath: import_node_path2.default.join(directoryPath, item),
1849
+ directoryPath: path5.join(directoryPath, item),
1787
1850
  config: config2,
1788
1851
  roothPath
1789
1852
  });
@@ -1807,7 +1870,6 @@ var createConfig = async ({
1807
1870
  noWatch,
1808
1871
  rollupOptions
1809
1872
  }) => {
1810
- var _a, _b, _c, _d, _e, _f, _g, _h;
1811
1873
  const publicEnv = {};
1812
1874
  Object.keys(process.env).forEach((key) => {
1813
1875
  if (key.startsWith("TINA_PUBLIC_") || key.startsWith("NEXT_PUBLIC_") || key === "NODE_ENV" || key === "HEAD") {
@@ -1825,31 +1887,31 @@ var createConfig = async ({
1825
1887
  }
1826
1888
  }
1827
1889
  });
1828
- const staticMediaPath = import_node_path2.default.join(
1890
+ const staticMediaPath = path5.join(
1829
1891
  configManager.generatedFolderPath,
1830
1892
  "static-media.json"
1831
1893
  );
1832
- if ((_b = (_a = configManager.config.media) == null ? void 0 : _a.tina) == null ? void 0 : _b.static) {
1894
+ if (configManager.config.media?.tina?.static) {
1833
1895
  const staticMedia = await listFilesRecursively({
1834
- directoryPath: ((_c = configManager.config.media.tina) == null ? void 0 : _c.mediaRoot) || "",
1896
+ directoryPath: configManager.config.media.tina?.mediaRoot || "",
1835
1897
  config: configManager.config.media.tina,
1836
1898
  roothPath: configManager.rootPath
1837
1899
  });
1838
- await import_fs_extra4.default.outputFile(staticMediaPath, JSON.stringify(staticMedia, null, 2));
1900
+ await fs4.outputFile(staticMediaPath, JSON.stringify(staticMedia, null, 2));
1839
1901
  } else {
1840
- await import_fs_extra4.default.outputFile(staticMediaPath, `[]`);
1902
+ await fs4.outputFile(staticMediaPath, `[]`);
1841
1903
  }
1842
1904
  const alias = {
1843
1905
  TINA_IMPORT: configManager.prebuildFilePath,
1844
1906
  SCHEMA_IMPORT: configManager.generatedGraphQLJSONPath,
1845
1907
  STATIC_MEDIA_IMPORT: staticMediaPath,
1846
- crypto: import_node_path2.default.join(configManager.spaRootPath, "src", "dummy-client.ts"),
1847
- fs: import_node_path2.default.join(configManager.spaRootPath, "src", "dummy-client.ts"),
1848
- os: import_node_path2.default.join(configManager.spaRootPath, "src", "dummy-client.ts"),
1849
- path: import_node_path2.default.join(configManager.spaRootPath, "src", "dummy-client.ts")
1908
+ crypto: path5.join(configManager.spaRootPath, "src", "dummy-client.ts"),
1909
+ fs: path5.join(configManager.spaRootPath, "src", "dummy-client.ts"),
1910
+ os: path5.join(configManager.spaRootPath, "src", "dummy-client.ts"),
1911
+ path: path5.join(configManager.spaRootPath, "src", "dummy-client.ts")
1850
1912
  };
1851
1913
  if (configManager.shouldSkipSDK()) {
1852
- alias["CLIENT_IMPORT"] = import_node_path2.default.join(
1914
+ alias["CLIENT_IMPORT"] = path5.join(
1853
1915
  configManager.spaRootPath,
1854
1916
  "src",
1855
1917
  "dummy-client.ts"
@@ -1865,7 +1927,7 @@ var createConfig = async ({
1865
1927
  const version2 = `${fullVersion.major}.${fullVersion.minor}`;
1866
1928
  const config2 = {
1867
1929
  root: configManager.spaRootPath,
1868
- base: `/${basePath ? `${(0, import_normalize_path3.default)(basePath)}/` : ""}${(0, import_normalize_path3.default)(
1930
+ base: `/${basePath ? `${normalizePath3(basePath)}/` : ""}${normalizePath3(
1869
1931
  configManager.config.build.outputFolder
1870
1932
  )}/`,
1871
1933
  appType: "spa",
@@ -1892,7 +1954,7 @@ var createConfig = async ({
1892
1954
  // Used by picomatch https://github.com/micromatch/picomatch/blob/master/lib/utils.js#L4
1893
1955
  "process.platform": `"${process.platform}"`,
1894
1956
  __API_URL__: `"${apiURL}"`,
1895
- __BASE_PATH__: `"${((_e = (_d = configManager.config) == null ? void 0 : _d.build) == null ? void 0 : _e.basePath) || ""}"`,
1957
+ __BASE_PATH__: `"${configManager.config?.build?.basePath || ""}"`,
1896
1958
  __TINA_GRAPHQL_VERSION__: version2
1897
1959
  },
1898
1960
  logLevel: "error",
@@ -1904,7 +1966,7 @@ var createConfig = async ({
1904
1966
  include: ["react/jsx-runtime", "react/jsx-dev-runtime"]
1905
1967
  },
1906
1968
  server: {
1907
- host: (_h = (_g = (_f = configManager.config) == null ? void 0 : _f.build) == null ? void 0 : _g.host) != null ? _h : false,
1969
+ host: configManager.config?.build?.host ?? false,
1908
1970
  watch: noWatch ? {
1909
1971
  ignored: ["**/*"]
1910
1972
  } : {
@@ -1928,13 +1990,14 @@ var createConfig = async ({
1928
1990
  * `splitVendorChunkPlugin` is needed because `tinacms` is quite large,
1929
1991
  * Vite's chunking strategy chokes on memory issues for smaller machines (ie. on CI).
1930
1992
  */
1931
- (0, import_plugin_react.default)({
1993
+ react({
1932
1994
  babel: {
1933
1995
  // Supresses the warning [NOTE] babel The code generator has deoptimised the styling of
1934
1996
  compact: true
1935
- }
1997
+ },
1998
+ fastRefresh: false
1936
1999
  }),
1937
- (0, import_vite.splitVendorChunkPlugin)(),
2000
+ splitVendorChunkPlugin(),
1938
2001
  tinaTailwind(configManager.spaRootPath, configManager.prebuildFilePath),
1939
2002
  ...plugins
1940
2003
  ]
@@ -1943,21 +2006,21 @@ var createConfig = async ({
1943
2006
  };
1944
2007
 
1945
2008
  // src/next/vite/plugins.ts
1946
- var import_pluginutils = require("@rollup/pluginutils");
1947
- var import_fs = __toESM(require("fs"));
1948
- var import_vite2 = require("vite");
1949
- var import_esbuild2 = require("esbuild");
1950
- var import_path4 = __toESM(require("path"));
1951
- var import_body_parser = __toESM(require("body-parser"));
1952
- var import_cors = __toESM(require("cors"));
1953
- var import_graphql9 = require("@tinacms/graphql");
2009
+ import { createFilter } from "@rollup/pluginutils";
2010
+ import fs6 from "fs";
2011
+ import { transformWithEsbuild } from "vite";
2012
+ import { transform as esbuildTransform } from "esbuild";
2013
+ import path7 from "path";
2014
+ import bodyParser from "body-parser";
2015
+ import cors from "cors";
2016
+ import { resolve as gqlResolve } from "@tinacms/graphql";
1954
2017
 
1955
2018
  // src/next/commands/dev-command/server/media.ts
1956
- var import_fs_extra5 = __toESM(require("fs-extra"));
1957
- var import_path3 = __toESM(require("path"));
1958
- var import_busboy = __toESM(require("busboy"));
2019
+ import fs5 from "fs-extra";
2020
+ import path6, { join } from "path";
2021
+ import busboy from "busboy";
1959
2022
  var createMediaRouter = (config2) => {
1960
- const mediaFolder = import_path3.default.join(
2023
+ const mediaFolder = path6.join(
1961
2024
  config2.rootPath,
1962
2025
  config2.publicFolder,
1963
2026
  config2.mediaRoot
@@ -1981,13 +2044,12 @@ var createMediaRouter = (config2) => {
1981
2044
  res.end(JSON.stringify(didDelete));
1982
2045
  };
1983
2046
  const handlePost = async function(req, res) {
1984
- const bb = (0, import_busboy.default)({ headers: req.headers });
2047
+ const bb = busboy({ headers: req.headers });
1985
2048
  bb.on("file", async (_name, file, _info) => {
1986
- var _a;
1987
- const fullPath = decodeURI((_a = req.url) == null ? void 0 : _a.slice("/media/upload/".length));
1988
- const saveTo = import_path3.default.join(mediaFolder, ...fullPath.split("/"));
1989
- await import_fs_extra5.default.ensureDir(import_path3.default.dirname(saveTo));
1990
- file.pipe(import_fs_extra5.default.createWriteStream(saveTo));
2049
+ const fullPath = decodeURI(req.url?.slice("/media/upload/".length));
2050
+ const saveTo = path6.join(mediaFolder, ...fullPath.split("/"));
2051
+ await fs5.ensureDir(path6.dirname(saveTo));
2052
+ file.pipe(fs5.createWriteStream(saveTo));
1991
2053
  });
1992
2054
  bb.on("error", (error) => {
1993
2055
  res.statusCode = 500;
@@ -2013,6 +2075,9 @@ var parseMediaFolder = (str) => {
2013
2075
  return returnString;
2014
2076
  };
2015
2077
  var MediaModel = class {
2078
+ rootPath;
2079
+ publicFolder;
2080
+ mediaRoot;
2016
2081
  constructor({ rootPath, publicFolder, mediaRoot }) {
2017
2082
  this.rootPath = rootPath;
2018
2083
  this.mediaRoot = mediaRoot;
@@ -2020,23 +2085,23 @@ var MediaModel = class {
2020
2085
  }
2021
2086
  async listMedia(args) {
2022
2087
  try {
2023
- const folderPath = (0, import_path3.join)(
2088
+ const folderPath = join(
2024
2089
  this.rootPath,
2025
2090
  this.publicFolder,
2026
2091
  this.mediaRoot,
2027
2092
  decodeURIComponent(args.searchPath)
2028
2093
  );
2029
2094
  const searchPath = parseMediaFolder(args.searchPath);
2030
- if (!await import_fs_extra5.default.pathExists(folderPath)) {
2095
+ if (!await fs5.pathExists(folderPath)) {
2031
2096
  return {
2032
2097
  files: [],
2033
2098
  directories: []
2034
2099
  };
2035
2100
  }
2036
- const filesStr = await import_fs_extra5.default.readdir(folderPath);
2101
+ const filesStr = await fs5.readdir(folderPath);
2037
2102
  const filesProm = filesStr.map(async (file) => {
2038
- const filePath = (0, import_path3.join)(folderPath, file);
2039
- const stat = await import_fs_extra5.default.stat(filePath);
2103
+ const filePath = join(folderPath, file);
2104
+ const stat = await fs5.stat(filePath);
2040
2105
  let src = `/${file}`;
2041
2106
  const isFile = stat.isFile();
2042
2107
  if (!isFile) {
@@ -2086,24 +2151,24 @@ var MediaModel = class {
2086
2151
  return {
2087
2152
  files: [],
2088
2153
  directories: [],
2089
- error: error == null ? void 0 : error.toString()
2154
+ error: error?.toString()
2090
2155
  };
2091
2156
  }
2092
2157
  }
2093
2158
  async deleteMedia(args) {
2094
2159
  try {
2095
- const file = (0, import_path3.join)(
2160
+ const file = join(
2096
2161
  this.rootPath,
2097
2162
  this.publicFolder,
2098
2163
  this.mediaRoot,
2099
2164
  decodeURIComponent(args.searchPath)
2100
2165
  );
2101
- await import_fs_extra5.default.stat(file);
2102
- await import_fs_extra5.default.remove(file);
2166
+ await fs5.stat(file);
2167
+ await fs5.remove(file);
2103
2168
  return { ok: true };
2104
2169
  } catch (error) {
2105
2170
  console.error(error);
2106
- return { ok: false, message: error == null ? void 0 : error.toString() };
2171
+ return { ok: false, message: error?.toString() };
2107
2172
  }
2108
2173
  }
2109
2174
  };
@@ -2114,34 +2179,127 @@ var createSearchIndexRouter = ({
2114
2179
  searchIndex
2115
2180
  }) => {
2116
2181
  const put = async (req, res) => {
2117
- const { docs } = req.body;
2182
+ const docs = req.body?.docs ?? [];
2118
2183
  const result = await searchIndex.PUT(docs);
2119
2184
  res.writeHead(200, { "Content-Type": "application/json" });
2120
2185
  res.end(JSON.stringify({ result }));
2121
2186
  };
2122
2187
  const get = async (req, res) => {
2123
- const requestURL = new URL(req.url, config2.apiURL);
2188
+ const requestURL = new URL(req.url ?? "", config2.apiURL);
2189
+ const isV2 = requestURL.pathname.startsWith("/v2/searchIndex");
2190
+ res.writeHead(200, { "Content-Type": "application/json" });
2191
+ if (isV2) {
2192
+ const queryParam = requestURL.searchParams.get("query");
2193
+ const collectionParam = requestURL.searchParams.get("collection");
2194
+ const limitParam = requestURL.searchParams.get("limit");
2195
+ const cursorParam = requestURL.searchParams.get("cursor");
2196
+ if (!queryParam) {
2197
+ res.end(JSON.stringify({ RESULT: [], RESULT_LENGTH: 0 }));
2198
+ return;
2199
+ }
2200
+ if (!searchIndex.fuzzySearchWrapper) {
2201
+ res.end(JSON.stringify({ RESULT: [], RESULT_LENGTH: 0 }));
2202
+ return;
2203
+ }
2204
+ try {
2205
+ const paginationOptions = {};
2206
+ if (limitParam) {
2207
+ paginationOptions.limit = parseInt(limitParam, 10);
2208
+ }
2209
+ if (cursorParam) {
2210
+ paginationOptions.cursor = cursorParam;
2211
+ }
2212
+ const searchQuery = collectionParam ? `${queryParam} _collection:${collectionParam}` : queryParam;
2213
+ const result2 = await searchIndex.fuzzySearchWrapper.query(searchQuery, {
2214
+ ...paginationOptions
2215
+ });
2216
+ if (collectionParam) {
2217
+ result2.results = result2.results.filter(
2218
+ (r) => r._id && r._id.startsWith(`${collectionParam}:`)
2219
+ );
2220
+ }
2221
+ res.end(
2222
+ JSON.stringify({
2223
+ RESULT: result2.results,
2224
+ RESULT_LENGTH: result2.total,
2225
+ NEXT_CURSOR: result2.nextCursor,
2226
+ PREV_CURSOR: result2.prevCursor,
2227
+ FUZZY_MATCHES: result2.fuzzyMatches || {}
2228
+ })
2229
+ );
2230
+ return;
2231
+ } catch (error) {
2232
+ console.warn(
2233
+ "[search] v2 fuzzy search failed:",
2234
+ error instanceof Error ? error.message : error
2235
+ );
2236
+ res.end(JSON.stringify({ RESULT: [], RESULT_LENGTH: 0 }));
2237
+ return;
2238
+ }
2239
+ }
2124
2240
  const query = requestURL.searchParams.get("q");
2125
2241
  const optionsParam = requestURL.searchParams.get("options");
2126
- let options = {
2127
- DOCUMENTS: false
2128
- };
2242
+ const fuzzyParam = requestURL.searchParams.get("fuzzy");
2243
+ const fuzzyOptionsParam = requestURL.searchParams.get("fuzzyOptions");
2244
+ if (!query) {
2245
+ res.end(JSON.stringify({ RESULT: [] }));
2246
+ return;
2247
+ }
2248
+ let searchIndexOptions = { DOCUMENTS: false };
2129
2249
  if (optionsParam) {
2130
- options = {
2131
- ...options,
2250
+ searchIndexOptions = {
2251
+ ...searchIndexOptions,
2132
2252
  ...JSON.parse(optionsParam)
2133
2253
  };
2134
2254
  }
2135
- res.writeHead(200, { "Content-Type": "application/json" });
2136
- if (query) {
2137
- const result = await searchIndex.QUERY(JSON.parse(query), options);
2138
- res.end(JSON.stringify(result));
2139
- } else {
2140
- res.end(JSON.stringify({ RESULT: [] }));
2255
+ const queryObj = JSON.parse(query);
2256
+ if (fuzzyParam === "true" && searchIndex.fuzzySearchWrapper) {
2257
+ try {
2258
+ const fuzzyOptions = fuzzyOptionsParam ? JSON.parse(fuzzyOptionsParam) : {};
2259
+ const searchTerms = queryObj.AND ? queryObj.AND.filter(
2260
+ (term) => !term.includes("_collection:")
2261
+ ) : [];
2262
+ const collectionFilter = queryObj.AND?.find(
2263
+ (term) => term.includes("_collection:")
2264
+ );
2265
+ const paginationOptions = {};
2266
+ if (searchIndexOptions.PAGE) {
2267
+ paginationOptions.limit = searchIndexOptions.PAGE.SIZE;
2268
+ paginationOptions.cursor = searchIndexOptions.PAGE.NUMBER.toString();
2269
+ }
2270
+ const searchQuery = collectionFilter ? `${searchTerms.join(" ")} ${collectionFilter}` : searchTerms.join(" ");
2271
+ const result2 = await searchIndex.fuzzySearchWrapper.query(searchQuery, {
2272
+ ...paginationOptions,
2273
+ fuzzyOptions
2274
+ });
2275
+ if (collectionFilter) {
2276
+ const collection = collectionFilter.split(":")[1];
2277
+ result2.results = result2.results.filter(
2278
+ (r) => r._id && r._id.startsWith(`${collection}:`)
2279
+ );
2280
+ }
2281
+ res.end(
2282
+ JSON.stringify({
2283
+ RESULT: result2.results,
2284
+ RESULT_LENGTH: result2.total,
2285
+ NEXT_CURSOR: result2.nextCursor,
2286
+ PREV_CURSOR: result2.prevCursor,
2287
+ FUZZY_MATCHES: result2.fuzzyMatches || {}
2288
+ })
2289
+ );
2290
+ return;
2291
+ } catch (error) {
2292
+ console.warn(
2293
+ "[search] Fuzzy search failed, falling back to standard search:",
2294
+ error instanceof Error ? error.message : error
2295
+ );
2296
+ }
2141
2297
  }
2298
+ const result = await searchIndex.QUERY(queryObj, searchIndexOptions);
2299
+ res.end(JSON.stringify(result));
2142
2300
  };
2143
2301
  const del = async (req, res) => {
2144
- const requestURL = new URL(req.url, config2.apiURL);
2302
+ const requestURL = new URL(req.url ?? "", config2.apiURL);
2145
2303
  const docId = requestURL.pathname.split("/").filter(Boolean).slice(1).join("/");
2146
2304
  const result = await searchIndex.DELETE(docId);
2147
2305
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -2157,9 +2315,9 @@ var transformTsxPlugin = ({
2157
2315
  const plug = {
2158
2316
  name: "transform-tsx",
2159
2317
  async transform(code, id) {
2160
- const extName = import_path4.default.extname(id);
2318
+ const extName = path7.extname(id);
2161
2319
  if (extName.startsWith(".tsx") || extName.startsWith(".ts")) {
2162
- const result = await (0, import_esbuild2.transform)(code, { loader: "tsx" });
2320
+ const result = await esbuildTransform(code, { loader: "tsx" });
2163
2321
  return {
2164
2322
  code: result.code
2165
2323
  };
@@ -2178,16 +2336,15 @@ var devServerEndPointsPlugin = ({
2178
2336
  const plug = {
2179
2337
  name: "graphql-endpoints",
2180
2338
  configureServer(server) {
2181
- server.middlewares.use((0, import_cors.default)());
2182
- server.middlewares.use(import_body_parser.default.json({ limit: "5mb" }));
2339
+ server.middlewares.use(cors());
2340
+ server.middlewares.use(bodyParser.json({ limit: "5mb" }));
2183
2341
  server.middlewares.use(async (req, res, next) => {
2184
- var _a;
2185
- const mediaPaths = (_a = configManager.config.media) == null ? void 0 : _a.tina;
2342
+ const mediaPaths = configManager.config.media?.tina;
2186
2343
  const mediaRouter = createMediaRouter({
2187
2344
  rootPath: configManager.rootPath,
2188
2345
  apiURL,
2189
- publicFolder: parseMediaFolder((mediaPaths == null ? void 0 : mediaPaths.publicFolder) || ""),
2190
- mediaRoot: parseMediaFolder((mediaPaths == null ? void 0 : mediaPaths.mediaRoot) || "")
2346
+ publicFolder: parseMediaFolder(mediaPaths?.publicFolder || ""),
2347
+ mediaRoot: parseMediaFolder(mediaPaths?.mediaRoot || "")
2191
2348
  });
2192
2349
  const searchIndexRouter = createSearchIndexRouter({
2193
2350
  config: { apiURL, searchPath: "searchIndex" },
@@ -2219,7 +2376,7 @@ var devServerEndPointsPlugin = ({
2219
2376
  const { query, variables } = req.body;
2220
2377
  let result;
2221
2378
  await databaseLock(async () => {
2222
- result = await (0, import_graphql9.resolve)({
2379
+ result = await gqlResolve({
2223
2380
  config: {
2224
2381
  useRelativeMedia: true
2225
2382
  },
@@ -2232,7 +2389,7 @@ var devServerEndPointsPlugin = ({
2232
2389
  res.end(JSON.stringify(result));
2233
2390
  return;
2234
2391
  }
2235
- if (req.url.startsWith("/searchIndex")) {
2392
+ if (req.url.startsWith("/searchIndex") || req.url.startsWith("/v2/searchIndex")) {
2236
2393
  if (req.method === "POST") {
2237
2394
  await searchIndexRouter.put(req, res);
2238
2395
  } else if (req.method === "GET") {
@@ -2255,13 +2412,13 @@ function viteTransformExtension({
2255
2412
  include = "**/*.svg",
2256
2413
  exclude
2257
2414
  } = {}) {
2258
- const filter = (0, import_pluginutils.createFilter)(include, exclude);
2415
+ const filter = createFilter(include, exclude);
2259
2416
  return {
2260
2417
  name: "vite-plugin-svgr",
2261
2418
  async transform(code, id) {
2262
2419
  if (filter(id)) {
2263
- const { transform: transform2 } = await Promise.resolve().then(() => __toESM(require("@svgr/core")));
2264
- const svgCode = await import_fs.default.promises.readFile(
2420
+ const { transform: transform2 } = await import("@svgr/core");
2421
+ const svgCode = await fs6.promises.readFile(
2265
2422
  id.replace(/\?.*$/, ""),
2266
2423
  "utf8"
2267
2424
  );
@@ -2271,7 +2428,7 @@ function viteTransformExtension({
2271
2428
  previousExport: exportAsDefault ? null : code
2272
2429
  }
2273
2430
  });
2274
- const res = await (0, import_vite2.transformWithEsbuild)(componentCode, id, {
2431
+ const res = await transformWithEsbuild(componentCode, id, {
2275
2432
  loader: "jsx",
2276
2433
  ...esbuildOptions
2277
2434
  });
@@ -2298,7 +2455,7 @@ var createDevServer = async (configManager, database, searchIndex, apiURL, noWat
2298
2455
  }),
2299
2456
  viteTransformExtension()
2300
2457
  ];
2301
- return (0, import_vite3.createServer)(
2458
+ return createViteServer(
2302
2459
  await createConfig({
2303
2460
  configManager,
2304
2461
  database,
@@ -2328,23 +2485,30 @@ var createDevServer = async (configManager, database, searchIndex, apiURL, noWat
2328
2485
 
2329
2486
  // src/next/commands/dev-command/index.ts
2330
2487
  var DevCommand = class extends BaseCommand {
2331
- constructor() {
2332
- super(...arguments);
2333
- // NOTE: camelCase commands for string options don't work if there's an `=` used https://github.com/arcanis/clipanion/issues/141
2334
- this.watchFolders = import_clipanion2.Option.String("-w,--watchFolders", {
2335
- description: "DEPRECATED - a list of folders (relative to where this is being run) that the cli will watch for changes"
2336
- });
2337
- this.noWatch = import_clipanion2.Option.Boolean("--noWatch", false, {
2338
- description: "Don't regenerate config on file changes"
2339
- });
2340
- this.outputSearchIndexPath = import_clipanion2.Option.String("--outputSearchIndexPath", {
2341
- description: "Path to write the search index to"
2342
- });
2343
- this.noServer = import_clipanion2.Option.Boolean("--no-server", false, {
2344
- description: "Do not start the dev server"
2345
- });
2346
- this.indexingLock = new import_async_lock.default();
2347
- }
2488
+ static paths = [["dev"], ["server:start"]];
2489
+ // NOTE: camelCase commands for string options don't work if there's an `=` used https://github.com/arcanis/clipanion/issues/141
2490
+ watchFolders = Option2.String("-w,--watchFolders", {
2491
+ description: "DEPRECATED - a list of folders (relative to where this is being run) that the cli will watch for changes"
2492
+ });
2493
+ noWatch = Option2.Boolean("--noWatch", false, {
2494
+ description: "Don't regenerate config on file changes"
2495
+ });
2496
+ outputSearchIndexPath = Option2.String("--outputSearchIndexPath", {
2497
+ description: "Path to write the search index to"
2498
+ });
2499
+ noServer = Option2.Boolean("--no-server", false, {
2500
+ description: "Do not start the dev server"
2501
+ });
2502
+ indexingLock = new AsyncLock();
2503
+ // Prevent indexes and reads occurring at once
2504
+ static usage = Command2.Usage({
2505
+ category: `Commands`,
2506
+ description: `Builds Tina and starts the dev server`,
2507
+ examples: [
2508
+ [`A basic example`, `$0 dev`],
2509
+ [`A second example`, `$0 dev --rootPath`]
2510
+ ]
2511
+ });
2348
2512
  async catch(error) {
2349
2513
  logger.error("Error occured during tinacms dev");
2350
2514
  console.error(error);
@@ -2359,7 +2523,6 @@ var DevCommand = class extends BaseCommand {
2359
2523
  }
2360
2524
  }
2361
2525
  async execute() {
2362
- var _a, _b, _c, _d, _e, _f;
2363
2526
  const configManager = new ConfigManager({
2364
2527
  rootPath: this.rootPath,
2365
2528
  legacyNoSDK: this.noSDK
@@ -2382,7 +2545,7 @@ var DevCommand = class extends BaseCommand {
2382
2545
  } else {
2383
2546
  database.clearCache();
2384
2547
  }
2385
- const { tinaSchema: tinaSchema2, graphQLSchema: graphQLSchema2, lookup, queryDoc, fragDoc } = await (0, import_graphql10.buildSchema)(configManager.config);
2548
+ const { tinaSchema: tinaSchema2, graphQLSchema: graphQLSchema2, lookup, queryDoc, fragDoc } = await buildSchema(configManager.config);
2386
2549
  const codegen2 = new Codegen({
2387
2550
  isLocal: true,
2388
2551
  configManager,
@@ -2396,29 +2559,32 @@ var DevCommand = class extends BaseCommand {
2396
2559
  });
2397
2560
  const apiURL2 = await codegen2.execute();
2398
2561
  if (!configManager.isUsingLegacyFolder) {
2399
- delete require.cache[configManager.generatedSchemaJSONPath];
2400
- delete require.cache[configManager.generatedLookupJSONPath];
2401
- delete require.cache[configManager.generatedGraphQLJSONPath];
2402
- const schemaObject = require(configManager.generatedSchemaJSONPath);
2403
- const lookupObject = require(configManager.generatedLookupJSONPath);
2404
- const graphqlSchemaObject = require(configManager.generatedGraphQLJSONPath);
2562
+ const schemaObject = await fs7.readJSON(
2563
+ configManager.generatedSchemaJSONPath
2564
+ );
2565
+ const lookupObject = await fs7.readJSON(
2566
+ configManager.generatedLookupJSONPath
2567
+ );
2568
+ const graphqlSchemaObject = await fs7.readJSON(
2569
+ configManager.generatedGraphQLJSONPath
2570
+ );
2405
2571
  const tinaLockFilename = "tina-lock.json";
2406
2572
  const tinaLockContent = JSON.stringify({
2407
2573
  schema: schemaObject,
2408
2574
  lookup: lookupObject,
2409
2575
  graphql: graphqlSchemaObject
2410
2576
  });
2411
- import_fs_extra6.default.writeFileSync(
2412
- import_path5.default.join(configManager.tinaFolderPath, tinaLockFilename),
2577
+ fs7.writeFileSync(
2578
+ path8.join(configManager.tinaFolderPath, tinaLockFilename),
2413
2579
  tinaLockContent
2414
2580
  );
2415
2581
  if (configManager.hasSeparateContentRoot()) {
2416
2582
  const rootPath = await configManager.getTinaFolderPath(
2417
2583
  configManager.contentRootPath
2418
2584
  );
2419
- const filePath = import_path5.default.join(rootPath, tinaLockFilename);
2420
- await import_fs_extra6.default.ensureFile(filePath);
2421
- await import_fs_extra6.default.outputFile(filePath, tinaLockContent);
2585
+ const filePath = path8.join(rootPath, tinaLockFilename);
2586
+ await fs7.ensureFile(filePath);
2587
+ await fs7.outputFile(filePath, tinaLockContent);
2422
2588
  }
2423
2589
  }
2424
2590
  await this.indexContentWithSpinner({
@@ -2461,25 +2627,25 @@ ${dangerText(e.message)}
2461
2627
  const { apiURL, graphQLSchema, tinaSchema } = await setup({
2462
2628
  firstTime: true
2463
2629
  });
2464
- await import_fs_extra6.default.outputFile(configManager.outputHTMLFilePath, devHTML(this.port));
2465
- await import_fs_extra6.default.outputFile(
2630
+ await fs7.outputFile(configManager.outputHTMLFilePath, devHTML(this.port));
2631
+ await fs7.outputFile(
2466
2632
  configManager.outputGitignorePath,
2467
2633
  "index.html\nassets/"
2468
2634
  );
2469
- const searchIndexClient = new import_search.LocalSearchIndexClient({
2470
- stopwordLanguages: (_b = (_a = configManager.config.search) == null ? void 0 : _a.tina) == null ? void 0 : _b.stopwordLanguages,
2471
- tokenSplitRegex: (_d = (_c = configManager.config.search) == null ? void 0 : _c.tina) == null ? void 0 : _d.tokenSplitRegex
2635
+ const searchIndexClient = new LocalSearchIndexClient({
2636
+ stopwordLanguages: configManager.config.search?.tina?.stopwordLanguages,
2637
+ tokenSplitRegex: configManager.config.search?.tina?.tokenSplitRegex
2472
2638
  });
2473
2639
  await searchIndexClient.onStartIndexing();
2474
- const searchIndexer = new import_search.SearchIndexer({
2475
- batchSize: ((_e = configManager.config.search) == null ? void 0 : _e.indexBatchSize) || 100,
2476
- bridge: new import_graphql10.FilesystemBridge(
2640
+ const searchIndexer = new SearchIndexer({
2641
+ batchSize: configManager.config.search?.indexBatchSize || 100,
2642
+ bridge: new FilesystemBridge2(
2477
2643
  configManager.rootPath,
2478
2644
  configManager.contentRootPath
2479
2645
  ),
2480
2646
  schema: tinaSchema,
2481
2647
  client: searchIndexClient,
2482
- textIndexLength: ((_f = configManager.config.search) == null ? void 0 : _f.maxSearchIndexFieldLength) || 100
2648
+ textIndexLength: configManager.config.search?.maxSearchIndexFieldLength || 100
2483
2649
  });
2484
2650
  if (configManager.config.search) {
2485
2651
  await spin({
@@ -2504,17 +2670,21 @@ ${dangerText(e.message)}
2504
2670
  configManager.config.search && searchIndexer
2505
2671
  );
2506
2672
  }
2673
+ const searchIndexWithFuzzy = searchIndexClient.searchIndex;
2674
+ if (searchIndexWithFuzzy && searchIndexClient.fuzzySearchWrapper) {
2675
+ searchIndexWithFuzzy.fuzzySearchWrapper = searchIndexClient.fuzzySearchWrapper;
2676
+ }
2507
2677
  const server = await createDevServer(
2508
2678
  configManager,
2509
2679
  database,
2510
- searchIndexClient.searchIndex,
2680
+ searchIndexWithFuzzy,
2511
2681
  apiURL,
2512
2682
  this.noWatch,
2513
2683
  dbLock
2514
2684
  );
2515
2685
  await server.listen(Number(this.port));
2516
2686
  if (!this.noWatch) {
2517
- import_chokidar.default.watch(configManager.watchList).on("change", async () => {
2687
+ chokidar.watch(configManager.watchList).on("change", async () => {
2518
2688
  await dbLock(async () => {
2519
2689
  logger.info(`Tina config change detected, rebuilding`);
2520
2690
  await setup({ firstTime: false });
@@ -2576,11 +2746,11 @@ ${dangerText(e.message)}
2576
2746
  // subItems: [
2577
2747
  // {
2578
2748
  // key: 'Custom queries',
2579
- // value: 'https://tina.io/querying',
2749
+ // value: 'https://tina.io/docs/r/content-api-overview',
2580
2750
  // },
2581
2751
  // {
2582
2752
  // key: 'Visual editing',
2583
- // value: 'https://tina.io/visual-editing',
2753
+ // value: 'https://tina.io/docs/r/visual-editing-setup',
2584
2754
  // },
2585
2755
  // ],
2586
2756
  // },
@@ -2591,14 +2761,14 @@ ${dangerText(e.message)}
2591
2761
  watchContentFiles(configManager, database, databaseLock, searchIndexer) {
2592
2762
  const collectionContentFiles = [];
2593
2763
  configManager.config.schema.collections.forEach((collection) => {
2594
- const collectionGlob = `${import_path5.default.join(
2764
+ const collectionGlob = `${path8.join(
2595
2765
  configManager.contentRootPath,
2596
2766
  collection.path
2597
2767
  )}/**/*.${collection.format || "md"}`;
2598
2768
  collectionContentFiles.push(collectionGlob);
2599
2769
  });
2600
2770
  let ready = false;
2601
- import_chokidar.default.watch(collectionContentFiles).on("ready", () => {
2771
+ chokidar.watch(collectionContentFiles).on("ready", () => {
2602
2772
  ready = true;
2603
2773
  }).on("add", async (addedFile) => {
2604
2774
  if (!ready) {
@@ -2635,38 +2805,35 @@ ${dangerText(e.message)}
2635
2805
  await callback();
2636
2806
  });
2637
2807
  };
2638
- import_chokidar.default.watch(configManager.userQueriesAndFragmentsGlob).on("add", executeCallback).on("change", executeCallback).on("unlink", executeCallback);
2808
+ chokidar.watch(configManager.userQueriesAndFragmentsGlob).on("add", executeCallback).on("change", executeCallback).on("unlink", executeCallback);
2639
2809
  }
2640
2810
  };
2641
- DevCommand.paths = [["dev"], ["server:start"]];
2642
- // Prevent indexes and reads occurring at once
2643
- DevCommand.usage = import_clipanion2.Command.Usage({
2644
- category: `Commands`,
2645
- description: `Builds Tina and starts the dev server`,
2646
- examples: [
2647
- [`A basic example`, `$0 dev`],
2648
- [`A second example`, `$0 dev --rootPath`]
2649
- ]
2650
- });
2651
2811
 
2652
2812
  // src/next/commands/build-command/index.ts
2653
- var import_crypto = __toESM(require("crypto"));
2654
- var import_path6 = __toESM(require("path"));
2655
- var import_core3 = require("@graphql-inspector/core");
2656
- var import_graphql11 = require("@tinacms/graphql");
2657
- var import_schema_tools2 = require("@tinacms/schema-tools");
2658
- var import_search2 = require("@tinacms/search");
2659
- var import_clipanion3 = require("clipanion");
2660
- var import_fs_extra7 = __toESM(require("fs-extra"));
2661
- var import_graphql12 = require("graphql");
2662
- var import_progress2 = __toESM(require("progress"));
2813
+ import crypto from "crypto";
2814
+ import path9 from "path";
2815
+ import { diff } from "@graphql-inspector/core";
2816
+ import { FilesystemBridge as FilesystemBridge3, buildSchema as buildSchema2 } from "@tinacms/graphql";
2817
+ import { parseURL as parseURL2 } from "@tinacms/schema-tools";
2818
+ import {
2819
+ SearchIndexer as SearchIndexer2,
2820
+ TinaCMSSearchIndexClient
2821
+ } from "@tinacms/search";
2822
+ import { Command as Command3, Option as Option3 } from "clipanion";
2823
+ import fs8 from "fs-extra";
2824
+ import {
2825
+ buildASTSchema as buildASTSchema2,
2826
+ buildClientSchema,
2827
+ getIntrospectionQuery
2828
+ } from "graphql";
2829
+ import Progress2 from "progress";
2663
2830
 
2664
2831
  // src/utils/index.ts
2665
- var import_core2 = require("@graphql-inspector/core");
2832
+ import { ChangeType } from "@graphql-inspector/core";
2666
2833
  var getFaqLink = (type) => {
2667
2834
  switch (type) {
2668
- case import_core2.ChangeType.FieldRemoved: {
2669
- return "https://tina.io/docs/introduction/faq#how-do-i-resolve-the-local-graphql-schema-doesnt-match-the-remote-graphql-schema-errors";
2835
+ case ChangeType.FieldRemoved: {
2836
+ return "https://tina.io/docs/r/FAQ/#2-how-do-i-resolve-the-local-graphql-schema-doesnt-match-the-remote-graphql-schema-error";
2670
2837
  }
2671
2838
  default:
2672
2839
  return null;
@@ -2687,7 +2854,7 @@ async function sleepAndCallFunc({
2687
2854
  }
2688
2855
 
2689
2856
  // src/next/commands/build-command/server.ts
2690
- var import_vite5 = require("vite");
2857
+ import { build as build2 } from "vite";
2691
2858
  var buildProductionSpa = async (configManager, database, apiURL) => {
2692
2859
  const publicEnv = {};
2693
2860
  Object.keys(process.env).forEach((key) => {
@@ -2721,12 +2888,12 @@ var buildProductionSpa = async (configManager, database, apiURL) => {
2721
2888
  }
2722
2889
  }
2723
2890
  });
2724
- return (0, import_vite5.build)(config2);
2891
+ return build2(config2);
2725
2892
  };
2726
2893
 
2727
2894
  // src/next/commands/build-command/waitForDB.ts
2728
- var import_schema_tools = require("@tinacms/schema-tools");
2729
- var import_progress = __toESM(require("progress"));
2895
+ import { parseURL } from "@tinacms/schema-tools";
2896
+ import Progress from "progress";
2730
2897
  var POLLING_INTERVAL = 5e3;
2731
2898
  var STATUS_INPROGRESS = "inprogress";
2732
2899
  var STATUS_COMPLETE = "complete";
@@ -2739,14 +2906,14 @@ var IndexFailedError = class extends Error {
2739
2906
  };
2740
2907
  var waitForDB = async (config2, apiUrl, previewName, verbose) => {
2741
2908
  const token = config2.token;
2742
- const { clientId, branch, isLocalClient, host } = (0, import_schema_tools.parseURL)(apiUrl);
2909
+ const { clientId, branch, isLocalClient, host } = parseURL(apiUrl);
2743
2910
  if (isLocalClient || !host || !clientId || !branch) {
2744
2911
  if (verbose) {
2745
2912
  logger.info(logText("Not using TinaCloud, skipping DB check"));
2746
2913
  }
2747
2914
  return;
2748
2915
  }
2749
- const bar2 = new import_progress.default(
2916
+ const bar2 = new Progress(
2750
2917
  "Checking indexing process in TinaCloud... :prog",
2751
2918
  1
2752
2919
  );
@@ -2809,48 +2976,49 @@ var waitForDB = async (config2, apiUrl, previewName, verbose) => {
2809
2976
 
2810
2977
  // src/next/commands/build-command/index.ts
2811
2978
  var BuildCommand = class extends BaseCommand {
2812
- constructor() {
2813
- super(...arguments);
2814
- this.localOption = import_clipanion3.Option.Boolean("--local", {
2815
- description: "Starts local Graphql server and builds the local client instead of production client"
2816
- });
2817
- this.skipIndexing = import_clipanion3.Option.Boolean("--skip-indexing", false, {
2818
- description: "Skips indexing the content. This can be used for building the site without indexing the content (defaults to false)"
2819
- });
2820
- this.partialReindex = import_clipanion3.Option.Boolean("--partial-reindex", false, {
2821
- description: "Re-indexes only the content that has changed since the last build (defaults to false). Not currently supported for separate content repos."
2822
- });
2823
- this.tinaGraphQLVersion = import_clipanion3.Option.String("--tina-graphql-version", {
2824
- description: "Specify the version of @tinacms/graphql to use (defaults to latest)"
2825
- });
2826
- /**
2827
- * This option allows the user to skip the TinaCloud 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 TinaCloud
2828
- */
2829
- this.skipCloudChecks = import_clipanion3.Option.Boolean("--skip-cloud-checks", false, {
2830
- description: "Skips checking the provided cloud config."
2831
- });
2832
- this.skipSearchIndex = import_clipanion3.Option.Boolean("--skip-search-index", false, {
2833
- description: "Skip indexing the site for search"
2834
- });
2835
- this.upstreamBranch = import_clipanion3.Option.String("--upstream-branch", {
2836
- description: "Optional upstream branch with the schema. If not specified, default will be used."
2837
- });
2838
- this.previewBaseBranch = import_clipanion3.Option.String("--preview-base-branch", {
2839
- description: "The base branch for the preview"
2840
- });
2841
- this.previewName = import_clipanion3.Option.String("--preview-name", {
2842
- description: "The name of the preview branch"
2843
- });
2844
- this.noClientBuildCache = import_clipanion3.Option.Boolean("--no-client-build-cache", false, {
2845
- description: "Disables the client build cache"
2846
- });
2847
- }
2979
+ static paths = [["build"]];
2980
+ localOption = Option3.Boolean("--local", {
2981
+ description: "Starts local Graphql server and builds the local client instead of production client"
2982
+ });
2983
+ skipIndexing = Option3.Boolean("--skip-indexing", false, {
2984
+ description: "Skips indexing the content. This can be used for building the site without indexing the content (defaults to false)"
2985
+ });
2986
+ partialReindex = Option3.Boolean("--partial-reindex", false, {
2987
+ description: "Re-indexes only the content that has changed since the last build (defaults to false). Not currently supported for separate content repos."
2988
+ });
2989
+ tinaGraphQLVersion = Option3.String("--tina-graphql-version", {
2990
+ description: "Specify the version of @tinacms/graphql to use (defaults to latest)"
2991
+ });
2992
+ /**
2993
+ * This option allows the user to skip the TinaCloud 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 TinaCloud
2994
+ */
2995
+ skipCloudChecks = Option3.Boolean("--skip-cloud-checks", false, {
2996
+ description: "Skips checking the provided cloud config."
2997
+ });
2998
+ skipSearchIndex = Option3.Boolean("--skip-search-index", false, {
2999
+ description: "Skip indexing the site for search"
3000
+ });
3001
+ upstreamBranch = Option3.String("--upstream-branch", {
3002
+ description: "Optional upstream branch with the schema. If not specified, default will be used."
3003
+ });
3004
+ previewBaseBranch = Option3.String("--preview-base-branch", {
3005
+ description: "The base branch for the preview"
3006
+ });
3007
+ previewName = Option3.String("--preview-name", {
3008
+ description: "The name of the preview branch"
3009
+ });
3010
+ noClientBuildCache = Option3.Boolean("--no-client-build-cache", false, {
3011
+ description: "Disables the client build cache"
3012
+ });
3013
+ static usage = Command3.Usage({
3014
+ category: `Commands`,
3015
+ description: `Build the CMS and autogenerated modules for usage with TinaCloud`
3016
+ });
2848
3017
  async catch(error) {
2849
3018
  console.error(error);
2850
3019
  process.exit(1);
2851
3020
  }
2852
3021
  async execute() {
2853
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
2854
3022
  logger.info("Starting Tina build");
2855
3023
  this.logDeprecationWarnings();
2856
3024
  const configManager = new ConfigManager({
@@ -2890,7 +3058,7 @@ ${dangerText(e.message)}`);
2890
3058
  configManager,
2891
3059
  Number(this.datalayerPort)
2892
3060
  );
2893
- const { queryDoc, fragDoc, graphQLSchema, tinaSchema, lookup } = await (0, import_graphql11.buildSchema)(configManager.config);
3061
+ const { queryDoc, fragDoc, graphQLSchema, tinaSchema, lookup } = await buildSchema2(configManager.config);
2894
3062
  const codegen2 = new Codegen({
2895
3063
  configManager,
2896
3064
  port: this.localOption ? Number(this.port) : void 0,
@@ -2939,56 +3107,74 @@ ${dangerText(e.message)}
2939
3107
  }
2940
3108
  const skipCloudChecks = this.skipCloudChecks || configManager.hasSelfHostedConfig();
2941
3109
  if (!skipCloudChecks) {
2942
- const { hasUpstream, timestamp } = await this.checkClientInfo(
2943
- configManager,
2944
- codegen2.productionUrl,
2945
- this.previewBaseBranch
2946
- );
2947
- if (!hasUpstream && this.upstreamBranch) {
2948
- logger.warn(
2949
- `${dangerText(
2950
- `WARN: Upstream branch '${this.upstreamBranch}' specified but no upstream project was found.`
2951
- )}`
3110
+ try {
3111
+ const clientInfo = await this.checkClientInfo(
3112
+ configManager,
3113
+ codegen2.productionUrl,
3114
+ this.previewBaseBranch
2952
3115
  );
3116
+ if (clientInfo.detectedBotBranch) {
3117
+ logger.warn(
3118
+ `${warnText(
3119
+ `WARN: Detected bot branch. Using schema/content from default branch '${clientInfo.defaultBranch}' instead of '${configManager.config.branch}'.`
3120
+ )}`
3121
+ );
3122
+ }
3123
+ if (!clientInfo.hasUpstream && this.upstreamBranch) {
3124
+ logger.warn(
3125
+ `${dangerText(
3126
+ `WARN: Upstream branch '${this.upstreamBranch}' specified but no upstream project was found.`
3127
+ )}`
3128
+ );
3129
+ }
3130
+ if (clientInfo.hasUpstream || this.previewBaseBranch && this.previewName) {
3131
+ await this.syncProject(configManager, codegen2.productionUrl, {
3132
+ upstreamBranch: this.upstreamBranch,
3133
+ previewBaseBranch: this.previewBaseBranch,
3134
+ previewName: this.previewName
3135
+ });
3136
+ }
3137
+ await waitForDB(
3138
+ configManager.config,
3139
+ codegen2.productionUrl,
3140
+ this.previewName,
3141
+ false
3142
+ );
3143
+ await this.checkGraphqlSchema(
3144
+ configManager,
3145
+ database,
3146
+ codegen2.productionUrl,
3147
+ clientInfo.timestamp
3148
+ );
3149
+ await this.checkTinaSchema(
3150
+ configManager,
3151
+ database,
3152
+ codegen2.productionUrl,
3153
+ this.previewName,
3154
+ this.verbose,
3155
+ clientInfo.timestamp
3156
+ );
3157
+ } catch (e) {
3158
+ logger.error(`
3159
+
3160
+ ${dangerText(e.message)}
3161
+ `);
3162
+ if (this.verbose) {
3163
+ console.error(e);
3164
+ }
3165
+ process.exit(1);
2953
3166
  }
2954
- if (hasUpstream || this.previewBaseBranch && this.previewName) {
2955
- await this.syncProject(configManager, codegen2.productionUrl, {
2956
- upstreamBranch: this.upstreamBranch,
2957
- previewBaseBranch: this.previewBaseBranch,
2958
- previewName: this.previewName
2959
- });
2960
- }
2961
- await waitForDB(
2962
- configManager.config,
2963
- codegen2.productionUrl,
2964
- this.previewName,
2965
- false
2966
- );
2967
- await this.checkGraphqlSchema(
2968
- configManager,
2969
- database,
2970
- codegen2.productionUrl,
2971
- timestamp
2972
- );
2973
- await this.checkTinaSchema(
2974
- configManager,
2975
- database,
2976
- codegen2.productionUrl,
2977
- this.previewName,
2978
- this.verbose,
2979
- timestamp
2980
- );
2981
3167
  }
2982
3168
  await buildProductionSpa(configManager, database, codegen2.productionUrl);
2983
- await import_fs_extra7.default.outputFile(
3169
+ await fs8.outputFile(
2984
3170
  configManager.outputGitignorePath,
2985
3171
  "index.html\nassets/"
2986
3172
  );
2987
3173
  if (configManager.config.search && !this.skipSearchIndex && !this.localOption) {
2988
3174
  let client;
2989
- const hasTinaSearch = Boolean((_b = (_a = configManager.config) == null ? void 0 : _a.search) == null ? void 0 : _b.tina);
3175
+ const hasTinaSearch = Boolean(configManager.config?.search?.tina);
2990
3176
  if (hasTinaSearch) {
2991
- if (!((_c = configManager.config) == null ? void 0 : _c.branch)) {
3177
+ if (!configManager.config?.branch) {
2992
3178
  logger.error(
2993
3179
  `${dangerText(
2994
3180
  `ERROR: Branch not configured in tina search configuration.`
@@ -2998,11 +3184,11 @@ ${dangerText(e.message)}
2998
3184
  "Branch not configured in tina search configuration."
2999
3185
  );
3000
3186
  }
3001
- if (!((_d = configManager.config) == null ? void 0 : _d.clientId)) {
3187
+ if (!configManager.config?.clientId) {
3002
3188
  logger.error(`${dangerText(`ERROR: clientId not configured.`)}`);
3003
3189
  throw new Error("clientId not configured.");
3004
3190
  }
3005
- if (!((_g = (_f = (_e = configManager.config) == null ? void 0 : _e.search) == null ? void 0 : _f.tina) == null ? void 0 : _g.indexerToken)) {
3191
+ if (!configManager.config?.search?.tina?.indexerToken) {
3006
3192
  logger.error(
3007
3193
  `${dangerText(
3008
3194
  `ERROR: indexerToken not configured in tina search configuration.`
@@ -3012,18 +3198,18 @@ ${dangerText(e.message)}
3012
3198
  "indexerToken not configured in tina search configuration."
3013
3199
  );
3014
3200
  }
3015
- client = new import_search2.TinaCMSSearchIndexClient({
3016
- apiUrl: `${((_h = configManager.config.tinaioConfig) == null ? void 0 : _h.contentApiUrlOverride) || "https://content.tinajs.io"}/searchIndex/${(_i = configManager.config) == null ? void 0 : _i.clientId}`,
3017
- branch: (_j = configManager.config) == null ? void 0 : _j.branch,
3018
- indexerToken: (_m = (_l = (_k = configManager.config) == null ? void 0 : _k.search) == null ? void 0 : _l.tina) == null ? void 0 : _m.indexerToken,
3019
- stopwordLanguages: (_p = (_o = (_n = configManager.config) == null ? void 0 : _n.search) == null ? void 0 : _o.tina) == null ? void 0 : _p.stopwordLanguages
3201
+ client = new TinaCMSSearchIndexClient({
3202
+ apiUrl: `${configManager.config.tinaioConfig?.contentApiUrlOverride || "https://content.tinajs.io"}/searchIndex/${configManager.config?.clientId}`,
3203
+ branch: configManager.config?.branch,
3204
+ indexerToken: configManager.config?.search?.tina?.indexerToken,
3205
+ stopwordLanguages: configManager.config?.search?.tina?.stopwordLanguages
3020
3206
  });
3021
3207
  } else {
3022
- client = (_r = (_q = configManager.config) == null ? void 0 : _q.search) == null ? void 0 : _r.searchClient;
3208
+ client = configManager.config?.search?.searchClient;
3023
3209
  }
3024
- const searchIndexer = new import_search2.SearchIndexer({
3025
- batchSize: ((_s = configManager.config.search) == null ? void 0 : _s.indexBatchSize) || 100,
3026
- bridge: new import_graphql11.FilesystemBridge(
3210
+ const searchIndexer = new SearchIndexer2({
3211
+ batchSize: configManager.config.search?.indexBatchSize || 100,
3212
+ bridge: new FilesystemBridge3(
3027
3213
  configManager.rootPath,
3028
3214
  configManager.contentRootPath
3029
3215
  ),
@@ -3090,86 +3276,88 @@ ${dangerText(e.message)}
3090
3276
  }
3091
3277
  }
3092
3278
  async checkClientInfo(configManager, apiURL, previewBaseBranch) {
3279
+ const MAX_RETRIES = 5;
3093
3280
  const { config: config2 } = configManager;
3094
3281
  const token = config2.token;
3095
- const { clientId, branch, host } = (0, import_schema_tools2.parseURL)(apiURL);
3096
- const url = `https://${host}/db/${clientId}/status/${previewBaseBranch || branch}`;
3097
- const bar2 = new import_progress2.default("Checking clientId and token. :prog", 1);
3098
- let branchKnown = false;
3099
- let hasUpstream = false;
3100
- let timestamp;
3101
- try {
3102
- const res = await request({
3103
- token,
3104
- url
3105
- });
3106
- timestamp = res.timestamp || 0;
3107
- bar2.tick({
3108
- prog: "\u2705"
3109
- });
3110
- if (!(res.status === "unknown")) {
3111
- branchKnown = true;
3112
- }
3113
- if (res.hasUpstream) {
3114
- hasUpstream = true;
3282
+ const { clientId, branch, host } = parseURL2(apiURL);
3283
+ const bar2 = new Progress2("Checking clientId and token. :prog", 1);
3284
+ const getBranchInfo = async () => {
3285
+ const url = `https://${host}/db/${clientId}/status/${previewBaseBranch || branch}`;
3286
+ const branchInfo2 = {
3287
+ status: "unknown",
3288
+ branchKnown: false,
3289
+ hasUpstream: false,
3290
+ timestamp: 0,
3291
+ detectedBotBranch: false,
3292
+ defaultBranch: void 0
3293
+ };
3294
+ try {
3295
+ const res = await request({
3296
+ token,
3297
+ url
3298
+ });
3299
+ branchInfo2.status = res.status;
3300
+ branchInfo2.branchKnown = res.status !== "unknown";
3301
+ branchInfo2.timestamp = res.timestamp || 0;
3302
+ branchInfo2.hasUpstream = res.hasUpstream;
3303
+ branchInfo2.detectedBotBranch = res.json.detectedBotBranch;
3304
+ branchInfo2.defaultBranch = res.json.defaultBranch;
3305
+ } catch (e) {
3306
+ summary({
3307
+ heading: "Error when checking client information",
3308
+ items: [
3309
+ {
3310
+ emoji: "\u274C",
3311
+ heading: "You provided",
3312
+ subItems: [
3313
+ {
3314
+ key: "clientId",
3315
+ value: config2.clientId
3316
+ },
3317
+ {
3318
+ key: "branch",
3319
+ value: config2.branch
3320
+ },
3321
+ {
3322
+ key: "token",
3323
+ value: config2.token
3324
+ }
3325
+ ]
3326
+ }
3327
+ ]
3328
+ });
3329
+ throw e;
3115
3330
  }
3116
- } catch (e) {
3117
- summary({
3118
- heading: "Error when checking client information",
3119
- items: [
3120
- {
3121
- emoji: "\u274C",
3122
- heading: "You provided",
3123
- subItems: [
3124
- {
3125
- key: "clientId",
3126
- value: config2.clientId
3127
- },
3128
- {
3129
- key: "branch",
3130
- value: config2.branch
3131
- },
3132
- {
3133
- key: "token",
3134
- value: config2.token
3135
- }
3136
- ]
3137
- }
3138
- ]
3139
- });
3140
- throw e;
3141
- }
3142
- const branchBar = new import_progress2.default("Checking branch is on TinaCloud. :prog", 1);
3143
- if (branchKnown) {
3331
+ return branchInfo2;
3332
+ };
3333
+ const branchInfo = await getBranchInfo();
3334
+ bar2.tick({
3335
+ prog: "\u2705"
3336
+ });
3337
+ const branchBar = new Progress2(
3338
+ `Checking branch '${config2.branch}' is on TinaCloud. :prog`,
3339
+ 1
3340
+ );
3341
+ if (branchInfo.branchKnown) {
3144
3342
  branchBar.tick({
3145
3343
  prog: "\u2705"
3146
3344
  });
3147
- return {
3148
- hasUpstream,
3149
- timestamp
3150
- };
3345
+ return branchInfo;
3151
3346
  }
3152
- for (let i = 0; i <= 5; i++) {
3153
- await sleepAndCallFunc({
3154
- fn: async () => {
3155
- const res = await request({
3156
- token,
3157
- url
3158
- });
3159
- if (this.verbose) {
3160
- logger.info(
3161
- `Branch status: ${res.status}. Attempt: ${i + 1}. Trying again in 5 seconds.`
3162
- );
3163
- }
3164
- if (!(res.status === "unknown")) {
3165
- branchBar.tick({
3166
- prog: "\u2705"
3167
- });
3168
- return;
3169
- }
3170
- },
3171
- ms: 5e3
3172
- });
3347
+ for (let i = 1; i <= MAX_RETRIES; i++) {
3348
+ await timeout(5e3);
3349
+ const branchInfo2 = await getBranchInfo();
3350
+ if (this.verbose) {
3351
+ logger.info(
3352
+ `Branch status: ${branchInfo2.status}. Attempt: ${i}. Trying again in 5 seconds.`
3353
+ );
3354
+ }
3355
+ if (branchInfo2.branchKnown) {
3356
+ branchBar.tick({
3357
+ prog: "\u2705"
3358
+ });
3359
+ return branchInfo2;
3360
+ }
3173
3361
  }
3174
3362
  branchBar.tick({
3175
3363
  prog: "\u274C"
@@ -3177,7 +3365,7 @@ ${dangerText(e.message)}
3177
3365
  logger.error(
3178
3366
  `${dangerText(
3179
3367
  `ERROR: Branch '${branch}' is not on TinaCloud.`
3180
- )} Please make sure that branch '${branch}' exists in your repository and that you have pushed your all changes to the remote. View all all branches and there current status here: ${linkText(
3368
+ )} Please make sure that branch '${branch}' exists in your repository and that you have pushed your all changes to the remote. View all branches and their current status here: ${linkText(
3181
3369
  `https://app.tina.io/projects/${clientId}/configuration`
3182
3370
  )}`
3183
3371
  );
@@ -3186,7 +3374,7 @@ ${dangerText(e.message)}
3186
3374
  async syncProject(configManager, apiURL, options) {
3187
3375
  const { config: config2 } = configManager;
3188
3376
  const token = config2.token;
3189
- const { clientId, branch, host } = (0, import_schema_tools2.parseURL)(apiURL);
3377
+ const { clientId, branch, host } = parseURL2(apiURL);
3190
3378
  const { previewName, previewBaseBranch, upstreamBranch } = options || {};
3191
3379
  let url = `https://${host}/db/${clientId}/reset/${branch}?refreshSchema=true&skipIfSchemaCurrent=true`;
3192
3380
  if (upstreamBranch && previewBaseBranch && previewName) {
@@ -3196,7 +3384,7 @@ ${dangerText(e.message)}
3196
3384
  } else if (upstreamBranch && !previewBaseBranch && !previewName) {
3197
3385
  url = `https://${host}/db/${clientId}/reset/${branch}?refreshSchema=true&skipIfSchemaCurrent=true&upstreamBranch=${upstreamBranch}`;
3198
3386
  }
3199
- const bar2 = new import_progress2.default("Syncing Project. :prog", 1);
3387
+ const bar2 = new Progress2("Syncing Project. :prog", 1);
3200
3388
  try {
3201
3389
  const res = await request({
3202
3390
  token,
@@ -3237,7 +3425,7 @@ ${dangerText(e.message)}
3237
3425
  }
3238
3426
  }
3239
3427
  async checkGraphqlSchema(configManager, database, apiURL, timestamp) {
3240
- const bar2 = new import_progress2.default(
3428
+ const bar2 = new Progress2(
3241
3429
  "Checking local GraphQL Schema matches server. :prog",
3242
3430
  1
3243
3431
  );
@@ -3252,18 +3440,18 @@ ${dangerText(e.message)}
3252
3440
  prog: "\u274C"
3253
3441
  });
3254
3442
  let errorMessage = `The remote GraphQL schema does not exist. Check indexing for this branch.`;
3255
- if (config2 == null ? void 0 : config2.branch) {
3443
+ if (config2?.branch) {
3256
3444
  errorMessage += `
3257
3445
 
3258
3446
  Additional info: Branch: ${config2.branch}, Client ID: ${config2.clientId} `;
3259
3447
  }
3260
3448
  throw new Error(errorMessage);
3261
3449
  }
3262
- const remoteGqlSchema = (0, import_graphql12.buildClientSchema)(remoteSchema);
3450
+ const remoteGqlSchema = buildClientSchema(remoteSchema);
3263
3451
  const localSchemaDocument = await database.getGraphQLSchemaFromBridge();
3264
- const localGraphqlSchema = (0, import_graphql12.buildASTSchema)(localSchemaDocument);
3452
+ const localGraphqlSchema = buildASTSchema2(localSchemaDocument);
3265
3453
  try {
3266
- const diffResult = await (0, import_core3.diff)(remoteGqlSchema, localGraphqlSchema);
3454
+ const diffResult = await diff(remoteGqlSchema, localGraphqlSchema);
3267
3455
  if (diffResult.length === 0) {
3268
3456
  bar2.tick({
3269
3457
  prog: "\u2705"
@@ -3284,7 +3472,7 @@ Check out '${faqLink}' for possible solutions.`}`;
3284
3472
  Additional info:
3285
3473
 
3286
3474
  `;
3287
- if (config2 == null ? void 0 : config2.branch) {
3475
+ if (config2?.branch) {
3288
3476
  errorMessage += ` Branch: ${config2.branch}, Client ID: ${config2.clientId}
3289
3477
  `;
3290
3478
  }
@@ -3311,13 +3499,13 @@ Additional info:
3311
3499
  }
3312
3500
  }
3313
3501
  async checkTinaSchema(configManager, database, apiURL, previewName, verbose, timestamp) {
3314
- const bar2 = new import_progress2.default(
3502
+ const bar2 = new Progress2(
3315
3503
  "Checking local Tina Schema matches server. :prog",
3316
3504
  1
3317
3505
  );
3318
3506
  const { config: config2 } = configManager;
3319
3507
  const token = config2.token;
3320
- const { clientId, branch, isLocalClient, host } = (0, import_schema_tools2.parseURL)(apiURL);
3508
+ const { clientId, branch, isLocalClient, host } = parseURL2(apiURL);
3321
3509
  if (isLocalClient || !host || !clientId || !branch) {
3322
3510
  if (verbose) {
3323
3511
  logger.info(logText("Not using TinaCloud, skipping Tina Schema check"));
@@ -3333,7 +3521,7 @@ Additional info:
3333
3521
  prog: "\u274C"
3334
3522
  });
3335
3523
  let errorMessage = `The remote Tina schema does not exist. Check indexing for this branch.`;
3336
- if (config2 == null ? void 0 : config2.branch) {
3524
+ if (config2?.branch) {
3337
3525
  errorMessage += `
3338
3526
 
3339
3527
  Additional info: Branch: ${config2.branch}, Client ID: ${config2.clientId} `;
@@ -3345,11 +3533,11 @@ Additional info: Branch: ${config2.branch}, Client ID: ${config2.clientId} `;
3345
3533
  }
3346
3534
  const localTinaSchema = JSON.parse(
3347
3535
  await database.bridge.get(
3348
- import_path6.default.join(database.tinaDirectory, "__generated__", "_schema.json")
3536
+ path9.join(database.tinaDirectory, "__generated__", "_schema.json")
3349
3537
  )
3350
3538
  );
3351
3539
  localTinaSchema.version = void 0;
3352
- const localTinaSchemaSha = import_crypto.default.createHash("sha256").update(JSON.stringify(localTinaSchema)).digest("hex");
3540
+ const localTinaSchemaSha = crypto.createHash("sha256").update(JSON.stringify(localTinaSchema)).digest("hex");
3353
3541
  if (localTinaSchemaSha === remoteTinaSchemaSha) {
3354
3542
  bar2.tick({
3355
3543
  prog: "\u2705"
@@ -3364,7 +3552,7 @@ Additional info: Branch: ${config2.branch}, Client ID: ${config2.clientId} `;
3364
3552
  Additional info:
3365
3553
 
3366
3554
  `;
3367
- if (config2 == null ? void 0 : config2.branch) {
3555
+ if (config2?.branch) {
3368
3556
  errorMessage += ` Branch: ${config2.branch}, Client ID: ${config2.clientId}
3369
3557
  `;
3370
3558
  }
@@ -3376,18 +3564,13 @@ Additional info:
3376
3564
  }
3377
3565
  }
3378
3566
  };
3379
- BuildCommand.paths = [["build"]];
3380
- BuildCommand.usage = import_clipanion3.Command.Usage({
3381
- category: `Commands`,
3382
- description: `Build the CMS and autogenerated modules for usage with TinaCloud`
3383
- });
3384
3567
  async function request(args) {
3385
3568
  const headers = new Headers();
3386
3569
  if (args.token) {
3387
3570
  headers.append("X-API-KEY", args.token);
3388
3571
  }
3389
3572
  headers.append("Content-Type", "application/json");
3390
- const url = args == null ? void 0 : args.url;
3573
+ const url = args?.url;
3391
3574
  const res = await fetch(url, {
3392
3575
  method: args.method || "GET",
3393
3576
  headers,
@@ -3405,21 +3588,22 @@ async function request(args) {
3405
3588
  Message from server: ${json.message}`;
3406
3589
  }
3407
3590
  throw new Error(
3408
- `Server responded with status code ${res.status}, ${res.statusText}. ${additionalInfo ? additionalInfo : ""} Please see our FAQ for more information: https://tina.io/docs/errors/faq/`
3591
+ `Server responded with status code ${res.status}, ${res.statusText}. ${additionalInfo ? additionalInfo : ""} Please see our FAQ for more information: https://tina.io/docs/r/FAQ/`
3409
3592
  );
3410
3593
  }
3411
3594
  if (json.errors) {
3412
3595
  throw new Error(
3413
- `Unable to fetch, please see our FAQ for more information: https://tina.io/docs/errors/faq/
3596
+ `Unable to fetch, please see our FAQ for more information: https://tina.io/docs/r/FAQ/
3414
3597
 
3415
3598
  Errors:
3416
3599
  ${json.errors.map((error) => error.message).join("\n")}`
3417
3600
  );
3418
3601
  }
3419
3602
  return {
3420
- status: json == null ? void 0 : json.status,
3421
- timestamp: json == null ? void 0 : json.timestamp,
3422
- hasUpstream: (json == null ? void 0 : json.hasUpstream) || false
3603
+ status: json?.status,
3604
+ timestamp: json?.timestamp,
3605
+ hasUpstream: json?.hasUpstream || false,
3606
+ json
3423
3607
  };
3424
3608
  }
3425
3609
  var fetchRemoteGraphqlSchema = async ({
@@ -3431,7 +3615,7 @@ var fetchRemoteGraphqlSchema = async ({
3431
3615
  headers.append("X-API-KEY", token);
3432
3616
  }
3433
3617
  const body = JSON.stringify({
3434
- query: (0, import_graphql12.getIntrospectionQuery)(),
3618
+ query: getIntrospectionQuery(),
3435
3619
  variables: {}
3436
3620
  });
3437
3621
  headers.append("Content-Type", "application/json");
@@ -3442,7 +3626,7 @@ var fetchRemoteGraphqlSchema = async ({
3442
3626
  });
3443
3627
  const data = await res.json();
3444
3628
  return {
3445
- remoteSchema: data == null ? void 0 : data.data,
3629
+ remoteSchema: data?.data,
3446
3630
  remoteRuntimeVersion: res.headers.get("tinacms-grapqhl-version"),
3447
3631
  remoteProjectVersion: res.headers.get("tinacms-graphql-project-version")
3448
3632
  };
@@ -3464,14 +3648,14 @@ var fetchSchemaSha = async ({
3464
3648
  };
3465
3649
 
3466
3650
  // src/next/commands/audit-command/index.ts
3467
- var import_clipanion4 = require("clipanion");
3468
- var import_graphql14 = require("@tinacms/graphql");
3651
+ import { Command as Command4, Option as Option4 } from "clipanion";
3652
+ import { buildSchema as buildSchema3 } from "@tinacms/graphql";
3469
3653
 
3470
3654
  // src/next/commands/audit-command/audit.ts
3471
- var import_prompts = __toESM(require("prompts"));
3472
- var import_metrics = require("@tinacms/metrics");
3473
- var import_graphql13 = require("@tinacms/graphql");
3474
- var import_chalk5 = __toESM(require("chalk"));
3655
+ import prompts from "prompts";
3656
+ import { Telemetry } from "@tinacms/metrics";
3657
+ import { resolve } from "@tinacms/graphql";
3658
+ import chalk5 from "chalk";
3475
3659
  var audit = async ({
3476
3660
  database,
3477
3661
  clean,
@@ -3479,7 +3663,7 @@ var audit = async ({
3479
3663
  noTelemetry,
3480
3664
  verbose
3481
3665
  }) => {
3482
- const telemetry = new import_metrics.Telemetry({ disabled: noTelemetry });
3666
+ const telemetry = new Telemetry({ disabled: noTelemetry });
3483
3667
  await telemetry.submitRecord({
3484
3668
  event: {
3485
3669
  name: "tinacms:cli:audit:invoke",
@@ -3489,25 +3673,25 @@ var audit = async ({
3489
3673
  });
3490
3674
  if (clean) {
3491
3675
  logger.info(
3492
- `You are using the \`--clean\` option. This will modify your content as if a user is submitting a form. Before running this you should have a ${import_chalk5.default.bold(
3676
+ `You are using the \`--clean\` option. This will modify your content as if a user is submitting a form. Before running this you should have a ${chalk5.bold(
3493
3677
  "clean git tree"
3494
3678
  )} so unwanted changes can be undone.
3495
3679
 
3496
3680
  `
3497
3681
  );
3498
- const res = await (0, import_prompts.default)({
3682
+ const res = await prompts({
3499
3683
  name: "useClean",
3500
3684
  type: "confirm",
3501
3685
  message: `Do you want to continue?`
3502
3686
  });
3503
3687
  if (!res.useClean) {
3504
- logger.warn(import_chalk5.default.yellowBright("\u26A0\uFE0F Audit not complete"));
3688
+ logger.warn(chalk5.yellowBright("\u26A0\uFE0F Audit not complete"));
3505
3689
  process.exit(0);
3506
3690
  }
3507
3691
  }
3508
3692
  if (useDefaultValues && !clean) {
3509
3693
  logger.warn(
3510
- import_chalk5.default.yellowBright(
3694
+ chalk5.yellowBright(
3511
3695
  "WARNING: using the `--useDefaultValues` without the `--clean` flag has no effect. Please re-run audit and add the `--clean` flag"
3512
3696
  )
3513
3697
  );
@@ -3535,10 +3719,10 @@ var audit = async ({
3535
3719
  }
3536
3720
  if (error) {
3537
3721
  logger.error(
3538
- import_chalk5.default.redBright(`\u203C\uFE0F Audit ${import_chalk5.default.bold("failed")} with errors`)
3722
+ chalk5.redBright(`\u203C\uFE0F Audit ${chalk5.bold("failed")} with errors`)
3539
3723
  );
3540
3724
  } else {
3541
- logger.info(import_chalk5.default.greenBright("\u2705 Audit passed"));
3725
+ logger.info(chalk5.greenBright("\u2705 Audit passed"));
3542
3726
  }
3543
3727
  };
3544
3728
  var auditDocuments = async (args) => {
@@ -3555,7 +3739,7 @@ var auditDocuments = async (args) => {
3555
3739
  }
3556
3740
  }
3557
3741
  }`;
3558
- const docResult = await (0, import_graphql13.resolve)({
3742
+ const docResult = await resolve({
3559
3743
  database,
3560
3744
  query: documentQuery,
3561
3745
  variables: {},
@@ -3566,11 +3750,11 @@ var auditDocuments = async (args) => {
3566
3750
  if (docResult.errors) {
3567
3751
  error = true;
3568
3752
  docResult.errors.forEach((err) => {
3569
- logger.error(import_chalk5.default.red(err.message));
3753
+ logger.error(chalk5.red(err.message));
3570
3754
  if (err.originalError.originalError) {
3571
3755
  logger.error(
3572
3756
  // @ts-ignore FIXME: this doesn't seem right
3573
- import_chalk5.default.red(` ${err.originalError.originalError.message}`)
3757
+ chalk5.red(` ${err.originalError.originalError.message}`)
3574
3758
  );
3575
3759
  }
3576
3760
  });
@@ -3597,7 +3781,7 @@ var auditDocuments = async (args) => {
3597
3781
  params: $params
3598
3782
  ){__typename}
3599
3783
  }`;
3600
- const mutationRes = await (0, import_graphql13.resolve)({
3784
+ const mutationRes = await resolve({
3601
3785
  database,
3602
3786
  query: mutation,
3603
3787
  variables: {
@@ -3612,7 +3796,7 @@ var auditDocuments = async (args) => {
3612
3796
  if (mutationRes.errors) {
3613
3797
  mutationRes.errors.forEach((err) => {
3614
3798
  error = true;
3615
- logger.error(import_chalk5.default.red(err.message));
3799
+ logger.error(chalk5.red(err.message));
3616
3800
  });
3617
3801
  }
3618
3802
  }
@@ -3629,29 +3813,31 @@ function filterObject(obj) {
3629
3813
  }
3630
3814
 
3631
3815
  // src/next/commands/audit-command/index.ts
3632
- var import_graphql15 = require("@tinacms/graphql");
3633
- var AuditCommand = class extends import_clipanion4.Command {
3634
- constructor() {
3635
- super(...arguments);
3636
- this.rootPath = import_clipanion4.Option.String("--rootPath", {
3637
- description: "Specify the root directory to run the CLI from"
3638
- });
3639
- this.verbose = import_clipanion4.Option.Boolean("-v,--verbose", false, {
3640
- description: "increase verbosity of logged output"
3641
- });
3642
- this.clean = import_clipanion4.Option.Boolean("--clean", false, {
3643
- description: "Clean the output"
3644
- });
3645
- this.useDefaultValues = import_clipanion4.Option.Boolean("--useDefaultValues", false, {
3646
- description: "When cleaning the output, use defaults on the config"
3647
- });
3648
- this.noTelemetry = import_clipanion4.Option.Boolean("--noTelemetry", false, {
3649
- description: "Disable anonymous telemetry that is collected"
3650
- });
3651
- this.datalayerPort = import_clipanion4.Option.String("--datalayer-port", "9000", {
3652
- description: "Specify a port to run the datalayer server on. (default 9000)"
3653
- });
3654
- }
3816
+ import { AuditFileSystemBridge } from "@tinacms/graphql";
3817
+ var AuditCommand = class extends Command4 {
3818
+ static paths = [["audit"]];
3819
+ rootPath = Option4.String("--rootPath", {
3820
+ description: "Specify the root directory to run the CLI from"
3821
+ });
3822
+ verbose = Option4.Boolean("-v,--verbose", false, {
3823
+ description: "increase verbosity of logged output"
3824
+ });
3825
+ clean = Option4.Boolean("--clean", false, {
3826
+ description: "Clean the output"
3827
+ });
3828
+ useDefaultValues = Option4.Boolean("--useDefaultValues", false, {
3829
+ description: "When cleaning the output, use defaults on the config"
3830
+ });
3831
+ noTelemetry = Option4.Boolean("--noTelemetry", false, {
3832
+ description: "Disable anonymous telemetry that is collected"
3833
+ });
3834
+ datalayerPort = Option4.String("--datalayer-port", "9000", {
3835
+ description: "Specify a port to run the datalayer server on. (default 9000)"
3836
+ });
3837
+ static usage = Command4.Usage({
3838
+ category: `Commands`,
3839
+ description: `Audit config and content files`
3840
+ });
3655
3841
  async catch(error) {
3656
3842
  logger.error("Error occured during tinacms audit");
3657
3843
  if (this.verbose) {
@@ -3672,9 +3858,9 @@ var AuditCommand = class extends import_clipanion4.Command {
3672
3858
  const database = await createAndInitializeDatabase(
3673
3859
  configManager,
3674
3860
  Number(this.datalayerPort),
3675
- this.clean ? void 0 : new import_graphql15.AuditFileSystemBridge(configManager.rootPath)
3861
+ this.clean ? void 0 : new AuditFileSystemBridge(configManager.rootPath)
3676
3862
  );
3677
- const { tinaSchema, graphQLSchema, lookup } = await (0, import_graphql14.buildSchema)(
3863
+ const { tinaSchema, graphQLSchema, lookup } = await buildSchema3(
3678
3864
  configManager.config
3679
3865
  );
3680
3866
  const warnings = [];
@@ -3705,36 +3891,31 @@ var AuditCommand = class extends import_clipanion4.Command {
3705
3891
  process.exit();
3706
3892
  }
3707
3893
  };
3708
- AuditCommand.paths = [["audit"]];
3709
- AuditCommand.usage = import_clipanion4.Command.Usage({
3710
- category: `Commands`,
3711
- description: `Audit config and content files`
3712
- });
3713
3894
 
3714
3895
  // src/next/commands/init-command/index.ts
3715
- var import_clipanion6 = require("clipanion");
3896
+ import { Command as Command6, Option as Option6 } from "clipanion";
3716
3897
 
3717
3898
  // src/cmds/init/detectEnvironment.ts
3718
- var import_fs_extra8 = __toESM(require("fs-extra"));
3719
- var import_path7 = __toESM(require("path"));
3899
+ import fs9 from "fs-extra";
3900
+ import path10 from "path";
3720
3901
  var checkGitignoreForItem = async ({
3721
3902
  baseDir,
3722
3903
  line
3723
3904
  }) => {
3724
- const gitignoreContent = import_fs_extra8.default.readFileSync(import_path7.default.join(baseDir, ".gitignore")).toString();
3905
+ const gitignoreContent = fs9.readFileSync(path10.join(baseDir, ".gitignore")).toString();
3725
3906
  return gitignoreContent.split("\n").some((item) => item === line);
3726
3907
  };
3727
3908
  var makeGeneratedFile = async (name2, generatedFileType, parentPath, opts) => {
3728
3909
  const result = {
3729
- fullPathTS: import_path7.default.join(
3910
+ fullPathTS: path10.join(
3730
3911
  parentPath,
3731
- `${name2}.${(opts == null ? void 0 : opts.typescriptSuffix) || (opts == null ? void 0 : opts.extensionOverride) || "ts"}`
3912
+ `${name2}.${opts?.typescriptSuffix || opts?.extensionOverride || "ts"}`
3732
3913
  ),
3733
- fullPathJS: import_path7.default.join(
3914
+ fullPathJS: path10.join(
3734
3915
  parentPath,
3735
- `${name2}.${(opts == null ? void 0 : opts.extensionOverride) || "js"}`
3916
+ `${name2}.${opts?.extensionOverride || "js"}`
3736
3917
  ),
3737
- fullPathOverride: (opts == null ? void 0 : opts.extensionOverride) ? import_path7.default.join(parentPath, `${name2}.${opts == null ? void 0 : opts.extensionOverride}`) : "",
3918
+ fullPathOverride: opts?.extensionOverride ? path10.join(parentPath, `${name2}.${opts?.extensionOverride}`) : "",
3738
3919
  generatedFileType,
3739
3920
  name: name2,
3740
3921
  parentPath,
@@ -3752,8 +3933,8 @@ var makeGeneratedFile = async (name2, generatedFileType, parentPath, opts) => {
3752
3933
  };
3753
3934
  }
3754
3935
  };
3755
- result.typescriptExists = await import_fs_extra8.default.pathExists(result.fullPathTS);
3756
- result.javascriptExists = await import_fs_extra8.default.pathExists(result.fullPathJS);
3936
+ result.typescriptExists = await fs9.pathExists(result.fullPathTS);
3937
+ result.javascriptExists = await fs9.pathExists(result.fullPathJS);
3757
3938
  return result;
3758
3939
  };
3759
3940
  var detectEnvironment = async ({
@@ -3762,22 +3943,21 @@ var detectEnvironment = async ({
3762
3943
  rootPath,
3763
3944
  debug = false
3764
3945
  }) => {
3765
- var _a;
3766
- const hasForestryConfig = await import_fs_extra8.default.pathExists(
3767
- import_path7.default.join(pathToForestryConfig, ".forestry", "settings.yml")
3946
+ const hasForestryConfig = await fs9.pathExists(
3947
+ path10.join(pathToForestryConfig, ".forestry", "settings.yml")
3768
3948
  );
3769
- const sampleContentPath = import_path7.default.join(
3949
+ const sampleContentPath = path10.join(
3770
3950
  baseDir,
3771
3951
  "content",
3772
3952
  "posts",
3773
3953
  "hello-world.md"
3774
3954
  );
3775
- 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")));
3776
- const tinaFolder = import_path7.default.join(baseDir, "tina");
3955
+ const usingSrc = fs9.pathExistsSync(path10.join(baseDir, "src")) && (fs9.pathExistsSync(path10.join(baseDir, "src", "app")) || fs9.pathExistsSync(path10.join(baseDir, "src", "pages")));
3956
+ const tinaFolder = path10.join(baseDir, "tina");
3777
3957
  const tinaConfigExists = Boolean(
3778
3958
  // Does the tina folder exist?
3779
- await import_fs_extra8.default.pathExists(tinaFolder) && // Does the tina folder contain a config file?
3780
- (await import_fs_extra8.default.readdir(tinaFolder)).find((x) => x.includes("config"))
3959
+ await fs9.pathExists(tinaFolder) && // Does the tina folder contain a config file?
3960
+ (await fs9.readdir(tinaFolder)).find((x) => x.includes("config"))
3781
3961
  );
3782
3962
  const pagesDir = [baseDir, usingSrc ? "src" : false, "pages"].filter(
3783
3963
  Boolean
@@ -3789,12 +3969,12 @@ var detectEnvironment = async ({
3789
3969
  "next-api-handler": await makeGeneratedFile(
3790
3970
  "[...routes]",
3791
3971
  "next-api-handler",
3792
- import_path7.default.join(...pagesDir, "api", "tina")
3972
+ path10.join(...pagesDir, "api", "tina")
3793
3973
  ),
3794
3974
  "reactive-example": await makeGeneratedFile(
3795
3975
  "[filename]",
3796
3976
  "reactive-example",
3797
- import_path7.default.join(...pagesDir, "demo", "blog"),
3977
+ path10.join(...pagesDir, "demo", "blog"),
3798
3978
  {
3799
3979
  typescriptSuffix: "tsx"
3800
3980
  }
@@ -3802,27 +3982,27 @@ var detectEnvironment = async ({
3802
3982
  "users-json": await makeGeneratedFile(
3803
3983
  "index",
3804
3984
  "users-json",
3805
- import_path7.default.join(baseDir, "content", "users"),
3985
+ path10.join(baseDir, "content", "users"),
3806
3986
  { extensionOverride: "json" }
3807
3987
  ),
3808
3988
  "sample-content": await makeGeneratedFile(
3809
3989
  "hello-world",
3810
3990
  "sample-content",
3811
- import_path7.default.join(baseDir, "content", "posts"),
3991
+ path10.join(baseDir, "content", "posts"),
3812
3992
  { extensionOverride: "md" }
3813
3993
  )
3814
3994
  };
3815
- const hasSampleContent = await import_fs_extra8.default.pathExists(sampleContentPath);
3816
- const hasPackageJSON = await import_fs_extra8.default.pathExists("package.json");
3995
+ const hasSampleContent = await fs9.pathExists(sampleContentPath);
3996
+ const hasPackageJSON = await fs9.pathExists("package.json");
3817
3997
  let hasTinaDeps = false;
3818
3998
  if (hasPackageJSON) {
3819
3999
  try {
3820
- const packageJSON = await import_fs_extra8.default.readJSON("package.json");
4000
+ const packageJSON = await fs9.readJSON("package.json");
3821
4001
  const deps = [];
3822
- if (packageJSON == null ? void 0 : packageJSON.dependencies) {
4002
+ if (packageJSON?.dependencies) {
3823
4003
  deps.push(...Object.keys(packageJSON.dependencies));
3824
4004
  }
3825
- if (packageJSON == null ? void 0 : packageJSON.devDependencies) {
4005
+ if (packageJSON?.devDependencies) {
3826
4006
  deps.push(...Object.keys(packageJSON.devDependencies));
3827
4007
  }
3828
4008
  if (deps.includes("@tinacms/cli") && deps.includes("tinacms")) {
@@ -3834,16 +4014,16 @@ var detectEnvironment = async ({
3834
4014
  );
3835
4015
  }
3836
4016
  }
3837
- const hasGitIgnore = await import_fs_extra8.default.pathExists(import_path7.default.join(".gitignore"));
4017
+ const hasGitIgnore = await fs9.pathExists(path10.join(".gitignore"));
3838
4018
  const hasGitIgnoreNodeModules = hasGitIgnore && await checkGitignoreForItem({ baseDir, line: "node_modules" });
3839
4019
  const hasEnvTina = hasGitIgnore && await checkGitignoreForItem({ baseDir, line: ".env.tina" });
3840
4020
  const hasGitIgnoreEnv = hasGitIgnore && await checkGitignoreForItem({ baseDir, line: ".env" });
3841
4021
  let frontMatterFormat;
3842
4022
  if (hasForestryConfig) {
3843
- const hugoConfigPath = import_path7.default.join(rootPath, "config.toml");
3844
- if (await import_fs_extra8.default.pathExists(hugoConfigPath)) {
3845
- const hugoConfig = await import_fs_extra8.default.readFile(hugoConfigPath, "utf8");
3846
- const metaDataFormat = (_a = hugoConfig.match(/metaDataFormat = "(.*)"/)) == null ? void 0 : _a[1];
4023
+ const hugoConfigPath = path10.join(rootPath, "config.toml");
4024
+ if (await fs9.pathExists(hugoConfigPath)) {
4025
+ const hugoConfig = await fs9.readFile(hugoConfigPath, "utf8");
4026
+ const metaDataFormat = hugoConfig.toString().match(/metaDataFormat = "(.*)"/)?.[1];
3847
4027
  if (metaDataFormat && (metaDataFormat === "yaml" || metaDataFormat === "toml" || metaDataFormat === "json")) {
3848
4028
  frontMatterFormat = metaDataFormat;
3849
4029
  }
@@ -3873,10 +4053,10 @@ var detectEnvironment = async ({
3873
4053
  var detectEnvironment_default = detectEnvironment;
3874
4054
 
3875
4055
  // src/cmds/init/prompts/index.ts
3876
- var import_prompts6 = __toESM(require("prompts"));
4056
+ import prompts6 from "prompts";
3877
4057
 
3878
4058
  // src/cmds/init/prompts/askTinaCloudSetup.ts
3879
- var import_prompts2 = __toESM(require("prompts"));
4059
+ import prompts2 from "prompts";
3880
4060
  var tinaCloudSetupQuestions = [
3881
4061
  {
3882
4062
  name: "clientId",
@@ -3898,7 +4078,7 @@ ${logText(
3898
4078
  }
3899
4079
  ];
3900
4080
  var askTinaCloudSetup = async ({ config: config2 }) => {
3901
- const { clientId, token } = await (0, import_prompts2.default)(tinaCloudSetupQuestions);
4081
+ const { clientId, token } = await prompts2(tinaCloudSetupQuestions);
3902
4082
  config2.envVars.push(
3903
4083
  {
3904
4084
  key: "NEXT_PUBLIC_TINA_CLIENT_ID",
@@ -3912,7 +4092,7 @@ var askTinaCloudSetup = async ({ config: config2 }) => {
3912
4092
  };
3913
4093
 
3914
4094
  // src/cmds/init/prompts/gitProvider.ts
3915
- var import_prompts3 = __toESM(require("prompts"));
4095
+ import prompts3 from "prompts";
3916
4096
  var supportedGitProviders = {
3917
4097
  github: {
3918
4098
  imports: [
@@ -3934,7 +4114,7 @@ var supportedGitProviders = {
3934
4114
  }
3935
4115
  };
3936
4116
  var chooseGitProvider = async ({ config: config2 }) => {
3937
- const result = await (0, import_prompts3.default)([
4117
+ const result = await prompts3([
3938
4118
  {
3939
4119
  name: "githubToken",
3940
4120
  type: "text",
@@ -3942,7 +4122,7 @@ var chooseGitProvider = async ({ config: config2 }) => {
3942
4122
  ${logText(
3943
4123
  "Learn more here: "
3944
4124
  )}${linkText(
3945
- "https://tina.io/docs/self-hosted/existing-site/#github-personal-access-token"
4125
+ "https://tina.io/docs/r/self-hosting-nextjs/#github-personal-access-token"
3946
4126
  )}`,
3947
4127
  initial: process.env.GITHUB_PERSONAL_ACCESS_TOKEN
3948
4128
  },
@@ -3979,7 +4159,7 @@ ${logText(
3979
4159
  };
3980
4160
 
3981
4161
  // src/cmds/init/prompts/databaseAdapter.ts
3982
- var import_prompts4 = __toESM(require("prompts"));
4162
+ import prompts4 from "prompts";
3983
4163
  var supportedDatabaseAdapters = {
3984
4164
  ["upstash-redis"]: {
3985
4165
  databaseAdapterClassText: `new RedisLevel({
@@ -4025,7 +4205,7 @@ var databaseAdapterUpdateConfig = {
4025
4205
  other: async (_args) => {
4026
4206
  },
4027
4207
  mongodb: async ({ config: config2 }) => {
4028
- const result = await (0, import_prompts4.default)([
4208
+ const result = await prompts4([
4029
4209
  {
4030
4210
  name: "mongoDBUri",
4031
4211
  type: "text",
@@ -4040,7 +4220,7 @@ var databaseAdapterUpdateConfig = {
4040
4220
  });
4041
4221
  },
4042
4222
  "upstash-redis": async ({ config: config2 }) => {
4043
- const result = await (0, import_prompts4.default)([
4223
+ const result = await prompts4([
4044
4224
  {
4045
4225
  name: "kvRestApiUrl",
4046
4226
  type: "text",
@@ -4071,7 +4251,7 @@ var chooseDatabaseAdapter = async ({
4071
4251
  framework,
4072
4252
  config: config2
4073
4253
  }) => {
4074
- const answers = await (0, import_prompts4.default)([
4254
+ const answers = await prompts4([
4075
4255
  {
4076
4256
  name: "dataLayerAdapter",
4077
4257
  message: "Select a self-hosted Database Adapter",
@@ -4101,8 +4281,8 @@ var chooseDatabaseAdapter = async ({
4101
4281
  };
4102
4282
 
4103
4283
  // src/cmds/init/prompts/authProvider.ts
4104
- var import_crypto_js = __toESM(require("crypto-js"));
4105
- var import_prompts5 = __toESM(require("prompts"));
4284
+ import crypto2 from "crypto-js";
4285
+ import prompts5 from "prompts";
4106
4286
  var supportedAuthProviders = {
4107
4287
  other: {
4108
4288
  name: "other"
@@ -4151,12 +4331,12 @@ var authProviderUpdateConfig = {
4151
4331
  },
4152
4332
  "tina-cloud": askTinaCloudSetup,
4153
4333
  "next-auth": async ({ config: config2 }) => {
4154
- const result = await (0, import_prompts5.default)([
4334
+ const result = await prompts5([
4155
4335
  {
4156
4336
  name: "nextAuthSecret",
4157
4337
  type: "text",
4158
4338
  message: `What is the NextAuth.js Secret? (Hit enter to use a randomly generated secret)`,
4159
- initial: process.env.NEXTAUTH_SECRET || import_crypto_js.default.lib.WordArray.random(16).toString()
4339
+ initial: process.env.NEXTAUTH_SECRET || crypto2.lib.WordArray.random(16).toString()
4160
4340
  }
4161
4341
  ]);
4162
4342
  config2.envVars.push({
@@ -4181,7 +4361,7 @@ var forestryDisclaimer = logText(
4181
4361
  `Note: This migration will update some of your content to match tina. Please save a backup of your content before doing this migration. (This can be done with git)`
4182
4362
  );
4183
4363
  var askCommonSetUp = async () => {
4184
- const answers = await (0, import_prompts6.default)([
4364
+ const answers = await prompts6([
4185
4365
  {
4186
4366
  name: "framework",
4187
4367
  type: "select",
@@ -4203,7 +4383,8 @@ var askCommonSetUp = async () => {
4203
4383
  choices: [
4204
4384
  { title: "PNPM", value: "pnpm" },
4205
4385
  { title: "Yarn", value: "yarn" },
4206
- { title: "NPM", value: "npm" }
4386
+ { title: "NPM", value: "npm" },
4387
+ { title: "Bun", value: "bun" }
4207
4388
  ]
4208
4389
  }
4209
4390
  ]);
@@ -4244,7 +4425,7 @@ ${forestryDisclaimer}`
4244
4425
  message: `What format are you using in your frontmatter?`
4245
4426
  });
4246
4427
  }
4247
- const answers = await (0, import_prompts6.default)(questions);
4428
+ const answers = await prompts6(questions);
4248
4429
  return answers;
4249
4430
  };
4250
4431
  var askTinaSetupPrompts = async (params) => {
@@ -4264,16 +4445,16 @@ var askTinaSetupPrompts = async (params) => {
4264
4445
  message: `Where are public assets stored? (default: "public")
4265
4446
  ` + logText(
4266
4447
  `Not sure what value to use? Refer to our "Frameworks" doc: ${linkText(
4267
- "https://tina.io/docs/integration/frameworks/#configuring-tina-with-each-framework"
4448
+ "https://tina.io/docs/r/framework-guides-overview"
4268
4449
  )}`
4269
4450
  )
4270
4451
  });
4271
4452
  }
4272
- const answers = await (0, import_prompts6.default)(questions);
4453
+ const answers = await prompts6(questions);
4273
4454
  return answers;
4274
4455
  };
4275
4456
  var askIfUsingSelfHosted = async () => {
4276
- const answers = await (0, import_prompts6.default)([
4457
+ const answers = await prompts6([
4277
4458
  {
4278
4459
  name: "hosting",
4279
4460
  type: "select",
@@ -4306,20 +4487,20 @@ var makeImportString = (imports) => {
4306
4487
  };
4307
4488
 
4308
4489
  // src/cmds/init/prompts/generatedFiles.ts
4309
- var import_prompts7 = __toESM(require("prompts"));
4490
+ import prompts7 from "prompts";
4310
4491
  var askIfOverride = async ({
4311
4492
  generatedFile,
4312
4493
  usingTypescript
4313
4494
  }) => {
4314
4495
  if (usingTypescript) {
4315
- const result = await (0, import_prompts7.default)({
4496
+ const result = await prompts7({
4316
4497
  name: `override`,
4317
4498
  type: "confirm",
4318
4499
  message: `Found existing file at ${generatedFile.fullPathTS}. Would you like to overwrite?`
4319
4500
  });
4320
4501
  return Boolean(result.override);
4321
4502
  } else {
4322
- const result = await (0, import_prompts7.default)({
4503
+ const result = await prompts7({
4323
4504
  name: `override`,
4324
4505
  type: "confirm",
4325
4506
  message: `Found existing file at ${generatedFile.fullPathJS}. Would you like to overwrite?`
@@ -4454,23 +4635,25 @@ var CLICommand = class {
4454
4635
  };
4455
4636
 
4456
4637
  // src/cmds/init/apply.ts
4457
- var import_path11 = __toESM(require("path"));
4638
+ import path14 from "path";
4458
4639
 
4459
4640
  // src/cmds/forestry-migrate/index.ts
4460
- var import_fs_extra10 = __toESM(require("fs-extra"));
4461
- var import_path9 = __toESM(require("path"));
4462
- var import_js_yaml2 = __toESM(require("js-yaml"));
4463
- var import_minimatch = __toESM(require("minimatch"));
4464
- var import_graphql16 = require("@tinacms/graphql");
4641
+ import fs11 from "fs-extra";
4642
+ import path12 from "path";
4643
+ import yaml2 from "js-yaml";
4644
+ import pkg from "minimatch";
4645
+ import { parseFile, stringifyFile } from "@tinacms/graphql";
4646
+ import { CONTENT_FORMATS } from "@tinacms/schema-tools";
4465
4647
 
4466
4648
  // src/cmds/forestry-migrate/util/index.ts
4467
- var import_fs_extra9 = __toESM(require("fs-extra"));
4468
- var import_path8 = __toESM(require("path"));
4469
- var import_js_yaml = __toESM(require("js-yaml"));
4470
- var import_zod = __toESM(require("zod"));
4649
+ import fs10 from "fs-extra";
4650
+ import path11 from "path";
4651
+ import yaml from "js-yaml";
4652
+ import z from "zod";
4471
4653
 
4472
4654
  // src/cmds/forestry-migrate/util/errorSingleton.ts
4473
4655
  var ErrorSingleton = class _ErrorSingleton {
4656
+ static instance;
4474
4657
  /**
4475
4658
  * The Singleton's constructor should always be private to prevent direct
4476
4659
  * construction calls with the `new` operator.
@@ -4490,12 +4673,12 @@ var ErrorSingleton = class _ErrorSingleton {
4490
4673
  }
4491
4674
  return _ErrorSingleton.instance;
4492
4675
  }
4676
+ collectionNameErrors;
4493
4677
  addErrorName(error) {
4494
4678
  this.collectionNameErrors.push(error);
4495
4679
  }
4496
4680
  printCollectionNameErrors() {
4497
- var _a;
4498
- if ((_a = this.collectionNameErrors) == null ? void 0 : _a.length) {
4681
+ if (this.collectionNameErrors?.length) {
4499
4682
  logger.error(
4500
4683
  dangerText("ERROR: TinaCMS only supports alphanumeric template names")
4501
4684
  );
@@ -4513,8 +4696,8 @@ var ErrorSingleton = class _ErrorSingleton {
4513
4696
  };
4514
4697
 
4515
4698
  // src/cmds/forestry-migrate/util/codeTransformer.ts
4516
- var import_prettier = require("prettier");
4517
- var import_parser_typescript = __toESM(require("prettier/parser-typescript"));
4699
+ import { format } from "prettier";
4700
+ import TsParser from "prettier/parser-typescript.js";
4518
4701
  var addVariablesToCode = (codeWithTinaPrefix) => {
4519
4702
  const code = codeWithTinaPrefix.replace(
4520
4703
  /"__TINA_INTERNAL__:::(.*?):::"/g,
@@ -4551,7 +4734,7 @@ var makeTemplateFile = async ({
4551
4734
  `export function ${stringifyLabelWithField(
4552
4735
  template.templateObj.label
4553
4736
  )} (){
4554
- return ${addVariablesToCode(JSON.stringify(template.fields, null, 2)).code} ${usingTypescript ? "as TinaField[]" : ""}
4737
+ return ${addVariablesToCode(JSON.stringify(template.fields, null, 2)).code} ${usingTypescript ? "as TinaField[]" : ""}
4555
4738
  } `
4556
4739
  );
4557
4740
  }
@@ -4559,9 +4742,9 @@ var makeTemplateFile = async ({
4559
4742
  ${usingTypescript ? "import type { TinaField } from 'tinacms'" : ""}
4560
4743
  ${templateCodeText.join("\n")}
4561
4744
  `;
4562
- const formattedCode = (0, import_prettier.format)(templateCode, {
4745
+ const formattedCode = format(templateCode, {
4563
4746
  parser: "typescript",
4564
- plugins: [import_parser_typescript.default]
4747
+ plugins: [TsParser]
4565
4748
  });
4566
4749
  return { importStatements, templateCodeText: formattedCode };
4567
4750
  };
@@ -4593,82 +4776,82 @@ var stringifyTemplateName = (name2, template) => {
4593
4776
  return newName;
4594
4777
  }
4595
4778
  };
4596
- var forestryConfigSchema = import_zod.default.object({
4597
- sections: import_zod.default.array(
4598
- import_zod.default.object({
4599
- type: import_zod.default.union([
4600
- import_zod.default.literal("directory"),
4601
- import_zod.default.literal("document"),
4602
- import_zod.default.literal("heading"),
4603
- import_zod.default.literal("jekyll-pages"),
4604
- import_zod.default.literal("jekyll-posts")
4779
+ var forestryConfigSchema = z.object({
4780
+ sections: z.array(
4781
+ z.object({
4782
+ type: z.union([
4783
+ z.literal("directory"),
4784
+ z.literal("document"),
4785
+ z.literal("heading"),
4786
+ z.literal("jekyll-pages"),
4787
+ z.literal("jekyll-posts")
4605
4788
  ]),
4606
- label: import_zod.default.string(),
4607
- path: import_zod.default.string().optional().nullable(),
4608
- match: import_zod.default.string().optional().nullable(),
4609
- exclude: import_zod.default.string().optional().nullable(),
4610
- create: import_zod.default.union([import_zod.default.literal("all"), import_zod.default.literal("documents"), import_zod.default.literal("none")]).optional(),
4611
- templates: import_zod.default.array(import_zod.default.string()).optional().nullable(),
4612
- new_doc_ext: import_zod.default.string().optional().nullable(),
4613
- read_only: import_zod.default.boolean().optional().nullable()
4789
+ label: z.string(),
4790
+ path: z.string().optional().nullable(),
4791
+ match: z.string().optional().nullable(),
4792
+ exclude: z.string().optional().nullable(),
4793
+ create: z.union([z.literal("all"), z.literal("documents"), z.literal("none")]).optional(),
4794
+ templates: z.array(z.string()).optional().nullable(),
4795
+ new_doc_ext: z.string().optional().nullable(),
4796
+ read_only: z.boolean().optional().nullable()
4614
4797
  })
4615
4798
  )
4616
4799
  });
4617
- var forestryFieldWithoutField = import_zod.default.object({
4800
+ var forestryFieldWithoutField = z.object({
4618
4801
  // TODO: maybe better type this?
4619
- type: import_zod.default.union([
4620
- import_zod.default.literal("text"),
4621
- import_zod.default.literal("datetime"),
4622
- import_zod.default.literal("list"),
4623
- import_zod.default.literal("file"),
4624
- import_zod.default.literal("image_gallery"),
4625
- import_zod.default.literal("textarea"),
4626
- import_zod.default.literal("tag_list"),
4627
- import_zod.default.literal("number"),
4628
- import_zod.default.literal("boolean"),
4629
- import_zod.default.literal("field_group"),
4630
- import_zod.default.literal("field_group_list"),
4631
- import_zod.default.literal("select"),
4632
- import_zod.default.literal("include"),
4633
- import_zod.default.literal("blocks"),
4634
- import_zod.default.literal("color")
4802
+ type: z.union([
4803
+ z.literal("text"),
4804
+ z.literal("datetime"),
4805
+ z.literal("list"),
4806
+ z.literal("file"),
4807
+ z.literal("image_gallery"),
4808
+ z.literal("textarea"),
4809
+ z.literal("tag_list"),
4810
+ z.literal("number"),
4811
+ z.literal("boolean"),
4812
+ z.literal("field_group"),
4813
+ z.literal("field_group_list"),
4814
+ z.literal("select"),
4815
+ z.literal("include"),
4816
+ z.literal("blocks"),
4817
+ z.literal("color")
4635
4818
  ]),
4636
- template_types: import_zod.default.array(import_zod.default.string()).optional().nullable(),
4637
- name: import_zod.default.string(),
4638
- label: import_zod.default.string(),
4639
- default: import_zod.default.any().optional(),
4640
- template: import_zod.default.string().optional(),
4641
- config: import_zod.default.object({
4819
+ template_types: z.array(z.string()).optional().nullable(),
4820
+ name: z.string(),
4821
+ label: z.string(),
4822
+ default: z.any().optional(),
4823
+ template: z.string().optional(),
4824
+ config: z.object({
4642
4825
  // min and max are used for lists
4643
- min: import_zod.default.number().optional().nullable(),
4644
- max: import_zod.default.number().optional().nullable(),
4645
- required: import_zod.default.boolean().optional().nullable(),
4646
- use_select: import_zod.default.boolean().optional().nullable(),
4647
- date_format: import_zod.default.string().optional().nullable(),
4648
- time_format: import_zod.default.string().optional().nullable(),
4649
- options: import_zod.default.array(import_zod.default.string()).optional().nullable(),
4650
- source: import_zod.default.object({
4651
- type: import_zod.default.union([
4652
- import_zod.default.literal("custom"),
4653
- import_zod.default.literal("pages"),
4654
- import_zod.default.literal("documents"),
4655
- import_zod.default.literal("simple"),
4826
+ min: z.number().optional().nullable(),
4827
+ max: z.number().optional().nullable(),
4828
+ required: z.boolean().optional().nullable(),
4829
+ use_select: z.boolean().optional().nullable(),
4830
+ date_format: z.string().optional().nullable(),
4831
+ time_format: z.string().optional().nullable(),
4832
+ options: z.array(z.string()).optional().nullable(),
4833
+ source: z.object({
4834
+ type: z.union([
4835
+ z.literal("custom"),
4836
+ z.literal("pages"),
4837
+ z.literal("documents"),
4838
+ z.literal("simple"),
4656
4839
  // TODO: I want to ignore this key if its invalid
4657
- import_zod.default.string()
4840
+ z.string()
4658
4841
  ]).optional().nullable(),
4659
- section: import_zod.default.string().optional().nullable()
4842
+ section: z.string().optional().nullable()
4660
4843
  }).optional()
4661
4844
  }).optional()
4662
4845
  });
4663
- var forestryField = import_zod.default.lazy(
4846
+ var forestryField = z.lazy(
4664
4847
  () => forestryFieldWithoutField.extend({
4665
- fields: import_zod.default.array(forestryField).optional()
4848
+ fields: z.array(forestryField).optional()
4666
4849
  })
4667
4850
  );
4668
- var FrontmatterTemplateSchema = import_zod.default.object({
4669
- label: import_zod.default.string(),
4670
- hide_body: import_zod.default.boolean().optional(),
4671
- fields: import_zod.default.array(forestryField).optional()
4851
+ var FrontmatterTemplateSchema = z.object({
4852
+ label: z.string(),
4853
+ hide_body: z.boolean().optional(),
4854
+ fields: z.array(forestryField).optional()
4672
4855
  });
4673
4856
  var transformForestryFieldsToTinaFields = ({
4674
4857
  fields,
@@ -4677,8 +4860,7 @@ var transformForestryFieldsToTinaFields = ({
4677
4860
  skipBlocks = false
4678
4861
  }) => {
4679
4862
  const tinaFields = [];
4680
- fields == null ? void 0 : fields.forEach((forestryField2) => {
4681
- var _a, _b, _c, _d;
4863
+ fields?.forEach((forestryField2) => {
4682
4864
  if (forestryField2.name === "menu") {
4683
4865
  logger.info(
4684
4866
  warnText(
@@ -4754,12 +4936,12 @@ var transformForestryFieldsToTinaFields = ({
4754
4936
  };
4755
4937
  break;
4756
4938
  case "select":
4757
- if ((_a = forestryField2.config) == null ? void 0 : _a.options) {
4939
+ if (forestryField2.config?.options) {
4758
4940
  field = {
4759
4941
  type: "string",
4760
4942
  ...getTinaFieldsFromName(forestryField2.name),
4761
4943
  label: forestryField2.label,
4762
- options: ((_b = forestryField2.config) == null ? void 0 : _b.options) || []
4944
+ options: forestryField2.config?.options || []
4763
4945
  };
4764
4946
  } else {
4765
4947
  logger.info(
@@ -4777,7 +4959,7 @@ var transformForestryFieldsToTinaFields = ({
4777
4959
  label: forestryField2.label,
4778
4960
  list: true
4779
4961
  };
4780
- if ((_c = forestryField2.config) == null ? void 0 : _c.options) {
4962
+ if (forestryField2.config?.options) {
4781
4963
  field.options = forestryField2.config.options;
4782
4964
  }
4783
4965
  break;
@@ -4825,7 +5007,7 @@ var transformForestryFieldsToTinaFields = ({
4825
5007
  break;
4826
5008
  }
4827
5009
  const templates2 = [];
4828
- forestryField2 == null ? void 0 : forestryField2.template_types.forEach((tem) => {
5010
+ forestryField2?.template_types.forEach((tem) => {
4829
5011
  const { template: template2 } = getFieldsFromTemplates({
4830
5012
  tem,
4831
5013
  skipBlocks: true,
@@ -4883,7 +5065,7 @@ var transformForestryFieldsToTinaFields = ({
4883
5065
  );
4884
5066
  }
4885
5067
  if (field) {
4886
- if ((_d = forestryField2.config) == null ? void 0 : _d.required) {
5068
+ if (forestryField2.config?.required) {
4887
5069
  field = { ...field, required: true };
4888
5070
  }
4889
5071
  tinaFields.push(field);
@@ -4892,7 +5074,7 @@ var transformForestryFieldsToTinaFields = ({
4892
5074
  return tinaFields;
4893
5075
  };
4894
5076
  var getFieldsFromTemplates = ({ tem, pathToForestryConfig, skipBlocks = false }) => {
4895
- const templatePath = import_path8.default.join(
5077
+ const templatePath = path11.join(
4896
5078
  pathToForestryConfig,
4897
5079
  ".forestry",
4898
5080
  "front_matter",
@@ -4901,7 +5083,7 @@ var getFieldsFromTemplates = ({ tem, pathToForestryConfig, skipBlocks = false })
4901
5083
  );
4902
5084
  let templateString = "";
4903
5085
  try {
4904
- templateString = import_fs_extra9.default.readFileSync(templatePath).toString();
5086
+ templateString = fs10.readFileSync(templatePath).toString();
4905
5087
  } catch {
4906
5088
  throw new Error(
4907
5089
  `Could not find template ${tem} at ${templatePath}
@@ -4909,7 +5091,7 @@ var getFieldsFromTemplates = ({ tem, pathToForestryConfig, skipBlocks = false })
4909
5091
  This will require manual migration.`
4910
5092
  );
4911
5093
  }
4912
- const templateObj = import_js_yaml.default.load(templateString);
5094
+ const templateObj = yaml.load(templateString);
4913
5095
  const template = parseTemplates({ val: templateObj });
4914
5096
  const fields = transformForestryFieldsToTinaFields({
4915
5097
  fields: template.fields,
@@ -4929,6 +5111,7 @@ var parseSections = ({ val }) => {
4929
5111
  };
4930
5112
 
4931
5113
  // src/cmds/forestry-migrate/index.ts
5114
+ var { minimatch } = pkg;
4932
5115
  var BODY_FIELD = {
4933
5116
  // This is the body field
4934
5117
  type: "rich-text",
@@ -4945,8 +5128,7 @@ var stringifyLabelWithField = (label) => {
4945
5128
  return `${labelString}Fields`;
4946
5129
  };
4947
5130
  var transformForestryMatchToTinaMatch = (match) => {
4948
- var _a, _b;
4949
- const newMatch = (_b = (_a = match.replace(" ", "").replace(/\.?(mdx|md|json|yaml|yml|toml)/g, "")) == null ? void 0 : _a.replace(/\..*$/g, "")) == null ? void 0 : _b.replace("{}", "");
5131
+ const newMatch = match.replace(" ", "").replace(/\.?(mdx|md|json|yaml|yml|toml)/g, "")?.replace(/\..*$/g, "")?.replace("{}", "");
4950
5132
  if (match !== newMatch) {
4951
5133
  logger.info(
4952
5134
  `Info: Match ${match} was transformed to ${newMatch}. See ${linkText(
@@ -4958,7 +5140,7 @@ var transformForestryMatchToTinaMatch = (match) => {
4958
5140
  };
4959
5141
  function checkExt(ext) {
4960
5142
  const extReal = ext.replace(".", "");
4961
- if (["mdx", "md", "json", "yaml", "yml", "toml"].includes(extReal)) {
5143
+ if (CONTENT_FORMATS.includes(extReal)) {
4962
5144
  return extReal;
4963
5145
  } else {
4964
5146
  return false;
@@ -4967,9 +5149,9 @@ function checkExt(ext) {
4967
5149
  var generateAllTemplates = async ({
4968
5150
  pathToForestryConfig
4969
5151
  }) => {
4970
- const allTemplates = (await import_fs_extra10.default.readdir(
4971
- import_path9.default.join(pathToForestryConfig, ".forestry", "front_matter", "templates")
4972
- )).map((tem) => import_path9.default.basename(tem, ".yml"));
5152
+ const allTemplates = (await fs11.readdir(
5153
+ path12.join(pathToForestryConfig, ".forestry", "front_matter", "templates")
5154
+ )).map((tem) => path12.basename(tem, ".yml"));
4973
5155
  const templateMap = /* @__PURE__ */ new Map();
4974
5156
  const proms = allTemplates.map(async (tem) => {
4975
5157
  try {
@@ -4979,7 +5161,7 @@ var generateAllTemplates = async ({
4979
5161
  });
4980
5162
  templateMap.set(tem, { fields, templateObj });
4981
5163
  } catch (e) {
4982
- logger.log(`Error parsing template frontmatter template', tem + '.yml'`);
5164
+ logger.warn(`Error parsing template frontmatter template, ${tem}.yml`);
4983
5165
  console.error(e);
4984
5166
  templateMap.set(tem, { fields: [], templateObj: {} });
4985
5167
  }
@@ -5011,19 +5193,19 @@ var generateCollectionFromForestrySection = (args) => {
5011
5193
  }
5012
5194
  if (section.match) {
5013
5195
  baseCollection.match = {
5014
- ...(baseCollection == null ? void 0 : baseCollection.match) || {},
5196
+ ...baseCollection?.match || {},
5015
5197
  include: transformForestryMatchToTinaMatch(section.match)
5016
5198
  };
5017
5199
  }
5018
5200
  if (section.exclude) {
5019
5201
  baseCollection.match = {
5020
- ...(baseCollection == null ? void 0 : baseCollection.match) || {},
5202
+ ...baseCollection?.match || {},
5021
5203
  exclude: transformForestryMatchToTinaMatch(section.exclude)
5022
5204
  };
5023
5205
  }
5024
5206
  if (section.type === "directory") {
5025
- if (!(section == null ? void 0 : section.path) || section.path === "/" || section.path === "./" || section.path === ".") {
5026
- logger.log(
5207
+ if (!section?.path || section.path === "/" || section.path === "./" || section.path === ".") {
5208
+ logger.warn(
5027
5209
  warnText(
5028
5210
  `Warning: Section ${section.label} is using a Root Path. Currently, Tina Does not support Root paths see ${linkText(
5029
5211
  "https://github.com/tinacms/tinacms/issues/3768"
@@ -5032,11 +5214,11 @@ var generateCollectionFromForestrySection = (args) => {
5032
5214
  );
5033
5215
  return;
5034
5216
  }
5035
- const forestryTemplates = (section == null ? void 0 : section.templates) || [];
5217
+ const forestryTemplates = section?.templates || [];
5036
5218
  if (forestryTemplates.length === 0 && section.create === "all") {
5037
5219
  for (const templateKey of templateMap.keys()) {
5038
5220
  const { templateObj } = templateMap.get(templateKey);
5039
- const pages = templateObj == null ? void 0 : templateObj.pages;
5221
+ const pages = templateObj?.pages;
5040
5222
  if (pages) {
5041
5223
  let glob = section.match;
5042
5224
  const skipPath = section.path === "" || section.path === "/" || !section.path;
@@ -5044,7 +5226,7 @@ var generateCollectionFromForestrySection = (args) => {
5044
5226
  glob = section.path + "/" + section.match;
5045
5227
  }
5046
5228
  if (pages.some((page) => {
5047
- return (0, import_minimatch.default)(page, glob);
5229
+ return minimatch(page, glob);
5048
5230
  })) {
5049
5231
  forestryTemplates.push(templateKey);
5050
5232
  }
@@ -5053,7 +5235,7 @@ var generateCollectionFromForestrySection = (args) => {
5053
5235
  }
5054
5236
  const hasBody = ["md", "mdx", "markdown"].includes(format3);
5055
5237
  let c;
5056
- if (((forestryTemplates == null ? void 0 : forestryTemplates.length) || 0) > 1) {
5238
+ if ((forestryTemplates?.length || 0) > 1) {
5057
5239
  c = {
5058
5240
  ...baseCollection,
5059
5241
  // @ts-expect-error
@@ -5075,7 +5257,7 @@ var generateCollectionFromForestrySection = (args) => {
5075
5257
  })
5076
5258
  };
5077
5259
  }
5078
- if ((forestryTemplates == null ? void 0 : forestryTemplates.length) === 1) {
5260
+ if (forestryTemplates?.length === 1) {
5079
5261
  const tem = forestryTemplates[0];
5080
5262
  const template = templateMap.get(tem);
5081
5263
  const fieldsString = stringifyLabelWithField(template.templateObj.label);
@@ -5090,7 +5272,7 @@ var generateCollectionFromForestrySection = (args) => {
5090
5272
  })
5091
5273
  };
5092
5274
  }
5093
- if ((forestryTemplates == null ? void 0 : forestryTemplates.length) === 0) {
5275
+ if (forestryTemplates?.length === 0) {
5094
5276
  logger.warn(
5095
5277
  warnText(
5096
5278
  `No templates found for section ${section.label}. Please see ${linkText(
@@ -5103,7 +5285,7 @@ var generateCollectionFromForestrySection = (args) => {
5103
5285
  fields: [BODY_FIELD]
5104
5286
  };
5105
5287
  }
5106
- if ((section == null ? void 0 : section.create) === "none") {
5288
+ if (section?.create === "none") {
5107
5289
  c.ui = {
5108
5290
  ...c.ui,
5109
5291
  allowedActions: {
@@ -5114,9 +5296,9 @@ var generateCollectionFromForestrySection = (args) => {
5114
5296
  return c;
5115
5297
  } else if (section.type === "document") {
5116
5298
  const filePath = section.path;
5117
- const extname = import_path9.default.extname(filePath);
5118
- const fileName = import_path9.default.basename(filePath, extname);
5119
- const dir = import_path9.default.dirname(filePath);
5299
+ const extname = path12.extname(filePath);
5300
+ const fileName = path12.basename(filePath, extname);
5301
+ const dir = path12.dirname(filePath);
5120
5302
  const ext = checkExt(extname);
5121
5303
  if (ext) {
5122
5304
  const fields = [];
@@ -5125,7 +5307,7 @@ var generateCollectionFromForestrySection = (args) => {
5125
5307
  }
5126
5308
  for (const currentTemplateName of templateMap.keys()) {
5127
5309
  const { templateObj, fields: additionalFields } = templateMap.get(currentTemplateName);
5128
- const pages = (templateObj == null ? void 0 : templateObj.pages) || [];
5310
+ const pages = templateObj?.pages || [];
5129
5311
  if (pages.includes(section.path)) {
5130
5312
  fields.push(...additionalFields);
5131
5313
  break;
@@ -5136,7 +5318,7 @@ var generateCollectionFromForestrySection = (args) => {
5136
5318
  name: "dummy",
5137
5319
  label: "Dummy field",
5138
5320
  type: "string",
5139
- description: "This is a dummy field, please replace it with the fields you want to edit. See https://tina.io/docs/schema/ for more info"
5321
+ description: "This is a dummy field, please replace it with the fields you want to edit. See https://tina.io/docs/r/content-modelling-collections/ for more info"
5140
5322
  });
5141
5323
  logger.warn(
5142
5324
  warnText(
@@ -5160,7 +5342,7 @@ var generateCollectionFromForestrySection = (args) => {
5160
5342
  fields
5161
5343
  };
5162
5344
  } else {
5163
- logger.log(
5345
+ logger.warn(
5164
5346
  warnText(
5165
5347
  `Error: document section has an unsupported file extension: ${extname} in ${section.path}`
5166
5348
  )
@@ -5178,8 +5360,8 @@ var generateCollections = async ({
5178
5360
  templateMap,
5179
5361
  usingTypescript
5180
5362
  });
5181
- const forestryConfig = await import_fs_extra10.default.readFile(
5182
- import_path9.default.join(pathToForestryConfig, ".forestry", "settings.yml")
5363
+ const forestryConfig = await fs11.readFile(
5364
+ path12.join(pathToForestryConfig, ".forestry", "settings.yml")
5183
5365
  );
5184
5366
  rewriteTemplateKeysInDocs({
5185
5367
  templateMap,
@@ -5189,7 +5371,7 @@ var generateCollections = async ({
5189
5371
  }
5190
5372
  });
5191
5373
  const collections = parseSections({
5192
- val: import_js_yaml2.default.load(forestryConfig.toString())
5374
+ val: yaml2.load(forestryConfig.toString())
5193
5375
  }).sections.map(
5194
5376
  (section) => generateCollectionFromForestrySection({
5195
5377
  section,
@@ -5204,19 +5386,18 @@ var generateCollections = async ({
5204
5386
  };
5205
5387
  };
5206
5388
  var rewriteTemplateKeysInDocs = (args) => {
5207
- var _a;
5208
5389
  const { templateMap, markdownParseConfig } = args;
5209
5390
  for (const templateKey of templateMap.keys()) {
5210
5391
  const { templateObj } = templateMap.get(templateKey);
5211
- (_a = templateObj == null ? void 0 : templateObj.pages) == null ? void 0 : _a.forEach((page) => {
5392
+ templateObj?.pages?.forEach((page) => {
5212
5393
  try {
5213
- const filePath = import_path9.default.join(page);
5214
- if (import_fs_extra10.default.lstatSync(filePath).isDirectory()) {
5394
+ const filePath = path12.join(page);
5395
+ if (fs11.lstatSync(filePath).isDirectory()) {
5215
5396
  return;
5216
5397
  }
5217
- const extname = import_path9.default.extname(filePath);
5218
- const fileContent = import_fs_extra10.default.readFileSync(filePath).toString();
5219
- const content = (0, import_graphql16.parseFile)(
5398
+ const extname = path12.extname(filePath);
5399
+ const fileContent = fs11.readFileSync(filePath).toString();
5400
+ const content = parseFile(
5220
5401
  fileContent,
5221
5402
  extname,
5222
5403
  (yup) => yup.object({}),
@@ -5226,9 +5407,9 @@ var rewriteTemplateKeysInDocs = (args) => {
5226
5407
  _template: stringifyLabel(templateKey),
5227
5408
  ...content
5228
5409
  };
5229
- import_fs_extra10.default.writeFileSync(
5410
+ fs11.writeFileSync(
5230
5411
  filePath,
5231
- (0, import_graphql16.stringifyFile)(newContent, extname, true, markdownParseConfig)
5412
+ stringifyFile(newContent, extname, true, markdownParseConfig)
5232
5413
  );
5233
5414
  } catch (error) {
5234
5415
  console.log(
@@ -5240,23 +5421,25 @@ var rewriteTemplateKeysInDocs = (args) => {
5240
5421
  };
5241
5422
 
5242
5423
  // src/cmds/init/apply.ts
5243
- var import_metrics2 = require("@tinacms/metrics");
5244
- var import_fs_extra13 = __toESM(require("fs-extra"));
5424
+ import { Telemetry as Telemetry2 } from "@tinacms/metrics";
5425
+ import fs14 from "fs-extra";
5245
5426
 
5246
5427
  // src/next/commands/codemod-command/index.ts
5247
- var import_clipanion5 = require("clipanion");
5248
- var import_fs_extra11 = __toESM(require("fs-extra"));
5249
- var import_path10 = __toESM(require("path"));
5250
- var CodemodCommand = class extends import_clipanion5.Command {
5251
- constructor() {
5252
- super(...arguments);
5253
- this.rootPath = import_clipanion5.Option.String("--rootPath", {
5254
- description: "Specify the root directory to run the CLI from"
5255
- });
5256
- this.verbose = import_clipanion5.Option.Boolean("-v,--verbose", false, {
5257
- description: "increase verbosity of logged output"
5258
- });
5259
- }
5428
+ import { Command as Command5, Option as Option5 } from "clipanion";
5429
+ import fs12 from "fs-extra";
5430
+ import path13 from "path";
5431
+ var CodemodCommand = class extends Command5 {
5432
+ static paths = [["codemod"], ["codemod", "move-tina-folder"]];
5433
+ rootPath = Option5.String("--rootPath", {
5434
+ description: "Specify the root directory to run the CLI from"
5435
+ });
5436
+ verbose = Option5.Boolean("-v,--verbose", false, {
5437
+ description: "increase verbosity of logged output"
5438
+ });
5439
+ static usage = Command5.Usage({
5440
+ category: `Commands`,
5441
+ description: `Use codemods for various Tina tasks`
5442
+ });
5260
5443
  async catch(error) {
5261
5444
  console.log(error);
5262
5445
  }
@@ -5277,11 +5460,6 @@ var CodemodCommand = class extends import_clipanion5.Command {
5277
5460
  await command2();
5278
5461
  }
5279
5462
  };
5280
- CodemodCommand.paths = [["codemod"], ["codemod", "move-tina-folder"]];
5281
- CodemodCommand.usage = import_clipanion5.Command.Usage({
5282
- category: `Commands`,
5283
- description: `Use codemods for various Tina tasks`
5284
- });
5285
5463
  var moveTinaFolder = async (rootPath = process.cwd()) => {
5286
5464
  const configManager = new ConfigManager({ rootPath });
5287
5465
  try {
@@ -5290,13 +5468,13 @@ var moveTinaFolder = async (rootPath = process.cwd()) => {
5290
5468
  logger.error(e.message);
5291
5469
  process.exit(1);
5292
5470
  }
5293
- const tinaDestination = import_path10.default.join(configManager.rootPath, "tina");
5294
- if (await import_fs_extra11.default.existsSync(tinaDestination)) {
5471
+ const tinaDestination = path13.join(configManager.rootPath, "tina");
5472
+ if (await fs12.existsSync(tinaDestination)) {
5295
5473
  logger.info(
5296
5474
  `Folder already exists at ${tinaDestination}. Either delete this folder to complete the codemod, or ensure you have properly copied your config from the ".tina" folder.`
5297
5475
  );
5298
5476
  } else {
5299
- await import_fs_extra11.default.moveSync(configManager.tinaFolderPath, tinaDestination);
5477
+ await fs12.moveSync(configManager.tinaFolderPath, tinaDestination);
5300
5478
  await writeGitignore(configManager.rootPath);
5301
5479
  logger.info(
5302
5480
  "Move to 'tina' folder complete. Be sure to update any imports of the autogenerated client!"
@@ -5304,8 +5482,8 @@ var moveTinaFolder = async (rootPath = process.cwd()) => {
5304
5482
  }
5305
5483
  };
5306
5484
  var writeGitignore = async (rootPath) => {
5307
- await import_fs_extra11.default.outputFileSync(
5308
- import_path10.default.join(rootPath, "tina", ".gitignore"),
5485
+ await fs12.outputFileSync(
5486
+ path13.join(rootPath, "tina", ".gitignore"),
5309
5487
  "__generated__"
5310
5488
  );
5311
5489
  };
@@ -5358,7 +5536,7 @@ const BlogPage = (props) => {
5358
5536
  <div className='bg-green-100 text-center'>
5359
5537
  Lost and looking for a place to start?
5360
5538
  <a
5361
- href='https://tina.io/guides/tina-cloud/getting-started/overview/'
5539
+ href='https://tina.io/docs/r/beginner-series'
5362
5540
  className='text-blue-500 underline'
5363
5541
  >
5364
5542
  {' '}
@@ -5561,11 +5739,10 @@ var baseFields = `[
5561
5739
  },
5562
5740
  ]`;
5563
5741
  var generateCollectionString = (args) => {
5564
- var _a, _b, _c, _d;
5565
5742
  if (args.collections) {
5566
5743
  return args.collections;
5567
5744
  }
5568
- let extraTinaCollections = (_b = (_a = args.config.authProvider) == null ? void 0 : _a.extraTinaCollections) == null ? void 0 : _b.join(",\n");
5745
+ let extraTinaCollections = args.config.authProvider?.extraTinaCollections?.join(",\n");
5569
5746
  if (extraTinaCollections) {
5570
5747
  extraTinaCollections = extraTinaCollections + ",";
5571
5748
  }
@@ -5591,18 +5768,17 @@ var generateCollectionString = (args) => {
5591
5768
  },
5592
5769
  },
5593
5770
  ]`;
5594
- if (((_d = (_c = args.config) == null ? void 0 : _c.framework) == null ? void 0 : _d.name) === "next") {
5771
+ if (args.config?.framework?.name === "next") {
5595
5772
  return nextExampleCollection;
5596
5773
  }
5597
5774
  return baseCollections;
5598
5775
  };
5599
5776
  var generateConfig = (args) => {
5600
- var _a, _b, _c;
5601
- const isUsingTinaCloud = !args.selfHosted || ((_a = args.config.authProvider) == null ? void 0 : _a.name) === "tina-cloud";
5777
+ const isUsingTinaCloud = !args.selfHosted || args.config.authProvider?.name === "tina-cloud";
5602
5778
  let extraImports = "";
5603
5779
  if (args.selfHosted) {
5604
5780
  if (args.config.authProvider) {
5605
- extraImports = extraImports + makeImportString((_b = args.config.authProvider) == null ? void 0 : _b.configImports);
5781
+ extraImports = extraImports + makeImportString(args.config.authProvider?.configImports);
5606
5782
  }
5607
5783
  if (!isUsingTinaCloud) {
5608
5784
  extraImports = extraImports + `
@@ -5625,7 +5801,7 @@ import { LocalAuthProvider } from "tinacms";`;
5625
5801
  branch,
5626
5802
  ${args.selfHosted && !isUsingTinaCloud ? `authProvider: isLocal
5627
5803
  ? new LocalAuthProvider()
5628
- :${(_c = args.config) == null ? void 0 : _c.authProvider.configAuthProviderClass},` : ""}
5804
+ :${args.config?.authProvider.configAuthProviderClass},` : ""}
5629
5805
  ${isUsingTinaCloud ? `// Get this from tina.io
5630
5806
  clientId: process.env.NEXT_PUBLIC_TINA_CLIENT_ID,` : ""}
5631
5807
  ${isUsingTinaCloud ? `// Get this from tina.io
@@ -5642,7 +5818,7 @@ import { LocalAuthProvider } from "tinacms";`;
5642
5818
  publicFolder: "${args.publicFolder}",
5643
5819
  },
5644
5820
  },
5645
- // See docs on content modeling for more info on how to setup new content models: https://tina.io/docs/schema/
5821
+ // See docs on content modeling for more info on how to setup new content models: https://tina.io/docs/r/content-modelling-collections/
5646
5822
  schema: {
5647
5823
  collections: ${generateCollectionString(args)},
5648
5824
  },
@@ -5652,11 +5828,10 @@ import { LocalAuthProvider } from "tinacms";`;
5652
5828
 
5653
5829
  // src/cmds/init/templates/database.ts
5654
5830
  var databaseTemplate = ({ config: config2 }) => {
5655
- var _a, _b, _c, _d;
5656
5831
  return `
5657
5832
  import { createDatabase, createLocalDatabase } from '@tinacms/datalayer'
5658
- ${makeImportString((_a = config2.gitProvider) == null ? void 0 : _a.imports)}
5659
- ${makeImportString((_b = config2.databaseAdapter) == null ? void 0 : _b.imports)}
5833
+ ${makeImportString(config2.gitProvider?.imports)}
5834
+ ${makeImportString(config2.databaseAdapter?.imports)}
5660
5835
 
5661
5836
  const branch = (process.env.GITHUB_BRANCH ||
5662
5837
  process.env.VERCEL_GIT_COMMIT_REF ||
@@ -5668,8 +5843,8 @@ const isLocal = process.env.${config2.isLocalEnvVarName} === 'true'
5668
5843
  export default isLocal
5669
5844
  ? createLocalDatabase()
5670
5845
  : createDatabase({
5671
- gitProvider: ${(_c = config2.gitProvider) == null ? void 0 : _c.gitProviderClassText},
5672
- databaseAdapter: ${(_d = config2.databaseAdapter) == null ? void 0 : _d.databaseAdapterClassText},
5846
+ gitProvider: ${config2.gitProvider?.gitProviderClassText},
5847
+ databaseAdapter: ${config2.databaseAdapter?.databaseAdapterClassText},
5673
5848
  namespace: branch,
5674
5849
  })
5675
5850
  `;
@@ -5680,10 +5855,9 @@ var nextApiRouteTemplate = ({
5680
5855
  config: config2,
5681
5856
  env
5682
5857
  }) => {
5683
- var _a, _b;
5684
5858
  const extraPath = env.usingSrc ? "../" : "";
5685
5859
  return `import { TinaNodeBackend, LocalBackendAuthProvider } from '@tinacms/datalayer'
5686
- ${makeImportString((_a = config2.authProvider) == null ? void 0 : _a.backendAuthProviderImports)}
5860
+ ${makeImportString(config2.authProvider?.backendAuthProviderImports)}
5687
5861
 
5688
5862
 
5689
5863
 
@@ -5694,7 +5868,7 @@ var nextApiRouteTemplate = ({
5694
5868
  const handler = TinaNodeBackend({
5695
5869
  authProvider: isLocal
5696
5870
  ? LocalBackendAuthProvider()
5697
- : ${((_b = config2.authProvider) == null ? void 0 : _b.backendAuthProvider) || ""},
5871
+ : ${config2.authProvider?.backendAuthProvider || ""},
5698
5872
  databaseClient,
5699
5873
  })
5700
5874
 
@@ -5717,62 +5891,61 @@ Suspendisse facilisis, mi ac scelerisque interdum, ligula ex imperdiet felis, a
5717
5891
  `;
5718
5892
 
5719
5893
  // src/cmds/init/apply.ts
5720
- var import_prettier2 = require("prettier");
5894
+ import { format as format2 } from "prettier";
5721
5895
 
5722
5896
  // src/utils/script-helpers.ts
5723
5897
  function generateGqlScript(scriptValue, opts) {
5724
5898
  const cmd = `tinacms dev -c "${scriptValue}"`;
5725
- if (opts == null ? void 0 : opts.isLocalEnvVarName) {
5899
+ if (opts?.isLocalEnvVarName) {
5726
5900
  return `${opts.isLocalEnvVarName}=true ${cmd}`;
5727
5901
  }
5728
5902
  return cmd;
5729
5903
  }
5730
5904
  function extendNextScripts(scripts, opts) {
5731
- var _a, _b;
5732
5905
  const result = {
5733
5906
  ...scripts,
5734
- dev: !(scripts == null ? void 0 : scripts.dev) || ((_a = scripts == null ? void 0 : scripts.dev) == null ? void 0 : _a.indexOf("tinacms dev -c")) === -1 ? generateGqlScript((scripts == null ? void 0 : scripts.dev) || "next dev", opts) : scripts == null ? void 0 : scripts.dev,
5735
- build: !(scripts == null ? void 0 : scripts.build) || !((_b = scripts == null ? void 0 : scripts.build) == null ? void 0 : _b.startsWith("tinacms build &&")) ? `tinacms build && ${(scripts == null ? void 0 : scripts.build) || "next build"}` : scripts == null ? void 0 : scripts.build
5907
+ dev: !scripts?.dev || scripts?.dev?.indexOf("tinacms dev -c") === -1 ? generateGqlScript(scripts?.dev || "next dev", opts) : scripts?.dev,
5908
+ build: !scripts?.build || !scripts?.build?.startsWith("tinacms build &&") ? `tinacms build && ${scripts?.build || "next build"}` : scripts?.build
5736
5909
  };
5737
- if ((opts == null ? void 0 : opts.addSetupUsers) && !scripts["setup:users"]) {
5910
+ if (opts?.addSetupUsers && !scripts["setup:users"]) {
5738
5911
  result["setup:users"] = "tinacms-next-auth setup";
5739
5912
  }
5740
5913
  return result;
5741
5914
  }
5742
5915
 
5743
5916
  // src/cmds/init/codegen/index.ts
5744
- var import_typescript3 = __toESM(require("typescript"));
5745
- var import_fs_extra12 = __toESM(require("fs-extra"));
5917
+ import ts2 from "typescript";
5918
+ import fs13 from "fs-extra";
5746
5919
 
5747
5920
  // src/cmds/init/codegen/util.ts
5748
- var import_typescript2 = __toESM(require("typescript"));
5749
- var makeTransformer = (makeVisitor) => (ctx) => (node) => import_typescript2.default.visitNode(node, makeVisitor(ctx));
5921
+ import ts from "typescript";
5922
+ var makeTransformer = (makeVisitor) => (ctx) => (node) => ts.visitNode(node, makeVisitor(ctx));
5750
5923
  function parseExpression(expression) {
5751
- const sourceFile = import_typescript2.default.createSourceFile(
5924
+ const sourceFile = ts.createSourceFile(
5752
5925
  "temp.ts",
5753
5926
  expression,
5754
- import_typescript2.default.ScriptTarget.Latest
5927
+ ts.ScriptTarget.Latest
5755
5928
  );
5756
5929
  if (sourceFile.statements.length !== 1) {
5757
5930
  throw new Error("Expected one statement");
5758
5931
  }
5759
5932
  const statement = sourceFile.statements[0];
5760
- if (!import_typescript2.default.isExpressionStatement(statement)) {
5933
+ if (!ts.isExpressionStatement(statement)) {
5761
5934
  throw new Error("Expected an expression statement");
5762
5935
  }
5763
5936
  return [sourceFile, statement.expression];
5764
5937
  }
5765
5938
  function parseVariableStatement(stmt) {
5766
- const sourceFile = import_typescript2.default.createSourceFile(
5939
+ const sourceFile = ts.createSourceFile(
5767
5940
  "temp.ts",
5768
5941
  stmt,
5769
- import_typescript2.default.ScriptTarget.Latest
5942
+ ts.ScriptTarget.Latest
5770
5943
  );
5771
5944
  if (sourceFile.statements.length !== 1) {
5772
5945
  throw new Error("Expected one statement");
5773
5946
  }
5774
5947
  const statement = sourceFile.statements[0];
5775
- if (!import_typescript2.default.isVariableStatement(statement)) {
5948
+ if (!ts.isVariableStatement(statement)) {
5776
5949
  throw new Error("Expected a variable statement");
5777
5950
  }
5778
5951
  return [sourceFile, statement];
@@ -5780,7 +5953,7 @@ function parseVariableStatement(stmt) {
5780
5953
 
5781
5954
  // src/cmds/init/codegen/index.ts
5782
5955
  var makeVariableStatementVisitor = (sourceFile, variableStmtSourceFile, variableStmt) => (ctx) => (node) => {
5783
- if (import_typescript3.default.isSourceFile(node)) {
5956
+ if (ts2.isSourceFile(node)) {
5784
5957
  const newStatements = [...node.statements];
5785
5958
  let encounteredImports = false;
5786
5959
  let firstNonImportStatementIdx = -1;
@@ -5788,7 +5961,7 @@ var makeVariableStatementVisitor = (sourceFile, variableStmtSourceFile, variable
5788
5961
  const [newVarDec] = variableStmt.declarationList.declarations;
5789
5962
  const newVarDecName = newVarDec.name.getText(variableStmtSourceFile);
5790
5963
  for (let i = 0; i < newStatements.length; i++) {
5791
- const isImport = import_typescript3.default.isImportDeclaration(newStatements[i]);
5964
+ const isImport = ts2.isImportDeclaration(newStatements[i]);
5792
5965
  if (isImport && !encounteredImports) {
5793
5966
  encounteredImports = true;
5794
5967
  }
@@ -5796,9 +5969,9 @@ var makeVariableStatementVisitor = (sourceFile, variableStmtSourceFile, variable
5796
5969
  firstNonImportStatementIdx = i;
5797
5970
  }
5798
5971
  const stmt = newStatements[i];
5799
- if (import_typescript3.default.isVariableStatement(stmt)) {
5972
+ if (ts2.isVariableStatement(stmt)) {
5800
5973
  const [dec] = stmt.declarationList.declarations;
5801
- if (dec.name && import_typescript3.default.isIdentifier(dec.name) && dec.name.getText(sourceFile) === newVarDecName) {
5974
+ if (dec.name && ts2.isIdentifier(dec.name) && dec.name.getText(sourceFile) === newVarDecName) {
5802
5975
  existingStatementIdx = i;
5803
5976
  }
5804
5977
  }
@@ -5812,20 +5985,19 @@ var makeVariableStatementVisitor = (sourceFile, variableStmtSourceFile, variable
5812
5985
  if (existingStatementIdx === -1) {
5813
5986
  newStatements.splice(firstNonImportStatementIdx, 0, variableStmt);
5814
5987
  }
5815
- return import_typescript3.default.factory.updateSourceFile(node, newStatements);
5988
+ return ts2.factory.updateSourceFile(node, newStatements);
5816
5989
  }
5817
5990
  };
5818
5991
  var makeImportsVisitor = (sourceFile, importMap) => (ctx) => (node) => {
5819
- var _a;
5820
- if (import_typescript3.default.isSourceFile(node)) {
5992
+ if (ts2.isSourceFile(node)) {
5821
5993
  const newStatements = [...node.statements];
5822
5994
  let changed = false;
5823
5995
  for (const [moduleName, imports] of Object.entries(importMap)) {
5824
5996
  let foundImportStatement = false;
5825
5997
  for (const statement of newStatements) {
5826
- if (import_typescript3.default.isImportDeclaration(statement) && import_typescript3.default.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === moduleName) {
5998
+ if (ts2.isImportDeclaration(statement) && ts2.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === moduleName) {
5827
5999
  foundImportStatement = true;
5828
- const existingImports = ((_a = statement.importClause) == null ? void 0 : _a.namedBindings) && import_typescript3.default.isNamedImports(statement.importClause.namedBindings) ? statement.importClause.namedBindings.elements.map(
6000
+ const existingImports = statement.importClause?.namedBindings && ts2.isNamedImports(statement.importClause.namedBindings) ? statement.importClause.namedBindings.elements.map(
5829
6001
  (e) => e.name.text
5830
6002
  ) : [];
5831
6003
  const newImports = [
@@ -5836,22 +6008,22 @@ var makeImportsVisitor = (sourceFile, importMap) => (ctx) => (node) => {
5836
6008
  ])
5837
6009
  ];
5838
6010
  const importSpecifiers = newImports.map(
5839
- (i) => import_typescript3.default.factory.createImportSpecifier(
6011
+ (i) => ts2.factory.createImportSpecifier(
5840
6012
  void 0,
5841
- import_typescript3.default.factory.createIdentifier(i),
5842
- import_typescript3.default.factory.createIdentifier(i)
6013
+ ts2.factory.createIdentifier(i),
6014
+ ts2.factory.createIdentifier(i)
5843
6015
  )
5844
6016
  );
5845
- const namedImports = import_typescript3.default.factory.createNamedImports(importSpecifiers);
5846
- const importClause = import_typescript3.default.factory.createImportClause(
6017
+ const namedImports = ts2.factory.createNamedImports(importSpecifiers);
6018
+ const importClause = ts2.factory.createImportClause(
5847
6019
  false,
5848
6020
  void 0,
5849
6021
  namedImports
5850
6022
  );
5851
- const importDec = import_typescript3.default.factory.createImportDeclaration(
6023
+ const importDec = ts2.factory.createImportDeclaration(
5852
6024
  void 0,
5853
6025
  importClause,
5854
- import_typescript3.default.factory.createStringLiteral(moduleName)
6026
+ ts2.factory.createStringLiteral(moduleName)
5855
6027
  );
5856
6028
  newStatements[newStatements.indexOf(statement)] = importDec;
5857
6029
  changed = true;
@@ -5859,45 +6031,45 @@ var makeImportsVisitor = (sourceFile, importMap) => (ctx) => (node) => {
5859
6031
  }
5860
6032
  if (!foundImportStatement) {
5861
6033
  const importSpecifiers = imports.map(
5862
- (i) => import_typescript3.default.factory.createImportSpecifier(
6034
+ (i) => ts2.factory.createImportSpecifier(
5863
6035
  void 0,
5864
- import_typescript3.default.factory.createIdentifier(i),
5865
- import_typescript3.default.factory.createIdentifier(i)
6036
+ ts2.factory.createIdentifier(i),
6037
+ ts2.factory.createIdentifier(i)
5866
6038
  )
5867
6039
  );
5868
- const namedImports = import_typescript3.default.factory.createNamedImports(importSpecifiers);
5869
- const importClause = import_typescript3.default.factory.createImportClause(
6040
+ const namedImports = ts2.factory.createNamedImports(importSpecifiers);
6041
+ const importClause = ts2.factory.createImportClause(
5870
6042
  false,
5871
6043
  void 0,
5872
6044
  namedImports
5873
6045
  );
5874
- const importDec = import_typescript3.default.factory.createImportDeclaration(
6046
+ const importDec = ts2.factory.createImportDeclaration(
5875
6047
  void 0,
5876
6048
  importClause,
5877
- import_typescript3.default.factory.createStringLiteral(moduleName)
6049
+ ts2.factory.createStringLiteral(moduleName)
5878
6050
  );
5879
6051
  newStatements.unshift(importDec);
5880
6052
  changed = true;
5881
6053
  }
5882
6054
  }
5883
6055
  if (changed) {
5884
- return import_typescript3.default.factory.updateSourceFile(node, newStatements);
6056
+ return ts2.factory.updateSourceFile(node, newStatements);
5885
6057
  }
5886
6058
  }
5887
6059
  };
5888
6060
  var makeAddExpressionToSchemaCollectionVisitor = (sourceFile, functionName, newExpressionSourceFile, newExpression) => (ctx) => {
5889
6061
  const visit2 = (node) => {
5890
- if (import_typescript3.default.isCallExpression(node) && import_typescript3.default.isIdentifier(node.expression) && node.expression.text === functionName && node.arguments.length > 0 && import_typescript3.default.isObjectLiteralExpression(node.arguments[0])) {
6062
+ if (ts2.isCallExpression(node) && ts2.isIdentifier(node.expression) && node.expression.text === functionName && node.arguments.length > 0 && ts2.isObjectLiteralExpression(node.arguments[0])) {
5891
6063
  const configObject = node.arguments[0];
5892
6064
  const updateProperties = configObject.properties.map((property) => {
5893
- if (import_typescript3.default.isPropertyAssignment(property)) {
6065
+ if (ts2.isPropertyAssignment(property)) {
5894
6066
  const thisPropertyName = property.name.getText(sourceFile);
5895
- if (thisPropertyName === "schema" && import_typescript3.default.isPropertyAssignment(property) && import_typescript3.default.isObjectLiteralExpression(property.initializer)) {
6067
+ if (thisPropertyName === "schema" && ts2.isPropertyAssignment(property) && ts2.isObjectLiteralExpression(property.initializer)) {
5896
6068
  const schemaObject = property.initializer;
5897
6069
  const collectionsProperty = schemaObject.properties.find(
5898
- (p) => import_typescript3.default.isPropertyAssignment(p) && p.name.getText(sourceFile) === "collections"
6070
+ (p) => ts2.isPropertyAssignment(p) && p.name.getText(sourceFile) === "collections"
5899
6071
  );
5900
- if (collectionsProperty && import_typescript3.default.isPropertyAssignment(collectionsProperty) && import_typescript3.default.isArrayLiteralExpression(collectionsProperty.initializer)) {
6072
+ if (collectionsProperty && ts2.isPropertyAssignment(collectionsProperty) && ts2.isArrayLiteralExpression(collectionsProperty.initializer)) {
5901
6073
  const collectionsArray = collectionsProperty.initializer;
5902
6074
  const collectionItems = collectionsArray.elements.map(
5903
6075
  (e) => e.getText(sourceFile)
@@ -5907,16 +6079,16 @@ var makeAddExpressionToSchemaCollectionVisitor = (sourceFile, functionName, newE
5907
6079
  )) {
5908
6080
  return property;
5909
6081
  }
5910
- return import_typescript3.default.factory.updatePropertyAssignment(
6082
+ return ts2.factory.updatePropertyAssignment(
5911
6083
  property,
5912
6084
  property.name,
5913
- import_typescript3.default.factory.createObjectLiteralExpression(
6085
+ ts2.factory.createObjectLiteralExpression(
5914
6086
  schemaObject.properties.map((subProp) => {
5915
- if (import_typescript3.default.isPropertyAssignment(subProp) && subProp.name.getText(sourceFile) === "collections" && import_typescript3.default.isArrayLiteralExpression(subProp.initializer)) {
5916
- return import_typescript3.default.factory.updatePropertyAssignment(
6087
+ if (ts2.isPropertyAssignment(subProp) && subProp.name.getText(sourceFile) === "collections" && ts2.isArrayLiteralExpression(subProp.initializer)) {
6088
+ return ts2.factory.updatePropertyAssignment(
5917
6089
  subProp,
5918
6090
  subProp.name,
5919
- import_typescript3.default.factory.createArrayLiteralExpression(
6091
+ ts2.factory.createArrayLiteralExpression(
5920
6092
  [newExpression, ...subProp.initializer.elements],
5921
6093
  true
5922
6094
  )
@@ -5932,56 +6104,56 @@ var makeAddExpressionToSchemaCollectionVisitor = (sourceFile, functionName, newE
5932
6104
  }
5933
6105
  return property;
5934
6106
  });
5935
- return import_typescript3.default.factory.createCallExpression(
6107
+ return ts2.factory.createCallExpression(
5936
6108
  node.expression,
5937
6109
  node.typeArguments,
5938
- [import_typescript3.default.factory.createObjectLiteralExpression(updateProperties, true)]
6110
+ [ts2.factory.createObjectLiteralExpression(updateProperties, true)]
5939
6111
  );
5940
6112
  }
5941
- return import_typescript3.default.visitEachChild(node, visit2, ctx);
6113
+ return ts2.visitEachChild(node, visit2, ctx);
5942
6114
  };
5943
6115
  return (sourceFile2) => {
5944
- return import_typescript3.default.visitEachChild(sourceFile2, visit2, ctx);
6116
+ return ts2.visitEachChild(sourceFile2, visit2, ctx);
5945
6117
  };
5946
6118
  };
5947
6119
  var makeUpdateObjectLiteralPropertyVisitor = (sourceFile, functionName, propertyName, propertyValueExpressionSourceFile, propertyValue) => (ctx) => {
5948
6120
  const visitor = (node) => {
5949
- if (import_typescript3.default.isCallExpression(node) && import_typescript3.default.isIdentifier(node.expression) && node.expression.text === functionName && node.arguments.length > 0 && import_typescript3.default.isObjectLiteralExpression(node.arguments[0])) {
6121
+ if (ts2.isCallExpression(node) && ts2.isIdentifier(node.expression) && node.expression.text === functionName && node.arguments.length > 0 && ts2.isObjectLiteralExpression(node.arguments[0])) {
5950
6122
  let foundProperty = false;
5951
6123
  const configObject = node.arguments[0];
5952
6124
  const updateProperties = configObject.properties.map((property) => {
5953
- if (import_typescript3.default.isPropertyAssignment(property) || import_typescript3.default.isShorthandPropertyAssignment(property)) {
6125
+ if (ts2.isPropertyAssignment(property) || ts2.isShorthandPropertyAssignment(property)) {
5954
6126
  const name2 = property.name.getText(sourceFile);
5955
6127
  if (name2 === propertyName) {
5956
6128
  foundProperty = true;
5957
- return import_typescript3.default.factory.createPropertyAssignment(name2, propertyValue);
6129
+ return ts2.factory.createPropertyAssignment(name2, propertyValue);
5958
6130
  }
5959
6131
  }
5960
6132
  return property;
5961
6133
  });
5962
6134
  if (!foundProperty) {
5963
6135
  updateProperties.unshift(
5964
- import_typescript3.default.factory.createPropertyAssignment(propertyName, propertyValue)
6136
+ ts2.factory.createPropertyAssignment(propertyName, propertyValue)
5965
6137
  );
5966
6138
  }
5967
- return import_typescript3.default.factory.createCallExpression(
6139
+ return ts2.factory.createCallExpression(
5968
6140
  node.expression,
5969
6141
  node.typeArguments,
5970
- [import_typescript3.default.factory.createObjectLiteralExpression(updateProperties, true)]
6142
+ [ts2.factory.createObjectLiteralExpression(updateProperties, true)]
5971
6143
  );
5972
6144
  }
5973
- return import_typescript3.default.visitEachChild(node, visitor, ctx);
6145
+ return ts2.visitEachChild(node, visitor, ctx);
5974
6146
  };
5975
6147
  return (sourceFile2) => {
5976
- return import_typescript3.default.visitNode(sourceFile2, visitor);
6148
+ return ts2.visitNode(sourceFile2, visitor);
5977
6149
  };
5978
6150
  };
5979
6151
  var addSelfHostedTinaAuthToConfig = async (config2, configFile) => {
5980
6152
  const pathToConfig = configFile.resolve(config2.typescript).path;
5981
- const sourceFile = import_typescript3.default.createSourceFile(
6153
+ const sourceFile = ts2.createSourceFile(
5982
6154
  pathToConfig,
5983
- import_fs_extra12.default.readFileSync(pathToConfig, "utf8"),
5984
- config2.typescript ? import_typescript3.default.ScriptTarget.Latest : import_typescript3.default.ScriptTarget.ESNext
6155
+ fs13.readFileSync(pathToConfig, "utf8"),
6156
+ config2.typescript ? ts2.ScriptTarget.Latest : ts2.ScriptTarget.ESNext
5985
6157
  );
5986
6158
  const { configImports, configAuthProviderClass, extraTinaCollections } = config2.authProvider;
5987
6159
  const importMap = {
@@ -5994,7 +6166,7 @@ var addSelfHostedTinaAuthToConfig = async (config2, configFile) => {
5994
6166
  {}
5995
6167
  )
5996
6168
  };
5997
- const transformedSourceFileResult = import_typescript3.default.transform(
6169
+ const transformedSourceFileResult = ts2.transform(
5998
6170
  sourceFile,
5999
6171
  [
6000
6172
  makeImportsVisitor(sourceFile, {
@@ -6030,19 +6202,19 @@ var addSelfHostedTinaAuthToConfig = async (config2, configFile) => {
6030
6202
  )
6031
6203
  ].map((visitor) => makeTransformer(visitor))
6032
6204
  );
6033
- return import_fs_extra12.default.writeFile(
6205
+ return fs13.writeFile(
6034
6206
  pathToConfig,
6035
- import_typescript3.default.createPrinter({ omitTrailingSemicolon: true }).printFile(transformedSourceFileResult.transformed[0])
6207
+ ts2.createPrinter({ omitTrailingSemicolon: true }).printFile(transformedSourceFileResult.transformed[0])
6036
6208
  );
6037
6209
  };
6038
6210
 
6039
6211
  // src/cmds/init/apply.ts
6212
+ import { exec } from "child_process";
6040
6213
  async function apply({
6041
6214
  env,
6042
6215
  params,
6043
6216
  config: config2
6044
6217
  }) {
6045
- var _a;
6046
6218
  if (config2.framework.name === "other" && config2.hosting === "self-host") {
6047
6219
  logger.error(
6048
6220
  logText(
@@ -6148,8 +6320,8 @@ async function apply({
6148
6320
  await addConfigFile({
6149
6321
  configArgs: {
6150
6322
  config: config2,
6151
- publicFolder: import_path11.default.join(
6152
- import_path11.default.relative(process.cwd(), pathToForestryConfig),
6323
+ publicFolder: path14.join(
6324
+ path14.relative(process.cwd(), pathToForestryConfig),
6153
6325
  config2.publicFolder
6154
6326
  ),
6155
6327
  collections,
@@ -6168,7 +6340,7 @@ async function apply({
6168
6340
  env.tinaConfigExists && // Are we running tinacms init backend
6169
6341
  params.isBackendInit && // Do the user choose the 'self-host' option
6170
6342
  config2.hosting === "self-host" && // the user did not choose the 'tina-cloud' auth provider
6171
- (((_a = config2.authProvider) == null ? void 0 : _a.name) || "") !== "tina-cloud"
6343
+ (config2.authProvider?.name || "") !== "tina-cloud"
6172
6344
  ) {
6173
6345
  await addSelfHostedTinaAuthToConfig(config2, env.generatedFiles["config"]);
6174
6346
  }
@@ -6206,7 +6378,7 @@ var reportTelemetry = async ({
6206
6378
  if (noTelemetry) {
6207
6379
  logger.info(logText("Telemetry disabled"));
6208
6380
  }
6209
- const telemetry = new import_metrics2.Telemetry({ disabled: noTelemetry });
6381
+ const telemetry = new Telemetry2({ disabled: noTelemetry });
6210
6382
  const schemaFileType = usingTypescript ? "ts" : "js";
6211
6383
  await telemetry.submitRecord({
6212
6384
  event: {
@@ -6222,21 +6394,20 @@ var createPackageJSON = async () => {
6222
6394
  };
6223
6395
  var createGitignore = async ({ baseDir }) => {
6224
6396
  logger.info(logText("No .gitignore found, creating one"));
6225
- import_fs_extra13.default.outputFileSync(import_path11.default.join(baseDir, ".gitignore"), "node_modules");
6397
+ fs14.outputFileSync(path14.join(baseDir, ".gitignore"), "node_modules");
6226
6398
  };
6227
6399
  var updateGitIgnore = async ({
6228
6400
  baseDir,
6229
6401
  items
6230
6402
  }) => {
6231
6403
  logger.info(logText(`Adding ${items.join(",")} to .gitignore`));
6232
- const gitignoreContent = import_fs_extra13.default.readFileSync(import_path11.default.join(baseDir, ".gitignore")).toString();
6404
+ const gitignoreContent = fs14.readFileSync(path14.join(baseDir, ".gitignore")).toString();
6233
6405
  const newGitignoreContent = [...gitignoreContent.split("\n"), ...items].join(
6234
6406
  "\n"
6235
6407
  );
6236
- await import_fs_extra13.default.writeFile(import_path11.default.join(baseDir, ".gitignore"), newGitignoreContent);
6408
+ await fs14.writeFile(path14.join(baseDir, ".gitignore"), newGitignoreContent);
6237
6409
  };
6238
6410
  var addDependencies = async (config2, env, params) => {
6239
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
6240
6411
  const { packageManager } = config2;
6241
6412
  const tagVersion = params.tinaVersion ? `@${params.tinaVersion}` : "";
6242
6413
  let deps = [];
@@ -6252,18 +6423,18 @@ var addDependencies = async (config2, env, params) => {
6252
6423
  deps.push("@tinacms/datalayer");
6253
6424
  }
6254
6425
  deps.push(
6255
- ...((_b = (_a = config2.databaseAdapter) == null ? void 0 : _a.imports) == null ? void 0 : _b.map((x) => x.packageName)) || []
6426
+ ...config2.databaseAdapter?.imports?.map((x) => x.packageName) || []
6256
6427
  );
6257
- deps.push(...((_c = config2.authProvider) == null ? void 0 : _c.peerDependencies) || []);
6428
+ deps.push(...config2.authProvider?.peerDependencies || []);
6258
6429
  deps.push(
6259
- ...((_e = (_d = config2.authProvider) == null ? void 0 : _d.backendAuthProviderImports) == null ? void 0 : _e.map(
6430
+ ...config2.authProvider?.backendAuthProviderImports?.map(
6260
6431
  (x) => x.packageName
6261
- )) || []
6432
+ ) || []
6262
6433
  );
6263
6434
  deps.push(
6264
- ...((_g = (_f = config2.authProvider) == null ? void 0 : _f.configImports) == null ? void 0 : _g.map((x) => x.packageName)) || []
6435
+ ...config2.authProvider?.configImports?.map((x) => x.packageName) || []
6265
6436
  );
6266
- deps.push(...((_i = (_h = config2.gitProvider) == null ? void 0 : _h.imports) == null ? void 0 : _i.map((x) => x.packageName)) || []);
6437
+ deps.push(...config2.gitProvider?.imports?.map((x) => x.packageName) || []);
6267
6438
  if (tagVersion) {
6268
6439
  deps = deps.map(
6269
6440
  (dep) => dep.indexOf("tina") >= 0 ? `${dep}${tagVersion}` : dep
@@ -6275,7 +6446,8 @@ var addDependencies = async (config2, env, params) => {
6275
6446
  let packageManagers = {
6276
6447
  pnpm: process.env.USE_WORKSPACE ? `pnpm add ${deps.join(" ")} --workspace` : `pnpm add ${deps.join(" ")}`,
6277
6448
  npm: `npm install ${deps.join(" ")}`,
6278
- yarn: `yarn add ${deps.join(" ")}`
6449
+ yarn: `yarn add ${deps.join(" ")}`,
6450
+ bun: `bun add ${deps.join(" ")}`
6279
6451
  };
6280
6452
  if (packageManagers[packageManager] && deps.length > 0) {
6281
6453
  logger.info(logText("Adding dependencies, this might take a moment..."));
@@ -6286,7 +6458,8 @@ var addDependencies = async (config2, env, params) => {
6286
6458
  packageManagers = {
6287
6459
  pnpm: process.env.USE_WORKSPACE ? `pnpm add -D ${devDeps.join(" ")} --workspace` : `pnpm add -D ${devDeps.join(" ")}`,
6288
6460
  npm: `npm install -D ${devDeps.join(" ")}`,
6289
- yarn: `yarn add -D ${devDeps.join(" ")}`
6461
+ yarn: `yarn add -D ${devDeps.join(" ")}`,
6462
+ bun: `bun add -D ${devDeps.join(" ")}`
6290
6463
  };
6291
6464
  if (packageManagers[packageManager]) {
6292
6465
  logger.info(
@@ -6303,22 +6476,22 @@ var writeGeneratedFile = async ({
6303
6476
  content,
6304
6477
  typescript
6305
6478
  }) => {
6306
- const { exists, path: path14, parentPath } = generatedFile.resolve(typescript);
6479
+ const { exists, path: path15, parentPath } = generatedFile.resolve(typescript);
6307
6480
  if (exists) {
6308
6481
  if (overwrite) {
6309
- logger.info(`Overwriting file at ${path14}... \u2705`);
6310
- import_fs_extra13.default.outputFileSync(path14, content);
6482
+ logger.info(`Overwriting file at ${path15}... \u2705`);
6483
+ fs14.outputFileSync(path15, content);
6311
6484
  } else {
6312
- logger.info(`Not overwriting file at ${path14}.`);
6485
+ logger.info(`Not overwriting file at ${path15}.`);
6313
6486
  logger.info(
6314
- logText(`Please add the following to ${path14}:
6487
+ logText(`Please add the following to ${path15}:
6315
6488
  ${indentText(content)}}`)
6316
6489
  );
6317
6490
  }
6318
6491
  } else {
6319
- logger.info(`Adding file at ${path14}... \u2705`);
6320
- await import_fs_extra13.default.ensureDir(parentPath);
6321
- import_fs_extra13.default.outputFileSync(path14, content);
6492
+ logger.info(`Adding file at ${path15}... \u2705`);
6493
+ await fs14.ensureDir(parentPath);
6494
+ fs14.outputFileSync(path15, content);
6322
6495
  }
6323
6496
  };
6324
6497
  var addConfigFile = async ({
@@ -6327,12 +6500,11 @@ var addConfigFile = async ({
6327
6500
  generatedFile,
6328
6501
  config: config2
6329
6502
  }) => {
6330
- var _a;
6331
- const content = (0, import_prettier2.format)(generateConfig(configArgs), {
6503
+ const content = format2(generateConfig(configArgs), {
6332
6504
  parser: "babel"
6333
6505
  });
6334
6506
  await writeGeneratedFile({
6335
- overwrite: (_a = config2.overwriteList) == null ? void 0 : _a.includes("config"),
6507
+ overwrite: config2.overwriteList?.includes("config"),
6336
6508
  generatedFile,
6337
6509
  content,
6338
6510
  typescript: config2.typescript
@@ -6346,10 +6518,9 @@ var addDatabaseFile = async ({
6346
6518
  config: config2,
6347
6519
  generatedFile
6348
6520
  }) => {
6349
- var _a;
6350
6521
  await writeGeneratedFile({
6351
6522
  generatedFile,
6352
- overwrite: (_a = config2.overwriteList) == null ? void 0 : _a.includes("database"),
6523
+ overwrite: config2.overwriteList?.includes("database"),
6353
6524
  content: databaseTemplate({ config: config2 }),
6354
6525
  typescript: config2.typescript
6355
6526
  });
@@ -6359,13 +6530,12 @@ var addNextApiRoute = async ({
6359
6530
  generatedFile,
6360
6531
  env
6361
6532
  }) => {
6362
- var _a;
6363
- const content = (0, import_prettier2.format)(nextApiRouteTemplate({ config: config2, env }), {
6533
+ const content = format2(nextApiRouteTemplate({ config: config2, env }), {
6364
6534
  parser: "babel"
6365
6535
  });
6366
6536
  await writeGeneratedFile({
6367
6537
  generatedFile,
6368
- overwrite: (_a = config2.overwriteList) == null ? void 0 : _a.includes("next-api-handler"),
6538
+ overwrite: config2.overwriteList?.includes("next-api-handler"),
6369
6539
  content,
6370
6540
  typescript: config2.typescript
6371
6541
  });
@@ -6375,10 +6545,9 @@ var addTemplateFile = async ({
6375
6545
  generatedFile,
6376
6546
  config: config2
6377
6547
  }) => {
6378
- var _a;
6379
6548
  await writeGeneratedFile({
6380
6549
  generatedFile,
6381
- overwrite: (_a = config2.overwriteList) == null ? void 0 : _a.includes(generatedFile.generatedFileType),
6550
+ overwrite: config2.overwriteList?.includes(generatedFile.generatedFileType),
6382
6551
  content,
6383
6552
  typescript: config2.typescript
6384
6553
  });
@@ -6387,7 +6556,6 @@ var addContentFile = async ({
6387
6556
  config: config2,
6388
6557
  env
6389
6558
  }) => {
6390
- var _a;
6391
6559
  await writeGeneratedFile({
6392
6560
  generatedFile: {
6393
6561
  javascriptExists: false,
@@ -6401,11 +6569,11 @@ var addContentFile = async ({
6401
6569
  return () => ({
6402
6570
  exists: env.sampleContentExists,
6403
6571
  path: env.sampleContentPath,
6404
- parentPath: import_path11.default.dirname(env.sampleContentPath)
6572
+ parentPath: path14.dirname(env.sampleContentPath)
6405
6573
  });
6406
6574
  }
6407
6575
  },
6408
- overwrite: (_a = config2.overwriteList) == null ? void 0 : _a.includes("sample-content"),
6576
+ overwrite: config2.overwriteList?.includes("sample-content"),
6409
6577
  content: helloWorldPost,
6410
6578
  typescript: false
6411
6579
  });
@@ -6424,10 +6592,10 @@ ${titleText(" TinaCMS ")} backend initialized!`));
6424
6592
  return `${x.key}=${x.value || "***"}`;
6425
6593
  }).join("\n") + `
6426
6594
  TINA_PUBLIC_IS_LOCAL=true`;
6427
- const envFile = import_path11.default.join(process.cwd(), ".env");
6428
- if (!import_fs_extra13.default.existsSync(envFile)) {
6595
+ const envFile = path14.join(process.cwd(), ".env");
6596
+ if (!fs14.existsSync(envFile)) {
6429
6597
  logger.info(`Adding .env file to your project... \u2705`);
6430
- import_fs_extra13.default.writeFileSync(envFile, envFileText);
6598
+ fs14.writeFileSync(envFile, envFileText);
6431
6599
  } else {
6432
6600
  logger.info(
6433
6601
  "Please add the following environment variables to your .env file"
@@ -6449,9 +6617,7 @@ ${titleText(" TinaCMS ")} has been initialized!`));
6449
6617
  );
6450
6618
  if (framework.name === "hugo") {
6451
6619
  logger.info(
6452
- focusText("Hugo is required. "),
6453
- "Don't have Hugo installed? Follow this guide to set it up: ",
6454
- linkText("https://gohugo.io/installation/")
6620
+ focusText("Hugo is required. ") + "Don't have Hugo installed? Follow this guide to set it up: " + linkText("https://gohugo.io/installation/")
6455
6621
  );
6456
6622
  }
6457
6623
  logger.info(
@@ -6470,7 +6636,8 @@ var other = ({ packageManager }) => {
6470
6636
  pnpm: `pnpm`,
6471
6637
  npm: `npx`,
6472
6638
  // npx is the way to run executables that aren't in your "scripts"
6473
- yarn: `yarn`
6639
+ yarn: `yarn`,
6640
+ bun: `bun run`
6474
6641
  };
6475
6642
  return `${packageManagers[packageManager]} tinacms dev -c "<your dev command>"`;
6476
6643
  };
@@ -6483,7 +6650,8 @@ var frameworkDevCmds = {
6483
6650
  pnpm: `pnpm`,
6484
6651
  npm: `npm run`,
6485
6652
  // npx is the way to run executables that aren't in your "scripts"
6486
- yarn: `yarn`
6653
+ yarn: `yarn`,
6654
+ bun: `bun run`
6487
6655
  };
6488
6656
  return `${packageManagers[packageManager]} dev`;
6489
6657
  }
@@ -6496,12 +6664,11 @@ var addReactiveFile = {
6496
6664
  baseDir,
6497
6665
  dataLayer
6498
6666
  }) => {
6499
- var _a, _b;
6500
- const packageJsonPath = import_path11.default.join(baseDir, "package.json");
6667
+ const packageJsonPath = path14.join(baseDir, "package.json");
6501
6668
  await writeGeneratedFile({
6502
6669
  generatedFile,
6503
6670
  typescript: config2.typescript,
6504
- overwrite: (_a = config2.overwriteList) == null ? void 0 : _a.includes(
6671
+ overwrite: config2.overwriteList?.includes(
6505
6672
  generatedFile.generatedFileType
6506
6673
  ),
6507
6674
  content: templates["demo-post-page"]({
@@ -6510,24 +6677,23 @@ var addReactiveFile = {
6510
6677
  })
6511
6678
  });
6512
6679
  logger.info("Adding a nextjs example... \u2705");
6513
- const packageJson = JSON.parse(import_fs_extra13.default.readFileSync(packageJsonPath).toString());
6680
+ const packageJson = JSON.parse(fs14.readFileSync(packageJsonPath).toString());
6514
6681
  const scripts = packageJson.scripts || {};
6515
6682
  const updatedPackageJson = JSON.stringify(
6516
6683
  {
6517
6684
  ...packageJson,
6518
6685
  scripts: extendNextScripts(scripts, {
6519
6686
  isLocalEnvVarName: config2.isLocalEnvVarName,
6520
- addSetupUsers: ((_b = config2.authProvider) == null ? void 0 : _b.name) === "next-auth"
6687
+ addSetupUsers: config2.authProvider?.name === "next-auth"
6521
6688
  })
6522
6689
  },
6523
6690
  null,
6524
6691
  2
6525
6692
  );
6526
- import_fs_extra13.default.writeFileSync(packageJsonPath, updatedPackageJson);
6693
+ fs14.writeFileSync(packageJsonPath, updatedPackageJson);
6527
6694
  }
6528
6695
  };
6529
6696
  function execShellCommand(cmd) {
6530
- const exec = require("child_process").exec;
6531
6697
  return new Promise((resolve2, reject) => {
6532
6698
  exec(cmd, (error, stdout, stderr) => {
6533
6699
  if (error) {
@@ -6573,25 +6739,27 @@ var command = new CLICommand({
6573
6739
  });
6574
6740
 
6575
6741
  // src/next/commands/init-command/index.ts
6576
- var InitCommand = class extends import_clipanion6.Command {
6577
- constructor() {
6578
- super(...arguments);
6579
- this.pathToForestryConfig = import_clipanion6.Option.String("--forestryPath", {
6580
- description: "Specify the relative path to the .forestry directory, if importing an existing forestry site."
6581
- });
6582
- this.rootPath = import_clipanion6.Option.String("--rootPath", {
6583
- description: "Specify the root directory to run the CLI from (defaults to current working directory)"
6584
- });
6585
- this.debug = import_clipanion6.Option.Boolean("--debug", false, {
6586
- description: "Enable debug logging"
6587
- });
6588
- this.noTelemetry = import_clipanion6.Option.Boolean("--noTelemetry", false, {
6589
- description: "Disable anonymous telemetry that is collected"
6590
- });
6591
- this.tinaVersion = import_clipanion6.Option.String("--tinaVersion", {
6592
- description: "Specify a version for tina dependencies"
6593
- });
6594
- }
6742
+ var InitCommand = class extends Command6 {
6743
+ static paths = [["init"], ["init", "backend"]];
6744
+ pathToForestryConfig = Option6.String("--forestryPath", {
6745
+ description: "Specify the relative path to the .forestry directory, if importing an existing forestry site."
6746
+ });
6747
+ rootPath = Option6.String("--rootPath", {
6748
+ description: "Specify the root directory to run the CLI from (defaults to current working directory)"
6749
+ });
6750
+ debug = Option6.Boolean("--debug", false, {
6751
+ description: "Enable debug logging"
6752
+ });
6753
+ noTelemetry = Option6.Boolean("--noTelemetry", false, {
6754
+ description: "Disable anonymous telemetry that is collected"
6755
+ });
6756
+ tinaVersion = Option6.String("--tinaVersion", {
6757
+ description: "Specify a version for tina dependencies"
6758
+ });
6759
+ static usage = Command6.Usage({
6760
+ category: `Commands`,
6761
+ description: `Add Tina to an existing project`
6762
+ });
6595
6763
  async catch(error) {
6596
6764
  logger.error("Error occured during tinacms init");
6597
6765
  console.error(error);
@@ -6611,33 +6779,32 @@ var InitCommand = class extends import_clipanion6.Command {
6611
6779
  process.exit();
6612
6780
  }
6613
6781
  };
6614
- InitCommand.paths = [["init"], ["init", "backend"]];
6615
- InitCommand.usage = import_clipanion6.Command.Usage({
6616
- category: `Commands`,
6617
- description: `Add Tina to an existing project`
6618
- });
6619
6782
 
6620
6783
  // src/next/commands/searchindex-command/index.ts
6621
- var import_clipanion7 = require("clipanion");
6622
- var import_graphql17 = require("@tinacms/graphql");
6623
- var import_search3 = require("@tinacms/search");
6624
- var SearchIndexCommand = class extends import_clipanion7.Command {
6625
- constructor() {
6626
- super(...arguments);
6627
- this.rootPath = import_clipanion7.Option.String("--rootPath", {
6628
- description: "Specify the root directory to run the CLI from (defaults to current working directory)"
6629
- });
6630
- this.verbose = import_clipanion7.Option.Boolean("-v,--verbose", false, {
6631
- description: "increase verbosity of logged output"
6632
- });
6633
- }
6784
+ import { Command as Command7, Option as Option7 } from "clipanion";
6785
+ import { createSchema, FilesystemBridge as FilesystemBridge4 } from "@tinacms/graphql";
6786
+ import {
6787
+ SearchIndexer as SearchIndexer3,
6788
+ TinaCMSSearchIndexClient as TinaCMSSearchIndexClient2
6789
+ } from "@tinacms/search";
6790
+ var SearchIndexCommand = class extends Command7 {
6791
+ static paths = [["search-index"]];
6792
+ rootPath = Option7.String("--rootPath", {
6793
+ description: "Specify the root directory to run the CLI from (defaults to current working directory)"
6794
+ });
6795
+ verbose = Option7.Boolean("-v,--verbose", false, {
6796
+ description: "increase verbosity of logged output"
6797
+ });
6798
+ static usage = Command7.Usage({
6799
+ category: `Commands`,
6800
+ description: `Index the site for search`
6801
+ });
6634
6802
  async catch(error) {
6635
6803
  logger.error("Error occured during tinacms search-index");
6636
6804
  console.error(error);
6637
6805
  process.exit(1);
6638
6806
  }
6639
6807
  async execute() {
6640
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
6641
6808
  const rootPath = this.rootPath || process.cwd();
6642
6809
  const configManager = new ConfigManager({ rootPath });
6643
6810
  try {
@@ -6648,18 +6815,18 @@ var SearchIndexCommand = class extends import_clipanion7.Command {
6648
6815
  console.error(e);
6649
6816
  }
6650
6817
  }
6651
- if (!((_a = configManager.config) == null ? void 0 : _a.search)) {
6818
+ if (!configManager.config?.search) {
6652
6819
  logger.error("No search config found");
6653
6820
  process.exit(1);
6654
6821
  }
6655
6822
  const { schema } = configManager.config;
6656
- const tinaSchema = await (0, import_graphql17.createSchema)({
6823
+ const tinaSchema = await createSchema({
6657
6824
  schema: { ...schema, config: configManager.config }
6658
6825
  });
6659
6826
  let client;
6660
- const hasTinaSearch = Boolean((_c = (_b = configManager.config) == null ? void 0 : _b.search) == null ? void 0 : _c.tina);
6827
+ const hasTinaSearch = Boolean(configManager.config?.search?.tina);
6661
6828
  if (hasTinaSearch) {
6662
- if (!((_d = configManager.config) == null ? void 0 : _d.branch)) {
6829
+ if (!configManager.config?.branch) {
6663
6830
  logger.error(
6664
6831
  `${dangerText(
6665
6832
  `ERROR: Branch not configured in tina search configuration.`
@@ -6667,11 +6834,11 @@ var SearchIndexCommand = class extends import_clipanion7.Command {
6667
6834
  );
6668
6835
  throw new Error("Branch not configured in tina search configuration.");
6669
6836
  }
6670
- if (!((_e = configManager.config) == null ? void 0 : _e.clientId)) {
6837
+ if (!configManager.config?.clientId) {
6671
6838
  logger.error(`${dangerText(`ERROR: clientId not configured.`)}`);
6672
6839
  throw new Error("clientId not configured.");
6673
6840
  }
6674
- if (!((_h = (_g = (_f = configManager.config) == null ? void 0 : _f.search) == null ? void 0 : _g.tina) == null ? void 0 : _h.indexerToken)) {
6841
+ if (!configManager.config?.search?.tina?.indexerToken) {
6675
6842
  logger.error(
6676
6843
  `${dangerText(
6677
6844
  `ERROR: indexerToken not configured in tina search configuration.`
@@ -6681,23 +6848,23 @@ var SearchIndexCommand = class extends import_clipanion7.Command {
6681
6848
  "indexerToken not configured in tina search configuration."
6682
6849
  );
6683
6850
  }
6684
- client = new import_search3.TinaCMSSearchIndexClient({
6685
- apiUrl: `${((_i = configManager.config.tinaioConfig) == null ? void 0 : _i.contentApiUrlOverride) || "https://content.tinajs.io"}/searchIndex/${(_j = configManager.config) == null ? void 0 : _j.clientId}`,
6686
- branch: (_k = configManager.config) == null ? void 0 : _k.branch,
6687
- indexerToken: (_n = (_m = (_l = configManager.config) == null ? void 0 : _l.search) == null ? void 0 : _m.tina) == null ? void 0 : _n.indexerToken,
6688
- stopwordLanguages: (_q = (_p = (_o = configManager.config) == null ? void 0 : _o.search) == null ? void 0 : _p.tina) == null ? void 0 : _q.stopwordLanguages
6851
+ client = new TinaCMSSearchIndexClient2({
6852
+ apiUrl: `${configManager.config.tinaioConfig?.contentApiUrlOverride || "https://content.tinajs.io"}/searchIndex/${configManager.config?.clientId}`,
6853
+ branch: configManager.config?.branch,
6854
+ indexerToken: configManager.config?.search?.tina?.indexerToken,
6855
+ stopwordLanguages: configManager.config?.search?.tina?.stopwordLanguages
6689
6856
  });
6690
6857
  } else {
6691
- client = (_s = (_r = configManager.config) == null ? void 0 : _r.search) == null ? void 0 : _s.searchClient;
6858
+ client = configManager.config?.search?.searchClient;
6692
6859
  }
6693
- const searchIndexer = new import_search3.SearchIndexer({
6694
- batchSize: ((_t = configManager.config.search) == null ? void 0 : _t.indexBatchSize) || 100,
6695
- bridge: new import_graphql17.FilesystemBridge(
6860
+ const searchIndexer = new SearchIndexer3({
6861
+ batchSize: configManager.config.search?.indexBatchSize || 100,
6862
+ bridge: new FilesystemBridge4(
6696
6863
  configManager.rootPath,
6697
6864
  configManager.contentRootPath
6698
6865
  ),
6699
6866
  schema: tinaSchema,
6700
- textIndexLength: ((_u = configManager.config.search) == null ? void 0 : _u.maxSearchIndexFieldLength) || 100,
6867
+ textIndexLength: configManager.config.search?.maxSearchIndexFieldLength || 100,
6701
6868
  client
6702
6869
  });
6703
6870
  let err;
@@ -6718,14 +6885,9 @@ var SearchIndexCommand = class extends import_clipanion7.Command {
6718
6885
  process.exit(0);
6719
6886
  }
6720
6887
  };
6721
- SearchIndexCommand.paths = [["search-index"]];
6722
- SearchIndexCommand.usage = import_clipanion7.Command.Usage({
6723
- category: `Commands`,
6724
- description: `Index the site for search`
6725
- });
6726
6888
 
6727
6889
  // src/index.ts
6728
- var cli = new import_clipanion8.Cli({
6890
+ var cli = new Cli({
6729
6891
  binaryName: `tinacms`,
6730
6892
  binaryLabel: `TinaCMS`,
6731
6893
  binaryVersion: version
@@ -6736,7 +6898,10 @@ cli.register(AuditCommand);
6736
6898
  cli.register(InitCommand);
6737
6899
  cli.register(CodemodCommand);
6738
6900
  cli.register(SearchIndexCommand);
6739
- cli.register(import_clipanion8.Builtins.DefinitionsCommand);
6740
- cli.register(import_clipanion8.Builtins.HelpCommand);
6741
- cli.register(import_clipanion8.Builtins.VersionCommand);
6901
+ cli.register(Builtins.DefinitionsCommand);
6902
+ cli.register(Builtins.HelpCommand);
6903
+ cli.register(Builtins.VersionCommand);
6742
6904
  var index_default = cli;
6905
+ export {
6906
+ index_default as default
6907
+ };