Skip to content
This repository was archived by the owner on Mar 25, 2026. It is now read-only.
This repository was archived by the owner on Mar 25, 2026. It is now read-only.

Restrict generalization by scoping private keys #147

Description

@Ayc0

TL;DR

Add scoping mechanism for custom attributes, like:

import foo from 'bar' with { "data-foo": "bar" };
// or
import foo from 'bar' with { "custom": { "foo": "bar" } };
// or similar

Problem

Avoid another possible smoothgate in the future.

Explanation

One of the reasons for the redesign of this proposal with with {…} is to allow tools to add custom fields in them (like bundlers or runtimes for instance).

But if there is another proposal in the future to add another field (like with { type, priority }), this could face the same risks as when we want to add methods in prototypes: aka clashing with potential custom keys already added by frameworks (like what happened for .flat vs .flatten).

What about introducing in the spec the fact that, just like in HTML, certain fields (for instance in data-*) will never be used by the spec.
This would allow libraries / bundlers to introduce their custom behaviors using them (if they want a data-bundlerA-priority, they'll without any risk of conflicts).
And will also allow the TC39 to introduce new keys in the spec later without potential conflicts.

The name data-* is just an idea, but it could be any other form of scoping mechanism, like: with { custom: {…} } etc.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions