Checkpoint before integration and package validation. Assisted-by: SurmAgent:unknown [read] [edit] [bash]
36 lines
1.6 KiB
JavaScript
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);
|