sanity-plugin-singleton-management 1.1.0 → 1.1.1
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.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/structure/index.ts +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
let sanity = require("sanity"),
|
|
2
|
+
let sanity = require("sanity"), _sanity_icons_Document = require("@sanity/icons/Document");
|
|
3
3
|
const getSingletonDocuments = (schema) => {
|
|
4
4
|
if (schema?._original?.types) return schema._original.types.filter(({ options }) => options?.singleton).map((s) => s.name);
|
|
5
5
|
}, getIsSingleton = (schema, schemaType) => !schema?._original?.types || !schemaType ? !1 : schema._original.types.find(({ name }) => name === schemaType)?.options?.singleton ?? !1, actions = (prev, { schema, schemaType }) => getIsSingleton(schema, schemaType) ? prev.filter(({ action }) => [
|
|
@@ -19,7 +19,7 @@ const getSingletonDocuments = (schema) => {
|
|
|
19
19
|
if (!config?.S || !config?.type || !config.context) throw Error("S, context, and type must be provided to singletonDocumentListItem. Example: singletonDocumentListItem({ S, context, type: 'product' })");
|
|
20
20
|
let { S, type, title, icon, id, context } = config, { schema } = context;
|
|
21
21
|
if (!schema) throw Error("Schema is required in context for singletonDocumentListItem");
|
|
22
|
-
let schemaType = schema.get(type), listTitle = title ?? schemaType?.title ?? type, listIcon = icon ?? schemaType?.icon ??
|
|
22
|
+
let schemaType = schema.get(type), listTitle = title ?? schemaType?.title ?? type, listIcon = icon ?? schemaType?.icon ?? _sanity_icons_Document.DocumentIcon, listId = id ?? type;
|
|
23
23
|
return S.listItem().title(listTitle).icon(listIcon).child(S.document().schemaType(type).title(listTitle).id(listId));
|
|
24
24
|
}, singletonDocumentListItems = (config) => {
|
|
25
25
|
if (!config.S || !config.context) throw Error("S and context must be provided to singletonDocumentListItems. Example: singletonDocumentListItems({ S, context })");
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["definePlugin","DocumentIcon"],"sources":["../src/helpers/index.ts","../src/actions.ts","../src/newDocumentOptions.ts","../src/pluginConfig.ts","../src/structure/index.ts"],"sourcesContent":["import { Schema } from \"sanity\";\n\nimport { SingletonPluginOptions } from \"../types\";\n\nexport const getSingletonDocuments = (schema: Schema): string[] | undefined => {\n if (!schema?._original?.types) {\n return undefined;\n }\n\n return schema._original.types\n .filter(({ options }) => (options as SingletonPluginOptions)?.singleton)\n .map((s: { name: string }) => s.name);\n};\n\nexport const getIsSingleton = (schema: Schema, schemaType: string): boolean => {\n if (!schema?._original?.types || !schemaType) {\n return false;\n }\n\n const documentSchema = schema._original.types.find(\n ({ name }) => name === schemaType,\n );\n\n return (\n (documentSchema?.options as SingletonPluginOptions)?.singleton ?? false\n );\n};\n","import { DocumentActionsContext, DocumentActionsResolver } from \"sanity\";\n\nimport { getIsSingleton } from \"./helpers\";\n\nexport const actions: DocumentActionsResolver = (\n prev,\n { schema, schemaType }: DocumentActionsContext,\n) => {\n return getIsSingleton(schema, schemaType)\n ? prev.filter(({ action }) =>\n [\"publish\", \"discardChanges\", \"restore\"].includes(action as string),\n )\n : prev;\n};\n","import { NewDocumentOptionsContext, NewDocumentOptionsResolver } from \"sanity\";\n\nimport { getSingletonDocuments } from \"./helpers\";\n\nexport const newDocumentOptions: NewDocumentOptionsResolver = (\n prev,\n { schema, creationContext: { type, schemaType } }: NewDocumentOptionsContext,\n) => {\n const singletons = getSingletonDocuments(schema);\n\n const filterSingletons = ({ templateId }: { templateId: string }) =>\n !singletons?.includes(templateId);\n\n if (type === \"global\") return prev.filter(filterSingletons);\n\n return singletons?.includes(schemaType ?? \"\")\n ? prev.filter(filterSingletons)\n : prev;\n};\n","import { definePlugin } from \"sanity\";\n\nimport { actions } from \"./actions\";\nimport { newDocumentOptions } from \"./newDocumentOptions\";\n\nexport const singletonTools = definePlugin(() => {\n return {\n name: \"singleton-tools\",\n document: {\n newDocumentOptions,\n actions,\n },\n };\n});\n","import { DocumentIcon } from \"@sanity/icons\";\nimport type { ListItemBuilder } from \"sanity/structure\";\n\nimport { getSingletonDocuments } from \"../helpers\";\nimport {\n SingletonDocumentListItemConfig,\n SingletonPluginListItemsConfig,\n} from \"../types\";\n\nconst singletonDocumentListItem = (\n config: SingletonDocumentListItemConfig,\n): ListItemBuilder => {\n if (!config?.S || !config?.type || !config.context) {\n throw new Error(\n \"S, context, and type must be provided to singletonDocumentListItem. \" +\n \"Example: singletonDocumentListItem({ S, context, type: 'product' })\",\n );\n }\n const { S, type, title, icon, id, context } = config;\n const { schema } = context;\n\n if (!schema) {\n throw new Error(\n \"Schema is required in context for singletonDocumentListItem\",\n );\n }\n\n const schemaType = schema.get(type);\n const listTitle = title ?? schemaType?.title ?? type;\n const listIcon = icon ?? schemaType?.icon ?? DocumentIcon;\n const listId = id ?? type;\n\n return S.listItem()\n .title(listTitle)\n .icon(listIcon)\n .child(S.document().schemaType(type).title(listTitle).id(listId));\n};\n\nconst singletonDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to singletonDocumentListItems. \" +\n \"Example: singletonDocumentListItems({ S, context })\",\n );\n }\n\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return (\n singletons?.map((schemaType) =>\n singletonDocumentListItem({ S, context, type: schemaType }),\n ) || []\n );\n};\n\nconst filteredDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to filteredDocumentListItems. \" +\n \"Example: filteredDocumentListItems({ S, context })\",\n );\n }\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return S.documentTypeListItems().filter(\n (type) => !singletons || !singletons.includes(type.getId() as string),\n );\n};\n\nexport {\n filteredDocumentListItems,\n singletonDocumentListItem,\n singletonDocumentListItems,\n};\n"],"mappings":";;AAIA,MAAa,yBAAyB,WAAyC;CACxE,YAAQ,WAAW,OAIxB,OAAO,OAAO,UAAU,MACrB,QAAQ,EAAE,cAAe,SAAoC,SAAS,CAAC,CACvE,KAAK,MAAwB,EAAE,IAAI;AACxC,GAEa,kBAAkB,QAAgB,eACzC,CAAC,QAAQ,WAAW,SAAS,CAAC,aACzB,KAGc,OAAO,UAAU,MAAM,MAC3C,EAAE,WAAW,SAAS,UAIT,CAAC,EAAE,SAAoC,aAAa,ICpBzD,WACX,MACA,EAAE,QAAQ,iBAEH,eAAe,QAAQ,UAAU,IACpC,KAAK,QAAQ,EAAE,aACb;CAAC;CAAW;CAAkB;AAAS,CAAC,CAAC,SAAS,MAAgB,CACpE,IACA,MCRO,sBACX,MACA,EAAE,QAAQ,iBAAiB,EAAE,MAAM,mBAChC;CACH,IAAM,aAAa,sBAAsB,MAAM,GAEzC,oBAAoB,EAAE,iBAC1B,CAAC,YAAY,SAAS,UAAU;CAIlC,OAFI,SAAS,YAEN,YAAY,SAAS,cAAc,EAAE,IAFd,KAAK,OAAO,gBAAgB,IAItD;AACN,GCba,kBAAA,GAAiBA,OAAAA,aAAAA,QACrB;CACL,MAAM;CACN,UAAU;EACR;EACA;CACF;AACF,EACD,GCJK,6BACJ,WACoB;CACpB,IAAI,CAAC,QAAQ,KAAK,CAAC,QAAQ,QAAQ,CAAC,OAAO,SACzC,MAAU,MACR,yIAEF;CAEF,IAAM,EAAE,GAAG,MAAM,OAAO,MAAM,IAAI,YAAY,QACxC,EAAE,WAAW;CAEnB,IAAI,CAAC,QACH,MAAU,MACR,6DACF;CAGF,IAAM,aAAa,OAAO,IAAI,IAAI,GAC5B,YAAY,SAAS,YAAY,SAAS,MAC1C,WAAW,QAAQ,YAAY,QAAQC,
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["definePlugin","DocumentIcon"],"sources":["../src/helpers/index.ts","../src/actions.ts","../src/newDocumentOptions.ts","../src/pluginConfig.ts","../src/structure/index.ts"],"sourcesContent":["import { Schema } from \"sanity\";\n\nimport { SingletonPluginOptions } from \"../types\";\n\nexport const getSingletonDocuments = (schema: Schema): string[] | undefined => {\n if (!schema?._original?.types) {\n return undefined;\n }\n\n return schema._original.types\n .filter(({ options }) => (options as SingletonPluginOptions)?.singleton)\n .map((s: { name: string }) => s.name);\n};\n\nexport const getIsSingleton = (schema: Schema, schemaType: string): boolean => {\n if (!schema?._original?.types || !schemaType) {\n return false;\n }\n\n const documentSchema = schema._original.types.find(\n ({ name }) => name === schemaType,\n );\n\n return (\n (documentSchema?.options as SingletonPluginOptions)?.singleton ?? false\n );\n};\n","import { DocumentActionsContext, DocumentActionsResolver } from \"sanity\";\n\nimport { getIsSingleton } from \"./helpers\";\n\nexport const actions: DocumentActionsResolver = (\n prev,\n { schema, schemaType }: DocumentActionsContext,\n) => {\n return getIsSingleton(schema, schemaType)\n ? prev.filter(({ action }) =>\n [\"publish\", \"discardChanges\", \"restore\"].includes(action as string),\n )\n : prev;\n};\n","import { NewDocumentOptionsContext, NewDocumentOptionsResolver } from \"sanity\";\n\nimport { getSingletonDocuments } from \"./helpers\";\n\nexport const newDocumentOptions: NewDocumentOptionsResolver = (\n prev,\n { schema, creationContext: { type, schemaType } }: NewDocumentOptionsContext,\n) => {\n const singletons = getSingletonDocuments(schema);\n\n const filterSingletons = ({ templateId }: { templateId: string }) =>\n !singletons?.includes(templateId);\n\n if (type === \"global\") return prev.filter(filterSingletons);\n\n return singletons?.includes(schemaType ?? \"\")\n ? prev.filter(filterSingletons)\n : prev;\n};\n","import { definePlugin } from \"sanity\";\n\nimport { actions } from \"./actions\";\nimport { newDocumentOptions } from \"./newDocumentOptions\";\n\nexport const singletonTools = definePlugin(() => {\n return {\n name: \"singleton-tools\",\n document: {\n newDocumentOptions,\n actions,\n },\n };\n});\n","import { DocumentIcon } from \"@sanity/icons/Document\";\nimport type { ListItemBuilder } from \"sanity/structure\";\n\nimport { getSingletonDocuments } from \"../helpers\";\nimport {\n SingletonDocumentListItemConfig,\n SingletonPluginListItemsConfig,\n} from \"../types\";\n\nconst singletonDocumentListItem = (\n config: SingletonDocumentListItemConfig,\n): ListItemBuilder => {\n if (!config?.S || !config?.type || !config.context) {\n throw new Error(\n \"S, context, and type must be provided to singletonDocumentListItem. \" +\n \"Example: singletonDocumentListItem({ S, context, type: 'product' })\",\n );\n }\n const { S, type, title, icon, id, context } = config;\n const { schema } = context;\n\n if (!schema) {\n throw new Error(\n \"Schema is required in context for singletonDocumentListItem\",\n );\n }\n\n const schemaType = schema.get(type);\n const listTitle = title ?? schemaType?.title ?? type;\n const listIcon = icon ?? schemaType?.icon ?? DocumentIcon;\n const listId = id ?? type;\n\n return S.listItem()\n .title(listTitle)\n .icon(listIcon)\n .child(S.document().schemaType(type).title(listTitle).id(listId));\n};\n\nconst singletonDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to singletonDocumentListItems. \" +\n \"Example: singletonDocumentListItems({ S, context })\",\n );\n }\n\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return (\n singletons?.map((schemaType) =>\n singletonDocumentListItem({ S, context, type: schemaType }),\n ) || []\n );\n};\n\nconst filteredDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to filteredDocumentListItems. \" +\n \"Example: filteredDocumentListItems({ S, context })\",\n );\n }\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return S.documentTypeListItems().filter(\n (type) => !singletons || !singletons.includes(type.getId() as string),\n );\n};\n\nexport {\n filteredDocumentListItems,\n singletonDocumentListItem,\n singletonDocumentListItems,\n};\n"],"mappings":";;AAIA,MAAa,yBAAyB,WAAyC;CACxE,YAAQ,WAAW,OAIxB,OAAO,OAAO,UAAU,MACrB,QAAQ,EAAE,cAAe,SAAoC,SAAS,CAAC,CACvE,KAAK,MAAwB,EAAE,IAAI;AACxC,GAEa,kBAAkB,QAAgB,eACzC,CAAC,QAAQ,WAAW,SAAS,CAAC,aACzB,KAGc,OAAO,UAAU,MAAM,MAC3C,EAAE,WAAW,SAAS,UAIT,CAAC,EAAE,SAAoC,aAAa,ICpBzD,WACX,MACA,EAAE,QAAQ,iBAEH,eAAe,QAAQ,UAAU,IACpC,KAAK,QAAQ,EAAE,aACb;CAAC;CAAW;CAAkB;AAAS,CAAC,CAAC,SAAS,MAAgB,CACpE,IACA,MCRO,sBACX,MACA,EAAE,QAAQ,iBAAiB,EAAE,MAAM,mBAChC;CACH,IAAM,aAAa,sBAAsB,MAAM,GAEzC,oBAAoB,EAAE,iBAC1B,CAAC,YAAY,SAAS,UAAU;CAIlC,OAFI,SAAS,YAEN,YAAY,SAAS,cAAc,EAAE,IAFd,KAAK,OAAO,gBAAgB,IAItD;AACN,GCba,kBAAA,GAAiBA,OAAAA,aAAAA,QACrB;CACL,MAAM;CACN,UAAU;EACR;EACA;CACF;AACF,EACD,GCJK,6BACJ,WACoB;CACpB,IAAI,CAAC,QAAQ,KAAK,CAAC,QAAQ,QAAQ,CAAC,OAAO,SACzC,MAAU,MACR,yIAEF;CAEF,IAAM,EAAE,GAAG,MAAM,OAAO,MAAM,IAAI,YAAY,QACxC,EAAE,WAAW;CAEnB,IAAI,CAAC,QACH,MAAU,MACR,6DACF;CAGF,IAAM,aAAa,OAAO,IAAI,IAAI,GAC5B,YAAY,SAAS,YAAY,SAAS,MAC1C,WAAW,QAAQ,YAAY,QAAQC,uBAAAA,cACvC,SAAS,MAAM;CAErB,OAAO,EAAE,SAAS,CAAC,CAChB,MAAM,SAAS,CAAC,CAChB,KAAK,QAAQ,CAAC,CACd,MAAM,EAAE,SAAS,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;AACpE,GAEM,8BACJ,WACsB;CACtB,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,SACvB,MAAU,MACR,mHAEF;CAGF,IAAM,EAAE,GAAG,YAAY,QACjB,EAAE,WAAW;CAInB,OAFmB,sBAAsB,MAG9B,CAAC,EAAE,KAAK,eACf,0BAA0B;EAAE;EAAG;EAAS,MAAM;CAAW,CAAC,CAC5D,KAAK,CAAC;AAEV,GAEM,6BACJ,WACsB;CACtB,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,SACvB,MAAU,MACR,iHAEF;CAEF,IAAM,EAAE,GAAG,YAAY,QACjB,EAAE,WAAW,SAEb,aAAa,sBAAsB,MAAM;CAE/C,OAAO,EAAE,sBAAsB,CAAC,CAAC,QAC9B,SAAS,CAAC,cAAc,CAAC,WAAW,SAAS,KAAK,MAAM,CAAW,CACtE;AACF"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { definePlugin } from "sanity";
|
|
2
|
-
import { DocumentIcon } from "@sanity/icons";
|
|
2
|
+
import { DocumentIcon } from "@sanity/icons/Document";
|
|
3
3
|
const getSingletonDocuments = (schema) => {
|
|
4
4
|
if (schema?._original?.types) return schema._original.types.filter(({ options }) => options?.singleton).map((s) => s.name);
|
|
5
5
|
}, getIsSingleton = (schema, schemaType) => !schema?._original?.types || !schemaType ? !1 : schema._original.types.find(({ name }) => name === schemaType)?.options?.singleton ?? !1, actions = (prev, { schema, schemaType }) => getIsSingleton(schema, schemaType) ? prev.filter(({ action }) => [
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/helpers/index.ts","../src/actions.ts","../src/newDocumentOptions.ts","../src/pluginConfig.ts","../src/structure/index.ts"],"sourcesContent":["import { Schema } from \"sanity\";\n\nimport { SingletonPluginOptions } from \"../types\";\n\nexport const getSingletonDocuments = (schema: Schema): string[] | undefined => {\n if (!schema?._original?.types) {\n return undefined;\n }\n\n return schema._original.types\n .filter(({ options }) => (options as SingletonPluginOptions)?.singleton)\n .map((s: { name: string }) => s.name);\n};\n\nexport const getIsSingleton = (schema: Schema, schemaType: string): boolean => {\n if (!schema?._original?.types || !schemaType) {\n return false;\n }\n\n const documentSchema = schema._original.types.find(\n ({ name }) => name === schemaType,\n );\n\n return (\n (documentSchema?.options as SingletonPluginOptions)?.singleton ?? false\n );\n};\n","import { DocumentActionsContext, DocumentActionsResolver } from \"sanity\";\n\nimport { getIsSingleton } from \"./helpers\";\n\nexport const actions: DocumentActionsResolver = (\n prev,\n { schema, schemaType }: DocumentActionsContext,\n) => {\n return getIsSingleton(schema, schemaType)\n ? prev.filter(({ action }) =>\n [\"publish\", \"discardChanges\", \"restore\"].includes(action as string),\n )\n : prev;\n};\n","import { NewDocumentOptionsContext, NewDocumentOptionsResolver } from \"sanity\";\n\nimport { getSingletonDocuments } from \"./helpers\";\n\nexport const newDocumentOptions: NewDocumentOptionsResolver = (\n prev,\n { schema, creationContext: { type, schemaType } }: NewDocumentOptionsContext,\n) => {\n const singletons = getSingletonDocuments(schema);\n\n const filterSingletons = ({ templateId }: { templateId: string }) =>\n !singletons?.includes(templateId);\n\n if (type === \"global\") return prev.filter(filterSingletons);\n\n return singletons?.includes(schemaType ?? \"\")\n ? prev.filter(filterSingletons)\n : prev;\n};\n","import { definePlugin } from \"sanity\";\n\nimport { actions } from \"./actions\";\nimport { newDocumentOptions } from \"./newDocumentOptions\";\n\nexport const singletonTools = definePlugin(() => {\n return {\n name: \"singleton-tools\",\n document: {\n newDocumentOptions,\n actions,\n },\n };\n});\n","import { DocumentIcon } from \"@sanity/icons\";\nimport type { ListItemBuilder } from \"sanity/structure\";\n\nimport { getSingletonDocuments } from \"../helpers\";\nimport {\n SingletonDocumentListItemConfig,\n SingletonPluginListItemsConfig,\n} from \"../types\";\n\nconst singletonDocumentListItem = (\n config: SingletonDocumentListItemConfig,\n): ListItemBuilder => {\n if (!config?.S || !config?.type || !config.context) {\n throw new Error(\n \"S, context, and type must be provided to singletonDocumentListItem. \" +\n \"Example: singletonDocumentListItem({ S, context, type: 'product' })\",\n );\n }\n const { S, type, title, icon, id, context } = config;\n const { schema } = context;\n\n if (!schema) {\n throw new Error(\n \"Schema is required in context for singletonDocumentListItem\",\n );\n }\n\n const schemaType = schema.get(type);\n const listTitle = title ?? schemaType?.title ?? type;\n const listIcon = icon ?? schemaType?.icon ?? DocumentIcon;\n const listId = id ?? type;\n\n return S.listItem()\n .title(listTitle)\n .icon(listIcon)\n .child(S.document().schemaType(type).title(listTitle).id(listId));\n};\n\nconst singletonDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to singletonDocumentListItems. \" +\n \"Example: singletonDocumentListItems({ S, context })\",\n );\n }\n\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return (\n singletons?.map((schemaType) =>\n singletonDocumentListItem({ S, context, type: schemaType }),\n ) || []\n );\n};\n\nconst filteredDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to filteredDocumentListItems. \" +\n \"Example: filteredDocumentListItems({ S, context })\",\n );\n }\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return S.documentTypeListItems().filter(\n (type) => !singletons || !singletons.includes(type.getId() as string),\n );\n};\n\nexport {\n filteredDocumentListItems,\n singletonDocumentListItem,\n singletonDocumentListItems,\n};\n"],"mappings":";;AAIA,MAAa,yBAAyB,WAAyC;CACxE,YAAQ,WAAW,OAIxB,OAAO,OAAO,UAAU,MACrB,QAAQ,EAAE,cAAe,SAAoC,SAAS,CAAC,CACvE,KAAK,MAAwB,EAAE,IAAI;AACxC,GAEa,kBAAkB,QAAgB,eACzC,CAAC,QAAQ,WAAW,SAAS,CAAC,aACzB,KAGc,OAAO,UAAU,MAAM,MAC3C,EAAE,WAAW,SAAS,UAIT,CAAC,EAAE,SAAoC,aAAa,ICpBzD,WACX,MACA,EAAE,QAAQ,iBAEH,eAAe,QAAQ,UAAU,IACpC,KAAK,QAAQ,EAAE,aACb;CAAC;CAAW;CAAkB;AAAS,CAAC,CAAC,SAAS,MAAgB,CACpE,IACA,MCRO,sBACX,MACA,EAAE,QAAQ,iBAAiB,EAAE,MAAM,mBAChC;CACH,IAAM,aAAa,sBAAsB,MAAM,GAEzC,oBAAoB,EAAE,iBAC1B,CAAC,YAAY,SAAS,UAAU;CAIlC,OAFI,SAAS,YAEN,YAAY,SAAS,cAAc,EAAE,IAFd,KAAK,OAAO,gBAAgB,IAItD;AACN,GCba,iBAAiB,oBACrB;CACL,MAAM;CACN,UAAU;EACR;EACA;CACF;AACF,EACD,GCJK,6BACJ,WACoB;CACpB,IAAI,CAAC,QAAQ,KAAK,CAAC,QAAQ,QAAQ,CAAC,OAAO,SACzC,MAAU,MACR,yIAEF;CAEF,IAAM,EAAE,GAAG,MAAM,OAAO,MAAM,IAAI,YAAY,QACxC,EAAE,WAAW;CAEnB,IAAI,CAAC,QACH,MAAU,MACR,6DACF;CAGF,IAAM,aAAa,OAAO,IAAI,IAAI,GAC5B,YAAY,SAAS,YAAY,SAAS,MAC1C,WAAW,QAAQ,YAAY,QAAQ,cACvC,SAAS,MAAM;CAErB,OAAO,EAAE,SAAS,CAAC,CAChB,MAAM,SAAS,CAAC,CAChB,KAAK,QAAQ,CAAC,CACd,MAAM,EAAE,SAAS,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;AACpE,GAEM,8BACJ,WACsB;CACtB,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,SACvB,MAAU,MACR,mHAEF;CAGF,IAAM,EAAE,GAAG,YAAY,QACjB,EAAE,WAAW;CAInB,OAFmB,sBAAsB,MAG9B,CAAC,EAAE,KAAK,eACf,0BAA0B;EAAE;EAAG;EAAS,MAAM;CAAW,CAAC,CAC5D,KAAK,CAAC;AAEV,GAEM,6BACJ,WACsB;CACtB,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,SACvB,MAAU,MACR,iHAEF;CAEF,IAAM,EAAE,GAAG,YAAY,QACjB,EAAE,WAAW,SAEb,aAAa,sBAAsB,MAAM;CAE/C,OAAO,EAAE,sBAAsB,CAAC,CAAC,QAC9B,SAAS,CAAC,cAAc,CAAC,WAAW,SAAS,KAAK,MAAM,CAAW,CACtE;AACF"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/helpers/index.ts","../src/actions.ts","../src/newDocumentOptions.ts","../src/pluginConfig.ts","../src/structure/index.ts"],"sourcesContent":["import { Schema } from \"sanity\";\n\nimport { SingletonPluginOptions } from \"../types\";\n\nexport const getSingletonDocuments = (schema: Schema): string[] | undefined => {\n if (!schema?._original?.types) {\n return undefined;\n }\n\n return schema._original.types\n .filter(({ options }) => (options as SingletonPluginOptions)?.singleton)\n .map((s: { name: string }) => s.name);\n};\n\nexport const getIsSingleton = (schema: Schema, schemaType: string): boolean => {\n if (!schema?._original?.types || !schemaType) {\n return false;\n }\n\n const documentSchema = schema._original.types.find(\n ({ name }) => name === schemaType,\n );\n\n return (\n (documentSchema?.options as SingletonPluginOptions)?.singleton ?? false\n );\n};\n","import { DocumentActionsContext, DocumentActionsResolver } from \"sanity\";\n\nimport { getIsSingleton } from \"./helpers\";\n\nexport const actions: DocumentActionsResolver = (\n prev,\n { schema, schemaType }: DocumentActionsContext,\n) => {\n return getIsSingleton(schema, schemaType)\n ? prev.filter(({ action }) =>\n [\"publish\", \"discardChanges\", \"restore\"].includes(action as string),\n )\n : prev;\n};\n","import { NewDocumentOptionsContext, NewDocumentOptionsResolver } from \"sanity\";\n\nimport { getSingletonDocuments } from \"./helpers\";\n\nexport const newDocumentOptions: NewDocumentOptionsResolver = (\n prev,\n { schema, creationContext: { type, schemaType } }: NewDocumentOptionsContext,\n) => {\n const singletons = getSingletonDocuments(schema);\n\n const filterSingletons = ({ templateId }: { templateId: string }) =>\n !singletons?.includes(templateId);\n\n if (type === \"global\") return prev.filter(filterSingletons);\n\n return singletons?.includes(schemaType ?? \"\")\n ? prev.filter(filterSingletons)\n : prev;\n};\n","import { definePlugin } from \"sanity\";\n\nimport { actions } from \"./actions\";\nimport { newDocumentOptions } from \"./newDocumentOptions\";\n\nexport const singletonTools = definePlugin(() => {\n return {\n name: \"singleton-tools\",\n document: {\n newDocumentOptions,\n actions,\n },\n };\n});\n","import { DocumentIcon } from \"@sanity/icons/Document\";\nimport type { ListItemBuilder } from \"sanity/structure\";\n\nimport { getSingletonDocuments } from \"../helpers\";\nimport {\n SingletonDocumentListItemConfig,\n SingletonPluginListItemsConfig,\n} from \"../types\";\n\nconst singletonDocumentListItem = (\n config: SingletonDocumentListItemConfig,\n): ListItemBuilder => {\n if (!config?.S || !config?.type || !config.context) {\n throw new Error(\n \"S, context, and type must be provided to singletonDocumentListItem. \" +\n \"Example: singletonDocumentListItem({ S, context, type: 'product' })\",\n );\n }\n const { S, type, title, icon, id, context } = config;\n const { schema } = context;\n\n if (!schema) {\n throw new Error(\n \"Schema is required in context for singletonDocumentListItem\",\n );\n }\n\n const schemaType = schema.get(type);\n const listTitle = title ?? schemaType?.title ?? type;\n const listIcon = icon ?? schemaType?.icon ?? DocumentIcon;\n const listId = id ?? type;\n\n return S.listItem()\n .title(listTitle)\n .icon(listIcon)\n .child(S.document().schemaType(type).title(listTitle).id(listId));\n};\n\nconst singletonDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to singletonDocumentListItems. \" +\n \"Example: singletonDocumentListItems({ S, context })\",\n );\n }\n\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return (\n singletons?.map((schemaType) =>\n singletonDocumentListItem({ S, context, type: schemaType }),\n ) || []\n );\n};\n\nconst filteredDocumentListItems = (\n config: SingletonPluginListItemsConfig,\n): ListItemBuilder[] => {\n if (!config.S || !config.context) {\n throw new Error(\n \"S and context must be provided to filteredDocumentListItems. \" +\n \"Example: filteredDocumentListItems({ S, context })\",\n );\n }\n const { S, context } = config;\n const { schema } = context;\n\n const singletons = getSingletonDocuments(schema);\n\n return S.documentTypeListItems().filter(\n (type) => !singletons || !singletons.includes(type.getId() as string),\n );\n};\n\nexport {\n filteredDocumentListItems,\n singletonDocumentListItem,\n singletonDocumentListItems,\n};\n"],"mappings":";;AAIA,MAAa,yBAAyB,WAAyC;CACxE,YAAQ,WAAW,OAIxB,OAAO,OAAO,UAAU,MACrB,QAAQ,EAAE,cAAe,SAAoC,SAAS,CAAC,CACvE,KAAK,MAAwB,EAAE,IAAI;AACxC,GAEa,kBAAkB,QAAgB,eACzC,CAAC,QAAQ,WAAW,SAAS,CAAC,aACzB,KAGc,OAAO,UAAU,MAAM,MAC3C,EAAE,WAAW,SAAS,UAIT,CAAC,EAAE,SAAoC,aAAa,ICpBzD,WACX,MACA,EAAE,QAAQ,iBAEH,eAAe,QAAQ,UAAU,IACpC,KAAK,QAAQ,EAAE,aACb;CAAC;CAAW;CAAkB;AAAS,CAAC,CAAC,SAAS,MAAgB,CACpE,IACA,MCRO,sBACX,MACA,EAAE,QAAQ,iBAAiB,EAAE,MAAM,mBAChC;CACH,IAAM,aAAa,sBAAsB,MAAM,GAEzC,oBAAoB,EAAE,iBAC1B,CAAC,YAAY,SAAS,UAAU;CAIlC,OAFI,SAAS,YAEN,YAAY,SAAS,cAAc,EAAE,IAFd,KAAK,OAAO,gBAAgB,IAItD;AACN,GCba,iBAAiB,oBACrB;CACL,MAAM;CACN,UAAU;EACR;EACA;CACF;AACF,EACD,GCJK,6BACJ,WACoB;CACpB,IAAI,CAAC,QAAQ,KAAK,CAAC,QAAQ,QAAQ,CAAC,OAAO,SACzC,MAAU,MACR,yIAEF;CAEF,IAAM,EAAE,GAAG,MAAM,OAAO,MAAM,IAAI,YAAY,QACxC,EAAE,WAAW;CAEnB,IAAI,CAAC,QACH,MAAU,MACR,6DACF;CAGF,IAAM,aAAa,OAAO,IAAI,IAAI,GAC5B,YAAY,SAAS,YAAY,SAAS,MAC1C,WAAW,QAAQ,YAAY,QAAQ,cACvC,SAAS,MAAM;CAErB,OAAO,EAAE,SAAS,CAAC,CAChB,MAAM,SAAS,CAAC,CAChB,KAAK,QAAQ,CAAC,CACd,MAAM,EAAE,SAAS,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;AACpE,GAEM,8BACJ,WACsB;CACtB,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,SACvB,MAAU,MACR,mHAEF;CAGF,IAAM,EAAE,GAAG,YAAY,QACjB,EAAE,WAAW;CAInB,OAFmB,sBAAsB,MAG9B,CAAC,EAAE,KAAK,eACf,0BAA0B;EAAE;EAAG;EAAS,MAAM;CAAW,CAAC,CAC5D,KAAK,CAAC;AAEV,GAEM,6BACJ,WACsB;CACtB,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,SACvB,MAAU,MACR,iHAEF;CAEF,IAAM,EAAE,GAAG,YAAY,QACjB,EAAE,WAAW,SAEb,aAAa,sBAAsB,MAAM;CAE/C,OAAO,EAAE,sBAAsB,CAAC,CAAC,QAC9B,SAAS,CAAC,cAAc,CAAC,WAAW,SAAS,KAAK,MAAM,CAAW,CACtE;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sanity-plugin-singleton-management",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "A plugin to streamline singleton management in your Sanity Studio",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
"@sanity/incompatible-plugin": "^1.0.5"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@emnapi/core": "^1.11.3",
|
|
57
|
-
"@emnapi/runtime": "^1.11.3",
|
|
58
56
|
"@commitlint/cli": "^21.2.2",
|
|
59
57
|
"@commitlint/config-conventional": "^21.2.2",
|
|
60
58
|
"@commitlint/prompt-cli": "^21.2.2",
|
|
59
|
+
"@emnapi/core": "^1.11.3",
|
|
60
|
+
"@emnapi/runtime": "^1.11.3",
|
|
61
61
|
"@eslint-react/eslint-plugin": "^5.18.6",
|
|
62
62
|
"@eslint/js": "^10.0.1",
|
|
63
63
|
"@sanity/browserslist-config": "^1.0.5",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"react-dom": "^19.2.8",
|
|
83
83
|
"react-is": "^19.2.8",
|
|
84
84
|
"rimraf": "^6.1.3",
|
|
85
|
-
"sanity": "^6.
|
|
85
|
+
"sanity": "^6.10.1",
|
|
86
86
|
"semantic-release": "^25.0.9",
|
|
87
87
|
"styled-components": "^6.5.3",
|
|
88
88
|
"typescript": "^6.0.3",
|
package/src/structure/index.ts
CHANGED