Convert String to Object for the Slug Type
import { studioClient } from './studioClient';
import cq from 'concurrent-queue';
// Create a queue to limit the rate at which you write changes to Sanity
let queue = cq()
.limit({ concurrency: 2 })
.process((task) => {
return new Promise(function (resolve, reject) {
setTimeout(resolve.bind(undefined, task), 1000);
});
});
const mutateDocs = async () => {
//Fetch the documents you need to mutate
const query = `*[defined(slug)]`;
const docs = await studioClient.fetch(query);
// Loop through all of the docs returned from our query
for (const doc of docs) {
queue(doc).then(async () => {
// Add a message to help us know the upload is happening
console.log(`Mutating ${doc._id}`);
// Tell the client to patch the current document
studioClient
.patch(doc._id)
// Set the field
.set({
slug: {
_type: 'slug',
current: doc.slug
}
})
.commit()
.then((updatedDoc) =>
console.log(`Hurray, the doc is updated! New document:`, updatedDoc)
)
.catch((err) =>
console.error('Oh no, the update failed: ', err.message)
);
});
}
};
mutateDocs();concurrent-queueand replace the
studioClientwith a client you configure. Then you'll run it using
sanity exec <path-to-script> --withUserTokenimport { studioClient } from './studioClient';import client from 'part:@sanity/base/client';Was this answer helpful?
Sanity – Build the way you think, not the way your CMS thinks
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.