sanity 3.77.2-server-side-schemas.24 → 3.77.2-server-side-schemas.25

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.
@@ -7,6 +7,8 @@ var chalk__default = /* @__PURE__ */ _interopDefaultCompat(chalk);
7
7
  async function deleteSchemaAction(args, context) {
8
8
  const flags = args.extOptions;
9
9
  if (typeof flags.dataset == "boolean") throw new Error("Dataset is empty");
10
+ if (typeof flags.ids == "boolean") throw new Error("Ids are empty");
11
+ if (typeof flags.path == "boolean") throw new Error("Path is empty");
10
12
  const {
11
13
  apiClient,
12
14
  output
@@ -1 +1 @@
1
- {"version":3,"file":"deleteSchemaAction.js","sources":["../../src/_internal/cli/actions/schema/deleteSchemaAction.ts"],"sourcesContent":["import {type CliCommandArguments, type CliCommandContext} from '@sanity/cli'\nimport chalk from 'chalk'\n\nimport {type ManifestWorkspaceFile} from '../../../manifest/manifestTypes'\nimport {getManifestPath, readManifest, throwIfProjectIdMismatch} from './storeSchemasAction'\n\nexport interface DeleteSchemaFlags {\n ids: string\n path: string\n dataset: string\n}\n\nexport default async function deleteSchemaAction(\n args: CliCommandArguments<DeleteSchemaFlags>,\n context: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n if (typeof flags.dataset === 'boolean') throw new Error('Dataset is empty')\n\n const {apiClient, output} = context\n\n //split ids by comma\n const schemaIds = flags.ids.split(',')\n\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2024-08-01'})\n\n const projectId = client.config().projectId\n\n if (!projectId) {\n output.error('Project ID must be defined.')\n return\n }\n\n const manifestPath = getManifestPath(context, flags.path)\n const manifest = readManifest(manifestPath, output)\n\n const results = await Promise.allSettled(\n manifest.workspaces.flatMap((workspace: ManifestWorkspaceFile) => {\n if (flags.dataset && workspace.dataset !== flags.dataset) {\n return []\n }\n return schemaIds.map(async (schemaId) => {\n const idWorkspace = schemaId.split('.').at(-1)\n if (idWorkspace !== workspace.name && !flags.dataset) {\n return false\n }\n try {\n throwIfProjectIdMismatch(workspace, projectId)\n const deletedSchema = await client\n .withConfig({\n dataset: flags.dataset || workspace.dataset,\n projectId: workspace.projectId,\n })\n .delete(schemaId.trim())\n\n if (!deletedSchema.results.length) {\n return false\n }\n\n output.success(`Schema ${schemaId} deleted from workspace: ${workspace.name}`)\n return true\n } catch (err) {\n output.error(\n `Failed to delete schema ${schemaId} from workspace ${workspace.name}:\\n ${err.message}`,\n )\n throw err\n }\n })\n }),\n )\n\n // Log errors and collect results\n const deletedCount = results\n .map((result, index) => {\n if (result.status === 'rejected') {\n const schemaId = schemaIds[index]\n output.error(chalk.red(`Failed to delete schema '${schemaId}':\\n${result.reason.message}`))\n return false\n }\n return result.value\n })\n .filter(Boolean).length\n\n output.print(`Successfully deleted ${deletedCount} schemas`)\n}\n"],"names":["deleteSchemaAction","args","context","flags","extOptions","dataset","Error","apiClient","output","schemaIds","ids","split","client","requireUser","requireProject","withConfig","apiVersion","projectId","config","error","manifestPath","getManifestPath","path","manifest","readManifest","deletedCount","Promise","allSettled","workspaces","flatMap","workspace","map","schemaId","at","name","throwIfProjectIdMismatch","delete","trim","results","length","success","err","message","result","index","status","chalk","red","reason","value","filter","Boolean","print"],"mappings":";;;;;;AAY8BA,eAAAA,mBAC5BC,MACAC,SACe;AACf,QAAMC,QAAQF,KAAKG;AACnB,MAAI,OAAOD,MAAME,WAAY,UAAiB,OAAA,IAAIC,MAAM,kBAAkB;AAEpE,QAAA;AAAA,IAACC;AAAAA,IAAWC;AAAAA,EAAAA,IAAUN,SAGtBO,YAAYN,MAAMO,IAAIC,MAAM,GAAG,GAE/BC,SAASL,UAAU;AAAA,IACvBM,aAAa;AAAA,IACbC,gBAAgB;AAAA,EACjB,CAAA,EAAEC,WAAW;AAAA,IAACC,YAAY;AAAA,EAAc,CAAA,GAEnCC,YAAYL,OAAOM,OAASD,EAAAA;AAElC,MAAI,CAACA,WAAW;AACdT,WAAOW,MAAM,6BAA6B;AAC1C;AAAA,EAAA;AAGF,QAAMC,eAAeC,iBAAAA,gBAAgBnB,SAASC,MAAMmB,IAAI,GAClDC,WAAWC,iBAAAA,aAAaJ,cAAcZ,MAAM,GAsC5CiB,gBApCU,MAAMC,QAAQC,WAC5BJ,SAASK,WAAWC,QAASC,CAAAA,cACvB3B,MAAME,WAAWyB,UAAUzB,YAAYF,MAAME,UACxC,CAAE,IAEJI,UAAUsB,IAAI,OAAOC,aAAa;AACnBA,QAAAA,SAASrB,MAAM,GAAG,EAAEsB,GAAG,EAAE,MACzBH,UAAUI,QAAQ,CAAC/B,MAAME;AACpC,aAAA;AAEL,QAAA;AASF,aARA8B,iBAAAA,yBAAyBL,WAAWb,SAAS,IACvB,MAAML,OACzBG,WAAW;AAAA,QACVV,SAASF,MAAME,WAAWyB,UAAUzB;AAAAA,QACpCY,WAAWa,UAAUb;AAAAA,MAAAA,CACtB,EACAmB,OAAOJ,SAASK,KAAK,CAAC,GAENC,QAAQC,UAI3B/B,OAAOgC,QAAQ,UAAUR,QAAQ,4BAA4BF,UAAUI,IAAI,EAAE,GACtE,MAJE;AAAA,aAKFO,KAAK;AACZjC,YAAAA,OAAOW,MACL,2BAA2Ba,QAAQ,mBAAmBF,UAAUI,IAAI;AAAA,GAAOO,IAAIC,OAAO,EACxF,GACMD;AAAAA,IAAAA;AAAAA,EAET,CAAA,CACF,CACH,GAIGV,IAAI,CAACY,QAAQC,UAAU;AAClBD,QAAAA,OAAOE,WAAW,YAAY;AAC1Bb,YAAAA,WAAWvB,UAAUmC,KAAK;AAChCpC,aAAAA,OAAOW,MAAM2B,eAAAA,QAAMC,IAAI,4BAA4Bf,QAAQ;AAAA,EAAOW,OAAOK,OAAON,OAAO,EAAE,CAAC,GACnF;AAAA,IAAA;AAET,WAAOC,OAAOM;AAAAA,EAAAA,CACf,EACAC,OAAOC,OAAO,EAAEZ;AAEZa,SAAAA,MAAM,wBAAwB3B,YAAY,UAAU;AAC7D;;"}
1
+ {"version":3,"file":"deleteSchemaAction.js","sources":["../../src/_internal/cli/actions/schema/deleteSchemaAction.ts"],"sourcesContent":["import {type CliCommandArguments, type CliCommandContext} from '@sanity/cli'\nimport chalk from 'chalk'\n\nimport {type ManifestWorkspaceFile} from '../../../manifest/manifestTypes'\nimport {getManifestPath, readManifest, throwIfProjectIdMismatch} from './storeSchemasAction'\n\nexport interface DeleteSchemaFlags {\n ids: string\n path: string\n dataset: string\n}\n\nexport default async function deleteSchemaAction(\n args: CliCommandArguments<DeleteSchemaFlags>,\n context: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n if (typeof flags.dataset === 'boolean') throw new Error('Dataset is empty')\n if (typeof flags.ids === 'boolean') throw new Error('Ids are empty')\n if (typeof flags.path === 'boolean') throw new Error('Path is empty')\n\n const {apiClient, output} = context\n\n //split ids by comma\n const schemaIds = flags.ids.split(',')\n\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2024-08-01'})\n\n const projectId = client.config().projectId\n\n if (!projectId) {\n output.error('Project ID must be defined.')\n return\n }\n\n const manifestPath = getManifestPath(context, flags.path)\n const manifest = readManifest(manifestPath, output)\n\n const results = await Promise.allSettled(\n manifest.workspaces.flatMap((workspace: ManifestWorkspaceFile) => {\n if (flags.dataset && workspace.dataset !== flags.dataset) {\n return []\n }\n return schemaIds.map(async (schemaId) => {\n const idWorkspace = schemaId.split('.').at(-1)\n if (idWorkspace !== workspace.name && !flags.dataset) {\n return false\n }\n try {\n throwIfProjectIdMismatch(workspace, projectId)\n const deletedSchema = await client\n .withConfig({\n dataset: flags.dataset || workspace.dataset,\n projectId: workspace.projectId,\n })\n .delete(schemaId.trim())\n\n if (!deletedSchema.results.length) {\n return false\n }\n\n output.success(`Schema ${schemaId} deleted from workspace: ${workspace.name}`)\n return true\n } catch (err) {\n output.error(\n `Failed to delete schema ${schemaId} from workspace ${workspace.name}:\\n ${err.message}`,\n )\n throw err\n }\n })\n }),\n )\n\n // Log errors and collect results\n const deletedCount = results\n .map((result, index) => {\n if (result.status === 'rejected') {\n const schemaId = schemaIds[index]\n output.error(chalk.red(`Failed to delete schema '${schemaId}':\\n${result.reason.message}`))\n return false\n }\n return result.value\n })\n .filter(Boolean).length\n\n output.print(`Successfully deleted ${deletedCount} schemas`)\n}\n"],"names":["deleteSchemaAction","args","context","flags","extOptions","dataset","Error","ids","path","apiClient","output","schemaIds","split","client","requireUser","requireProject","withConfig","apiVersion","projectId","config","error","manifestPath","getManifestPath","manifest","readManifest","deletedCount","Promise","allSettled","workspaces","flatMap","workspace","map","schemaId","at","name","throwIfProjectIdMismatch","delete","trim","results","length","success","err","message","result","index","status","chalk","red","reason","value","filter","Boolean","print"],"mappings":";;;;;;AAY8BA,eAAAA,mBAC5BC,MACAC,SACe;AACf,QAAMC,QAAQF,KAAKG;AACnB,MAAI,OAAOD,MAAME,WAAY,UAAiB,OAAA,IAAIC,MAAM,kBAAkB;AAC1E,MAAI,OAAOH,MAAMI,OAAQ,UAAiB,OAAA,IAAID,MAAM,eAAe;AACnE,MAAI,OAAOH,MAAMK,QAAS,UAAiB,OAAA,IAAIF,MAAM,eAAe;AAE9D,QAAA;AAAA,IAACG;AAAAA,IAAWC;AAAAA,EAAAA,IAAUR,SAGtBS,YAAYR,MAAMI,IAAIK,MAAM,GAAG,GAE/BC,SAASJ,UAAU;AAAA,IACvBK,aAAa;AAAA,IACbC,gBAAgB;AAAA,EACjB,CAAA,EAAEC,WAAW;AAAA,IAACC,YAAY;AAAA,EAAc,CAAA,GAEnCC,YAAYL,OAAOM,OAASD,EAAAA;AAElC,MAAI,CAACA,WAAW;AACdR,WAAOU,MAAM,6BAA6B;AAC1C;AAAA,EAAA;AAGF,QAAMC,eAAeC,iBAAAA,gBAAgBpB,SAASC,MAAMK,IAAI,GAClDe,WAAWC,iBAAAA,aAAaH,cAAcX,MAAM,GAsC5Ce,gBApCU,MAAMC,QAAQC,WAC5BJ,SAASK,WAAWC,QAASC,CAAAA,cACvB3B,MAAME,WAAWyB,UAAUzB,YAAYF,MAAME,UACxC,CAAE,IAEJM,UAAUoB,IAAI,OAAOC,aAAa;AACnBA,QAAAA,SAASpB,MAAM,GAAG,EAAEqB,GAAG,EAAE,MACzBH,UAAUI,QAAQ,CAAC/B,MAAME;AACpC,aAAA;AAEL,QAAA;AASF,aARA8B,iBAAAA,yBAAyBL,WAAWZ,SAAS,IACvB,MAAML,OACzBG,WAAW;AAAA,QACVX,SAASF,MAAME,WAAWyB,UAAUzB;AAAAA,QACpCa,WAAWY,UAAUZ;AAAAA,MAAAA,CACtB,EACAkB,OAAOJ,SAASK,KAAK,CAAC,GAENC,QAAQC,UAI3B7B,OAAO8B,QAAQ,UAAUR,QAAQ,4BAA4BF,UAAUI,IAAI,EAAE,GACtE,MAJE;AAAA,aAKFO,KAAK;AACZ/B,YAAAA,OAAOU,MACL,2BAA2BY,QAAQ,mBAAmBF,UAAUI,IAAI;AAAA,GAAOO,IAAIC,OAAO,EACxF,GACMD;AAAAA,IAAAA;AAAAA,EAET,CAAA,CACF,CACH,GAIGV,IAAI,CAACY,QAAQC,UAAU;AAClBD,QAAAA,OAAOE,WAAW,YAAY;AAC1Bb,YAAAA,WAAWrB,UAAUiC,KAAK;AAChClC,aAAAA,OAAOU,MAAM0B,eAAAA,QAAMC,IAAI,4BAA4Bf,QAAQ;AAAA,EAAOW,OAAOK,OAAON,OAAO,EAAE,CAAC,GACnF;AAAA,IAAA;AAET,WAAOC,OAAOM;AAAAA,EAAAA,CACf,EACAC,OAAOC,OAAO,EAAEZ;AAEZa,SAAAA,MAAM,wBAAwB3B,YAAY,UAAU;AAC7D;;"}
@@ -4,7 +4,7 @@ function _interopDefaultCompat(e) {
4
4
  return e && typeof e == "object" && "default" in e ? e : { default: e };
5
5
  }
6
6
  var path__default = /* @__PURE__ */ _interopDefaultCompat(path), chalk__default = /* @__PURE__ */ _interopDefaultCompat(chalk), size__default = /* @__PURE__ */ _interopDefaultCompat(size), sortBy__default = /* @__PURE__ */ _interopDefaultCompat(sortBy), uniqBy__default = /* @__PURE__ */ _interopDefaultCompat(uniqBy);
7
- const SANITY_WORKSPACE_SCHEMA_ID = "sanity.workspace.schema", printSchemaList = ({
7
+ const SANITY_WORKSPACE_SCHEMA_TYPE = "sanity.workspace.schema", printSchemaList = ({
8
8
  schemas,
9
9
  output
10
10
  }) => {
@@ -12,7 +12,7 @@ const SANITY_WORKSPACE_SCHEMA_ID = "sanity.workspace.schema", printSchemaList =
12
12
  _createdAt: createdAt,
13
13
  _id: id,
14
14
  workspace
15
- }) => [id, workspace.title, workspace.dataset, workspace.projectId, createdAt].map(String)), ["createdAt"]), headings = ["Id", "Title", "Dataset", "ProjectId", "CreatedAt"], rows = ordered.reverse(), maxWidths = rows.reduce((max, row) => row.map((current, index) => Math.max(size__default.default(current), max[index])), headings.map((str) => size__default.default(str))), printRow = (row) => row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(" ");
15
+ }) => [id, workspace.name, workspace.dataset, workspace.projectId, createdAt].map(String)), ["createdAt"]), headings = ["Id", "Workspace", "Dataset", "ProjectId", "CreatedAt"], rows = ordered.reverse(), maxWidths = rows.reduce((max, row) => row.map((current, index) => Math.max(size__default.default(current), max[index])), headings.map((str) => size__default.default(str))), printRow = (row) => row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(" ");
16
16
  output.print(chalk__default.default.cyan(printRow(headings))), rows.forEach((row) => output.print(printRow(row)));
