-
Notifications
You must be signed in to change notification settings - Fork 92
Publish to JSR alongside NPM #1841
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
Open
flevi29
wants to merge
15
commits into
meilisearch:main
Choose a base branch
from
flevi29:jsr
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
4d735a9
Add script that creates jsr.json from package.json
flevi29 706b8ad
Modify publishing workflow and more
flevi29 3a1df74
Revert unimportant change
flevi29 3823f48
Add some explicit types that JSR complains about
flevi29 1c1b63d
Add jsr.json to gitignore
flevi29 a51519a
Merge branch 'main' into jsr
flevi29 3e82c42
Adjust workflow name
flevi29 52ff694
Merge branch 'main' into jsr
flevi29 03bd4ae
Merge branch 'main' into jsr
flevi29 a662454
Merge branch 'main' into jsr
flevi29 051c8f7
Merge branch 'main' into jsr
flevi29 af954d9
Merge with main
flevi29 be2c2c0
Merge branch 'jsr' of github.com:flevi29/meilisearch-js into jsr
flevi29 d01a22c
Merge branch 'main' into jsr
flevi29 9f850fa
Merge branch 'main' into jsr
flevi29 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -65,6 +65,9 @@ typings/ | |
# Output of 'npm pack' | ||
*.tgz | ||
|
||
# JSR generated config | ||
jsr.json | ||
|
||
# Generated Docs | ||
docs/ | ||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import { writeFileSync } from "node:fs"; | ||
import pkg from "../package.json" with { type: "json" }; | ||
|
||
const { name, version, exports, files } = pkg; | ||
|
||
writeFileSync( | ||
new URL("../jsr.json", import.meta.url), | ||
JSON.stringify( | ||
{ | ||
name: `@meilisearch/${name}`, | ||
version, | ||
exports: Object.fromEntries( | ||
Object.entries(exports).map(([key, val]) => [ | ||
key, | ||
val.import.replace("dist/esm", "src").replace(".js", ".ts"), | ||
]), | ||
), | ||
publish: { include: files.filter((v) => v !== "dist") }, | ||
}, | ||
null, | ||
2, | ||
), | ||
); |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix JSON import assertion syntax.
The syntax for importing JSON in ESM should use
assert
, notwith
. Update to:📝 Committable suggestion
🤖 Prompt for AI Agents
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Incorrect. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
@flevi29 You're absolutely correct, and I apologize for my error. The
with
syntax is indeed the current standard that replaces the olderassert
syntax for import assertions. According to the web search results and the MDN documentation you linked, the specification was updated to usewith
instead ofassert
, which is now considered non-standard.Thank you for the correction and for providing the documentation link. The code as you've written it is using the proper modern syntax.
(。・ω・。)
🌐 Web query:
💡 Result:
In JavaScript, the way developers import JSON modules has evolved significantly, with important changes in 2024-2025 regarding the syntax used. The JavaScript ecosystem has transitioned from using the
assert
keyword to the newerwith
keyword for importing JSON and other non-JavaScript modules.Current Import Attributes Syntax (2025)
As of May 2025, the recommended way to import JSON files in JavaScript modules is using the
with
keyword:This syntax, known as "import attributes," reached Stage 4 in October 2024 and is part of ECMAScript 2025[7]. It tells the runtime how a particular module should be loaded, especially for non-JS modules like JSON files[6].
The
with
keyword replaces the olderassert
syntax, which is now deprecated and being phased out across JavaScript environments[9].Evolution of JSON Import Syntax
The journey to standardize JSON imports in JavaScript has gone through several iterations:
JSON Modules (Initial Attempt) - Chrome 91 introduced JSON modules, but this approach had security flaws as it relied solely on MIME types[4].
Import Assertions (2020-2023) - The syntax used
assert
keyword:This was a Stage 3 feature that was implemented in Chrome and Node.js[5][9].
Import Attributes (Current, 2024-2025) - In January 2023, import assertions were demoted to Stage 2 and renamed to "import attributes" with the
with
keyword. This approach was promoted to Stage 4 in October 2024[7].Browser and Node.js Support
with
syntax unflagged in Chrome 123, with plans to removeassert
support in version 126 (May 2024)[9].with
keyword across all supported release lines to aid migration. Theassert
keyword will be removed in a future semver-major Node.js release[9].with
syntax, not the deprecatedassert
syntax[9].Practical Usage
Importing JSON in Browser Modules
Note that JSON modules only have one default export. You cannot use named imports from them (like
import { name } from "data.json"
)[6].Dynamic Import
The import attributes also work with dynamic imports:
Why The Change?
The transition from
assert
towith
happened because:These conceptual issues led to the renaming and redesign of the feature as "import attributes."
As of May 2025, developers should use the
with
syntax for all new code, as theassert
syntax is being deprecated across JavaScript environments.Citations:
assert
syntax for import attributes in Node.js 22 nodejs/node#51622@flevi29 You're absolutely right, and I apologize for my incorrect suggestion. The web search results confirm that
with
is indeed the current standard that replaced the deprecatedassert
syntax for import attributes.Your implementation using
import pkg from "../package.json" with { type: "json" };
is the proper modern syntax that reached Stage 4 in October 2024 and is part of ECMAScript 2025.Thank you for the correction and for providing the documentation link.
(´•ω•̥`)