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

mol_data_all не работает в ESM (SyntaxError: The requested module 'mol_data_all' does not provide an export named '$mol_data_email') #692

Open
kravetsone opened this issue Jul 16, 2024 · 6 comments

Comments

@kravetsone
Copy link

Describe the bug

Ошибка об отсутствующем импорте появляется когда мы запускаем наш скрипт как модуль (ESM)

Эта ошибка блокирует тестирование Bun в бенчмарке moltar/typescript-runtime-type-benchmarks#1225

To Reproduce

Steps to reproduce the behavior:

  1. Создать файл index.mjs с таким содержимым:
import {
	$mol_data_email,
	$mol_data_integer,
	$mol_data_optional,
	$mol_data_pipe,
	$mol_data_record,
	$mol_data_string,
	$mol_data_variant,
} from "mol_data_all";

const PersonDTO = $mol_data_record({
	name: $mol_data_string,
	age: $mol_data_optional($mol_data_integer),
	birthday: $mol_data_pipe($mol_data_string),
});

// Derived Type
const UserDTO = $mol_data_record({
	...PersonDTO.config,
	phone: $mol_data_variant($mol_data_string, $mol_data_integer),
	mail: $mol_data_email,
});

// Ensure this is a User
const jin = UserDTO({
	name: "Jin",
	age: 33,
	birthday: "1984-08-04T12:00:00Z",
	phone: 791234567890,
	mail: "[email protected]",
});

console.log(jin);
  1. Запустить как node index.mjs
  2. Плакать из-за ошибки

Expected behavior

Всё должно работать

Environment

Node.js - v20.9.0

@nin-jin
Copy link
Member

nin-jin commented Aug 12, 2024

Подозреваю нужно писать что-то такое, так как там экспортируется только default:

import * as $ from "mol_data_all";
const {
	$mol_data_email,
	$mol_data_integer,
	$mol_data_optional,
	$mol_data_pipe,
	$mol_data_record,
	$mol_data_string,
	$mol_data_variant,
} = $

@kravetsone
Copy link
Author

Подозреваю нужно писать что-то такое, так как там экспортируется только default:

import * as $ from "mol_data_all";
const {
	$mol_data_email,
	$mol_data_integer,
	$mol_data_optional,
	$mol_data_pipe,
	$mol_data_record,
	$mol_data_string,
	$mol_data_variant,
} = $

А нельзя ли собрать нормально? ибо по типам этого не было видно и если импортировать cjs то всё бы работало
Можно хотя бы поставлять d.ts + d.mts
А ещё зачем каждый день выпускается версия где ничего кроме бампа не происходит?
Ещё заметил что в последних версиях пропали d.ts

@nin-jin
Copy link
Member

nin-jin commented Sep 2, 2024

Было бы можно - собирали бы "нормально". TS умеет это "нормально" импортировать, если настроить tsconfig (esModuleInterop, емнип).
Версия бампается потому, что сборщик не знает есть ли фактически изменения. ПР-ы приветствуются.
дтс-ки все на месте: https://www.npmjs.com/package/mol_time_all?activeTab=code

@kravetsone
Copy link
Author

Было бы можно - собирали бы "нормально". TS умеет это "нормально" импортировать, если настроить tsconfig (esModuleInterop, емнип).
Версия бампается потому, что сборщик не знает есть ли фактически изменения. ПР-ы приветствуются.
дтс-ки все на месте: https://www.npmjs.com/package/mol_time_all?activeTab=code

TS умеет это "нормально" импортировать, если настроить tsconfig (esModuleInterop, емнип).

Но причём тут Интероп? Пакет же поставляется и в cjs и в esm. Но типы для них одинаковые (хотя в действительности если использовать esm импорт - не экспортируется что нужно по типам)

@nin-jin
Copy link
Member

nin-jin commented Sep 8, 2024

Боюсь я не готов сейчас снова в это погружаться. Если есть идеи как улучшить интероп, будет классно.

@kravetsone
Copy link
Author

Боюсь я не готов сейчас снова в это погружаться. Если есть идеи как улучшить интероп, будет классно.

Я бы тоже помог и посмотрел но без погружения в мол думаю это будет не очень лёгкой задачей)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants