Files
sausage/userland/qjs/source/tests/import-attributes-identity.js
T
surma d44f1d9677 Build separate native and WASI pipelines with shared multicall names
Checkpoint before integration and package validation.

Assisted-by: SurmAgent:unknown [read] [edit] [bash]
2026-11-12 09:36:27 +00:00

36 lines
1.6 KiB
JavaScript

import { assert } from "./assert.js";
/* Module identity is keyed by (specifier, import attributes): the same
file can be loaded as different module types, equal attribute sets
share one instance, and this module can import itself as text. */
import textDefault from "./fixture_import_attributes.json" with { type: "text" };
import jsonDefault from "./fixture_import_attributes.json" with { type: "json" };
import jsonAgain from "./fixture_import_attributes.json" with { type: "json" };
import self from "./import-attributes-identity.js" with { type: "text" };
/* same file, different types, distinct modules */
assert(typeof textDefault, "string");
assert(JSON.parse(textDefault).answer, 42);
assert(typeof jsonDefault, "object");
assert(jsonDefault.answer, 42);
/* equal attributes resolve to the same module instance */
assert(jsonAgain === jsonDefault, true);
/* a JS module can import its own source as text */
assert(typeof self, "string");
assert(self.includes("import-attributes-identity"), true);
/* dynamic imports share identity with static imports */
const viaJson = await import("./fixture_import_attributes.json", { with: { type: "json" } });
assert(viaJson.default === jsonDefault, true);
const viaText = await import("./fixture_import_attributes.json", { with: { type: "text" } });
assert(viaText.default, textDefault);
/* no attributes and .json suffix still defaults to JSON, as another
distinct module */
const plain = await import("./fixture_import_attributes.json");
assert(typeof plain.default, "object");
assert(plain.default === jsonDefault, false);