@bobbykim/manguito-cms-cli 0.4.4 → 0.4.5

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.
@@ -10786,10 +10786,10 @@ var require_parser = __commonJS({
10786
10786
  }
10787
10787
  });
10788
10788
 
10789
- // ../api/dist/handler-TPEULQ5W.mjs
10789
+ // ../api/dist/handler-7LVYEU5C.mjs
10790
10790
  init_esm_shims();
10791
10791
 
10792
- // ../api/dist/chunk-B5LWIR4U.mjs
10792
+ // ../api/dist/chunk-S4NT6FUM.mjs
10793
10793
  init_esm_shims();
10794
10794
 
10795
10795
  // ../../node_modules/.pnpm/graphql-yoga@5.21.2_graphql@16.14.2/node_modules/graphql-yoga/esm/index.js
@@ -30122,7 +30122,7 @@ function createYoga(options) {
30122
30122
  });
30123
30123
  }
30124
30124
 
30125
- // ../api/dist/chunk-B5LWIR4U.mjs
30125
+ // ../api/dist/chunk-S4NT6FUM.mjs
30126
30126
  var import_dataloader = __toESM(require_dataloader(), 1);
30127
30127
 
30128
30128
  // ../../node_modules/.pnpm/@escape.tech+graphql-armor@3.2.0_@envelop+core@5.5.1_@escape.tech+graphql-armor-types@0.7.0/node_modules/@escape.tech/graphql-armor/dist/graphql-armor.esm.js
@@ -30880,7 +30880,7 @@ var EnvelopArmor = class {
30880
30880
  }
30881
30881
  };
30882
30882
 
