sanity 5.0.1-next.8 → 5.0.2-next.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.
Files changed (42) hide show
  1. package/lib/_chunks-es/LiveQueries.js +1 -2
  2. package/lib/_chunks-es/LiveQueries.js.map +1 -1
  3. package/lib/_chunks-es/PresentationToolGrantsCheck.js +1 -2
  4. package/lib/_chunks-es/PresentationToolGrantsCheck.js.map +1 -1
  5. package/lib/_chunks-es/StructureToolProvider.js +1 -6
  6. package/lib/_chunks-es/StructureToolProvider.js.map +1 -1
  7. package/lib/_chunks-es/_internal.js +3 -11
  8. package/lib/_chunks-es/_internal.js.map +1 -1
  9. package/lib/_chunks-es/createAspectAction.js +1 -1
  10. package/lib/_chunks-es/createAspectAction.js.map +1 -1
  11. package/lib/_chunks-es/deleteSchemaAction.js +1 -1
  12. package/lib/_chunks-es/deleteSchemaAction.js.map +1 -1
  13. package/lib/_chunks-es/deployApiAction.js +1 -5
  14. package/lib/_chunks-es/deployApiAction.js.map +1 -1
  15. package/lib/_chunks-es/deploySchemasAction.js +1 -1
  16. package/lib/_chunks-es/deploySchemasAction.js.map +1 -1
  17. package/lib/_chunks-es/index3.js +1 -2
  18. package/lib/_chunks-es/index3.js.map +1 -1
  19. package/lib/_chunks-es/listSchemasAction.js +1 -1
  20. package/lib/_chunks-es/listSchemasAction.js.map +1 -1
  21. package/lib/_chunks-es/package.js +1 -1
  22. package/lib/_chunks-es/pane.js +2 -9
  23. package/lib/_chunks-es/pane.js.map +1 -1
  24. package/lib/_chunks-es/presentation.js +1 -2
  25. package/lib/_chunks-es/presentation.js.map +1 -1
  26. package/lib/_chunks-es/runtime.js +1 -1
  27. package/lib/_chunks-es/runtime.js.map +1 -1
  28. package/lib/_chunks-es/schemaStoreOutStrings.js +1 -1
  29. package/lib/_chunks-es/schemaStoreOutStrings.js.map +1 -1
  30. package/lib/_chunks-es/uniqueProjectIdDataset.js +1 -1
  31. package/lib/_chunks-es/uniqueProjectIdDataset.js.map +1 -1
  32. package/lib/_chunks-es/version.js +1 -1
  33. package/lib/_internal/cli/threads/extractManifest.cjs +3 -3
  34. package/lib/_internal/cli/threads/extractManifest.cjs.map +1 -1
  35. package/lib/_internal/cli/threads/getGraphQLAPIs.cjs +3 -3
  36. package/lib/_internal/cli/threads/getGraphQLAPIs.cjs.map +1 -1
  37. package/lib/index.d.ts +2 -3
  38. package/lib/index.js +255 -316
  39. package/lib/index.js.map +1 -1
  40. package/lib/router.js +1 -8
  41. package/lib/router.js.map +1 -1
  42. package/package.json +35 -36
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { createPublishedId } from "@sanity/id-utils";
4
- import camelCase from "lodash/camelCase.js";
4
+ import { camelCase } from "lodash-es";
5
5
  import { withMediaLibraryConfig } from "./withMediaLibraryConfig.js";
