@tinacms/cli 0.0.0-bf8b9b7-20251204000148 → 0.0.0-c19d29e-20251224001156

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.
@@ -59,7 +59,6 @@ declare const forestryFieldWithoutField: z.ZodObject<{
59
59
  };
60
60
  }>>;
61
61
  }, "strip", z.ZodTypeAny, {
62
- type?: "number" | "boolean" | "file" | "text" | "color" | "include" | "list" | "datetime" | "select" | "image_gallery" | "textarea" | "tag_list" | "field_group" | "field_group_list" | "blocks";
63
62
  default?: any;
64
63
  name?: string;
65
64
  config?: {
@@ -76,10 +75,10 @@ declare const forestryFieldWithoutField: z.ZodObject<{
76
75
  };
77
76
  };
78
77
  label?: string;
78
+ type?: "number" | "boolean" | "text" | "color" | "file" | "include" | "list" | "datetime" | "select" | "image_gallery" | "textarea" | "tag_list" | "field_group" | "field_group_list" | "blocks";
79
79
  template?: string;
80
80
  template_types?: string[];
81
81
  }, {
82
- type?: "number" | "boolean" | "file" | "text" | "color" | "include" | "list" | "datetime" | "select" | "image_gallery" | "textarea" | "tag_list" | "field_group" | "field_group_list" | "blocks";
83
82
  default?: any;
84
83
  name?: string;
85
84
  config?: {
@@ -96,6 +95,7 @@ declare const forestryFieldWithoutField: z.ZodObject<{
96
95
  };
97
96
  };
98
97
  label?: string;
98
+ type?: "number" | "boolean" | "text" | "color" | "file" | "include" | "list" | "datetime" | "select" | "image_gallery" | "textarea" | "tag_list" | "field_group" | "field_group_list" | "blocks";
99
99
  template?: string;
100
100
  template_types?: string[];
101
101
  }>;