30883
- // ../api/dist/chunk-B5LWIR4U.mjs
30883
+ // ../api/dist/chunk-S4NT6FUM.mjs
30884
30884
  var DateTimeScalar = new GraphQLScalarType({
30885
30885
  name: "DateTime",
30886
30886
  description: "ISO-8601 date-time string",
@@ -30975,14 +30975,14 @@ var SortOrderEnum = new GraphQLEnumType({
30975
30975
  values: { ASC: { value: "asc" }, DESC: { value: "desc" } }
30976
30976
  });
30977
30977
  var SORTABLE = [
30978
- { gql: "title", column: "title" },
30979
- { gql: "createdAt", column: "created_at" },
30980
- { gql: "updatedAt", column: "updated_at" }
30978
+ { gql: "title", value: "title" },
30979
+ { gql: "createdAt", value: "created_at" },
30980
+ { gql: "updatedAt", value: "updated_at" }
30981
30981
  ];
30982
30982
  function buildSortFieldEnum(typeName) {
30983
30983
  return new GraphQLEnumType({
30984
30984
  name: `${typeName}SortField`,
30985
- values: Object.fromEntries(SORTABLE.map((s) => [s.gql, { value: s.column }]))
30985
+ values: Object.fromEntries(SORTABLE.map((s) => [s.gql, { value: s.value }]))
30986
30986
  });
30987
30987
  }
30988
30988
  function comparableFilterInput(name, scalar) {
@@ -31108,11 +31108,13 @@ function collectionResolver(typeName, nameMap, fieldKeys) {
31108
31108
  throw codeError("INVALID_PAGINATION", "perPage must be between 1 and 100");
31109
31109
  }
31110
31110
  const repo = ctx.repos[typeName];
31111
+ const sortBy = args.sortBy ?? "created_at";
31112
+ const sortColumn = fieldKeys?.columnFor(sortBy) ?? sortBy;
31111
31113
  const result = await repo.findMany({
31112
31114
  published_only: true,
31113
31115
  page,
31114
31116
  per_page: perPage,
31115
- sort_by: args.sortBy ?? "created_at",
31117
+ sort_by: sortColumn,
31116
31118
  sort_order: args.sortOrder ?? "asc",
31117
31119
  filters: translateFilters(args.filter, nameMap, fieldKeys?.columnFor)
31118
31120
  });
package/dist/index.js CHANGED
@@ -47122,6 +47122,52 @@ function createProgrammaticResolver(resolvers, options) {
47122
47122
  }
47123
47123
  return { resolveItem, resolveList, hasSchema };
47124
47124
  }
47125
+ function isPlainRow(v2) {
47126
+ return typeof v2 === "object" && v2 !== null && !Array.isArray(v2) && !(v2 instanceof Date);
47127
+ }
47128
+ var MEDIA_FIELD_TYPES = /* @__PURE__ */ new Set(["image", "video", "file"]);
47129
+ function nestedTargets(fields) {
47130
+ const out = [];
47131
+ for (const f of fields) {
47132
+ if (MEDIA_FIELD_TYPES.has(f.field_type)) continue;
47133
+ if (f.field_type !== "paragraph" && f.field_type !== "reference") continue;
47134
+ const ref = f.ui_component.ref;
47135
+ if (!ref) continue;
47136
+ out.push({ label: f.name, target: ref });
47137
+ }
47138
+ return out;
47139
+ }
47140
+ function buildProjectors(registry2, fieldKeyMaps) {
47141
+ const projectors = {};
47142
+ const sources = [
47143
+ registry2.content_types,
47144
+ registry2.taxonomy_types,
47145
+ registry2.paragraph_types
47146
+ ];
47147
+ for (const source of sources) {
47148
+ for (const [typeName, type] of Object.entries(source)) {
47149
+ const map2 = fieldKeyMaps[typeName];
47150
+ if (!map2) continue;
47151
+ projectors[typeName] = { map: map2, nested: nestedTargets(type.fields) };
47152
+ }
47153
+ }
47154
+ return projectors;
47155
+ }
47156
+ function projectRow(row, typeName, projectors) {
47157
+ const p2 = projectors[typeName];
47158
+ if (!p2) return row;
47159
+ const out = p2.map.toLabels(row);
47160
+ for (const { label, target } of p2.nested) {
47161
+ const v2 = out[label];
47162
+ if (v2 === null || v2 === void 0) continue;
47163
+ if (Array.isArray(v2)) {
47164
+ out[label] = v2.map((item) => isPlainRow(item) ? projectRow(item, target, projectors) : item);
47165
+ } else if (isPlainRow(v2)) {
47166
+ out[label] = projectRow(v2, target, projectors);
47167
+ }
47168
+ }
47169
+ return out;
47170
+ }
47125
47171
  var SORTABLE_FIELDS = /* @__PURE__ */ new Set(["title", "created_at", "updated_at"]);
47126
47172
  var RELATION_FIELD_TYPES = /* @__PURE__ */ new Set([
47127
47173
  "paragraph",
@@ -47173,7 +47219,7 @@ function parseFilters(url2, validFields, columnFor) {
47173
47219
  function isPublished(item) {
47174
47220
  return item["published"] === true;
47175
47221
  }
47176
- function registerPublicContentRoutes(app, registry2, repos, fieldKeyMaps, paths, listRateLimit, resolver) {
47222
+ function registerPublicContentRoutes(app, registry2, repos, projectors, paths, listRateLimit, resolver) {
47177
47223
  function registerListRoute(path3, handler) {
47178
47224
  if (listRateLimit) {
47179
47225
  app.get(path3, listRateLimit, handler);
@@ -47216,13 +47262,14 @@ function registerPublicContentRoutes(app, registry2, repos, fieldKeyMaps, paths,
47216
47262
  404
47217
47263
  );
47218
47264
  }
47219
- let data = fieldKeyMaps[typeName].toLabels(result.data[0]);
47265
+ let data = projectRow(result.data[0], typeName, projectors);
47220
47266
  if (resolver?.hasSchema(typeName)) data = await resolver.resolveItem(typeName, data);
47221
47267
  return c.json({ ok: true, data });
47222
47268
  });
47223
47269
  } else {
47224
47270
  registerListRoute(paths.collection(basePath), async (c) => {
47225
- const fieldKeys = fieldKeyMaps[typeName];
47271
+ const projector = projectors[typeName];
47272
+ const fieldKeys = projector.map;
47226
47273
  const pagination = parsePagination(c.req.query("page"), c.req.query("per_page"));
47227
47274
  if (!pagination.ok) {
47228
47275
  return c.json(
@@ -47290,17 +47337,18 @@ function registerPublicContentRoutes(app, registry2, repos, fieldKeyMaps, paths,
47290
47337
  );
47291
47338
  }
47292
47339
  }
47340
+ const sortColumn = fieldKeys.columnFor(sortBy) ?? sortBy;
47293
47341
  const result = await repo.findMany({
47294
47342
  published_only: true,
47295
47343
  page: pagination.page,
47296
47344
  per_page: pagination.per_page,
47297
- sort_by: sortBy,
47345
+ sort_by: sortColumn,
47298
47346
  sort_order: sortOrder,
47299
47347
  filters: filtersResult.filters,
47300
47348
  include
47301
47349
  });
47302
47350
  const labeled = result.data.map(
47303
- (row) => fieldKeys.toLabels(row)
47351
+ (row) => projectRow(row, typeName, projectors)
47304
47352
  );
47305
47353
  const data = resolver?.hasSchema(typeName) ? await resolver.resolveList(typeName, labeled) : labeled;
47306
47354
  return c.json({ ...result, data });
@@ -47332,7 +47380,7 @@ function registerPublicContentRoutes(app, registry2, repos, fieldKeyMaps, paths,
47332
47380
  404
47333
47381
  );
47334
47382
  }
47335
- let data = fieldKeyMaps[typeName].toLabels(item);
47383
+ let data = projectRow(item, typeName, projectors);
47336
47384
  if (resolver?.hasSchema(typeName)) data = await resolver.resolveItem(typeName, data);
47337
47385
  return c.json({ ok: true, data });
47338
47386
  });
@@ -47360,9 +47408,8 @@ function registerPublicContentRoutes(app, registry2, repos, fieldKeyMaps, paths,
47360
47408
  page: pagination.page,
47361
47409
  per_page: pagination.per_page
47362
47410
  });
47363
- const fieldKeys = fieldKeyMaps[typeName];
47364
47411
  const labeled = result.data.map(
47365
- (row) => fieldKeys.toLabels(row)
47412
+ (row) => projectRow(row, typeName, projectors)
47366
47413
  );
47367
47414
  const data = resolver?.hasSchema(typeName) ? await resolver.resolveList(typeName, labeled) : labeled;
47368
47415
  return c.json({ ...result, data });
@@ -47379,7 +47426,7 @@ function registerPublicContentRoutes(app, registry2, repos, fieldKeyMaps, paths,
47379
47426
  404
47380
47427
  );
47381
47428
  }
47382
- let data = fieldKeyMaps[typeName].toLabels(item);
47429
+ let data = projectRow(item, typeName, projectors);
47383
47430
  if (resolver?.hasSchema(typeName)) data = await resolver.resolveItem(typeName, data);
47384
47431
  return c.json({ ok: true, data });
47385
47432
  });
@@ -47584,7 +47631,7 @@ function parseListQuery(url2, schemaFieldNames, relationFieldNames, columnFor) {
47584
47631
  search
47585
47632
  };
47586
47633
  }