6
6
  const createAspectAction = async (args, context) => {
7
7
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"createAspectAction.js","sources":["../../src/_internal/cli/actions/media/createAspectAction.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {type CliCommandAction} from '@sanity/cli'\nimport {createPublishedId} from '@sanity/id-utils'\nimport {camelCase} from 'lodash'\n\nimport {withMediaLibraryConfig} from './lib/withMediaLibraryConfig'\n\nconst createAspectAction: CliCommandAction = async (args, context) => {\n const {output, chalk, prompt, mediaLibrary} = withMediaLibraryConfig(context)\n\n const title = await prompt.single({\n message: 'Title',\n type: 'input',\n })\n\n const name = await prompt.single({\n message: 'Name',\n type: 'input',\n default: createPublishedId(camelCase(title)),\n })\n\n const safeName = createPublishedId(camelCase(name))\n const destinationPath = path.resolve(mediaLibrary.aspectsPath, `${safeName}.ts`)\n const relativeDestinationPath = path.relative(process.cwd(), destinationPath)\n\n await fs.mkdir(path.resolve(mediaLibrary.aspectsPath), {\n recursive: true,\n })\n\n const destinationPathExists = await fs\n .stat(destinationPath)\n .then(() => true)\n .catch(() => false)\n\n if (destinationPathExists) {\n output.error(`A file already exists at ${chalk.bold(relativeDestinationPath)}`)\n return\n }\n\n await fs.writeFile(\n destinationPath,\n template({\n name: safeName,\n title,\n }),\n )\n\n output.success(`Aspect created! ${chalk.bold(relativeDestinationPath)}`)\n output.print()\n output.print('Next steps:')\n output.print(\n `Open ${chalk.bold(relativeDestinationPath)} in your code editor and customize the aspect.`,\n )\n output.print()\n output.print('Deploy this aspect by running:')\n output.print(chalk.bold(`sanity media deploy-aspect ${safeName}`))\n output.print()\n output.print('Deploy all aspects by running:')\n output.print(chalk.bold(`sanity media deploy-aspect --all`))\n}\n\nexport default createAspectAction\n\nfunction template({name, title}: {name: string; title: string}) {\n return `import {defineAssetAspect, defineField} from 'sanity'\n\nexport default defineAssetAspect({\n name: '${name}',\n title: '${title}',\n type: 'object',\n fields: [\n defineField({\n name: 'string',\n title: 'Plain String',\n type: 'string',\n }),\n ],\n})\n`\n}\n"],"names":["createAspectAction","args","context","output","chalk","prompt","mediaLibrary","withMediaLibraryConfig","title","single","message","type","name","default","createPublishedId","camelCase","safeName","destinationPath","path","resolve","aspectsPath","relativeDestinationPath","relative","process","cwd","fs","mkdir","recursive","stat","then","catch","error","bold","writeFile","template","success","print"],"mappings":";;;;;AASA,MAAMA,qBAAuC,OAAOC,MAAMC,YAAY;AACpE,QAAM;AAAA,IAACC;AAAAA,IAAQC;AAAAA,IAAOC;AAAAA,IAAQC;AAAAA,EAAAA,IAAgBC,uBAAuBL,OAAO,GAEtEM,QAAQ,MAAMH,OAAOI,OAAO;AAAA,IAChCC,SAAS;AAAA,IACTC,MAAM;AAAA,EAAA,CACP,GAEKC,OAAO,MAAMP,OAAOI,OAAO;AAAA,IAC/BC,SAAS;AAAA,IACTC,MAAM;AAAA,IACNE,SAASC,kBAAkBC,UAAUP,KAAK,CAAC;AAAA,EAAA,CAC5C,GAEKQ,WAAWF,kBAAkBC,UAAUH,IAAI,CAAC,GAC5CK,kBAAkBC,KAAKC,QAAQb,aAAac,aAAa,GAAGJ,QAAQ,KAAK,GACzEK,0BAA0BH,KAAKI,SAASC,QAAQC,IAAAA,GAAOP,eAAe;AAW5E,MATA,MAAMQ,GAAGC,MAAMR,KAAKC,QAAQb,aAAac,WAAW,GAAG;AAAA,IACrDO,WAAW;AAAA,EAAA,CACZ,GAE6B,MAAMF,GACjCG,KAAKX,eAAe,EACpBY,KAAK,MAAM,EAAI,EACfC,MAAM,MAAM,EAAK,GAEO;AACzB3B,WAAO4B,MAAM,4BAA4B3B,MAAM4B,KAAKX,uBAAuB,CAAC,EAAE;AAC9E;AAAA,EACF;AAEA,QAAMI,GAAGQ,UACPhB,iBACAiB,SAAS;AAAA,IACPtB,MAAMI;AAAAA,IACNR;AAAAA,EAAAA,CACD,CACH,GAEAL,OAAOgC,QAAQ,mBAAmB/B,MAAM4B,KAAKX,uBAAuB,CAAC,EAAE,GACvElB,OAAOiC,SACPjC,OAAOiC,MAAM,aAAa,GAC1BjC,OAAOiC,MACL,QAAQhC,MAAM4B,KAAKX,uBAAuB,CAAC,gDAC7C,GACAlB,OAAOiC,SACPjC,OAAOiC,MAAM,gCAAgC,GAC7CjC,OAAOiC,MAAMhC,MAAM4B,KAAK,8BAA8BhB,QAAQ,EAAE,CAAC,GACjEb,OAAOiC,SACPjC,OAAOiC,MAAM,gCAAgC,GAC7CjC,OAAOiC,MAAMhC,MAAM4B,KAAK,kCAAkC,CAAC;AAC7D;AAIA,SAASE,SAAS;AAAA,EAACtB;AAAAA,EAAMJ;AAAoC,GAAG;AAC9D,SAAO;AAAA;AAAA;AAAA,WAGEI,IAAI;AAAA,YACHJ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWjB;"}
1
+ {"version":3,"file":"createAspectAction.js","sources":["../../src/_internal/cli/actions/media/createAspectAction.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {type CliCommandAction} from '@sanity/cli'\nimport {createPublishedId} from '@sanity/id-utils'\nimport {camelCase} from 'lodash-es'\n\nimport {withMediaLibraryConfig} from './lib/withMediaLibraryConfig'\n\nconst createAspectAction: CliCommandAction = async (args, context) => {\n const {output, chalk, prompt, mediaLibrary} = withMediaLibraryConfig(context)\n\n const title = await prompt.single({\n message: 'Title',\n type: 'input',\n })\n\n const name = await prompt.single({\n message: 'Name',\n type: 'input',\n default: createPublishedId(camelCase(title)),\n })\n\n const safeName = createPublishedId(camelCase(name))\n const destinationPath = path.resolve(mediaLibrary.aspectsPath, `${safeName}.ts`)\n const relativeDestinationPath = path.relative(process.cwd(), destinationPath)\n\n await fs.mkdir(path.resolve(mediaLibrary.aspectsPath), {\n recursive: true,\n })\n\n const destinationPathExists = await fs\n .stat(destinationPath)\n .then(() => true)\n .catch(() => false)\n\n if (destinationPathExists) {\n output.error(`A file already exists at ${chalk.bold(relativeDestinationPath)}`)\n return\n }\n\n await fs.writeFile(\n destinationPath,\n template({\n name: safeName,\n title,\n }),\n )\n\n output.success(`Aspect created! ${chalk.bold(relativeDestinationPath)}`)\n output.print()\n output.print('Next steps:')\n output.print(\n `Open ${chalk.bold(relativeDestinationPath)} in your code editor and customize the aspect.`,\n )\n output.print()\n output.print('Deploy this aspect by running:')\n output.print(chalk.bold(`sanity media deploy-aspect ${safeName}`))\n output.print()\n output.print('Deploy all aspects by running:')\n output.print(chalk.bold(`sanity media deploy-aspect --all`))\n}\n\nexport default createAspectAction\n\nfunction template({name, title}: {name: string; title: string}) {\n return `import {defineAssetAspect, defineField} from 'sanity'\n\nexport default defineAssetAspect({\n name: '${name}',\n title: '${title}',\n type: 'object',\n fields: [\n defineField({\n name: 'string',\n title: 'Plain String',\n type: 'string',\n }),\n ],\n})\n`\n}\n"],"names":["createAspectAction","args","context","output","chalk","prompt","mediaLibrary","withMediaLibraryConfig","title","single","message","type","name","default","createPublishedId","camelCase","safeName","destinationPath","path","resolve","aspectsPath","relativeDestinationPath","relative","process","cwd","fs","mkdir","recursive","stat","then","catch","error","bold","writeFile","template","success","print"],"mappings":";;;;;AASA,MAAMA,qBAAuC,OAAOC,MAAMC,YAAY;AACpE,QAAM;AAAA,IAACC;AAAAA,IAAQC;AAAAA,IAAOC;AAAAA,IAAQC;AAAAA,EAAAA,IAAgBC,uBAAuBL,OAAO,GAEtEM,QAAQ,MAAMH,OAAOI,OAAO;AAAA,IAChCC,SAAS;AAAA,IACTC,MAAM;AAAA,EAAA,CACP,GAEKC,OAAO,MAAMP,OAAOI,OAAO;AAAA,IAC/BC,SAAS;AAAA,IACTC,MAAM;AAAA,IACNE,SAASC,kBAAkBC,UAAUP,KAAK,CAAC;AAAA,EAAA,CAC5C,GAEKQ,WAAWF,kBAAkBC,UAAUH,IAAI,CAAC,GAC5CK,kBAAkBC,KAAKC,QAAQb,aAAac,aAAa,GAAGJ,QAAQ,KAAK,GACzEK,0BAA0BH,KAAKI,SAASC,QAAQC,IAAAA,GAAOP,eAAe;AAW5E,MATA,MAAMQ,GAAGC,MAAMR,KAAKC,QAAQb,aAAac,WAAW,GAAG;AAAA,IACrDO,WAAW;AAAA,EAAA,CACZ,GAE6B,MAAMF,GACjCG,KAAKX,eAAe,EACpBY,KAAK,MAAM,EAAI,EACfC,MAAM,MAAM,EAAK,GAEO;AACzB3B,WAAO4B,MAAM,4BAA4B3B,MAAM4B,KAAKX,uBAAuB,CAAC,EAAE;AAC9E;AAAA,EACF;AAEA,QAAMI,GAAGQ,UACPhB,iBACAiB,SAAS;AAAA,IACPtB,MAAMI;AAAAA,IACNR;AAAAA,EAAAA,CACD,CACH,GAEAL,OAAOgC,QAAQ,mBAAmB/B,MAAM4B,KAAKX,uBAAuB,CAAC,EAAE,GACvElB,OAAOiC,SACPjC,OAAOiC,MAAM,aAAa,GAC1BjC,OAAOiC,MACL,QAAQhC,MAAM4B,KAAKX,uBAAuB,CAAC,gDAC7C,GACAlB,OAAOiC,SACPjC,OAAOiC,MAAM,gCAAgC,GAC7CjC,OAAOiC,MAAMhC,MAAM4B,KAAK,8BAA8BhB,QAAQ,EAAE,CAAC,GACjEb,OAAOiC,SACPjC,OAAOiC,MAAM,gCAAgC,GAC7CjC,OAAOiC,MAAMhC,MAAM4B,KAAK,kCAAkC,CAAC;AAC7D;AAIA,SAASE,SAAS;AAAA,EAACtB;AAAAA,EAAMJ;AAAoC,GAAG;AAC9D,SAAO;AAAA;AAAA;AAAA,WAGEI,IAAI;AAAA,YACHJ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWjB;"}
@@ -1,5 +1,5 @@
1
1
  import chalk from "chalk";
