😎 Discover cool tips and tricks for customization in our next Developer Deep Dive virtual event - sign up now!

SyntaxError: Cannot Use Import Statement Outside a Module

7 replies
Last updated: Apr 30, 2021
user A
trying to fire up your awesome translation gist - where should this file live in the sanity project ? Trying to run as a script in the root and getting errors https://gist.github.com/bjoerge/6c0b5bdcd316fb3631f48bdaefaf1456

import client from 'part:@sanity/base/client'
^^^^^^

SyntaxError: Cannot use import statement outside a module
Apr 21, 2021, 10:54 PM
Figured it out - need to run using
sanity exec
Apr 21, 2021, 11:26 PM
πŸ‘
Apr 22, 2021, 10:53 AM
I think the code expects there to be a
document.field._type
field that indicates which type of field it is, but it's not included in the data returned from the
/export
endpoint: https://gist.github.com/bjoerge/6c0b5bdcd316fb3631f48bdaefaf1456#file-translate-js-L53
Can anyone from the sanity side speak to whether or not this assumption is correct or if I'm missing something?
Apr 28, 2021, 5:35 PM
user M
so I definitely am using field level translations (per that article) - at least I think I am : ) for whatever reason I'm not seeing any other fields beyond the value in the output (on the field level)
here's the schema of the document I'm trying to localize:

import { MdLocalMovies as icon } from 'react-icons/md'

export default {
  name: 'film',
  title: 'Film',
  type: 'document',
  icon,
  fields: [
    {
      name: 'title',
      title: 'Title',
      type: 'localeString',
      validation: Rule => Rule.required()
    },
    {
      name: 'filmId',
      title: 'Film Id',
      type: 'string'
    },
    {
      name: 'latinTitle',
      title: 'Latin Title',
      type: 'string'
    },
    {
      name: 'slug',
      title: 'Slug',
      type: 'slug',
      options: {
        source: 'latinTitle',
        maxLength: 200 // will be ignored if slugify is set
      },
      validation: Rule => Rule.required()
    },
    {
      name: 'releaseDate',
      title: 'Release date',
      type: 'number'
    },
    {
      name: 'subject',
      title: 'Subject',
      type: 'localeString',
    },
    {
      name: 'productionId',
      title: 'Production ID',
      type: 'string'
    },
    {
      name: 'type',
      title: 'Type',
      type: 'localeString',
    },
    {
      name: 'abstract',
      title: 'Abstract',
      type: 'localeString',
    },
    {
      title: 'Keywords',
      name: 'keywords',
      type: 'localeArray'
    },
    {
      title: 'Latin Keywords',
      name: 'latinKeywords',
      type: 'array',
      of: [{ type: 'string' }]
    },
    {
      name: 'studio',
      title: 'Studio',
      type: 'localeString',
    },
    {
      name: 'director',
      title: 'Director',
      type: 'localeString'
    },
    {
      name: 'operators',
      title: 'Operators',
      type: 'localeString'
    },
    {
      name: 'otherCreators',
      title: 'Other Creators',
      type: 'localeString'
    },
    {
      name: 'sound',
      title: 'Sound',
      type: 'string'
    },
    {
      name: 'color',
      title: 'Color',
      type: 'string'
    },
    {
      name: 'numberOfParts',
      title: 'Number of Parts',
      type: 'number'
    },
    {
      name: 'meterage',
      title: 'Meterage',
      type: 'string'
    },
    {
      name: 'oldUrl',
      title: 'Old URL',
      type: 'url',
      readOnly: true
    }
  ]
}
and the localeString schema:

import {SUPPORTED_LANGUAGES} from './languages'

export default {
    type: 'object',
    name: 'localeString',
    fields: SUPPORTED_LANGUAGES.map((lang) => ({
      name: lang.id,
      type: 'string',
      title: lang.title,
    })),
  }
Apr 30, 2021, 7:22 PM
user M
so I definitely am using field level translations (per that article) - at least I think I am : ) for whatever reason I'm not seeing any other fields beyond the value in the output (on the field level)
here's the schema of the document I'm trying to localize:

import { MdLocalMovies as icon } from 'react-icons/md'

export default {
  name: 'film',
  title: 'Film',
  type: 'document',
  icon,
  fields: [
    {
      name: 'title',
      title: 'Title',
      type: 'localeString',
      validation: Rule => Rule.required()
    },
    {
      name: 'filmId',
      title: 'Film Id',
      type: 'string'
    },
    {
      name: 'latinTitle',
      title: 'Latin Title',
      type: 'string'
    },
    {
      name: 'slug',
      title: 'Slug',
      type: 'slug',
      options: {
        source: 'latinTitle',
        maxLength: 200 // will be ignored if slugify is set
      },
      validation: Rule => Rule.required()
    },
    {
      name: 'releaseDate',
      title: 'Release date',
      type: 'number'
    },
    {
      name: 'subject',
      title: 'Subject',
      type: 'localeString',
    },
    {
      name: 'productionId',
      title: 'Production ID',
      type: 'string'
    },
    {
      name: 'type',
      title: 'Type',
      type: 'localeString',
    },
    {
      name: 'abstract',
      title: 'Abstract',
      type: 'localeString',
    },
    {
      title: 'Keywords',
      name: 'keywords',
      type: 'localeArray'
    },
    {
      title: 'Latin Keywords',
      name: 'latinKeywords',
      type: 'array',
      of: [{ type: 'string' }]
    },
    {
      name: 'studio',
      title: 'Studio',
      type: 'localeString',
    },
    {
      name: 'director',
      title: 'Director',
      type: 'localeString'
    },
    {
      name: 'operators',
      title: 'Operators',
      type: 'localeString'
    },
    {
      name: 'otherCreators',
      title: 'Other Creators',
      type: 'localeString'
    },
    {
      name: 'sound',
      title: 'Sound',
      type: 'string'
    },
    {
      name: 'color',
      title: 'Color',
      type: 'string'
    },
    {
      name: 'numberOfParts',
      title: 'Number of Parts',
      type: 'number'
    },
    {
      name: 'meterage',
      title: 'Meterage',
      type: 'string'
    },
    {
      name: 'oldUrl',
      title: 'Old URL',
      type: 'url',
      readOnly: true
    }
  ]
}
and the localeString schema:

import {SUPPORTED_LANGUAGES} from './languages'

export default {
    type: 'object',
    name: 'localeString',
    fields: SUPPORTED_LANGUAGES.map((lang) => ({
      name: lang.id,
      type: 'string',
      title: lang.title,
    })),
  }
Apr 30, 2021, 7:22 PM
Ended up giving up and writing my own script that's a bit more simple, but curious to know what I was doing wrong
Apr 30, 2021, 7:23 PM
Ended up giving up and writing my own script that's a bit more simple, but curious to know what I was doing wrong
Apr 30, 2021, 7:23 PM

Sanity– build remarkable experiences at scale

Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.

Was this answer helpful?