47587
- function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRepo, requirePermission, db) {
47634
+ function registerAdminContentRoutes(app, registry2, repos, projectors, mediaRepo, requirePermission, db) {
47588
47635
  for (const [typeName, contentType] of Object.entries(registry2.content_types)) {
47589
47636
  const basePath = `content/${typeName}`;
47590
47637
  const repo = repos[typeName];
@@ -47596,7 +47643,8 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
47596
47643
  const relationFieldNames = new Set(
47597
47644
  contentType.fields.filter((f) => RELATION_FIELD_TYPES.has(f.field_type)).map((f) => f.name)
47598
47645
  );
47599
- const fieldKeys = fieldKeyMaps[typeName];
47646
+ const projector = projectors[typeName];
47647
+ const fieldKeys = projector.map;
47600
47648
  const requiredFields = contentType.fields.filter((f) => f.required);
47601
47649
  const mediaFields = contentType.fields.filter(
47602
47650
  (f) => f.field_type === "image" || f.field_type === "video" || f.field_type === "file"
@@ -47617,10 +47665,11 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
47617
47665
  const publishedParam = c.req.query("published");
47618
47666
  const extraFilters = {};
47619
47667
  if (publishedParam === "false") extraFilters["published"] = false;
47668
+ const sortColumn = fieldKeys.columnFor(parsed.sortBy) ?? parsed.sortBy;
47620
47669
  const findOpts = {
47621
47670
  page: parsed.pagination.page,
47622
47671
  per_page: parsed.pagination.per_page,
47623
- sort_by: parsed.sortBy,
47672
+ sort_by: sortColumn,
47624
47673
  sort_order: parsed.sortOrder,
47625
47674
  filters: { ...parsed.filters, ...extraFilters },
47626
47675
  include: parsed.include
@@ -47630,7 +47679,9 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
47630
47679
  findOpts.search = { term: parsed.search, columns: searchableColumns };
47631
47680
  }
47632
47681
  const result = await repo.findMany(findOpts);
47633
- const data = result.data.map((row) => fieldKeys.toLabels(row));
47682
+ const data = result.data.map(
47683
+ (row) => projectRow(row, typeName, projectors)
47684
+ );
47634
47685
  return c.json({ ...result, data });
47635
47686
  }
47636
47687
  );
@@ -47666,7 +47717,7 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
47666
47717
  }
47667
47718
  }