17
17
  };
18
18
  async function fetchSchemaAction(args, context) {
@@ -32,14 +32,12 @@ async function fetchSchemaAction(args, context) {
32
32
  const manifestPath = getManifestPath(context, flags.path), manifest = readManifest(manifestPath, output), schemas = (await Promise.allSettled(uniqBy__default.default(manifest.workspaces, "dataset").map(async (workspace) => (throwIfProjectIdMismatch(workspace, projectId), flags.id ? await client.withConfig({
33
33
  dataset: workspace.dataset,
34
34
  projectId: workspace.projectId
35
- }).fetch("*[_type == $type && _id == $id]", {
36
- id: flags.id,
37
- type: SANITY_WORKSPACE_SCHEMA_ID
38
- }) : await client.withConfig({
35
+ }).getDocument(flags.id) : await client.withConfig({
39
36
  dataset: workspace.dataset,
40
- projectId: workspace.projectId
37
+ projectId: workspace.projectId,
38
+ useCdn: !1
41
39
  }).fetch("*[_type == $type]", {
42
- type: SANITY_WORKSPACE_SCHEMA_ID
40
+ type: SANITY_WORKSPACE_SCHEMA_TYPE
43
41
  }))))).map((result, index) => {
44
42
  if (result.status === "rejected") {
45
43
  const workspace = manifest.workspaces[index];
@@ -58,7 +56,7 @@ async function fetchSchemaAction(args, context) {
58
56
  }
59
57
  var schemaListAction = /* @__PURE__ */ Object.freeze({
60
58
  __proto__: null,
61
- SANITY_WORKSPACE_SCHEMA_ID,
59
+ SANITY_WORKSPACE_SCHEMA_TYPE,
62
60
  default: fetchSchemaAction
63
61
  });
64
62
  const getManifestPath = (context, customPath) => {
@@ -76,11 +74,11 @@ const getManifestPath = (context, customPath) => {
76
74
  throw new Error(`\u21B3 No permissions to store schema for workspace ${workspace.name} with projectId: ${workspace.projectId}`);
77
75
  };
78
76
  async function storeSchemasAction(args, context) {
79
- const flags = args.extOptions;
77
+ const flags = args.extOptions, schemaRequired = flags["schema-required"], workspaceName = flags.workspace, idPrefix = flags["id-prefix"], verbose = flags.verbose;
80
78
  if (typeof flags.path == "boolean") throw new Error("Path is empty");
81
- if (typeof flags["id-prefix"] == "boolean") throw new Error("Id prefix is empty");
82
- if (typeof flags.workspace == "boolean") throw new Error("Workspace is empty");
83
- const schemaRequired = flags["schema-required"], workspaceName = flags.workspace, idPrefix = flags["id-prefix"], verbose = flags.verbose, {
79
+ if (typeof idPrefix == "boolean") throw new Error("Id prefix is empty");
80
+ if (typeof workspaceName == "boolean") throw new Error("Workspace is empty");
81
+ const {
84
82
  output,
85
83
  apiClient
86
84
  } = context, spinner = output.spinner({}).start("Storing schemas"), manifestPath = getManifestPath(context, flags.path);
@@ -95,7 +93,7 @@ async function storeSchemasAction(args, context) {
95
93
  const manifest = readManifest(manifestPath, output, spinner);
96
94
  let storedCount = 0, error;
97
95
  const saveSchema = async (workspace) => {
98
- const id = `${idPrefix ? `${idPrefix}.` : ""}${SANITY_WORKSPACE_SCHEMA_ID}.${workspace.name}`;
96
+ const id = `${idPrefix ? `${idPrefix}.` : ""}${SANITY_WORKSPACE_SCHEMA_TYPE}.${workspace.name}`;
99
97
  try {
100
98
  throwIfProjectIdMismatch(workspace, projectId);
101
99
  const schema = JSON.parse(fs.readFileSync(`${manifestPath}/${workspace.schema}`, "utf-8"));
@@ -103,7 +101,7 @@ async function storeSchemasAction(args, context) {
103
101
  dataset: workspace.dataset,
104
102
  projectId: workspace.projectId
105
103
  }).transaction().createOrReplace({
106
- _type: SANITY_WORKSPACE_SCHEMA_ID,
104
+ _type: SANITY_WORKSPACE_SCHEMA_TYPE,
107
105
  _id: id,
108
106
  workspace,
109
107
  schema
@@ -1 +1 @@
1
- {"version":3,"file":"storeSchemasAction.js","sources":["../../src/_internal/cli/actions/schema/schemaListAction.ts","../../src/_internal/cli/actions/schema/storeSchemasAction.ts"],"sourcesContent":["import {type CliCommandArguments, type CliCommandContext, type CliOutputter} from '@sanity/cli'\nimport {type SanityDocument} from '@sanity/client'\nimport chalk from 'chalk'\nimport {size, sortBy, uniqBy} from 'lodash'\n\nimport {type ManifestWorkspaceFile} from '../../../manifest/manifestTypes'\nimport {getManifestPath, readManifest, throwIfProjectIdMismatch} from './storeSchemasAction'\n\nexport interface SchemaListFlags {\n json: boolean\n id: string\n path: string\n}\n\ntype PrintSchemaListArgs = {\n schemas: SanityDocument[]\n output: CliOutputter\n dataset: string\n projectId: string\n path: string\n}\n\nexport const SANITY_WORKSPACE_SCHEMA_ID = 'sanity.workspace.schema'\n\nconst printSchemaList = ({\n schemas,\n output,\n}: Omit<PrintSchemaListArgs, 'path' | 'dataset' | 'projectId'>) => {\n const ordered = sortBy(\n schemas.map(({_createdAt: createdAt, _id: id, workspace}) => {\n return [id, workspace.title, workspace.dataset, workspace.projectId, createdAt].map(String)\n }),\n ['createdAt'],\n )\n const headings = ['Id', 'Title', 'Dataset', 'ProjectId', 'CreatedAt']\n const rows = ordered.reverse()\n\n const maxWidths = rows.reduce(\n (max, row) => row.map((current, index) => Math.max(size(current), max[index])),\n headings.map((str) => size(str)),\n )\n\n const printRow = (row: string[]) => row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(' ')\n\n output.print(chalk.cyan(printRow(headings)))\n rows.forEach((row) => output.print(printRow(row)))\n}\n\nexport default async function fetchSchemaAction(\n args: CliCommandArguments<SchemaListFlags>,\n context: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n const {apiClient, output} = context\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2024-08-01'})\n\n const projectId = client.config().projectId\n\n if (!projectId) {\n output.error('Project ID must be defined.')\n return\n }\n\n const manifestPath = getManifestPath(context, flags.path)\n const manifest = readManifest(manifestPath, output)\n\n // Gather all schemas\n const results = await Promise.allSettled(\n uniqBy<ManifestWorkspaceFile>(manifest.workspaces, 'dataset').map(async (workspace) => {\n throwIfProjectIdMismatch(workspace, projectId)\n if (flags.id) {\n // Fetch a specific schema by id\n return await client\n .withConfig({\n dataset: workspace.dataset,\n projectId: workspace.projectId,\n })\n .fetch<SanityDocument[]>(`*[_type == $type && _id == $id]`, {\n id: flags.id,\n type: SANITY_WORKSPACE_SCHEMA_ID,\n })\n }\n // Fetch all schemas\n return await client\n .withConfig({\n dataset: workspace.dataset,\n projectId: workspace.projectId,\n })\n .fetch<SanityDocument[]>(`*[_type == $type]`, {\n type: SANITY_WORKSPACE_SCHEMA_ID,\n })\n }),\n )\n\n // Log errors and collect successful results\n const schemas = results\n .map((result, index) => {\n if (result.status === 'rejected') {\n const workspace = manifest.workspaces[index]\n output.error(\n chalk.red(\n `Failed to fetch schemas for workspace '${workspace.name}': ${result.reason.message}`,\n ),\n )\n return []\n }\n return result.value\n })\n .flat()\n\n if (schemas.length === 0) {\n output.error(`No schemas found`)\n return\n }\n\n if (flags.json) {\n output.print(`${JSON.stringify(schemas, null, 2)}`)\n } else {\n printSchemaList({schemas, output})\n }\n}\n","import {readFileSync} from 'node:fs'\nimport path, {join, resolve} from 'node:path'\n\nimport {type CliCommandArguments, type CliCommandContext, type CliOutputter} from '@sanity/cli'\nimport chalk from 'chalk'\nimport {type Ora} from 'ora'\n\nimport {type ManifestSchemaType, type ManifestWorkspaceFile} from '../../../manifest/manifestTypes'\nimport {MANIFEST_FILENAME} from '../manifest/extractManifestAction'\nimport {SANITY_WORKSPACE_SCHEMA_ID} from './schemaListAction'\n\nexport interface StoreManifestSchemasFlags {\n 'path'?: string\n 'workspace'?: string\n 'id-prefix'?: string\n 'schema-required'?: boolean\n 'verbose'?: boolean\n}\n\nexport const getManifestPath = (context: CliCommandContext, customPath?: string) => {\n const defaultOutputDir = resolve(join(context.workDir, 'dist'))\n\n const outputDir = resolve(defaultOutputDir)\n const defaultStaticPath = join(outputDir, 'static')\n\n const staticPath = customPath ?? defaultStaticPath\n const manifestPath = path.resolve(process.cwd(), staticPath)\n return manifestPath\n}\n\nexport const readManifest = (readPath: string, output?: CliOutputter, spinner?: Ora) => {\n try {\n return JSON.parse(readFileSync(`${readPath}/${MANIFEST_FILENAME}`, 'utf-8'))\n } catch (error) {\n const errorMessage = `Manifest not found at ${readPath}/${MANIFEST_FILENAME}`\n if (spinner) spinner.fail(errorMessage)\n if (output) output.error(errorMessage)\n throw error\n }\n}\n\nexport const throwIfProjectIdMismatch = (workspace: ManifestWorkspaceFile, projectId: string) => {\n if (workspace.projectId !== projectId) {\n throw new Error(\n `↳ No permissions to store schema for workspace ${workspace.name} with projectId: ${workspace.projectId}`,\n )\n }\n}\n\nexport default async function storeSchemasAction(\n args: CliCommandArguments<StoreManifestSchemasFlags>,\n context: CliCommandContext,\n): Promise<Error | undefined> {\n const flags = args.extOptions\n if (typeof flags.path === 'boolean') throw new Error('Path is empty')\n if (typeof flags['id-prefix'] === 'boolean') throw new Error('Id prefix is empty')\n if (typeof flags.workspace === 'boolean') throw new Error('Workspace is empty')\n\n const schemaRequired = flags['schema-required']\n const workspaceName = flags.workspace\n const idPrefix = flags['id-prefix']\n const verbose = flags.verbose\n const {output, apiClient} = context\n\n const spinner = output.spinner({}).start('Storing schemas')\n\n const manifestPath = getManifestPath(context, flags.path)\n\n try {\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2024-08-01'})\n\n const projectId = client.config().projectId\n if (!projectId) throw new Error('Project ID is not defined')\n\n const manifest = readManifest(manifestPath, output, spinner)\n\n let storedCount = 0\n\n let error: Error | undefined\n\n const saveSchema = async (workspace: ManifestWorkspaceFile) => {\n const id = `${idPrefix ? `${idPrefix}.` : ''}${SANITY_WORKSPACE_SCHEMA_ID}.${workspace.name}`\n try {\n throwIfProjectIdMismatch(workspace, projectId)\n const schema = JSON.parse(\n readFileSync(`${manifestPath}/${workspace.schema}`, 'utf-8'),\n ) as ManifestSchemaType\n await client\n .withConfig({\n dataset: workspace.dataset,\n projectId: workspace.projectId,\n })\n .transaction()\n .createOrReplace({_type: SANITY_WORKSPACE_SCHEMA_ID, _id: id, workspace, schema})\n .commit()\n storedCount++\n spinner.text = `Stored ${storedCount} schemas so far...`\n if (verbose) spinner.succeed(`Schema stored for workspace '${workspace.name}'`)\n } catch (err) {\n error = err\n spinner.fail(\n `Error storing schema for workspace '${workspace.name}':\\n${chalk.red(`${err.message}`)}`,\n )\n if (schemaRequired) throw err\n } finally {\n if (verbose) {\n output.print(\n chalk.gray(`↳ schemaId: ${id}, projectId: ${projectId}, dataset: ${workspace.dataset}`),\n )\n }\n }\n }\n\n // If a workspace name is provided, only save the schema for that workspace\n if (workspaceName) {\n const workspaceToSave = manifest.workspaces.find(\n (workspace: ManifestWorkspaceFile) => workspace.name === workspaceName,\n )\n if (!workspaceToSave) {\n spinner.fail(`Workspace ${workspaceName} not found in manifest`)\n throw new Error(`Workspace ${workspaceName} not found in manifest: projectID: ${projectId}`)\n }\n await saveSchema(workspaceToSave as ManifestWorkspaceFile)\n spinner.succeed(`Stored 1 schemas`)\n } else {\n await Promise.all(\n manifest.workspaces.map(async (workspace: ManifestWorkspaceFile): Promise<void> => {\n await saveSchema(workspace)\n }),\n )\n spinner.succeed(`Stored ${storedCount}/${manifest.workspaces.length} schemas`)\n }\n\n if (error) throw error\n return undefined\n } catch (err) {\n // if this flag is set, throw the error and exit without deploying otherwise just log the error\n if (schemaRequired) throw err\n return err\n } finally {\n output.print(`${chalk.gray('↳ List stored schemas with:')} ${chalk.cyan('sanity schema list')}`)\n }\n}\n"],"names":["SANITY_WORKSPACE_SCHEMA_ID","printSchemaList","schemas","output","ordered","sortBy","map","_createdAt","createdAt","_id","id","workspace","title","dataset","projectId","String","headings","rows","reverse","maxWidths","reduce","max","row","current","index","Math","size","str","printRow","col","i","padEnd","join","print","chalk","cyan","forEach","fetchSchemaAction","args","context","flags","extOptions","apiClient","client","requireUser","requireProject","withConfig","apiVersion","config","error","manifestPath","getManifestPath","path","manifest","readManifest","Promise","allSettled","uniqBy","workspaces","throwIfProjectIdMismatch","fetch","type","result","status","red","name","reason","message","value","flat","length","json","JSON","stringify","customPath","defaultOutputDir","resolve","workDir","outputDir","defaultStaticPath","staticPath","process","cwd","readPath","spinner","parse","readFileSync","MANIFEST_FILENAME","errorMessage","fail","Error","storeSchemasAction","schemaRequired","workspaceName","idPrefix","verbose","start","storedCount","saveSchema","schema","transaction","createOrReplace","_type","commit","text","succeed","err","gray","workspaceToSave","find","all"],"mappings":"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"}
1
+ {"version":3,"file":"storeSchemasAction.js","sources":["../../src/_internal/cli/actions/schema/schemaListAction.ts","../../src/_internal/cli/actions/schema/storeSchemasAction.ts"],"sourcesContent":["import {type CliCommandArguments, type CliCommandContext, type CliOutputter} from '@sanity/cli'\nimport {type SanityDocument} from '@sanity/client'\nimport chalk from 'chalk'\nimport {size, sortBy, uniqBy} from 'lodash'\n\nimport {type ManifestWorkspaceFile} from '../../../manifest/manifestTypes'\nimport {getManifestPath, readManifest, throwIfProjectIdMismatch} from './storeSchemasAction'\n\nexport interface SchemaListFlags {\n json: boolean\n id: string\n path: string\n}\n\ntype PrintSchemaListArgs = {\n schemas: SanityDocument[]\n output: CliOutputter\n dataset: string\n projectId: string\n path: string\n}\n\nexport const SANITY_WORKSPACE_SCHEMA_TYPE = 'sanity.workspace.schema'\n\nconst printSchemaList = ({\n schemas,\n output,\n}: Omit<PrintSchemaListArgs, 'path' | 'dataset' | 'projectId'>) => {\n const ordered = sortBy(\n schemas.map(({_createdAt: createdAt, _id: id, workspace}) => {\n return [id, workspace.name, workspace.dataset, workspace.projectId, createdAt].map(String)\n }),\n ['createdAt'],\n )\n const headings = ['Id', 'Workspace', 'Dataset', 'ProjectId', 'CreatedAt']\n const rows = ordered.reverse()\n\n const maxWidths = rows.reduce(\n (max, row) => row.map((current, index) => Math.max(size(current), max[index])),\n headings.map((str) => size(str)),\n )\n\n const printRow = (row: string[]) => row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(' ')\n\n output.print(chalk.cyan(printRow(headings)))\n rows.forEach((row) => output.print(printRow(row)))\n}\n\nexport default async function fetchSchemaAction(\n args: CliCommandArguments<SchemaListFlags>,\n context: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n const {apiClient, output} = context\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2024-08-01'})\n\n const projectId = client.config().projectId\n\n if (!projectId) {\n output.error('Project ID must be defined.')\n return\n }\n\n const manifestPath = getManifestPath(context, flags.path)\n const manifest = readManifest(manifestPath, output)\n\n // Gather all schemas\n const results = await Promise.allSettled(\n uniqBy<ManifestWorkspaceFile>(manifest.workspaces, 'dataset').map(async (workspace) => {\n throwIfProjectIdMismatch(workspace, projectId)\n if (flags.id) {\n // Fetch a specific schema by id\n return await client\n .withConfig({\n dataset: workspace.dataset,\n projectId: workspace.projectId,\n })\n .getDocument(flags.id)\n }\n // Fetch all schemas\n return await client\n .withConfig({\n dataset: workspace.dataset,\n projectId: workspace.projectId,\n useCdn: false,\n })\n .fetch<SanityDocument[]>(`*[_type == $type]`, {\n type: SANITY_WORKSPACE_SCHEMA_TYPE,\n })\n }),\n )\n\n // Log errors and collect successful results\n const schemas = results\n .map((result, index) => {\n if (result.status === 'rejected') {\n const workspace = manifest.workspaces[index]\n output.error(\n chalk.red(\n `Failed to fetch schemas for workspace '${workspace.name}': ${result.reason.message}`,\n ),\n )\n return []\n }\n return result.value\n })\n .flat()\n\n if (schemas.length === 0) {\n output.error(`No schemas found`)\n return\n }\n\n if (flags.json) {\n output.print(`${JSON.stringify(schemas, null, 2)}`)\n } else {\n printSchemaList({schemas: schemas as SanityDocument[], output})\n }\n}\n","import {readFileSync} from 'node:fs'\nimport path, {join, resolve} from 'node:path'\n\nimport {type CliCommandArguments, type CliCommandContext, type CliOutputter} from '@sanity/cli'\nimport chalk from 'chalk'\nimport {type Ora} from 'ora'\n\nimport {type ManifestSchemaType, type ManifestWorkspaceFile} from '../../../manifest/manifestTypes'\nimport {MANIFEST_FILENAME} from '../manifest/extractManifestAction'\nimport {SANITY_WORKSPACE_SCHEMA_TYPE} from './schemaListAction'\n\nexport interface StoreManifestSchemasFlags {\n 'path'?: string\n 'workspace'?: string\n 'id-prefix'?: string\n 'schema-required'?: boolean\n 'verbose'?: boolean\n}\n\nexport const getManifestPath = (context: CliCommandContext, customPath?: string) => {\n const defaultOutputDir = resolve(join(context.workDir, 'dist'))\n\n const outputDir = resolve(defaultOutputDir)\n const defaultStaticPath = join(outputDir, 'static')\n\n const staticPath = customPath ?? defaultStaticPath\n const manifestPath = path.resolve(process.cwd(), staticPath)\n return manifestPath\n}\n\nexport const readManifest = (readPath: string, output?: CliOutputter, spinner?: Ora) => {\n try {\n return JSON.parse(readFileSync(`${readPath}/${MANIFEST_FILENAME}`, 'utf-8'))\n } catch (error) {\n const errorMessage = `Manifest not found at ${readPath}/${MANIFEST_FILENAME}`\n if (spinner) spinner.fail(errorMessage)\n if (output) output.error(errorMessage)\n throw error\n }\n}\n\n// At the moment schema store deos not support studios where workspaces have multiple projects\nexport const throwIfProjectIdMismatch = (\n workspace: ManifestWorkspaceFile,\n projectId: string,\n): void => {\n if (workspace.projectId !== projectId) {\n throw new Error(\n `↳ No permissions to store schema for workspace ${workspace.name} with projectId: ${workspace.projectId}`,\n )\n }\n}\n\nexport default async function storeSchemasAction(\n args: CliCommandArguments<StoreManifestSchemasFlags>,\n context: CliCommandContext,\n): Promise<Error | undefined> {\n const flags = args.extOptions\n\n const schemaRequired = flags['schema-required']\n const workspaceName = flags.workspace\n const idPrefix = flags['id-prefix']\n const verbose = flags.verbose\n\n if (typeof flags.path === 'boolean') throw new Error('Path is empty')\n if (typeof idPrefix === 'boolean') throw new Error('Id prefix is empty')\n if (typeof workspaceName === 'boolean') throw new Error('Workspace is empty')\n\n const {output, apiClient} = context\n\n const spinner = output.spinner({}).start('Storing schemas')\n\n const manifestPath = getManifestPath(context, flags.path)\n\n try {\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2024-08-01'})\n\n const projectId = client.config().projectId\n if (!projectId) throw new Error('Project ID is not defined')\n\n const manifest = readManifest(manifestPath, output, spinner)\n\n let storedCount = 0\n\n let error: Error | undefined\n\n const saveSchema = async (workspace: ManifestWorkspaceFile) => {\n const id = `${idPrefix ? `${idPrefix}.` : ''}${SANITY_WORKSPACE_SCHEMA_TYPE}.${workspace.name}`\n try {\n throwIfProjectIdMismatch(workspace, projectId)\n const schema = JSON.parse(\n readFileSync(`${manifestPath}/${workspace.schema}`, 'utf-8'),\n ) as ManifestSchemaType\n await client\n .withConfig({\n dataset: workspace.dataset,\n projectId: workspace.projectId,\n })\n .transaction()\n .createOrReplace({_type: SANITY_WORKSPACE_SCHEMA_TYPE, _id: id, workspace, schema})\n .commit()\n storedCount++\n spinner.text = `Stored ${storedCount} schemas so far...`\n if (verbose) spinner.succeed(`Schema stored for workspace '${workspace.name}'`)\n } catch (err) {\n error = err\n spinner.fail(\n `Error storing schema for workspace '${workspace.name}':\\n${chalk.red(`${err.message}`)}`,\n )\n if (schemaRequired) throw err\n } finally {\n if (verbose) {\n output.print(\n chalk.gray(`↳ schemaId: ${id}, projectId: ${projectId}, dataset: ${workspace.dataset}`),\n )\n }\n }\n }\n\n // If a workspace name is provided, only save the schema for that workspace\n if (workspaceName) {\n const workspaceToSave = manifest.workspaces.find(\n (workspace: ManifestWorkspaceFile) => workspace.name === workspaceName,\n )\n if (!workspaceToSave) {\n spinner.fail(`Workspace ${workspaceName} not found in manifest`)\n throw new Error(`Workspace ${workspaceName} not found in manifest: projectID: ${projectId}`)\n }\n await saveSchema(workspaceToSave as ManifestWorkspaceFile)\n spinner.succeed(`Stored 1 schemas`)\n } else {\n await Promise.all(\n manifest.workspaces.map(async (workspace: ManifestWorkspaceFile): Promise<void> => {\n await saveSchema(workspace)\n }),\n )\n spinner.succeed(`Stored ${storedCount}/${manifest.workspaces.length} schemas`)\n }\n\n if (error) throw error\n return undefined\n } catch (err) {\n // if this flag is set, throw the error and exit without deploying otherwise just log the error\n if (schemaRequired) throw err\n return err\n } finally {\n output.print(`${chalk.gray('↳ List stored schemas with:')} ${chalk.cyan('sanity schema list')}`)\n }\n}\n"],"names":["SANITY_WORKSPACE_SCHEMA_TYPE","printSchemaList","schemas","output","ordered","sortBy","map","_createdAt","createdAt","_id","id","workspace","name","dataset","projectId","String","headings","rows","reverse","maxWidths","reduce","max","row","current","index","Math","size","str","printRow","col","i","padEnd","join","print","chalk","cyan","forEach","fetchSchemaAction","args","context","flags","extOptions","apiClient","client","requireUser","requireProject","withConfig","apiVersion","config","error","manifestPath","getManifestPath","path","manifest","readManifest","Promise","allSettled","uniqBy","workspaces","throwIfProjectIdMismatch","getDocument","useCdn","fetch","type","result","status","red","reason","message","value","flat","length","json","JSON","stringify","customPath","defaultOutputDir","resolve","workDir","outputDir","defaultStaticPath","staticPath","process","cwd","readPath","spinner","parse","readFileSync","MANIFEST_FILENAME","errorMessage","fail","Error","storeSchemasAction","schemaRequired","workspaceName","idPrefix","verbose","start","storedCount","saveSchema","schema","transaction","createOrReplace","_type","commit","text","succeed","err","gray","workspaceToSave","find","all"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const SANITY_VERSION = "3.77.2-server-side-schemas.24+c9a042053a";
2
+ const SANITY_VERSION = "3.77.2-server-side-schemas.25+7bad107ad4";
3
3
  exports.SANITY_VERSION = SANITY_VERSION;
4
4
  //# sourceMappingURL=version.js.map
@@ -1,4 +1,4 @@
1
- const SANITY_VERSION = "3.77.2-server-side-schemas.24+c9a042053a";
1
+ const SANITY_VERSION = "3.77.2-server-side-schemas.25+7bad107ad4";
2
2
  export {
3
3
  SANITY_VERSION
4
4
  };
@@ -1,4 +1,4 @@
1
- const SANITY_VERSION = "3.77.2-server-side-schemas.24+c9a042053a";
1
+ const SANITY_VERSION = "3.77.2-server-side-schemas.25+7bad107ad4";
2
2
  export {
3
3
  SANITY_VERSION
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sanity",
3
- "version": "3.77.2-server-side-schemas.24+c9a042053a",
3
+ "version": "3.77.2-server-side-schemas.25+7bad107ad4",
4
4
  "description": "Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches",
5
5
  "keywords": [
6
6
  "sanity",
@@ -160,11 +160,11 @@
160
160
  "@rexxars/react-json-inspector": "^9.0.1",
161
161
  "@sanity/asset-utils": "^2.0.6",
162
162
  "@sanity/bifur-client": "^0.4.1",
163
- "@sanity/cli": "3.77.2-server-side-schemas.24+c9a042053a",
163
+ "@sanity/cli": "3.77.2-server-side-schemas.25+7bad107ad4",
164
164
  "@sanity/client": "^6.28.1",
165
165
  "@sanity/color": "^3.0.0",
166
166
  "@sanity/comlink": "^3.0.1",
167
- "@sanity/diff": "3.77.2-server-side-schemas.24+c9a042053a",
167
+ "@sanity/diff": "3.77.2-server-side-schemas.25+7bad107ad4",
168
168
  "@sanity/diff-match-patch": "^3.1.1",
169
169
  "@sanity/diff-patch": "^5.0.0",
170
170
  "@sanity/eventsource": "^5.0.0",
@@ -174,15 +174,15 @@
174
174
  "@sanity/import": "^3.37.9",
175
175
  "@sanity/insert-menu": "^1.1.3",
176
176
  "@sanity/logos": "^2.1.13",
177
- "@sanity/migrate": "3.77.2-server-side-schemas.24+c9a042053a",
178
- "@sanity/mutator": "3.77.2-server-side-schemas.24+c9a042053a",
177
+ "@sanity/migrate": "3.77.2-server-side-schemas.25+7bad107ad4",
178
+ "@sanity/mutator": "3.77.2-server-side-schemas.25+7bad107ad4",
179
179
  "@sanity/presentation-comlink": "^1.0.8",
180
180
  "@sanity/preview-url-secret": "^2.1.4",
181
- "@sanity/schema": "3.77.2-server-side-schemas.24+c9a042053a",
181
+ "@sanity/schema": "3.77.2-server-side-schemas.25+7bad107ad4",
182
182
  "@sanity/telemetry": "^0.7.7",
183
- "@sanity/types": "3.77.2-server-side-schemas.24+c9a042053a",
183
+ "@sanity/types": "3.77.2-server-side-schemas.25+7bad107ad4",
184
184
  "@sanity/ui": "^2.14.3",
185
- "@sanity/util": "3.77.2-server-side-schemas.24+c9a042053a",
185
+ "@sanity/util": "3.77.2-server-side-schemas.25+7bad107ad4",
186
186
  "@sanity/uuid": "^3.0.2",
187
187
  "@sentry/react": "^8.33.0",
188
188
  "@tanstack/react-table": "^8.16.0",
@@ -280,7 +280,7 @@
280
280
  "@repo/dev-aliases": "3.77.1",
281
281
  "@repo/package.config": "3.77.1",
282
282
  "@repo/test-config": "3.77.1",
283
- "@sanity/codegen": "3.77.2-server-side-schemas.24+c9a042053a",
283
+ "@sanity/codegen": "3.77.2-server-side-schemas.25+7bad107ad4",
284
284
  "@sanity/generate-help-url": "^3.0.0",
285
285
  "@sanity/pkg-utils": "6.13.4",
286
286
  "@sanity/tsdoc": "1.0.169",
@@ -325,5 +325,5 @@
325
325
  "engines": {
326
326
  "node": ">=18"
327
327
  },
328
- "gitHead": "c9a042053a6e81f6ec366bb0ef775d4111c60349"
328
+ "gitHead": "7bad107ad4a5af3e753d27c254b6f621b6c877cb"
329
329
  }
@@ -16,6 +16,8 @@ export default async function deleteSchemaAction(
16
16
  ): Promise<void> {
17
17
  const flags = args.extOptions
18
18
  if (typeof flags.dataset === 'boolean') throw new Error('Dataset is empty')
19
+ if (typeof flags.ids === 'boolean') throw new Error('Ids are empty')
20
+ if (typeof flags.path === 'boolean') throw new Error('Path is empty')
19
21
 
20
22
  const {apiClient, output} = context
21
23
 
@@ -20,7 +20,7 @@ type PrintSchemaListArgs = {
20
20
  path: string
21
21
  }
22
22
 
23
- export const SANITY_WORKSPACE_SCHEMA_ID = 'sanity.workspace.schema'
23
+ export const SANITY_WORKSPACE_SCHEMA_TYPE = 'sanity.workspace.schema'
24
24
 
25
25
  const printSchemaList = ({
26
26
  schemas,
@@ -28,11 +28,11 @@ const printSchemaList = ({
28
28
  }: Omit<PrintSchemaListArgs, 'path' | 'dataset' | 'projectId'>) => {
29
29
  const ordered = sortBy(
30
30
  schemas.map(({_createdAt: createdAt, _id: id, workspace}) => {
31
- return [id, workspace.title, workspace.dataset, workspace.projectId, createdAt].map(String)
31
+ return [id, workspace.name, workspace.dataset, workspace.projectId, createdAt].map(String)
32
32
  }),
33
33
  ['createdAt'],
34
34
  )
35
- const headings = ['Id', 'Title', 'Dataset', 'ProjectId', 'CreatedAt']
35
+ const headings = ['Id', 'Workspace', 'Dataset', 'ProjectId', 'CreatedAt']
36
36
  const rows = ordered.reverse()
37
37
 
38
38
  const maxWidths = rows.reduce(
@@ -78,19 +78,17 @@ export default async function fetchSchemaAction(
78
78
  dataset: workspace.dataset,
79
79
  projectId: workspace.projectId,
80
80
  })
81
- .fetch<SanityDocument[]>(`*[_type == $type && _id == $id]`, {
82
- id: flags.id,
83
- type: SANITY_WORKSPACE_SCHEMA_ID,
84
- })
81
+ .getDocument(flags.id)
85
82
  }
86
83
  // Fetch all schemas
87
84
  return await client
88
85
  .withConfig({
89
86
  dataset: workspace.dataset,
90
87
  projectId: workspace.projectId,
88
+ useCdn: false,
91
89
  })
92
90
  .fetch<SanityDocument[]>(`*[_type == $type]`, {
93
- type: SANITY_WORKSPACE_SCHEMA_ID,
91
+ type: SANITY_WORKSPACE_SCHEMA_TYPE,
94
92
  })
95
93
  }),
96
94
  )
@@ -119,6 +117,6 @@ export default async function fetchSchemaAction(
119
117
  if (flags.json) {
120
118
  output.print(`${JSON.stringify(schemas, null, 2)}`)
121
119
  } else {
122
- printSchemaList({schemas, output})
120
+ printSchemaList({schemas: schemas as SanityDocument[], output})
123
121
  }
124
122
  }
@@ -7,7 +7,7 @@ import {type Ora} from 'ora'
7
7
 
8
8
  import {type ManifestSchemaType, type ManifestWorkspaceFile} from '../../../manifest/manifestTypes'
9
9
  import {MANIFEST_FILENAME} from '../manifest/extractManifestAction'
10
- import {SANITY_WORKSPACE_SCHEMA_ID} from './schemaListAction'
10
+ import {SANITY_WORKSPACE_SCHEMA_TYPE} from './schemaListAction'
11
11
 
12
12
  export interface StoreManifestSchemasFlags {
13
13
  'path'?: string
@@ -39,7 +39,11 @@ export const readManifest = (readPath: string, output?: CliOutputter, spinner?:
39
39
  }
40
40
  }
41
41
 
42
- export const throwIfProjectIdMismatch = (workspace: ManifestWorkspaceFile, projectId: string) => {
42
+ // At the moment schema store deos not support studios where workspaces have multiple projects
43
+ export const throwIfProjectIdMismatch = (
44
+ workspace: ManifestWorkspaceFile,
45
+ projectId: string,
46
+ ): void => {
43
47
  if (workspace.projectId !== projectId) {
44
48
  throw new Error(
45
49
  `↳ No permissions to store schema for workspace ${workspace.name} with projectId: ${workspace.projectId}`,
@@ -52,14 +56,16 @@ export default async function storeSchemasAction(
52
56
  context: CliCommandContext,
53
57
  ): Promise<Error | undefined> {
54
58
  const flags = args.extOptions
55
- if (typeof flags.path === 'boolean') throw new Error('Path is empty')
56
- if (typeof flags['id-prefix'] === 'boolean') throw new Error('Id prefix is empty')
57
- if (typeof flags.workspace === 'boolean') throw new Error('Workspace is empty')
58
59
 
59
60
  const schemaRequired = flags['schema-required']
60
61
  const workspaceName = flags.workspace
61
62
  const idPrefix = flags['id-prefix']
62
63
  const verbose = flags.verbose
64
+
65
+ if (typeof flags.path === 'boolean') throw new Error('Path is empty')
66
+ if (typeof idPrefix === 'boolean') throw new Error('Id prefix is empty')
67
+ if (typeof workspaceName === 'boolean') throw new Error('Workspace is empty')
68
+
63
69
  const {output, apiClient} = context
64
70
 
65
71
  const spinner = output.spinner({}).start('Storing schemas')
@@ -82,7 +88,7 @@ export default async function storeSchemasAction(
82
88
  let error: Error | undefined
83
89
 
84
90
  const saveSchema = async (workspace: ManifestWorkspaceFile) => {
85
- const id = `${idPrefix ? `${idPrefix}.` : ''}${SANITY_WORKSPACE_SCHEMA_ID}.${workspace.name}`
91
+ const id = `${idPrefix ? `${idPrefix}.` : ''}${SANITY_WORKSPACE_SCHEMA_TYPE}.${workspace.name}`
86
92
  try {
87
93
  throwIfProjectIdMismatch(workspace, projectId)
88
94
  const schema = JSON.parse(
@@ -94,7 +100,7 @@ export default async function storeSchemasAction(
94
100
  projectId: workspace.projectId,
95
101
  })
96
102
  .transaction()
97
- .createOrReplace({_type: SANITY_WORKSPACE_SCHEMA_ID, _id: id, workspace, schema})
103
+ .createOrReplace({_type: SANITY_WORKSPACE_SCHEMA_TYPE, _id: id, workspace, schema})
98
104
  .commit()
99
105
  storedCount++
100
106
  spinner.text = `Stored ${storedCount} schemas so far...`