@bobbykim/manguito-cms-api 0.9.2 → 0.9.3
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/{chunk-GUZZQZSN.mjs → chunk-IFE2L4VM.mjs} +207 -46
- package/dist/chunk-IFE2L4VM.mjs.map +1 -0
- package/dist/{chunk-ITOSMGDT.mjs → chunk-IMDC3NGM.mjs} +2 -2
- package/dist/graphql/index.js +31 -16
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/index.mjs +2 -2
- package/dist/handler-N5IMQJBP.mjs +8 -0
- package/dist/index.js +349 -287
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +229 -320
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-GUZZQZSN.mjs.map +0 -1
- package/dist/handler-MFF32JB4.mjs +0 -8
- /package/dist/{chunk-ITOSMGDT.mjs.map → chunk-IMDC3NGM.mjs.map} +0 -0
- /package/dist/{handler-MFF32JB4.mjs.map → handler-N5IMQJBP.mjs.map} +0 -0
package/dist/graphql/index.js
CHANGED
|
@@ -621,15 +621,30 @@ var import_dataloader = __toESM(require("dataloader"));
|
|
|
621
621
|
|
|
622
622
|
// src/relations.ts
|
|
623
623
|
var import_node_crypto = __toESM(require("crypto"));
|
|
624
|
+
var import_drizzle_orm2 = require("drizzle-orm");
|
|
625
|
+
var import_manguito_cms_core3 = require("@bobbykim/manguito-cms-core");
|
|
626
|
+
|
|
627
|
+
// src/relation-input.ts
|
|
624
628
|
var import_drizzle_orm = require("drizzle-orm");
|
|
625
629
|
var import_manguito_cms_core2 = require("@bobbykim/manguito-cms-core");
|
|
630
|
+
|
|
631
|
+
// src/relations.ts
|
|
626
632
|
function quoteIdent(name) {
|
|
627
633
|
if (!/^[a-z][a-z0-9_-]*$/.test(name)) throw new Error(`Unsafe identifier: ${name}`);
|
|
628
634
|
return `"${name}"`;
|
|
629
635
|
}
|
|
630
636
|
function junctionOrderBy(junction) {
|
|
631
|
-
const right =
|
|
632
|
-
return junction.order_column ?
|
|
637
|
+
const right = import_drizzle_orm2.sql.raw(quoteIdent(junction.right_column));
|
|
638
|
+
return junction.order_column ? import_drizzle_orm2.sql` ORDER BY "order" ASC, ${right} ASC` : import_drizzle_orm2.sql` ORDER BY ${right} ASC`;
|
|
639
|
+
}
|
|
640
|
+
function firstOfEach(items, key) {
|
|
641
|
+
const seen = /* @__PURE__ */ new Set();
|
|
642
|
+
return items.filter((item) => {
|
|
643
|
+
const k = key(item);
|
|
644
|
+
if (seen.has(k)) return false;
|
|
645
|
+
seen.add(k);
|
|
646
|
+
return true;
|
|
647
|
+
});
|
|
633
648
|
}
|
|
634
649
|
function oneOrMany(cardinality, list) {
|
|
635
650
|
return cardinality === "one" ? list[0] ?? null : list;
|
|
@@ -647,7 +662,7 @@ function buildRelationsMap(fields, registry) {
|
|
|
647
662
|
relations[field.name] = {
|
|
648
663
|
type: "paragraph",
|
|
649
664
|
table: pType.db.table_name,
|
|
650
|
-
cardinality: (0,
|
|
665
|
+
cardinality: (0, import_manguito_cms_core3.relationCardinality)(field) ?? "many"
|
|
651
666
|
};
|
|
652
667
|
} else if (field.field_type === "reference") {
|
|
653
668
|
if (!field.db_column) continue;
|
|
@@ -690,9 +705,9 @@ async function resolveRelationField(db, rows, fieldName, rel, cache, publishedOn
|
|
|
690
705
|
const batch = [...new Set(rows)];
|
|
691
706
|
if (rel.type === "paragraph") {
|
|
692
707
|
const parentIds = batch.map((r) => r["id"]);
|
|
693
|
-
const inList =
|
|
708
|
+
const inList = import_drizzle_orm2.sql.join(parentIds.map((id) => import_drizzle_orm2.sql`${id}`), import_drizzle_orm2.sql`, `);
|
|
694
709
|
const result = await db.execute(
|
|
695
|
-
|
|
710
|
+
import_drizzle_orm2.sql`SELECT * FROM ${import_drizzle_orm2.sql.raw(quoteIdent(rel.table))} WHERE parent_id IN (${inList}) AND parent_field = ${fieldName} ORDER BY "order" ASC, id ASC`
|
|
696
711
|
);
|
|
697
712
|
const byParent = groupBy(result.rows, "parent_id");
|
|
698
713
|
for (const row of batch) {
|
|
@@ -709,10 +724,10 @@ async function resolveRelationField(db, rows, fieldName, rel, cache, publishedOn
|
|
|
709
724
|
const unique = [...new Set(fkValues)];
|
|
710
725
|
const uncached = unique.filter((id) => !cache.has(`${rel.table}:${id}`));
|
|
711
726
|
if (uncached.length > 0) {
|
|
712
|
-
const inList =
|
|
713
|
-
const publishedCond = publishedOnly ?
|
|
727
|
+
const inList = import_drizzle_orm2.sql.join(uncached.map((id) => import_drizzle_orm2.sql`${id}`), import_drizzle_orm2.sql`, `);
|
|
728
|
+
const publishedCond = publishedOnly ? import_drizzle_orm2.sql` AND published = true` : import_drizzle_orm2.sql``;
|
|
714
729
|
const result = await db.execute(
|
|
715
|
-
|
|
730
|
+
import_drizzle_orm2.sql`SELECT * FROM ${import_drizzle_orm2.sql.raw(quoteIdent(rel.table))} WHERE id IN (${inList})${publishedCond}`
|
|
716
731
|
);
|
|
717
732
|
for (const item of result.rows) {
|
|
718
733
|
cache.set(`${rel.table}:${item["id"]}`, item);
|
|
@@ -724,18 +739,18 @@ async function resolveRelationField(db, rows, fieldName, rel, cache, publishedOn
|
|
|
724
739
|
}
|
|
725
740
|
} else if (rel.type === "junction") {
|
|
726
741
|
const parentIds = batch.map((r) => r["id"]);
|
|
727
|
-
const inList =
|
|
742
|
+
const inList = import_drizzle_orm2.sql.join(parentIds.map((id) => import_drizzle_orm2.sql`${id}`), import_drizzle_orm2.sql`, `);
|
|
728
743
|
const junctionResult = await db.execute(
|
|
729
|
-
|
|
744
|
+
import_drizzle_orm2.sql`SELECT * FROM ${import_drizzle_orm2.sql.raw(quoteIdent(rel.junction_table))} WHERE ${import_drizzle_orm2.sql.raw(quoteIdent(rel.left_column))} IN (${inList})${junctionOrderBy(rel)}`
|
|
730
745
|
);
|
|
731
746
|
const jRows = junctionResult.rows;
|
|
732
747
|
const rightIds = [...new Set(jRows.map((r) => r[rel.right_column]))];
|
|
733
748
|
const uncached = rightIds.filter((id) => !cache.has(`${rel.table}:${id}`));
|
|
734
749
|
if (uncached.length > 0) {
|
|
735
|
-
const rightInList =
|
|
736
|
-
const publishedCond = publishedOnly ?
|
|
750
|
+
const rightInList = import_drizzle_orm2.sql.join(uncached.map((id) => import_drizzle_orm2.sql`${id}`), import_drizzle_orm2.sql`, `);
|
|
751
|
+
const publishedCond = publishedOnly ? import_drizzle_orm2.sql` AND published = true` : import_drizzle_orm2.sql``;
|
|
737
752
|
const entitiesResult = await db.execute(
|
|
738
|
-
|
|
753
|
+
import_drizzle_orm2.sql`SELECT * FROM ${import_drizzle_orm2.sql.raw(quoteIdent(rel.table))} WHERE id IN (${rightInList})${publishedCond}`
|
|
739
754
|
);
|
|
740
755
|
for (const item of entitiesResult.rows) {
|
|
741
756
|
cache.set(`${rel.table}:${item["id"]}`, item);
|
|
@@ -743,7 +758,7 @@ async function resolveRelationField(db, rows, fieldName, rel, cache, publishedOn
|
|
|
743
758
|
}
|
|
744
759
|
const byLeft = groupBy(jRows, rel.left_column);
|
|
745
760
|
for (const row of batch) {
|
|
746
|
-
const jEntries = byLeft[row["id"]] ?? [];
|
|
761
|
+
const jEntries = firstOfEach(byLeft[row["id"]] ?? [], (jr) => jr[rel.right_column]);
|
|
747
762
|
row[fieldName] = jEntries.map((jr) => cache.get(`${rel.table}:${jr[rel.right_column]}`)).filter(Boolean);
|
|
748
763
|
}
|
|
749
764
|
} else if (rel.type === "media") {
|
|
@@ -757,8 +772,8 @@ async function resolveRelationField(db, rows, fieldName, rel, cache, publishedOn
|
|
|
757
772
|
const unique = [...new Set(fkValues)];
|
|
758
773
|
const uncached = unique.filter((id) => !cache.has(`media:${id}`));
|
|
759
774
|
if (uncached.length > 0) {
|
|
760
|
-
const inList =
|
|
761
|
-
const result = await db.execute(
|
|
775
|
+
const inList = import_drizzle_orm2.sql.join(uncached.map((id) => import_drizzle_orm2.sql`${id}`), import_drizzle_orm2.sql`, `);
|
|
776
|
+
const result = await db.execute(import_drizzle_orm2.sql`SELECT * FROM "media" WHERE id IN (${inList})`);
|
|
762
777
|
for (const item of result.rows) {
|
|
763
778
|
cache.set(`media:${item["id"]}`, item);
|
|
764
779
|
}
|