47668
47719
  }
47669
- const data = fieldKeys.toLabels(item);
47720
+ const data = projectRow(item, typeName, projectors);
47670
47721
  return c.json({ ok: true, data });
47671
47722
  }
47672
47723
  );
@@ -47807,7 +47858,7 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
47807
47858
  }
47808
47859
  }
47809
47860
  await applyMediaReferenceDelta(mergeMediaDeltas(...mediaDeltas), mediaRepo);
47810
- const data = fieldKeys.toLabels(item);
47861
+ const data = projectRow(item, typeName, projectors);
47811
47862
  return c.json({ ok: true, data }, 201);
47812
47863
  };
47813
47864
  app.patch(
@@ -47928,7 +47979,7 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
47928
47979
  }
47929
47980
  }
47930
47981
  await applyMediaReferenceDelta(mergeMediaDeltas(...mediaDeltas), mediaRepo);
47931
- const data = fieldKeys.toLabels(updated);
47982
+ const data = projectRow(updated, typeName, projectors);
47932
47983
  return c.json({ ok: true, data });
47933
47984
  };
47934
47985
  if (contentType.only_one) {
@@ -47989,7 +48040,8 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
47989
48040
  const relationFieldNames = new Set(
47990
48041
  taxonomyType.fields.filter((f) => RELATION_FIELD_TYPES.has(f.field_type)).map((f) => f.name)
47991
48042
  );
47992
- const fieldKeys = fieldKeyMaps[typeName];
48043
+ const projector = projectors[typeName];
48044
+ const fieldKeys = projector.map;
47993
48045
  const requiredFields = taxonomyType.fields.filter((f) => f.required);
47994
48046
  const mediaFields = taxonomyType.fields.filter(
47995
48047
  (f) => f.field_type === "image" || f.field_type === "video" || f.field_type === "file"
@@ -48010,10 +48062,11 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
48010
48062
  const publishedParam = c.req.query("published");
48011
48063
  const extraFilters = {};
48012
48064
  if (publishedParam === "false") extraFilters["published"] = false;
48065
+ const sortColumn = fieldKeys.columnFor(parsed.sortBy) ?? parsed.sortBy;
48013
48066
  const findOpts = {
48014
48067
  page: parsed.pagination.page,
48015
48068
  per_page: parsed.pagination.per_page,
48016
- sort_by: parsed.sortBy,
48069
+ sort_by: sortColumn,
48017
48070
  sort_order: parsed.sortOrder,
48018
48071
  filters: { ...parsed.filters, ...extraFilters },
48019
48072
  include: parsed.include
@@ -48023,7 +48076,9 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
48023
48076
  findOpts.search = { term: parsed.search, columns: searchableColumns };
48024
48077
  }
48025
48078
  const result = await repo.findMany(findOpts);
48026
- const data = result.data.map((row) => fieldKeys.toLabels(row));
48079
+ const data = result.data.map(
48080
+ (row) => projectRow(row, typeName, projectors)
48081
+ );
48027
48082
  return c.json({ ...result, data });
48028
48083
  }
48029
48084
  );