@@ -149,12 +149,12 @@ export declare const parseSections: ({ val }: {
149
149
  val: unknown;
150
150
  }) => {
151
151
  sections?: {
152
- exclude?: string;
153
- type?: "heading" | "document" | "directory" | "jekyll-pages" | "jekyll-posts";
154
152
  match?: string;
155
153
  templates?: string[];
156
154
  label?: string;
157
155
  path?: string;
156
+ type?: "heading" | "document" | "directory" | "jekyll-pages" | "jekyll-posts";
157
+ exclude?: string;
158
158
  create?: "none" | "all" | "documents";
159
159
  new_doc_ext?: string;
160
160
  read_only?: boolean;
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { Cli, Builtins } from "clipanion";
3
3
 
4
4
  // package.json
5
- var version = "2.0.0";
5
+ var version = "2.0.5";
6
6
 
7
7
  // src/next/commands/dev-command/index.ts
8
8
  import path8 from "path";
@@ -28,15 +28,15 @@ function isUnicodeSupported() {
28
28
  }
29
29
 
30
30
  // src/logger/index.ts
31
- import log4js from "log4js";
32
- var logger = log4js.getLogger();
33
- log4js.configure({
34
- appenders: {
35
- out: { type: "stdout", layout: { type: "messagePassThrough" } }
36
- },
37
- categories: { default: { appenders: ["out"], level: "info" } }
38
- });
39
- 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
+ };
40
40
  function ansiRegex() {
41
41
  const pattern = [
42
42
  "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
@@ -488,7 +488,15 @@ var Codegen = class {
488
488
  JSON.stringify(this.graphqlSchemaDoc)
489
489
  );
490
490
  const { search, ...rest } = this.tinaSchema.schema.config;
491
- this.tinaSchema.schema.config = rest;
491
+ if (search?.tina) {
492
+ const { indexerToken, ...safeSearchConfig } = search.tina;
493
+ this.tinaSchema.schema.config = {
494
+ ...rest,
495
+ search: { tina: safeSearchConfig }
496
+ };
497
+ } else {
498
+ this.tinaSchema.schema.config = rest;
499
+ }
492
500
  await this.writeConfigFile(
493
501
  "_schema.json",
494
502
  JSON.stringify(this.tinaSchema.schema)
@@ -1115,20 +1123,12 @@ var ConfigManager = class {
1115
1123
  this.generatedFolderPath,
1116
1124
  "config.prebuild.jsx"
1117
1125
  );
1118
- const nativeNodeModulesPlugin = {
1119
- name: "native-node-modules",
1120
- setup(build3) {
1121
- build3.onResolve({ filter: /^node:.*/ }, (args) => {
1122
- return {
1123
- path: args.path,
1124
- external: true
1125
- };
1126
- });
1127
- }
1128
- };
1129
1126
  const outfile = path3.join(tmpdir, "config.build.jsx");
1130
1127
  const outfile2 = path3.join(tmpdir, "config.build.mjs");
1131
1128
  const tempTSConfigFile = path3.join(tmpdir, "tsconfig.json");
1129
+ const esmRequireBanner = {
1130
+ js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
1131
+ };
1132
1132
  fs2.outputFileSync(tempTSConfigFile, "{}");
1133
1133
  const result2 = await esbuild.build({
1134
1134
  entryPoints: [configFilePath],
@@ -1158,12 +1158,12 @@ var ConfigManager = class {
1158
1158
  platform: "node",
1159
1159
  format: "esm",
1160
1160
  outfile,
1161
- loader: loaders
1161
+ loader: loaders,
1162
+ banner: esmRequireBanner
1162
1163
  });
1163
1164
  await esbuild.build({
1164
1165
  entryPoints: [outfile],
1165
1166
  bundle: true,
1166
- // Suppress warning about comparison with -0 from client module
1167
1167
  logLevel: "silent",
1168
1168
  platform: "node",
1169
1169
  target: ["esnext"],
@@ -1718,7 +1718,7 @@ var tinaTailwind = (spaPath, prebuildFilePath) => {
1718
1718
  },
1719
1719
  boxShadow: {
1720
1720
  xs: "0 0 0 1px rgba(0, 0, 0, 0.05)",
1721
- outline: "0 0 0 3px rgba(66, 153, 225, 0.5)"
1721
+ outline: "0 0 0 3px rgba(194, 65, 12, 0.2)"
1722
1722
  },
1723
1723
  colors: {
1724
1724
  blue: {
@@ -1775,7 +1775,7 @@ var tinaTailwind = (spaPath, prebuildFilePath) => {
1775
1775
  "accent-foreground": "#171717",
1776
1776
  destructive: "#FF3B3B",
1777
1777
  "destructive-foreground": "#FAFAFA",
1778
- ring: "#0A0A0A"
1778
+ ring: "#C2410C"
1779
1779
  },
1780
1780
  fontFamily: {
1781
1781
  sans: ["Inter", ...defaultTheme.fontFamily.sans]
@@ -2187,34 +2187,127 @@ var createSearchIndexRouter = ({
2187
2187
  searchIndex
2188
2188
  }) => {
2189
2189
  const put = async (req, res) => {
2190
- const { docs } = req.body;
2190
+ const docs = req.body?.docs ?? [];
2191
2191
  const result = await searchIndex.PUT(docs);
2192
2192
  res.writeHead(200, { "Content-Type": "application/json" });
2193
2193
  res.end(JSON.stringify({ result }));
2194
2194
  };
2195
2195
  const get = async (req, res) => {
2196
- const requestURL = new URL(req.url, config2.apiURL);
2196
+ const requestURL = new URL(req.url ?? "", config2.apiURL);
2197
+ const isV2 = requestURL.pathname.startsWith("/v2/searchIndex");
2198
+ res.writeHead(200, { "Content-Type": "application/json" });
2199
+ if (isV2) {
2200
+ const queryParam = requestURL.searchParams.get("query");
2201
+ const collectionParam = requestURL.searchParams.get("collection");
2202
+ const limitParam = requestURL.searchParams.get("limit");
2203
+ const cursorParam = requestURL.searchParams.get("cursor");
2204
+ if (!queryParam) {
2205
+ res.end(JSON.stringify({ RESULT: [], RESULT_LENGTH: 0 }));
2206
+ return;
2207
+ }
2208
+ if (!searchIndex.fuzzySearchWrapper) {
2209
+ res.end(JSON.stringify({ RESULT: [], RESULT_LENGTH: 0 }));
2210
+ return;
2211
+ }
2212
+ try {
2213
+ const paginationOptions = {};
2214
+ if (limitParam) {
2215
+ paginationOptions.limit = parseInt(limitParam, 10);
2216
+ }
2217
+ if (cursorParam) {
2218
+ paginationOptions.cursor = cursorParam;
2219
+ }
2220
+ const searchQuery = collectionParam ? `${queryParam} _collection:${collectionParam}` : queryParam;
2221
+ const result2 = await searchIndex.fuzzySearchWrapper.query(searchQuery, {
2222
+ ...paginationOptions
2223
+ });
2224
+ if (collectionParam) {
2225
+ result2.results = result2.results.filter(
2226
+ (r) => r._id && r._id.startsWith(`${collectionParam}:`)
2227
+ );
2228
+ }
2229
+ res.end(
2230
+ JSON.stringify({
2231
+ RESULT: result2.results,
2232
+ RESULT_LENGTH: result2.total,
2233
+ NEXT_CURSOR: result2.nextCursor,
2234
+ PREV_CURSOR: result2.prevCursor,
2235
+ FUZZY_MATCHES: result2.fuzzyMatches || {}
2236
+ })
2237
+ );
2238
+ return;
2239
+ } catch (error) {
2240
+ console.warn(
2241
+ "[search] v2 fuzzy search failed:",
2242
+ error instanceof Error ? error.message : error
2243
+ );
2244
+ res.end(JSON.stringify({ RESULT: [], RESULT_LENGTH: 0 }));
2245
+ return;
2246
+ }
2247
+ }
2197
2248
  const query = requestURL.searchParams.get("q");
2198
2249
  const optionsParam = requestURL.searchParams.get("options");
2199
- let options = {
2200
- DOCUMENTS: false
2201
- };
2250
+ const fuzzyParam = requestURL.searchParams.get("fuzzy");
2251
+ const fuzzyOptionsParam = requestURL.searchParams.get("fuzzyOptions");
2252
+ if (!query) {
2253
+ res.end(JSON.stringify({ RESULT: [] }));
2254
+ return;
2255
+ }
2256
+ let searchIndexOptions = { DOCUMENTS: false };
2202
2257
  if (optionsParam) {
2203
- options = {
2204
- ...options,
2258
+ searchIndexOptions = {
2259
+ ...searchIndexOptions,
2205
2260
  ...JSON.parse(optionsParam)
2206
2261
  };
2207
2262
  }
2208
- res.writeHead(200, { "Content-Type": "application/json" });
2209
- if (query) {
2210
- const result = await searchIndex.QUERY(JSON.parse(query), options);
2211
- res.end(JSON.stringify(result));
2212
- } else {
2213
- res.end(JSON.stringify({ RESULT: [] }));
2263
+ const queryObj = JSON.parse(query);
2264
+ if (fuzzyParam === "true" && searchIndex.fuzzySearchWrapper) {
2265
+ try {
2266
+ const fuzzyOptions = fuzzyOptionsParam ? JSON.parse(fuzzyOptionsParam) : {};
2267
+ const searchTerms = queryObj.AND ? queryObj.AND.filter(
2268
+ (term) => !term.includes("_collection:")
2269
+ ) : [];
2270
+ const collectionFilter = queryObj.AND?.find(
2271
+ (term) => term.includes("_collection:")
2272
+ );
2273
+ const paginationOptions = {};
2274
+ if (searchIndexOptions.PAGE) {
2275
+ paginationOptions.limit = searchIndexOptions.PAGE.SIZE;
2276
+ paginationOptions.cursor = searchIndexOptions.PAGE.NUMBER.toString();
2277
+ }
2278
+ const searchQuery = collectionFilter ? `${searchTerms.join(" ")} ${collectionFilter}` : searchTerms.join(" ");
2279
+ const result2 = await searchIndex.fuzzySearchWrapper.query(searchQuery, {
2280
+ ...paginationOptions,
2281
+ fuzzyOptions
2282
+ });
2283
+ if (collectionFilter) {
2284
+ const collection = collectionFilter.split(":")[1];
2285
+ result2.results = result2.results.filter(
2286
+ (r) => r._id && r._id.startsWith(`${collection}:`)
2287
+ );
2288
+ }
2289
+ res.end(
2290
+ JSON.stringify({
2291
+ RESULT: result2.results,
2292
+ RESULT_LENGTH: result2.total,
2293
+ NEXT_CURSOR: result2.nextCursor,
2294
+ PREV_CURSOR: result2.prevCursor,
2295
+ FUZZY_MATCHES: result2.fuzzyMatches || {}
2296
+ })
2297
+ );
2298
+ return;
2299
+ } catch (error) {
2300
+ console.warn(
2301
+ "[search] Fuzzy search failed, falling back to standard search:",
2302
+ error instanceof Error ? error.message : error
2303
+ );
2304
+ }
2214
2305
  }
2306
+ const result = await searchIndex.QUERY(queryObj, searchIndexOptions);
2307
+ res.end(JSON.stringify(result));
2215
2308
  };
2216
2309
  const del = async (req, res) => {
2217
- const requestURL = new URL(req.url, config2.apiURL);
2310
+ const requestURL = new URL(req.url ?? "", config2.apiURL);
2218
2311
  const docId = requestURL.pathname.split("/").filter(Boolean).slice(1).join("/");
2219
2312
  const result = await searchIndex.DELETE(docId);
2220
2313
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -2304,7 +2397,7 @@ var devServerEndPointsPlugin = ({
2304
2397
  res.end(JSON.stringify(result));
2305
2398
  return;
2306
2399
  }
2307
- if (req.url.startsWith("/searchIndex")) {
2400
+ if (req.url.startsWith("/searchIndex") || req.url.startsWith("/v2/searchIndex")) {
2308
2401
  if (req.method === "POST") {
2309
2402
  await searchIndexRouter.put(req, res);
2310
2403
  } else if (req.method === "GET") {
@@ -2585,10 +2678,14 @@ ${dangerText(e.message)}
2585
2678
  configManager.config.search && searchIndexer
2586
2679
  );
2587
2680
  }
2681
+ const searchIndexWithFuzzy = searchIndexClient.searchIndex;
2682
+ if (searchIndexWithFuzzy && searchIndexClient.fuzzySearchWrapper) {
2683
+ searchIndexWithFuzzy.fuzzySearchWrapper = searchIndexClient.fuzzySearchWrapper;
2684
+ }
2588
2685
  const server = await createDevServer(
2589
2686
  configManager,
2590
2687
  database,
2591
- searchIndexClient.searchIndex,
2688
+ searchIndexWithFuzzy,
2592
2689
  apiURL,
2593
2690
  this.noWatch,
2594
2691
  dbLock
@@ -5072,7 +5169,7 @@ var generateAllTemplates = async ({
5072
5169
  });
5073
5170
  templateMap.set(tem, { fields, templateObj });
5074
5171
  } catch (e) {
5075
- logger.log(`Error parsing template frontmatter template', tem + '.yml'`);
5172
+ logger.warn(`Error parsing template frontmatter template, ${tem}.yml`);
5076
5173
  console.error(e);
5077
5174
  templateMap.set(tem, { fields: [], templateObj: {} });
5078
5175
  }
@@ -5116,7 +5213,7 @@ var generateCollectionFromForestrySection = (args) => {
5116
5213
  }
5117
5214
  if (section.type === "directory") {
5118
5215
  if (!section?.path || section.path === "/" || section.path === "./" || section.path === ".") {
5119
- logger.log(
5216
+ logger.warn(
5120
5217
  warnText(
5121
5218
  `Warning: Section ${section.label} is using a Root Path. Currently, Tina Does not support Root paths see ${linkText(
5122
5219
  "https://github.com/tinacms/tinacms/issues/3768"
@@ -5253,7 +5350,7 @@ var generateCollectionFromForestrySection = (args) => {
5253
5350
  fields
5254
5351
  };
5255
5352
  } else {
5256
- logger.log(
5353
+ logger.warn(
5257
5354
  warnText(
5258
5355
  `Error: document section has an unsupported file extension: ${extname} in ${section.path}`
5259
5356
  )
@@ -6528,9 +6625,7 @@ ${titleText(" TinaCMS ")} has been initialized!`));
6528
6625
  );
6529
6626
  if (framework.name === "hugo") {
6530
6627
  logger.info(
6531
- focusText("Hugo is required. "),
6532
- "Don't have Hugo installed? Follow this guide to set it up: ",
6533
- linkText("https://gohugo.io/installation/")
6628
+ focusText("Hugo is required. ") + "Don't have Hugo installed? Follow this guide to set it up: " + linkText("https://gohugo.io/installation/")
6534
6629
  );
6535
6630
  }
6536
6631
  logger.info(
@@ -1,5 +1,10 @@
1
- import log4js from 'log4js';
2
- export declare const logger: log4js.Logger;
1
+ export declare const logger: {
2
+ level: string;
3
+ info: (msg: string) => boolean;
4
+ warn: (msg: string) => boolean;
5
+ error: (msg: string) => boolean;
6
+ debug: (msg: string) => void;
7
+ };
3
8
  export declare const note: (message?: string, title?: string) => void;
4
9
  export declare const log: (message?: string) => void;
5
10
  export declare const warn: (message?: string, path?: string) => void;
@@ -1,12 +1,47 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { SearchQueryResponse, SearchResult } from '@tinacms/search';
1
3
  export interface PathConfig {
2
4
  apiURL: string;
3
5
  searchPath: string;
4
6
  }
7
+ interface SearchIndexOptions {
8
+ DOCUMENTS?: boolean;
9
+ PAGE?: {
10
+ NUMBER: number;
11
+ SIZE: number;
12
+ };
13
+ }
14
+ interface SearchIndexResult {
15
+ RESULT: SearchResult[];
16
+ RESULT_LENGTH: number;
17
+ }
18
+ interface FuzzySearchWrapper {
19
+ query: (query: string, options: {
20
+ limit?: number;
21
+ cursor?: string;
22
+ fuzzyOptions?: Record<string, unknown>;
23
+ }) => Promise<SearchQueryResponse>;
24
+ }
25
+ interface SearchIndex {
26
+ PUT: (docs: Record<string, unknown>[]) => Promise<unknown>;
27
+ DELETE: (id: string) => Promise<unknown>;
28
+ QUERY: (query: {
29
+ AND?: string[];
30
+ OR?: string[];
31
+ }, options: SearchIndexOptions) => Promise<SearchIndexResult>;
32
+ fuzzySearchWrapper?: FuzzySearchWrapper;
33
+ }
34
+ interface RequestWithBody extends IncomingMessage {
35
+ body?: {
36
+ docs?: Record<string, unknown>[];
37
+ };
38
+ }
5
39
  export declare const createSearchIndexRouter: ({ config, searchIndex, }: {
6
40
  config: PathConfig;
7
- searchIndex: any;
41
+ searchIndex: SearchIndex;
8
42
  }) => {
9
- del: (req: any, res: any) => Promise<void>;
10
- get: (req: any, res: any) => Promise<void>;
11
- put: (req: any, res: any) => Promise<void>;
43
+ del: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
44
+ get: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
45
+ put: (req: RequestWithBody, res: ServerResponse) => Promise<void>;
12
46
  };
47
+ export {};
@@ -1,36 +1,16 @@
1
1
  /**
2
2
 
3
3
  */
4
- export declare const successText: import("chalk").Chalk & {
5
- supportsColor: import("chalk").ColorSupport;
6
- };
7
- export declare const focusText: import("chalk").Chalk & {
8
- supportsColor: import("chalk").ColorSupport;
9
- };
10
- export declare const dangerText: import("chalk").Chalk & {
11
- supportsColor: import("chalk").ColorSupport;
12
- };
13
- export declare const neutralText: import("chalk").Chalk & {
14
- supportsColor: import("chalk").ColorSupport;
15
- };
16
- export declare const linkText: import("chalk").Chalk & {
17
- supportsColor: import("chalk").ColorSupport;
18
- };
19
- export declare const labelText: import("chalk").Chalk & {
20
- supportsColor: import("chalk").ColorSupport;
21
- };
22
- export declare const cmdText: import("chalk").Chalk & {
23
- supportsColor: import("chalk").ColorSupport;
24
- };
4
+ export declare const successText: import("chalk").ChalkInstance;
5
+ export declare const focusText: import("chalk").ChalkInstance;
6
+ export declare const dangerText: import("chalk").ChalkInstance;
7
+ export declare const neutralText: import("chalk").ChalkInstance;
8
+ export declare const linkText: import("chalk").ChalkInstance;
9
+ export declare const labelText: import("chalk").ChalkInstance;
10
+ export declare const cmdText: import("chalk").ChalkInstance;
25
11
  export declare const indentedCmd: (str: any) => string;
26
12
  export declare const indentText: (str: any) => string;
27
- export declare const logText: import("chalk").Chalk & {
28
- supportsColor: import("chalk").ColorSupport;
29
- };
30
- export declare const warnText: import("chalk").Chalk & {
31
- supportsColor: import("chalk").ColorSupport;
32
- };
33
- export declare const titleText: import("chalk").Chalk & {
34
- supportsColor: import("chalk").ColorSupport;
35
- };
13
+ export declare const logText: import("chalk").ChalkInstance;
14
+ export declare const warnText: import("chalk").ChalkInstance;
15
+ export declare const titleText: import("chalk").ChalkInstance;
36
16
  export declare const CONFIRMATION_TEXT: string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tinacms/cli",
3
3
  "type": "module",
4
- "version": "0.0.0-bf8b9b7-20251204000148",
4
+ "version": "0.0.0-c19d29e-20251224001156",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
7
7
  "files": [
@@ -36,13 +36,12 @@
36
36
  "@types/jest": "26.0.4",
37
37
  "@types/js-yaml": "^4.0.9",
38
38
  "@types/listr": "0.14.2",
39
- "@types/log4js": "^2.3.5",
40
39
  "@types/multer": "^1.4.12",
41
40
  "@types/node": "^22.13.1",
42
41
  "@types/progress": "^2.0.7",
43
42
  "@types/prompts": "^2.4.9",
44
43
  "jest": "^29.7.0",
45
- "@tinacms/scripts": "1.4.1"
44
+ "@tinacms/scripts": "1.4.2"
46
45
  },
47
46
  "dependencies": {
48
47
  "@graphql-codegen/core": "^2.6.8",
@@ -64,7 +63,7 @@
64
63
  "auto-bind": "^4.0.0",
65
64
  "body-parser": "^1.20.3",
66
65
  "busboy": "^1.6.0",
67
- "chalk": "^2.4.2",
66
+ "chalk": "^5.4.1",
68
67
  "chokidar": "^3.6.0",
69
68
  "cli-spinner": "^0.2.10",
70
69
  "clipanion": "^3.2.1",
@@ -75,7 +74,6 @@
75
74
  "fs-extra": "^11.3.0",
76
75
  "graphql": "15.8.0",
77
76
  "js-yaml": "^4.1.0",
78
- "log4js": "^6.9.1",
79
77
  "many-level": "^2.0.0",
80
78
  "memory-level": "^1.0.0",
81
79
  "minimatch": "^5.1.6",
@@ -90,12 +88,12 @@
90
88
  "vite": "^4.5.9",
91
89
  "yup": "^1.6.1",
92
90
  "zod": "^3.24.2",
93
- "@tinacms/graphql": "0.0.0-bf8b9b7-20251204000148",
94
- "@tinacms/app": "0.0.0-bf8b9b7-20251204000148",
95
- "@tinacms/metrics": "2.0.0",
96
- "@tinacms/schema-tools": "2.0.0",
97
- "@tinacms/search": "0.0.0-bf8b9b7-20251204000148",
98
- "tinacms": "0.0.0-bf8b9b7-20251204000148"
91
+ "@tinacms/graphql": "0.0.0-c19d29e-20251224001156",
92
+ "@tinacms/app": "0.0.0-c19d29e-20251224001156",
93
+ "@tinacms/schema-tools": "0.0.0-c19d29e-20251224001156",
94
+ "@tinacms/metrics": "2.0.1",
95
+ "tinacms": "0.0.0-c19d29e-20251224001156",
96
+ "@tinacms/search": "0.0.0-c19d29e-20251224001156"
99
97
  },
100
98
  "publishConfig": {
101
99
  "registry": "https://registry.npmjs.org"