Skip to content

state_descriptors_fixed occurs when object is enumerable, configurable and writable and has value #15607

Description

@mchoo7

Describe the bug

I'm trying to make a wrapper for Chart.js. When there is data is passed as plain non-$state prop, it works fine. But when data is defined to be reactive with $state, the chart doesn't error due to the following error in the log section. This causes problem in Vitest and Storybook, making them unusable.

Reproduction

Clone https://github.com/sveltejs-labs/Chart.js and run npm run dev with browser developer console opened. It will print the properties of data object and print

Unhandled Promise Rejection: Svelte error: state_descriptors_fixed
Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.

Logs

Chart.js on  main [$] is 📦 1.1.0 via ⬢ v22.14.0 
➜ bun run dev
$ vite dev

  VITE v6.2.3  ready in 1301 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
  ➜  press h + enter to show help
{
  labels: {
    value: [
      'January', 'February',
      'March',   'April',
      'May',     'June',
      'July'
    ],
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.0': {
    value: 'January',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.1': {
    value: 'February',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.2': {
    value: 'March',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.3': {
    value: 'April',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.4': {
    value: 'May',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.5': {
    value: 'June',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.6': {
    value: 'July',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'labels.length': { value: 7, writable: true, enumerable: false, configurable: false },
  datasets: {
    value: [ [Object] ],
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0': {
    value: {
      label: 'My First Dataset',
      data: [Array],
      backgroundColor: [Array],
      borderColor: [Array],
      borderWidth: 1
    },
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.label': {
    value: 'My First Dataset',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.data': {
    value: [
      65, 59, 80, 81,
      56, 55, 40
    ],
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.data.0': { value: 65, writable: true, enumerable: true, configurable: true },
  'datasets.0.data.1': { value: 59, writable: true, enumerable: true, configurable: true },
  'datasets.0.data.2': { value: 80, writable: true, enumerable: true, configurable: true },
  'datasets.0.data.3': { value: 81, writable: true, enumerable: true, configurable: true },
  'datasets.0.data.4': { value: 56, writable: true, enumerable: true, configurable: true },
  'datasets.0.data.5': { value: 55, writable: true, enumerable: true, configurable: true },
  'datasets.0.data.6': { value: 40, writable: true, enumerable: true, configurable: true },
  'datasets.0.data.length': { value: 7, writable: true, enumerable: false, configurable: false },
  'datasets.0.backgroundColor': {
    value: [
      'rgba(255, 99, 132, 0.2)',
      'rgba(255, 159, 64, 0.2)',
      'rgba(255, 205, 86, 0.2)',
      'rgba(75, 192, 192, 0.2)',
      'rgba(54, 162, 235, 0.2)',
      'rgba(153, 102, 255, 0.2)',
      'rgba(201, 203, 207, 0.2)'
    ],
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.0': {
    value: 'rgba(255, 99, 132, 0.2)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.1': {
    value: 'rgba(255, 159, 64, 0.2)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.2': {
    value: 'rgba(255, 205, 86, 0.2)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.3': {
    value: 'rgba(75, 192, 192, 0.2)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.4': {
    value: 'rgba(54, 162, 235, 0.2)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.5': {
    value: 'rgba(153, 102, 255, 0.2)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.6': {
    value: 'rgba(201, 203, 207, 0.2)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.backgroundColor.length': { value: 7, writable: true, enumerable: false, configurable: false },
  'datasets.0.borderColor': {
    value: [
      'rgb(255, 99, 132)',
      'rgb(255, 159, 64)',
      'rgb(255, 205, 86)',
      'rgb(75, 192, 192)',
      'rgb(54, 162, 235)',
      'rgb(153, 102, 255)',
      'rgb(201, 203, 207)'
    ],
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.0': {
    value: 'rgb(255, 99, 132)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.1': {
    value: 'rgb(255, 159, 64)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.2': {
    value: 'rgb(255, 205, 86)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.3': {
    value: 'rgb(75, 192, 192)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.4': {
    value: 'rgb(54, 162, 235)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.5': {
    value: 'rgb(153, 102, 255)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.6': {
    value: 'rgb(201, 203, 207)',
    writable: true,
    enumerable: true,
    configurable: true
  },
  'datasets.0.borderColor.length': { value: 7, writable: true, enumerable: false, configurable: false },
  'datasets.0.borderWidth': { value: 1, writable: true, enumerable: true, configurable: true },
  'datasets.length': { value: 1, writable: true, enumerable: false, configurable: false }
}

System Info

System:
    OS: macOS 15.3.2
    CPU: (8) arm64 Apple M2
    Memory: 655.97 MB / 24.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 22.14.0 - ~/.local/state/fnm_multishells/75553_1742872528675/bin/node
    Yarn: 1.22.22 - ~/.local/state/fnm_multishells/75553_1742872528675/bin/yarn
    npm: 10.9.2 - ~/.local/state/fnm_multishells/75553_1742872528675/bin/npm
    bun: 1.2.5 - ~/.bun/bin/bun
  Browsers:
    Chrome: 134.0.6998.165
    Safari: 18.3.1
  npmPackages:
    svelte: ^5.25.3 => 5.25.3

Severity

blocking all usage of svelte

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    awaiting submitterneeds a reproduction, or clarification

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions