Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Add --default-platform option to package js #457

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

Merged
kateinoigakukun merged 11 commits into swiftwasm:main from t089:platform-arg
Oct 24, 2025

Conversation

@t089
Copy link
Contributor

@t089 t089 commented Oct 18, 2025

Currently swift package js only generates code for the "browser" platform.

This PR adds a --platform node|browser [default: browser] argument that lets you control this behaviour. In case of node it will generate a init function that calls defaultNodeSetup instead of defaultBrowserSetup.

t089 added 7 commits October 18, 2025 09:34
1. Fixed missing type export (platforms/node.d.ts)
 - Exported DefaultNodeSetupOptions type that is referenced in index.js
2. Updated index.d.ts to support both platforms
 - Made init() function accept DefaultNodeSetupOptions for node platform
 - Made init() function accept Options for browser platform
3. Fixed conditional compilation in node.js
 - Wrapped getImports() in HAS_IMPORTS conditional (platforms/node.js)
test both browser and node platform variants
/// Name of the package (default: lowercased Package.swift name)
var packageName: String?
/// Target platform for the generated JavaScript (default: browser)
var platform: String?
Copy link
Member

@MaxDesiatov MaxDesiatov Oct 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this become an enum Platform: CaseIterable, so then you would rely on .allCases to dynamically compute help string for all available platforms in the help output you've added below for this new option?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good! Will do

Copy link
Member

Please run ./Utilities/format.py for the formatting check to pass.

@MaxDesiatov MaxDesiatov added enhancement New feature or request dependencies Pull requests that update a dependency file labels Oct 20, 2025
@MaxDesiatov MaxDesiatov changed the title (削除) Draft: adds a --platform flag to js (削除ここまで) (追記) Draft: add --platform option to package js (追記ここまで) Oct 20, 2025
@MaxDesiatov MaxDesiatov changed the title (削除) Draft: add --platform option to package js (削除ここまで) (追記) Add --platform option to package js (追記ここまで) Oct 20, 2025
Copy link
Member

MaxDesiatov commented Oct 20, 2025
edited
Loading

Thanks for the updates! Cleaned up the title:

  • "Draft" in the title is not needed, as "Draft" status of PRs already makes that clear.
  • We use infinitive form of verbs in PR and commit titles, as with character limit in this field non-infinitive forms don't bring any useful information.
  • --platform is not a flag, as flags denote binary state and don't take any parameters. E.g. --enable-platform/--disable-platform without any parameters would be a flag, but --platform node/--platform browser is an option. If we were able to use Swift Argument Parser in plugins, this would use the @Option property wrapper.
t089 reacted with thumbs up emoji

Copy link
Member

@kateinoigakukun kateinoigakukun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for putting your effort here! Overall it makes sense to me!

Let me leave a few feedbacks before mering:

  • I'd like to keep the generated JS package to be runtime independent as much as possible, so it might be better to name the option as --default-platform, indicating that only the default entrypoint index.js is platform dependent, and rest of the modules are still platform independent. The clarification would be partuculary helpful for library author publishing a platform-agnostic JS package containing the JSKit genrated code.
  • I'm not a big fan of adding @types/node dependency here because we use only small surface of Node.js API, and most of the usage is not visible from users (except for Worker type). I think we can loosen type checks in the Node.js for the sake of the simplicity.

If that sounds reasonable, I can make changes on the top of your branch and merge this PR :)

Copy link
Contributor Author

t089 commented Oct 21, 2025

Cool, yeah that seems reasonable, feel free to to change the patch accordingly! Thank you.

kateinoigakukun reacted with heart emoji

@kateinoigakukun kateinoigakukun marked this pull request as ready for review October 24, 2025 06:13
Copy link
Member

@kateinoigakukun kateinoigakukun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@kateinoigakukun kateinoigakukun merged commit 84243a4 into swiftwasm:main Oct 24, 2025
9 checks passed
@kateinoigakukun kateinoigakukun changed the title (削除) Add --platform option to package js (削除ここまで) (追記) Add --default-platform option to package js (追記ここまで) Oct 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@MaxDesiatov MaxDesiatov MaxDesiatov left review comments

@kateinoigakukun kateinoigakukun kateinoigakukun approved these changes

Assignees

No one assigned

Labels

dependencies Pull requests that update a dependency file enhancement New feature or request

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /