Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Broken Korean text in sandpack-react test error messages #1134

Open
1 of 2 tasks
dmhuh opened this issue May 7, 2024 · 1 comment
Open
1 of 2 tasks

Broken Korean text in sandpack-react test error messages #1134

dmhuh opened this issue May 7, 2024 · 1 comment
Labels
bug Something isn't working triage New issues that needs consideration

Comments

@dmhuh
Copy link

dmhuh commented May 7, 2024

Bug report

Packages affected

  • sandpack-client
  • sandpack-react

Description of the problem

When a test case fails and the test description is in Korean, the error message displays broken characters, as below:

Screenshot 2024-05-07 at 11 29 40 AM

What were you doing when the problem occurred?

What steps can we take to reproduce the problem?

  1. Visit the Sandpack Preset playground on the Sandpack documentation site.

  2. Change the test description in the code to Korean. (e.g., 덧셈의 교환 법칙)

  3. Modify the test case to intentionally fail. Here is an example modification.

import { add } from './add';

describe('add', () => {
  test('덧셈의 교환 법칙', () => {
    expect(add(1, 2)).toBe(add(3, 1));  // This change will cause the test to fail
  });
});
  1. Run the test to observe the error message with broken characters.

Link to sandbox: -

Your Environment

Software Name/Version
Sandpack-client version x
Sandpack-react version 2.1.10
Browser Chrome
Operating System MacOS
@dmhuh dmhuh added bug Something isn't working triage New issues that needs consideration labels May 7, 2024
@kangju2000
Copy link
Contributor

After investigating this issue, I've observed that the same error occurs in CodeSandbox. This suggests that the problem needs to be addressed in the codesandbox-client repository.

I attempted to debug locally by logging to the console, but encountered difficulties running the project. As a result, I'm sharing the code sections that I suspect may be related to the issue:

1. Remote Module Fetching

Location: https://github.com/codesandbox/codesandbox-client/blob/master/packages/sandpack-core/src/manager.ts#L139-L156

async function fetchRemoteModule(url: string): Promise<IRemoteModuleResult> {
  try {
    const r = await fetchWithRetries(url);

    if (!r.ok) {
      throw new Error(`Fetching ESModule return error status ${r.status}`);
    }

    const content = await r.text();
    return {
      url: r.url,
      content,
    };
  } catch (err) {
    console.error(err);
    throw new ModuleNotFoundError(url, true);
  }
}

Potential solution

The fetchWithRetries function accepts a second argument for fetch's requestInit. We could add encoding-related logic there.

2. File Evaluation

Location: https://github.com/codesandbox/codesandbox-client/blob/master/packages/app/src/sandbox/eval/transpilers/babel/worker/evaluate.ts#L197-L220

export function evaluateFromPath(
  fs: any,
  BFSRequire: Function,
  path: string,
  currentPath: string,
  availablePlugins: Object,
  availablePresets: Object
) {
  const resolvedPath = patchedResolve().sync(path, {
    filename: currentPath,
    extensions: ['.cjs', '.js', '.json'],
  });

  const code = fs.readFileSync(resolvedPath).toString();

  return evaluate(
    fs,
    BFSRequire,
    code,
    resolvedPath,
    availablePlugins,
    availablePresets
  );
}

Potential solution

Encoding issues might arise during file reading. We could use the detect-character-encoding library (or implement custom logic) to identify the character encoding, then use iconv-lite to convert it to UTF-8.

It seems that identifying the correct locations for encoding handling is key to resolving this issue. Your insights on this would be greatly appreciated. @danilowoz 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working triage New issues that needs consideration
Projects
None yet
Development

No branches or pull requests

2 participants