@@ -48039,7 +48094,7 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
48039
48094
  404
48040
48095
  );
48041
48096
  }
48042
- const data = fieldKeys.toLabels(item);
48097
+ const data = projectRow(item, typeName, projectors);
48043
48098
  return c.json({ ok: true, data });
48044
48099
  }
48045
48100
  );
@@ -48092,7 +48147,7 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
48092
48147
  }
48093
48148
  }
48094
48149
  await applyMediaReferenceDelta(mergeMediaDeltas(...mediaDeltas), mediaRepo);
48095
- const data = fieldKeys.toLabels(item);
48150
+ const data = projectRow(item, typeName, projectors);
48096
48151
  return c.json({ ok: true, data }, 201);
48097
48152
  }
48098
48153
  );
@@ -48160,7 +48215,7 @@ function registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRe
48160
48215
  }
48161
48216
  }
48162
48217
  await applyMediaReferenceDelta(mergeMediaDeltas(...mediaDeltas), mediaRepo);
48163
- const data = fieldKeys.toLabels(updated);
48218
+ const data = projectRow(updated, typeName, projectors);
48164
48219
  return c.json({ ok: true, data });
48165
48220
  }
48166
48221
  );
@@ -49134,7 +49189,7 @@ function registerUserRoutes(app, db, requirePermission, requireHierarchy) {
49134
49189
  }