2
- import uniq from "lodash/uniq.js";
2
+ import { uniq } from "lodash-es";
3
3
  import { parseDeleteSchemasConfig, ensureManifestExtractSatisfied, createSchemaApiClient, createManifestReader, projectIdDatasetPair, getProjectIdDatasetsOutString, getStringList, isDefined, createManifestExtractor } from "./schemaStoreOutStrings.js";
4
4
  import { uniqueProjectIdDataset } from "./uniqueProjectIdDataset.js";
5
5
  class DeleteIdError extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"deleteSchemaAction.js","sources":["../../src/_internal/cli/actions/schema/deleteSchemaAction.ts"],"sourcesContent":["import {type CliCommandContext} from '@sanity/cli'\nimport chalk from 'chalk'\nimport {uniq} from 'lodash'\n\nimport {isDefined} from '../../../manifest/manifestTypeHelpers'\nimport {type SchemaStoreActionResult, type SchemaStoreContext} from './schemaStoreTypes'\nimport {createManifestExtractor, ensureManifestExtractSatisfied} from './utils/mainfestExtractor'\nimport {createManifestReader} from './utils/manifestReader'\nimport {createSchemaApiClient} from './utils/schemaApiClient'\nimport {\n getProjectIdDatasetsOutString,\n getStringList,\n projectIdDatasetPair,\n} from './utils/schemaStoreOutStrings'\nimport {parseDeleteSchemasConfig, type SchemaStoreCommonFlags} from './utils/schemaStoreValidation'\nimport {uniqueProjectIdDataset} from './utils/uniqueProjectIdDataset'\n\nexport interface DeleteSchemaFlags extends SchemaStoreCommonFlags {\n ids?: string\n dataset?: string\n}\n\ninterface DeleteResult {\n projectId: string\n dataset: string\n schemaId: string\n deleted: boolean\n}\n\nclass DeleteIdError extends Error {\n public schemaId: string\n public projectId: string\n public dataset: string\n constructor(args: {\n schemaId: string\n projectId: string\n dataset: string\n options?: ErrorOptions\n }) {\n super((args.options?.cause as {message?: string})?.message, args.options)\n this.name = 'DeleteIdError'\n this.schemaId = args.schemaId\n this.projectId = args.projectId\n this.dataset = args.dataset\n }\n}\n\nexport default function deleteSchemasActionForCommand(\n flags: DeleteSchemaFlags,\n context: CliCommandContext,\n): Promise<SchemaStoreActionResult> {\n return deleteSchemaAction(flags, {\n ...context,\n manifestExtractor: createManifestExtractor(context),\n })\n}\n\n/**\n * Deletes all stored schemas matching --ids in workspace datasets.\n *\n * Workspaces are determined by on-disk manifest file – not directly from sanity.config.\n * All schema store actions require a manifest to exist, so we regenerate it by default.\n * Manifest generation can be optionally disabled with --no-manifest-extract.\n * In this case the command uses and existing file or throws when missing.\n */\nexport async function deleteSchemaAction(\n flags: DeleteSchemaFlags,\n context: SchemaStoreContext,\n): Promise<SchemaStoreActionResult> {\n const {ids, dataset, extractManifest, manifestDir, verbose} = parseDeleteSchemasConfig(\n flags,\n context,\n )\n const {output, apiClient, jsonReader, manifestExtractor} = context\n\n // prettier-ignore\n if (!(await ensureManifestExtractSatisfied({schemaRequired: true, extractManifest, manifestDir, manifestExtractor, output, telemetry: context.telemetry}))) {\n return 'failure'\n }\n\n const {client, projectId} = createSchemaApiClient(apiClient)\n const manifest = await createManifestReader({manifestDir, output, jsonReader}).getManifest()\n\n const workspaces = manifest.workspaces.filter(\n (workspace) => !dataset || workspace.dataset === dataset,\n )\n\n const projectDatasets = uniqueProjectIdDataset(workspaces)\n\n const results = await Promise.allSettled(\n projectDatasets.flatMap(({projectId: targetProjectId, dataset: targetDataset}) => {\n return ids.map(async ({schemaId}): Promise<DeleteResult> => {\n const targetClient = client.withConfig({\n projectId: targetProjectId,\n dataset: targetDataset,\n })\n try {\n const existing = await targetClient.getDocument(schemaId)\n if (!existing) {\n return {\n projectId: targetProjectId,\n dataset: targetDataset,\n schemaId,\n deleted: false,\n }\n }\n\n const deletedSchema = await targetClient.request<{deleted: boolean} | undefined>({\n method: 'DELETE',\n url: `/projects/${targetProjectId}/datasets/${targetDataset}/schemas/${schemaId}`,\n })\n return {\n projectId: targetProjectId,\n dataset: targetDataset,\n schemaId,\n deleted: !!deletedSchema?.deleted,\n }\n } catch (err) {\n throw new DeleteIdError({\n schemaId,\n projectId: targetProjectId,\n dataset: targetDataset,\n options: {cause: err},\n })\n }\n })\n }),\n )\n\n const deletedIds = results\n .filter((r): r is PromiseFulfilledResult<DeleteResult> => r.status === 'fulfilled')\n .filter((r) => r.value.deleted)\n .map((r) => r.value)\n\n const deleteFailureIds = uniq(\n results\n .filter((r) => r.status === 'rejected')\n .map((result) => {\n const error = result.reason\n if (error instanceof DeleteIdError) {\n output.error(\n chalk.red(\n `Failed to delete schema \"${error.schemaId}\" in \"${projectIdDatasetPair(error)}\":\\n${error.message}`,\n ),\n )\n if (verbose) output.error(error)\n return error.schemaId\n }\n throw error\n }),\n )\n\n const notFound = uniq(\n results\n .filter((r): r is PromiseFulfilledResult<DeleteResult> => r.status === 'fulfilled')\n .filter((r) => !r.value.deleted)\n .filter(\n (r) =>\n !deletedIds.map(({schemaId}) => schemaId).includes(r.value.schemaId) &&\n !deleteFailureIds.includes(r.value.schemaId),\n )\n .map((r) => r.value.schemaId),\n )\n\n const success = deletedIds.length === ids.length\n if (success) {\n output.success(`Successfully deleted ${deletedIds.length}/${ids.length} schemas`)\n } else {\n output.error(\n [\n `Deleted ${deletedIds.length}/${ids.length} schemas.`,\n deletedIds.length\n ? `Successfully deleted ids:\\n${deletedIds\n .map((result) => `- ${result.schemaId} (in ${projectIdDatasetPair(result)})`)\n .join('\\n')}`\n : undefined,\n notFound.length\n ? `Ids not found in ${getProjectIdDatasetsOutString(projectDatasets)}:\\n${getStringList(notFound)}`\n : undefined,\n ...(deleteFailureIds.length\n ? [`Failed to delete ids:\\n${getStringList(deleteFailureIds)}`, 'Check logs for errors.']\n : []),\n ]\n .filter(isDefined)\n .join('\\n'),\n )\n }\n\n return success ? 'success' : 'failure'\n}\n"],"names":["DeleteIdError","Error","constructor","args","options","cause","message","name","schemaId","projectId","dataset","deleteSchemasActionForCommand","flags","context","deleteSchemaAction","manifestExtractor","createManifestExtractor","ids","extractManifest","manifestDir","verbose","parseDeleteSchemasConfig","output","apiClient","jsonReader","ensureManifestExtractSatisfied","schemaRequired","telemetry","client","createSchemaApiClient","workspaces","createManifestReader","getManifest","filter","workspace","projectDatasets","uniqueProjectIdDataset","results","Promise","allSettled","flatMap","targetProjectId","targetDataset","map","targetClient","withConfig","getDocument","deleted","deletedSchema","request","method","url","err","deletedIds","r","status","value","deleteFailureIds","uniq","result","error","reason","chalk","red","projectIdDatasetPair","notFound","includes","success","length","join","undefined","getProjectIdDatasetsOutString","getStringList","isDefined"],"mappings":"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"}
1
+ {"version":3,"file":"deleteSchemaAction.js","sources":["../../src/_internal/cli/actions/schema/deleteSchemaAction.ts"],"sourcesContent":["import {type CliCommandContext} from '@sanity/cli'\nimport chalk from 'chalk'\nimport {uniq} from 'lodash-es'\n\nimport {isDefined} from '../../../manifest/manifestTypeHelpers'\nimport {type SchemaStoreActionResult, type SchemaStoreContext} from './schemaStoreTypes'\nimport {createManifestExtractor, ensureManifestExtractSatisfied} from './utils/mainfestExtractor'\nimport {createManifestReader} from './utils/manifestReader'\nimport {createSchemaApiClient} from './utils/schemaApiClient'\nimport {\n getProjectIdDatasetsOutString,\n getStringList,\n projectIdDatasetPair,\n} from './utils/schemaStoreOutStrings'\nimport {parseDeleteSchemasConfig, type SchemaStoreCommonFlags} from './utils/schemaStoreValidation'\nimport {uniqueProjectIdDataset} from './utils/uniqueProjectIdDataset'\n\nexport interface DeleteSchemaFlags extends SchemaStoreCommonFlags {\n ids?: string\n dataset?: string\n}\n\ninterface DeleteResult {\n projectId: string\n dataset: string\n schemaId: string\n deleted: boolean\n}\n\nclass DeleteIdError extends Error {\n public schemaId: string\n public projectId: string\n public dataset: string\n constructor(args: {\n schemaId: string\n projectId: string\n dataset: string\n options?: ErrorOptions\n }) {\n super((args.options?.cause as {message?: string})?.message, args.options)\n this.name = 'DeleteIdError'\n this.schemaId = args.schemaId\n this.projectId = args.projectId\n this.dataset = args.dataset\n }\n}\n\nexport default function deleteSchemasActionForCommand(\n flags: DeleteSchemaFlags,\n context: CliCommandContext,\n): Promise<SchemaStoreActionResult> {\n return deleteSchemaAction(flags, {\n ...context,\n manifestExtractor: createManifestExtractor(context),\n })\n}\n\n/**\n * Deletes all stored schemas matching --ids in workspace datasets.\n *\n * Workspaces are determined by on-disk manifest file – not directly from sanity.config.\n * All schema store actions require a manifest to exist, so we regenerate it by default.\n * Manifest generation can be optionally disabled with --no-manifest-extract.\n * In this case the command uses and existing file or throws when missing.\n */\nexport async function deleteSchemaAction(\n flags: DeleteSchemaFlags,\n context: SchemaStoreContext,\n): Promise<SchemaStoreActionResult> {\n const {ids, dataset, extractManifest, manifestDir, verbose} = parseDeleteSchemasConfig(\n flags,\n context,\n )\n const {output, apiClient, jsonReader, manifestExtractor} = context\n\n // prettier-ignore\n if (!(await ensureManifestExtractSatisfied({schemaRequired: true, extractManifest, manifestDir, manifestExtractor, output, telemetry: context.telemetry}))) {\n return 'failure'\n }\n\n const {client, projectId} = createSchemaApiClient(apiClient)\n const manifest = await createManifestReader({manifestDir, output, jsonReader}).getManifest()\n\n const workspaces = manifest.workspaces.filter(\n (workspace) => !dataset || workspace.dataset === dataset,\n )\n\n const projectDatasets = uniqueProjectIdDataset(workspaces)\n\n const results = await Promise.allSettled(\n projectDatasets.flatMap(({projectId: targetProjectId, dataset: targetDataset}) => {\n return ids.map(async ({schemaId}): Promise<DeleteResult> => {\n const targetClient = client.withConfig({\n projectId: targetProjectId,\n dataset: targetDataset,\n })\n try {\n const existing = await targetClient.getDocument(schemaId)\n if (!existing) {\n return {\n projectId: targetProjectId,\n dataset: targetDataset,\n schemaId,\n deleted: false,\n }\n }\n\n const deletedSchema = await targetClient.request<{deleted: boolean} | undefined>({\n method: 'DELETE',\n url: `/projects/${targetProjectId}/datasets/${targetDataset}/schemas/${schemaId}`,\n })\n return {\n projectId: targetProjectId,\n dataset: targetDataset,\n schemaId,\n deleted: !!deletedSchema?.deleted,\n }\n } catch (err) {\n throw new DeleteIdError({\n schemaId,\n projectId: targetProjectId,\n dataset: targetDataset,\n options: {cause: err},\n })\n }\n })\n }),\n )\n\n const deletedIds = results\n .filter((r): r is PromiseFulfilledResult<DeleteResult> => r.status === 'fulfilled')\n .filter((r) => r.value.deleted)\n .map((r) => r.value)\n\n const deleteFailureIds = uniq(\n results\n .filter((r) => r.status === 'rejected')\n .map((result) => {\n const error = result.reason\n if (error instanceof DeleteIdError) {\n output.error(\n chalk.red(\n `Failed to delete schema \"${error.schemaId}\" in \"${projectIdDatasetPair(error)}\":\\n${error.message}`,\n ),\n )\n if (verbose) output.error(error)\n return error.schemaId\n }\n throw error\n }),\n )\n\n const notFound = uniq(\n results\n .filter((r): r is PromiseFulfilledResult<DeleteResult> => r.status === 'fulfilled')\n .filter((r) => !r.value.deleted)\n .filter(\n (r) =>\n !deletedIds.map(({schemaId}) => schemaId).includes(r.value.schemaId) &&\n !deleteFailureIds.includes(r.value.schemaId),\n )\n .map((r) => r.value.schemaId),\n )\n\n const success = deletedIds.length === ids.length\n if (success) {\n output.success(`Successfully deleted ${deletedIds.length}/${ids.length} schemas`)\n } else {\n output.error(\n [\n `Deleted ${deletedIds.length}/${ids.length} schemas.`,\n deletedIds.length\n ? `Successfully deleted ids:\\n${deletedIds\n .map((result) => `- ${result.schemaId} (in ${projectIdDatasetPair(result)})`)\n .join('\\n')}`\n : undefined,\n notFound.length\n ? `Ids not found in ${getProjectIdDatasetsOutString(projectDatasets)}:\\n${getStringList(notFound)}`\n : undefined,\n ...(deleteFailureIds.length\n ? [`Failed to delete ids:\\n${getStringList(deleteFailureIds)}`, 'Check logs for errors.']\n : []),\n ]\n .filter(isDefined)\n .join('\\n'),\n )\n }\n\n return success ? 'success' : 'failure'\n}\n"],"names":["DeleteIdError","Error","constructor","args","options","cause","message","name","schemaId","projectId","dataset","deleteSchemasActionForCommand","flags","context","deleteSchemaAction","manifestExtractor","createManifestExtractor","ids","extractManifest","manifestDir","verbose","parseDeleteSchemasConfig","output","apiClient","jsonReader","ensureManifestExtractSatisfied","schemaRequired","telemetry","client","createSchemaApiClient","workspaces","createManifestReader","getManifest","filter","workspace","projectDatasets","uniqueProjectIdDataset","results","Promise","allSettled","flatMap","targetProjectId","targetDataset","map","targetClient","withConfig","getDocument","deleted","deletedSchema","request","method","url","err","deletedIds","r","status","value","deleteFailureIds","uniq","result","error","reason","chalk","red","projectIdDatasetPair","notFound","includes","success","length","join","undefined","getProjectIdDatasetsOutString","getStringList","isDefined"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import get from "lodash/get.js";
1
+ import { upperFirst, uniqBy, startCase, flatten, get } from "lodash-es";
2
2
  import oneline from "oneline";
3
3
  import { hideBin } from "yargs/helpers";
4
4
  import yargs from "yargs/yargs";
@@ -8,11 +8,7 @@ import { promise } from "get-it/middleware";
8
8
  import { generateHelpUrl } from "./generate-help-url.esm.js";
9
9
  import { Schema } from "@sanity/schema";
10
10
  import { isDeprecationConfiguration } from "@sanity/types";
11
- import startCase from "lodash/startCase.js";
12
- import uniqBy from "lodash/uniqBy.js";
13
- import upperFirst from "lodash/upperFirst.js";
14
11
  import logSymbols from "log-symbols";
15
- import flatten from "lodash/flatten.js";
16
12
  import pluralize from "pluralize-esm";
17
13
  import { getGraphQLAPIs } from "./getGraphQLAPIs.js";
18
14
  const request = getIt([promise()]);