49135
49190
  var API_VERSION = (() => {
49136
49191
  try {
49137
- return "0.4.0";
49192
+ return "0.4.1";
49138
49193
  } catch {
49139
49194
  return "0.0.0";
49140
49195
  }
@@ -49289,7 +49344,7 @@ function whereFragment(conds) {
49289
49344
  return conds.length > 0 ? sql` WHERE ${sql.join(conds, sql` AND `)}` : sql``;
49290
49345
  }
49291
49346
  function createDrizzleContentRepository(db, tableName, options = {}) {
49292
- const { relations = {}, publishedRelations = false } = options;
49347
+ const { relations = {}, publishedRelations = false, sortableColumns } = options;
49293
49348
  function tableRaw() {
49294
49349
  return sql.raw(quoteIdent2(tableName));
49295
49350
  }
@@ -49327,8 +49382,9 @@ function createDrizzleContentRepository(db, tableName, options = {}) {
49327
49382
  sort_order = "asc",
49328
49383
  search
49329
49384
  } = opts;
49330
- if (!SORTABLE_FIELDS2.has(sort_by)) {
49331
- throw codeError("INVALID_SORT_FIELD", `'${sort_by}' is not sortable. Allowed: title, created_at, updated_at`);
49385
+ const allowed = sortableColumns ?? SORTABLE_FIELDS2;
49386
+ if (!allowed.has(sort_by)) {
49387
+ throw codeError("INVALID_SORT_FIELD", `'${sort_by}' is not sortable.`);
49332
49388
  }
49333
49389
  const offset = (page - 1) * per_page;
49334
49390
  const conds = buildConditions(published_only, filters, search);
@@ -49567,16 +49623,38 @@ function createCmsApp(options) {
49567
49623
  return result.rows[0]?.role ?? null;
49568
49624
  };
49569
49625
  const requireHierarchy = createHierarchyMiddleware(rolesRegistry, getUserRole);
49626
+ const fieldKeyMaps = Object.fromEntries([
49627
+ ...Object.entries(registry2.content_types).map(([typeName, ct2]) => [
49628
+ typeName,
49629
+ createFieldKeyMap(ct2.fields)
49630
+ ]),
49631
+ ...Object.entries(registry2.taxonomy_types).map(([typeName, tt2]) => [
49632
+ typeName,
49633
+ createFieldKeyMap(tt2.fields)
49634
+ ]),
49635
+ ...Object.entries(registry2.paragraph_types).map(([typeName, pt]) => [
49636
+ typeName,
49637
+ createFieldKeyMap(pt.fields)
49638
+ ])
49639
+ ]);
49640
+ const projectors = buildProjectors(registry2, fieldKeyMaps);
49641
+ const sortableColumnsFor = (typeName) => new Set(
49642
+ [...SORTABLE_FIELDS].map((label) => fieldKeyMaps[typeName].columnFor(label) ?? label)
49643
+ );
49570
49644
  const contentRepos = Object.fromEntries(
49571
49645
  Object.entries(registry2.content_types).map(([typeName, ct2]) => [
49572
49646
  typeName,
49573
- createDrizzleContentRepository(db, ct2.db.table_name)
49647
+ createDrizzleContentRepository(db, ct2.db.table_name, {
49648
+ sortableColumns: sortableColumnsFor(typeName)
49649
+ })
49574
49650
  ])
49575
49651
  );
49576
49652
  const taxonomyRepos = Object.fromEntries(
49577
49653
  Object.entries(registry2.taxonomy_types).map(([typeName, tt2]) => [
49578
49654
  typeName,
49579
- createDrizzleContentRepository(db, tt2.db.table_name)
49655
+ createDrizzleContentRepository(db, tt2.db.table_name, {
49656
+ sortableColumns: sortableColumnsFor(typeName)
49657
+ })
49580
49658
  ])
49581
49659
  );
49582
49660
  const repos = { ...contentRepos, ...taxonomyRepos };
@@ -49586,7 +49664,8 @@ function createCmsApp(options) {
49586
49664
  typeName,
49587
49665
  createDrizzleContentRepository(db, ct2.db.table_name, {
49588
49666
  relations: buildRelationsMap(ct2.fields, registry2),
49589
- publishedRelations: true
49667
+ publishedRelations: true,
49668
+ sortableColumns: sortableColumnsFor(typeName)
49590
49669
  })
49591
49670
  ])
49592
49671
  );
@@ -49595,7 +49674,8 @@ function createCmsApp(options) {
49595
49674
  typeName,
49596
49675
  createDrizzleContentRepository(db, tt2.db.table_name, {
49597
49676
  relations: buildRelationsMap(tt2.fields, registry2),
49598
- publishedRelations: true
49677
+ publishedRelations: true,
49678
+ sortableColumns: sortableColumnsFor(typeName)
49599
49679
  })
49600
49680
  ])
49601
49681
  );
@@ -49603,11 +49683,15 @@ function createCmsApp(options) {
49603
49683
  const graphqlRepos = Object.fromEntries([
49604
49684
  ...Object.entries(registry2.content_types).map(([typeName, ct2]) => [
49605
49685
  typeName,
49606
- createDrizzleContentRepository(db, ct2.db.table_name)
49686
+ createDrizzleContentRepository(db, ct2.db.table_name, {
49687
+ sortableColumns: sortableColumnsFor(typeName)
49688
+ })
49607
49689
  ]),
49608
49690
  ...Object.entries(registry2.taxonomy_types).map(([typeName, tt2]) => [
49609
49691
  typeName,
49610
- createDrizzleContentRepository(db, tt2.db.table_name)
49692
+ createDrizzleContentRepository(db, tt2.db.table_name, {
49693
+ sortableColumns: sortableColumnsFor(typeName)
49694
+ })
49611
49695
  ])
49612
49696
  ]);
49613
49697
  registerAuthRoutes(app, db);
@@ -49648,23 +49732,13 @@ function createCmsApp(options) {
49648
49732
  paths: {}
49649
49733
  })
49650
49734
  );
49651
- const fieldKeyMaps = Object.fromEntries([
49652
- ...Object.entries(registry2.content_types).map(([typeName, ct2]) => [
49653
- typeName,
49654
- createFieldKeyMap(ct2.fields)
49655
- ]),
49656
- ...Object.entries(registry2.taxonomy_types).map(([typeName, tt2]) => [
49657
- typeName,
49658
- createFieldKeyMap(tt2.fields)
49659
- ])
49660
- ]);
49661
- registerPublicContentRoutes(app, registry2, publicRepos, fieldKeyMaps, publicPaths, listRateLimit, programmaticResolver);
49735
+ registerPublicContentRoutes(app, registry2, publicRepos, projectors, publicPaths, listRateLimit, programmaticResolver);
49662
49736
  registerPublicMediaRoutes(app, mediaRepo, publicPaths, listRateLimit);
49663
49737
  if (options.graphql?.enabled) {
49664
49738
  const gqlOptions = options.graphql;
49665
49739
  let gqlHandler = null;
49666
49740
  let initError = null;
49667
- const ready = import("./handler-TPEULQ5W-5VGZ4FJU.js").then(({ createGraphQLHandler }) => {
49741
+ const ready = import("./handler-7LVYEU5C-ZAJVEGKT.js").then(({ createGraphQLHandler }) => {
49668
49742
  gqlHandler = createGraphQLHandler(registry2, graphqlRepos, fieldKeyMaps, programmaticResolver, db, gqlOptions);
49669
49743
  }).catch((err) => {
49670
49744
  initError = err;
@@ -49705,7 +49779,7 @@ function createCmsApp(options) {
49705
49779
  );
49706
49780
  registerSchemaRoute(app, registry2, db);
49707
49781
  registerUserRoutes(app, db, requirePermission, requireHierarchy);
49708
- registerAdminContentRoutes(app, registry2, repos, fieldKeyMaps, mediaRepo, requirePermission, db);
49782
+ registerAdminContentRoutes(app, registry2, repos, projectors, mediaRepo, requirePermission, db);
49709
49783
  registerAdminMediaRoutes(app, mediaRepo, storage, requirePermission, maxFileSize);
49710
49784
  return { prefix, app };
49711
49785
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobbykim/manguito-cms-cli",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "license": "MIT",
5
5
  "author": "Bobby Kim <bobby.sihun.kim@gmail.com>",
6
6
  "homepage": "https://github.com/bobbykim89/manguito-cms",
@@ -29,10 +29,10 @@
29
29
  "tsup": "^8.5.1",
30
30
  "typescript": "^6.0.3",
31
31
  "vite": "^8.1.3",
32
- "@bobbykim/manguito-cms-api": "0.4.0",
33
- "@bobbykim/manguito-cms-core": "0.3.0",
34
32
  "@bobbykim/manguito-cms-admin": "0.4.0",
35
- "@bobbykim/manguito-cms-db": "0.1.3"
33
+ "@bobbykim/manguito-cms-core": "0.3.0",
34
+ "@bobbykim/manguito-cms-db": "0.1.3",
35
+ "@bobbykim/manguito-cms-api": "0.4.1"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^25.9.5",