Skip to content

windy plugin: release 4.1.11#346

Merged
vicb merged 3 commits intomasterfrom
plugin-4.1.10
Feb 20, 2025
Merged

windy plugin: release 4.1.11#346
vicb merged 3 commits intomasterfrom
plugin-4.1.10

Conversation

@vicb
Copy link
Copy Markdown
Owner

@vicb vicb commented Feb 20, 2025

Summary by Sourcery

Update the Windy Sounding plugin to version 4.1.10, which includes synchronizing with the latest Windy API.

Enhancements:

  • Synchronize with the latest Windy API to ensure compatibility and access to new features or updates.

Chores:

  • Update the package version to 4.1.10.

Summary by CodeRabbit

  • Documentation
    • Updated the release log with details for version 4.1.11.
  • Chores
    • Upgraded the plugin to version 4.1.11, ensuring synchronization with the latest windy API.

@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai bot commented Feb 20, 2025

Reviewer's Guide by Sourcery

This pull request updates the windy-sounding plugin to version 4.1.10. The changes include updating the package version and adding a changelog entry to reflect the synchronization with the latest Windy API.

No diagrams generated as the changes look simple and do not need a visual representation.

File-Level Changes

Change Details Files
Updated the plugin version to 4.1.10 and synchronized with the latest Windy API.
  • Updated the plugin version in package.json.
  • Added a changelog entry for version 4.1.10.
libs/windy-sounding/package.json
libs/windy-sounding/CHANGELOG.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!
  • Generate a plan of action for an issue: Comment @sourcery-ai plan on
    an issue to generate a plan of action for it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 20, 2025

Walkthrough

A new version update for the windy-sounding plugin has been released. The changelog now includes an entry for version 4.1.11 dated February 20, 2025, noting that the plugin has been synchronized with the latest windy API. In tandem, the package version in the package.json was updated from 4.1.9 to 4.1.11. Additionally, several type definitions and interfaces have been added or modified across various files to enhance functionality and improve structure, while some deprecated types and classes have been removed.

Changes

File(s) Change Summary
libs/windy-sounding/CHANGELOG.md, libs/windy-sounding/package.json Added new version entry for 4.1.11 (Feb 20, 2025) with note on windy API sync; updated package version from 4.1.9 to 4.1.11
libs/windy-sounding/src/env.d.ts Added multiple new properties to the W object, enhancing its functionality with additional modules from the @windy namespace.
libs/windy-sounding/src/redux/plugin-slice.ts Updated type imports related to the Fav type, reflecting a reorganization without altering core functionality.
libs/windy-sounding/src/util/utils.ts Changed the source of the Fav type import and simplified the return logic of getFavLabel method.
libs/windy-sounding/types/client/AccessProducts.d.ts Introduced new classes AccessProduct and AccessCProduct for managing access-related product instances.
libs/windy-sounding/types/client/Bar.d.ts, libs/windy-sounding/types/client/BindedBar.d.ts, libs/windy-sounding/types/client/BindedCheckbox.d.ts, libs/windy-sounding/types/client/BindedSwitch.d.ts, libs/windy-sounding/types/client/DraggableDiv.d.ts, libs/windy-sounding/types/client/GhostBox.d.ts, libs/windy-sounding/types/client/LongTap.d.ts, libs/windy-sounding/types/client/MobileCalendar.d.ts, libs/windy-sounding/types/client/ProductSwitch.d.ts, libs/windy-sounding/types/client/Scrollable.d.ts, libs/windy-sounding/types/client/Switch.d.ts, libs/windy-sounding/types/client/TimestampBar.d.ts Removed multiple classes and type definitions related to UI components, indicating a shift towards more functional programming practices.
libs/windy-sounding/types/client/Layer.d.ts Updated import statements and added new properties to the LayerMetricType and FullRenderParameters interfaces.
libs/windy-sounding/types/client/Metric.d.ts Added new optional property backConv and modified method signatures to enhance the Metric class functionality.
libs/windy-sounding/types/client/Notification.d.ts Removed the Notification class and replaced it with standalone functions for managing notifications.

Poem

I’m a bunny on the run,
Hopping through lines of code for fun,
Version 4.1.11 now shines so bright,
Synchronized with winds in sight,
With every update, I cheer with delight!

✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey @vicb - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Consider automating the version bumping and changelog generation process to reduce manual work and potential errors.
Here's what I looked at during the review
  • 🟡 General issues: 1 issue found
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
libs/windy-sounding/CHANGELOG.md (1)

3-4: Changelog Header Formatting
The new version header "## 4.1.10 - Feb 20, 2025" is clear and follows the style of previous entries. As a minor suggestion, consider using an en dash (–) instead of a hyphen to separate the version number and the date. This subtle typographical adjustment can improve consistency, especially if similar changes are applied across the changelog.

🧰 Tools
🪛 LanguageTool

[typographical] ~3-~3: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: # Release history ## 4.1.10 - Feb 20, 2025 - Sync with the latest win...

(DASH_RULE)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6ff4de6 and 6ad4ca5.

⛔ Files ignored due to path filters (1)
  • libs/windy-sounding/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (2)
  • libs/windy-sounding/CHANGELOG.md (1 hunks)
  • libs/windy-sounding/package.json (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • libs/windy-sounding/package.json
🧰 Additional context used
🪛 LanguageTool
libs/windy-sounding/CHANGELOG.md

[typographical] ~3-~3: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: # Release history ## 4.1.10 - Feb 20, 2025 - Sync with the latest win...

(DASH_RULE)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: publish-plugin
  • GitHub Check: build (20.x)
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (1)
libs/windy-sounding/CHANGELOG.md (1)

5-6: Changelog Entry Note Clarity
The bullet point "- Sync with the latest windy API" succinctly describes the update. If further detail becomes necessary later (for example, what aspects of the API were synchronized), it might be helpful to expand this note in future revisions. For now, it is concise and consistent with previous entries.

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages bot commented Feb 20, 2025

Deploying flyxc with  Cloudflare Pages  Cloudflare Pages

Latest commit: c0c9f79
Status: ✅  Deploy successful!
Preview URL: https://e3d214a3.flyxc.pages.dev
Branch Preview URL: https://plugin-4-1-10.flyxc.pages.dev

View logs

@vicb vicb changed the title windy plugin: release 4.1.10 windy plugin: release 4.1.11 Feb 20, 2025
@vicb vicb merged commit 70db453 into master Feb 20, 2025
6 of 7 checks passed
@vicb vicb deleted the plugin-4.1.10 branch February 20, 2025 07:30
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🧹 Nitpick comments (69)
libs/windy-sounding/types/client/d.ts.files/Layer.d.ts (1)

2-2: Use import type for type-only imports.

Since these imports are only used as types, use the import type syntax to be consistent with TypeScript best practices.

-import { DataQuality, FileSuffix } from '@windy/Product';
+import type { DataQuality, FileSuffix } from '@windy/Product';
🧰 Tools
🪛 ESLint

[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/d.ts.files/startup.d.ts (1)

19-32: Consider extracting nested types for better reusability.

While the interface is well-structured, consider extracting the nested types for better maintainability and reuse.

+export interface Contributor {
+  name: string;
+  avatarUrl: string;
+}
+
+export interface WhatsNewContent {
+  new?: string;
+  improved?: string;
+  fixed?: string;
+}
+
 export interface WhatsNewData extends StartupItem {
   type: 'whats-new';
   id: string;
   title: string;
-  contributors: {
-    name: string;
-    avatarUrl: string;
-  }[];
-  content: {
-    new?: string;
-    improved?: string;
-    fixed?: string;
-  };
+  contributors: Contributor[];
+  content: WhatsNewContent;
 }
libs/windy-sounding/types/client/embed2.d.ts (3)

13-13: Fix import organization.

Add a newline after the import statement to maintain consistent code organization.

 import './render/tileLayerInstance';
+
🧰 Tools
🪛 ESLint

[error] 13-13: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


14-21: LGTM! Consider sorting exports.

The new namespace exports are well-organized by functionality and align with the Windy API synchronization objective. Consider sorting them alphabetically for better maintainability.

-export * as detectDevice from './dummyModules/detectDevice';
-export * as log from './dummyModules/log';
-export * as promo from './dummyModules/promo';
-export * as seoParser from './dummyModules/seoParser';
-export * as location from './dummyModules/location';
-export * as router from './dummyModules/router';
-export * as showableErrorsService from './dummyModules/showableErrorsService';
-export * as userFavs from './dummyModules/userFavs';
+export * as detectDevice from './dummyModules/detectDevice';
+export * as location from './dummyModules/location';
+export * as log from './dummyModules/log';
+export * as promo from './dummyModules/promo';
+export * as router from './dummyModules/router';
+export * as seoParser from './dummyModules/seoParser';
+export * as showableErrorsService from './dummyModules/showableErrorsService';
+export * as userFavs from './dummyModules/userFavs';
🧰 Tools
🪛 ESLint

[error] 14-21: Run autofix to sort these exports!

(simple-import-sort/exports)


22-28: Move imports to the top of the file.

For better code organization and to follow TypeScript best practices, move these imports to join the other imports at the top of the file.

 import './render/tileLayerInstance';
+import bcast from './services/broadcast';
+import * as rootScope from './services/rootScope';
+import { default as store } from './services/store';
+import * as ga from './utils/ga';
+import { $ } from './utils/utils';
+import { default as overlays } from './weather/overlays';

 export * as detectDevice from './dummyModules/detectDevice';
 // ... other exports ...
-import bcast from './services/broadcast';
-import * as rootScope from './services/rootScope';
-import { default as store } from './services/store';
-import * as ga from './utils/ga';
-import { $ } from './utils/utils';
-import { default as overlays } from './weather/overlays';
🧰 Tools
🪛 ESLint

[error] 22-22: Import in body of module; reorder to top.

(import/first)


[error] 23-23: Import in body of module; reorder to top.

(import/first)


[error] 24-24: Import in body of module; reorder to top.

(import/first)


[error] 24-24: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


[error] 26-26: Import in body of module; reorder to top.

(import/first)


[error] 27-27: Import in body of module; reorder to top.

(import/first)


[error] 28-28: Import in body of module; reorder to top.

(import/first)


[error] 28-28: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/notifications.d.ts (5)

1-2: Resolve import ordering and spacing issues.

ESLint indicates that imports at lines 1-2 need sorting and a blank line after the import block. Consider running an auto-fix command (e.g., npm run lint --fix) to comply with these style rules.

🧰 Tools
🪛 ESLint

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


3-3: Consider making this a function instead of a constant Promise.

If canReceiveNotifications is intended for repeated checks, consider declaring it as a function returning a Promise<void> rather than a static Promise constant.


5-8: Refine documentation for deleteAllNotifications.

The doc string could clarify whether this function targets server-side, client-side, or both. Also, consider specifying post-deletion state (e.g., does it return a status or throw an error?).


13-19: Validate the necessity of HttpPayload<void>.

markNotificationAsSeen() returns Promise<HttpPayload<void>>. Check if this aligns with the other methods that return Promise<void>. If additional metadata is needed, ensure consistency across all notification-related methods.


20-26: Unify naming convention for “mark as received” vs. “mark as seen.”

markNotificationAsReceived() parallels markNotificationAsSeen(). Consider consistent naming (e.g., markAsSeen and markAsReceived) or merging aspects of their logic if they share underlying flows.

libs/windy-sounding/types/client/d.ts.files/storage.d.ts (2)

2-3: Use import type consistently.

Static analysis suggests all imported entities here are used only as types. You can simplify to:

-import { Fav, type ObsoleteFav } from '@windy/favs.d';
-import { SearchRecent } from '@plugins/search/search';
+import type { Fav, ObsoleteFav } from '@windy/favs.d';
+import type { SearchRecent } from '@plugins/search/search';
🧰 Tools
🪛 ESLint

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 3-3: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


6-6: Expand deprecation note for clarity.

Adding a pointer to the new IDB-based approach could help developers quickly migrate from this deprecated usage:

- /** @deprecated  replaced by IDB */
+ /** @deprecated  replaced by IDB - see docs at libs/windy-sounding/types/client/IDB.d.ts */
libs/windy-sounding/types/client/d.ts.files/user.d.ts (3)

2-3: Convert all imports to type-only.

Static analysis flags these imports as only used for types:

-import { SubTier, type ExternalPluginIdent } from '@windy/types.d';
-import { FavFragment } from '@windy/favs';
+import type { SubTier, ExternalPluginIdent } from '@windy/types.d';
+import type { FavFragment } from '@windy/favs';
🧰 Tools
🪛 ESLint

[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 3-3: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


6-23: Add clarifying JSDoc to User interface.

The User interface includes fields like avatar, email, and requiresCookieConsent. Consider adding JSDoc annotations for each field to outline expected formats/types and usage constraints.


80-114: Validate potential expansions to LoginAndFinishAction.

The union approach is valid. If you anticipate more actions, consider an enum to keep them organized. Alternatively, a single action property plus a variant type can also keep logic straightforward.

libs/windy-sounding/types/client/Color.d.ts (4)

1-1: Consider sorting and spacing imports.
ESLint flagged an issue to run autofix to sort imports and add the required empty line after the import.

Here is an example diff:

-import type { ColorGradient, AnyColorIdent, RGBA, RGBString } from './d.ts.files/Color.d';
+import type {
+  AnyColorIdent,
+  ColorGradient,
+  RGBA,
+  RGBString
+} from './d.ts.files/Color.d';
🧰 Tools
🪛 ESLint

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)


21-22: Optional properties prepare? and opaque? warrant clarification.
Both fields are introduced as optional, yet it's unclear how they interplay with existing workflows. Consider providing doc comments or usage examples to clarify their purpose.


44-56: Add or update unit tests for new methods.
Methods getColorTable, loadCustomColor, hasCustomColor, setCustomColor, and removeCustomColor introduce asynchronous operations and new behavior. Ensure you have comprehensive test coverage to confirm all paths (including error handling) are verified.

Would you like a basic suite of test utilities generated to facilitate these tests?


126-128: regenerateColorTable may affect performance.
This private property suggests we’re re-computing an expensive color table. Ensure it’s not invoked unnecessarily or at high frequency, as it could degrade performance.

libs/windy-sounding/types/client/d.ts.files/plugins.d.ts (3)

1-1: Use import type for purely type-based imports.
ESLint suggests that when imports are used solely for type declarations, you should use import type. This improves clarity and can reduce compiled output.

-import { BottomSveltePlugin } from '@windy/BottomSveltePlugins';
+import type { BottomSveltePlugin } from '@windy/BottomSveltePlugins';
🧰 Tools
🪛 ESLint

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


7-14: Add usage documentation for new BottomSveltePlugins.
Properties 'mobile-calendar', 'progress-bar', 'day-switcher', 'cap-alerts', and accumulations can affect UI behavior. Provide or reference usage notes for third-party developers and confirm thorough testing.


99-99: New 'heatmaps-redirect' property.
Document or clarify how 'heatmaps-redirect' is intended to be used. If it triggers a new flow, ensure event listeners or watchers are in place.

libs/windy-sounding/types/client/d.ts.files/broadcast.d.ts (3)

19-27: Leverage import type for efficiency.
Several imports at lines 19, 24-27 are used exclusively as types. Refactor them to import type to adhere to recommended TypeScript best practices and reduce extraneous code in compiled output.

-import { GeolocationInfo, LatLon, WeatherParameters } from '@windy/interfaces.d';
+import type { GeolocationInfo, LatLon, WeatherParameters } from '@windy/interfaces.d';

-import { Plugins } from '@windy/plugins.d';
+import type { Plugins } from '@windy/plugins.d';
🧰 Tools
🪛 ESLint

[error] 11-27: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 19-19: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 20-20: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 21-21: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 22-22: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


80-81: Fix mismatch in plugin event docstrings.
Line 80's doc says "Plugin was successfully loaded and closed," but the actual event name is pluginOpened. Consider correcting the doc comment to reflect that the plugin is now opened, not closed.

-  /** Plugin was successfully loaded and closed */
+  /** Plugin was successfully opened */

84-84: Document the newly introduced pluginMounted event.
This event signals that a Svelte plugin is successfully mounted. Clarify any difference between pluginOpened and pluginMounted in your docs to guide plugin developers using this interface.

libs/windy-sounding/types/client/Product.d.ts (6)

3-9: Consider adding a blank line after imports to comply with style rules.

ESLint indicates a missing empty line after the last import that isn't followed by another import. Adding a blank line can improve readability and fulfill import style conventions.

 import * as http from '@windy/http';
+ 
 import type { MinifestObject } from '@windy/Calendar.d';
 import type { Layers } from '@windy/Layer.d';
 import type { LatLon } from '@windy/interfaces';
 import type { Isolines, Levels, Overlays, Products } from '@windy/rootScope.d';
 import type { ISODateString, ProductCategory, ProductIdent, Timestamp, YYYYMMDDHH } from '@windy/types';
 export type DataQuality = 'normal' | 'high' | 'low' | 'ultra' | 'extreme';
 export type FileSuffix = 'png' | 'jpg' | 'webp';
🧰 Tools
🪛 ESLint

[error] 7-7: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


82-82: Revisit doc phrasing.

The phrase "Noneffective" in this doc comment can be unclear. Consider clarifying the intent, for example "This property is used for daily-updated data."


210-212: Keep property usage distinct or combine if possible.

server and metadataServer are both optional. If they represent separate endpoints, this is fine; otherwise, consider combining them or clearly distinguishing their purposes to simplify usage.


219-230: Correct doc block wording.

There's a minor typo: "This product supper accumulations" → "This product supports accumulations." Consider updating the doc comment for clarity.

- * This product supper accumulations
+ * This product supports accumulations

237-237: Avoid confusing void in union return types.

Returning void can be unclear for consumers of your API. Replacing void with undefined (or removing the union if no return type is expected) can remove ambiguity.

- moveTs(moveRight: boolean, isAccu?: boolean): boolean | void;
+ moveTs(moveRight: boolean, isAccu?: boolean): boolean | undefined;
🧰 Tools
🪛 Biome (1.9.4)

[error] 237-237: void is confusing inside a union type.

Unsafe fix: Use undefined instead.

(lint/suspicious/noConfusingVoidType)


251-258: Consider logging when older minifest is retained.

The getUpdatedMinifest() logic keeps the existing minifest if the incoming one is older, which is sensible. Adding a brief log statement could help debug if stale data or unexpected updates occur.

libs/windy-sounding/types/client/d.ts.files/dataSpecifications.d.ts (11)

22-25: Adhere to import sorting and consistent type usage.

ESLint suggests sorting imports; also ensure all imports that are only used as types are consistently prefixed with import type. Doing so helps code clarity while meeting style requirements.


53-55: Provide defaults or validation for new notification fields.

The new optional fields preferredNotificationTime, frequencyDays, usedTimezoneName might benefit from default handling or checks to avoid undefined states in usage.


213-216: Add brief doc on toggling isolines.

isolinesOn is self-explanatory, but a short comment clarifying typical usage context (e.g., "Set to true to show isobars, isohypses, etc.") could improve maintainability.


324-325: Document stormSettingsLightning usage.

While self-descriptive, it might help to clarify how storm lightning settings are toggled or used in the UI.


341-344: Clarify unit for time zone offset.

lastTimezoneOffset implies minutes offset from UTC. If so, explicitly stating the unit within comments can help prevent confusion.

 /**
  * The difference in minutes between UTC and the local time on the device.
  */
-lastTimezoneOffset: DataSpecificationsObject<number>;
+lastTimezoneOffset: DataSpecificationsObject<number>; // offset in minutes

445-445: Optional naming in detailLocation.

The new shape (LatLon & { name?: string; id?: string }) | null is more flexible. Be sure to handle generators or code that expects a guaranteed name or ID gracefully.


802-813: Streamline consent configurations.

Multiple consent flags (consent, analyticsConsentRequired, youtubeConsent, twitterConsent) exist. Evaluate whether they can be unified or nested to reduce duplication.


841-846: Use doc comment for persistentWidgets.

persistentWidgets is new; clarifying how it affects the widget lifecycle helps maintainers.


847-851: UserInterests array.

Storing arrays of UserInterest[] is valid, but consider if an enum-based approach or stronger typed array can further clarify user-specific domain logic.


852-859: Consolidate location permission flags.

onboardingFinished, locationPermissionsGranted, and related toggles are helpful but might be combined under a "userOnboarding" object to keep the store more cohesive.


860-865: Combine or rename new user actions.

loginAndFinishAction plus a favsFilter object might overlap with other user flows. Consider grouping similar user post-login behaviors in a single state slice to reduce sprawl.

libs/windy-sounding/types/client/langFiles.d.ts (1)

1-2: Clarify the purpose of the default string array.

_default is exported as an array of strings. If it represents language codes or translations, consider a more descriptive name or doc comment to guide contributors.

libs/windy-sounding/types/client/appsFlyer.d.ts (1)

1-1: Add newline after import statement.

Add a newline after the import statement to follow ESLint rules.

 import type { AppsFlyerPlugin } from 'appsflyer-capacitor-plugin/src/definitions';
+
🧰 Tools
🪛 ESLint

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/AccessProducts.d.ts (1)

1-2: Organize imports for better readability.

Add a newline after imports and sort them for consistency.

import { Product } from '@windy/Product';
import type { ProductInitParams } from '@windy/Product';
+
🧰 Tools
🪛 ESLint

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/cityLabels.d.ts (1)

6-6: Consider using a more specific type for labelsLayer.

Using any type reduces type safety. Consider defining an interface that describes the shape of the labels layer.

interface LabelsLayer {
  // Add relevant properties and methods
}
export declare const labelsLayer: LabelsLayer;
libs/windy-sounding/types/client/IconProducts.d.ts (1)

1-3: Add newline after imports for better readability.

Add a newline after the imports block.

import { Product } from '@windy/Product';
import type { Overlays } from '@windy/rootScope.d';
import type { ProductInitParams } from './Product';
+
🧰 Tools
🪛 ESLint

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/colorGradients.d.ts (1)

6-9: Consider adding JSDoc comments for the exported constants.

While the constants are well-typed, adding JSDoc comments would improve documentation by describing their specific use cases and expected values.

libs/windy-sounding/types/client/BottomSveltePlugins.d.ts (1)

9-12: Consider adding JSDoc comments for the class.

While the class is well-structured, adding JSDoc comments would improve documentation by describing its purpose and usage.

libs/windy-sounding/types/client/promo.d.ts (1)

7-10: Fix parameter naming inconsistency.

The parameter name varies between id and ident across different functions. Consider standardizing to id for consistency.

-export declare const neverSee: (ident: string) => void;
+export declare const neverSee: (id: string) => void;

Also applies to: 11-14, 15-21

libs/windy-sounding/types/client/RadarPlusProduct.d.ts (1)

18-18: Replace void with undefined in union type.

Using void in a union type can be confusing. Consider using undefined instead for better type clarity.

-  moveTs(moveRight: boolean): boolean | void;
+  moveTs(moveRight: boolean): boolean | undefined;
🧰 Tools
🪛 Biome (1.9.4)

[error] 18-18: void is confusing inside a union type.

Unsafe fix: Use undefined instead.

(lint/suspicious/noConfusingVoidType)

libs/windy-sounding/types/client/d.ts.files/rootScope.d.ts (1)

23-25: Use consistent type imports.

For consistency with other type imports in the file, consider using the import type syntax.

-export type Pois = keyof typeof import('./rootScope').pois;
-export type Isolines = typeof import('./rootScope').isolinesType[number];
+import type { pois, isolinesType } from './rootScope';
+export type Pois = keyof typeof pois;
+export type Isolines = typeof isolinesType[number];
🧰 Tools
🪛 ESLint

[error] 23-23: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 25-25: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/d.ts.files/Calendar.d.ts (1)

1-1: Use import type for type-only imports.

Since these imports are only used as types, use the import type syntax for better type safety and clarity.

-import { Timestamp, ISODateString, LoadedTranslations } from '@windy/types.d';
+import type { Timestamp, ISODateString, LoadedTranslations } from '@windy/types.d';
🧰 Tools
🪛 ESLint

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-1: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/geolocation.d.ts (1)

44-45: Remove useless empty export.

The empty export statement is unnecessary as there are other exports in the file.

export declare function requestLocationPermissions(): Promise<boolean>;
-export {};
🧰 Tools
🪛 Biome (1.9.4)

[error] 44-45: This empty export is useless because there's another export or import.

This import makes useless the empty export.

Safe fix: Remove this useless empty export.

(lint/complexity/noUselessEmptyExport)

libs/windy-sounding/types/client/d.ts.files/products.d.ts (1)

1-9: Use import type for type-only imports.

All imports in this file are used only as types. Use the import type syntax for better type safety and clarity.

-import { AccessProduct, AccessCProduct } from '@windy/AccessProducts';
-import { AromeProduct } from '@windy/AromeProduct';
-import { EcmwfAnalysisProduct } from '@windy/EcmwfAnalysisProduct';
-import { EcmwfProduct } from '@windy/EcmwfProduct';
-import { Product } from '@windy/Product';
-import { RadarPlusProduct } from '@windy/RadarPlusProduct';
-import { SatelliteProduct } from '@windy/SatelliteProduct';
-import { Products } from '@windy/rootScope.d';
+import type { AccessProduct, AccessCProduct } from '@windy/AccessProducts';
+import type { AromeProduct } from '@windy/AromeProduct';
+import type { EcmwfAnalysisProduct } from '@windy/EcmwfAnalysisProduct';
+import type { EcmwfProduct } from '@windy/EcmwfProduct';
+import type { Product } from '@windy/Product';
+import type { RadarPlusProduct } from '@windy/RadarPlusProduct';
+import type { SatelliteProduct } from '@windy/SatelliteProduct';
+import type { Products } from '@windy/rootScope.d';
🧰 Tools
🪛 ESLint

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-9: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 3-3: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 4-4: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 5-5: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 6-6: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 7-7: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 9-9: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/SveltePlugin.d.ts (1)

4-4: Add newline after import statement.

Add an empty line after the import statement for better code organization.

import type { BottomSveltePlugins, SveltePanePlugins, SveltePlugins } from '@windy/plugins.d';
+
🧰 Tools
🪛 ESLint

[error] 1-4: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 4-4: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/ExternalSveltePlugin.d.ts (1)

50-50: Consider using undefined instead of void in the union type.

The return type void | boolean can be confusing. Using undefined | boolean would be more explicit and aligns with TypeScript best practices.

-  open({ params, disableOpeningAnimation, qs }: PluginOpeningOptions<'windy-external-plugin'>): Promise<void | boolean>;
+  open({ params, disableOpeningAnimation, qs }: PluginOpeningOptions<'windy-external-plugin'>): Promise<undefined | boolean>;
🧰 Tools
🪛 Biome (1.9.4)

[error] 50-50: void is confusing inside a union type.

Unsafe fix: Use undefined instead.

(lint/suspicious/noConfusingVoidType)

libs/windy-sounding/types/client/d.ts.files/favs.d.ts (1)

1-2: Sort imports alphabetically.

The imports should be sorted for better maintainability.

-import type { RouteType, StationId, Timestamp } from '@windy/types';
-import type { LatLon, Alert, AlertProps } from '@windy/interfaces';
+import type { Alert, AlertProps, LatLon } from '@windy/interfaces';
+import type { RouteType, StationId, Timestamp } from '@windy/types';
🧰 Tools
🪛 ESLint

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/Renderer.d.ts (1)

1-2: Sort imports for better organization.

The imports should be sorted alphabetically for better maintainability.

-import type { FullRenderParameters } from './d.ts.files/Layer.d';
-import type { Renderers, AllowedUserControls, AllowedRenderPlugins, RendererInitParams } from './d.ts.files/Renderer.d';
+import type { FullRenderParameters } from './d.ts.files/Layer.d';
+import type { AllowedRenderPlugins, AllowedUserControls, RendererInitParams, Renderers } from './d.ts.files/Renderer.d';
🧰 Tools
🪛 ESLint

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/idbInstances.d.ts (1)

63-63: Consider using a type alias for the complex template literal type.

The template literal type ${string}_${string}/${string} could be made more maintainable and self-documenting with a type alias.

+type NotamId = `${string}_${string}/${string}`;
-export declare const markedNotamsIdb: IDB<`${string}_${string}/${string}`, MarkedNotams, MarkedNotams>;
+export declare const markedNotamsIdb: IDB<NotamId, MarkedNotams, MarkedNotams>;
libs/windy-sounding/types/client/Evented.d.ts (1)

87-90: Enhance documentation for the offAll method.

While the basic purpose is documented, consider adding:

  • Example usage scenarios
  • Warning about the impact on all subscriptions
  • Best practices for when to use this vs. individual off calls
 /**
  * Unhooks all registered callbacks
+ *
+ * @example
+ * ```typescript
+ * // Clear all subscriptions when component unmounts
+ * componentWillUnmount() {
+ *   this.events.offAll();
+ * }
+ * ```
+ *
+ * @warning This will remove ALL event subscriptions.
+ * Consider using individual `off` calls if you need to preserve some listeners.
  */
libs/windy-sounding/types/client/d.ts.files/alerts.d.ts (1)

66-76: Enhance documentation for TimeAlertCondition interface.

The interface has good documentation but could benefit from more specific examples and validation rules for the properties.

 export interface TimeAlertCondition extends AlertConditionBase {
   /** Days of the week in which the conditions must be met */
   days: Weekday[];
   /** Hours of the day in which the conditions must be met */
   hours?: NumberRange[];
   /** Minimum duration of meeting the conditions to send the notification */
   minDurationHours: number;
   /** Range of days which will be checked for conditions */
   rangeDays?: NumberRange;
+  /** Type identifier for time-based alert conditions */
   type: AlertConditionType.Time;
 }
libs/windy-sounding/types/client/Overlay.d.ts (1)

8-9: Organize imports.

The imports should be organized with a blank line after the last import.

 import type { LoadedTranslations, HTMLString } from '@windy/types';
 import type { RGBAString } from '@windy/Color.d';
+
 export type UsedOverlays = Overlays | 'swell' | 'satelliteIRBT';
🧰 Tools
🪛 ESLint

[error] 1-9: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 9-9: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/WindowPlugin.d.ts (1)

8-11: Organize imports.

The imports should be organized with a blank line after the last import.

 import type { BottomSveltePlugins, SveltePanePlugins, SveltePlugins, TagPlugins } from '@windy/plugins.d';
 import type { ParsedQueryString } from '@windy/queryString';
 import type { ListeningPriority } from '@windy/singleclick.d';
 import type { LoadedTranslations } from '@windy/types';
+
 export interface WindowPlugins extends TagPlugins, SveltePlugins, SveltePanePlugins, BottomSveltePlugins {}
🧰 Tools
🪛 ESLint

[error] 1-11: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 11-11: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/plugin-params.d.ts (1)

1-2: Organize imports and use consistent type imports.

The imports should use consistent import type syntax and be organized with blank lines between groups.

-import { Fav, FavId } from '@windy/favs.d';
-import { StartupArticleData, WhatsNewData } from '@windy/startup.d';
+import type { Fav, FavId } from '@windy/favs.d';
+import type { StartupArticleData, WhatsNewData } from '@windy/startup.d';
+
 import { HiddenReasonType, ReasonTypes } from '@plugins/subscription/subscription';

Also applies to: 17-17

🧰 Tools
🪛 ESLint

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-18: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/mobile.d.ts (1)

142-144: Organize imports.

Move the imports to the top of the file.

-import './ui/patchAndPromoCtrl';
-import './ui/storeLastPosition';
-import './services/customColors';
+import './leafletExt/CanvasLayer';
+import './ui/patchAndPromoCtrl';
+import './ui/storeLastPosition';
+import './services/customColors';
+
 export * as errorLogger from './utils/errorLogger';
🧰 Tools
🪛 ESLint

[error] 142-142: Import in body of module; reorder to top.

(import/first)


[error] 143-143: Import in body of module; reorder to top.

(import/first)


[error] 144-144: Import in body of module; reorder to top.

(import/first)

libs/windy-sounding/types/client/TileLayer.d.ts (1)

1-3: Refactor and Order Import Statements

The consolidated type import (line 3) now aligns with the updated naming convention. However, ESLint suggests that imports should be sorted and that there should be an empty line after the import block not immediately followed by non-import code. Consider running your formatter (or applying an autofix) using a tool like simple-import-sort to address these issues.

🧰 Tools
🪛 ESLint

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/broadcast.d.ts (1)

9-10: Ensure Proper Import Block Separation

The import on line 9 has been updated to reference './broadcast.d', which is consistent with the new naming scheme. However, ESLint indicates that there should be an empty line after the import block. Please insert an empty line between the import statement and the next declaration to satisfy the linting rules.

🧰 Tools
🪛 ESLint

[error] 9-9: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/DataTiler.d.ts (1)

1-4: Update Import Paths and Order

The changes on lines 2 and 4 update the import paths to use the .d suffix, aligning with the new structure across the project. ESLint’s feedback to sort the imports and add an empty line between logical groups should also be addressed. Consider running an autofix to automatically order these imports.

🧰 Tools
🪛 ESLint

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-4: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 4-4: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6ad4ca5 and c0c9f79.

⛔ Files ignored due to path filters (2)
  • libs/windy-sounding/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (107)
  • libs/optimizer/package.json (1 hunks)
  • libs/secrets/package.json (1 hunks)
  • libs/windy-sounding/CHANGELOG.md (1 hunks)
  • libs/windy-sounding/package.json (1 hunks)
  • libs/windy-sounding/src/env.d.ts (1 hunks)
  • libs/windy-sounding/src/redux/meta.ts (1 hunks)
  • libs/windy-sounding/src/redux/plugin-slice.ts (1 hunks)
  • libs/windy-sounding/src/util/utils.ts (2 hunks)
  • libs/windy-sounding/types/client/AccessProducts.d.ts (1 hunks)
  • libs/windy-sounding/types/client/Bar.d.ts (0 hunks)
  • libs/windy-sounding/types/client/BindedBar.d.ts (0 hunks)
  • libs/windy-sounding/types/client/BindedCheckbox.d.ts (0 hunks)
  • libs/windy-sounding/types/client/BindedSwitch.d.ts (0 hunks)
  • libs/windy-sounding/types/client/BottomSveltePlugins.d.ts (1 hunks)
  • libs/windy-sounding/types/client/BottomTagPlugin.d.ts (0 hunks)
  • libs/windy-sounding/types/client/Calendar.d.ts (5 hunks)
  • libs/windy-sounding/types/client/Color.d.ts (3 hunks)
  • libs/windy-sounding/types/client/DataTiler.d.ts (1 hunks)
  • libs/windy-sounding/types/client/DraggableDiv.d.ts (0 hunks)
  • libs/windy-sounding/types/client/Evented.d.ts (1 hunks)
  • libs/windy-sounding/types/client/ExternalSveltePlugin.d.ts (2 hunks)
  • libs/windy-sounding/types/client/GhostBox.d.ts (0 hunks)
  • libs/windy-sounding/types/client/GlObj.d.ts (1 hunks)
  • libs/windy-sounding/types/client/IDB.d.ts (1 hunks)
  • libs/windy-sounding/types/client/IconProducts.d.ts (1 hunks)
  • libs/windy-sounding/types/client/Layer.d.ts (1 hunks)
  • libs/windy-sounding/types/client/Legend.d.ts (0 hunks)
  • libs/windy-sounding/types/client/LongTap.d.ts (0 hunks)
  • libs/windy-sounding/types/client/Metric.d.ts (4 hunks)
  • libs/windy-sounding/types/client/MetricClasses.d.ts (2 hunks)
  • libs/windy-sounding/types/client/MobileCalendar.d.ts (0 hunks)
  • libs/windy-sounding/types/client/OfflineMessagesClasses.d.ts (0 hunks)
  • libs/windy-sounding/types/client/Overlay.d.ts (5 hunks)
  • libs/windy-sounding/types/client/OverlayClasses.d.ts (1 hunks)
  • libs/windy-sounding/types/client/Plugin.d.ts (2 hunks)
  • libs/windy-sounding/types/client/Product.d.ts (4 hunks)
  • libs/windy-sounding/types/client/ProductSwitch.d.ts (0 hunks)
  • libs/windy-sounding/types/client/RadarPlusProduct.d.ts (1 hunks)
  • libs/windy-sounding/types/client/Renderer.d.ts (2 hunks)
  • libs/windy-sounding/types/client/Scrollable.d.ts (0 hunks)
  • libs/windy-sounding/types/client/SveltePlugin.d.ts (2 hunks)
  • libs/windy-sounding/types/client/Switch.d.ts (0 hunks)
  • libs/windy-sounding/types/client/TileLayer.d.ts (1 hunks)
  • libs/windy-sounding/types/client/TimestampBar.d.ts (0 hunks)
  • libs/windy-sounding/types/client/TopoMap.d.ts (1 hunks)
  • libs/windy-sounding/types/client/WindowPlugin.d.ts (2 hunks)
  • libs/windy-sounding/types/client/appsFlyer.d.ts (1 hunks)
  • libs/windy-sounding/types/client/baseMap.d.ts (1 hunks)
  • libs/windy-sounding/types/client/broadcast.d.ts (1 hunks)
  • libs/windy-sounding/types/client/cityLabels.d.ts (1 hunks)
  • libs/windy-sounding/types/client/cloudSync.d.ts (1 hunks)
  • libs/windy-sounding/types/client/colorGradients.d.ts (1 hunks)
  • libs/windy-sounding/types/client/customColors.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/Calendar.d.ts (2 hunks)
  • libs/windy-sounding/types/client/d.ts.files/Color.d.ts (2 hunks)
  • libs/windy-sounding/types/client/d.ts.files/LabelsLayer.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/Layer.d.ts (4 hunks)
  • libs/windy-sounding/types/client/d.ts.files/Metric.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/Product.d.ts (0 hunks)
  • libs/windy-sounding/types/client/d.ts.files/Renderer.d.ts (2 hunks)
  • libs/windy-sounding/types/client/d.ts.files/alerts.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/broadcast.d.ts (4 hunks)
  • libs/windy-sounding/types/client/d.ts.files/dataSpecifications.d.ts (12 hunks)
  • libs/windy-sounding/types/client/d.ts.files/favs.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/incomingMessages.d.ts (0 hunks)
  • libs/windy-sounding/types/client/d.ts.files/notifications.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/plugin-params.d.ts (8 hunks)
  • libs/windy-sounding/types/client/d.ts.files/plugins.d.ts (4 hunks)
  • libs/windy-sounding/types/client/d.ts.files/pois.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/products.d.ts (3 hunks)
  • libs/windy-sounding/types/client/d.ts.files/rootScope.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/startup.d.ts (1 hunks)
  • libs/windy-sounding/types/client/d.ts.files/storage.d.ts (2 hunks)
  • libs/windy-sounding/types/client/d.ts.files/trans.d.ts (0 hunks)
  • libs/windy-sounding/types/client/d.ts.files/user.d.ts (2 hunks)
  • libs/windy-sounding/types/client/dataSpecifications.d.ts (1 hunks)
  • libs/windy-sounding/types/client/deviceLogging.d.ts (2 hunks)
  • libs/windy-sounding/types/client/embed2.d.ts (2 hunks)
  • libs/windy-sounding/types/client/errorLogger.d.ts (1 hunks)
  • libs/windy-sounding/types/client/favs.d.ts (0 hunks)
  • libs/windy-sounding/types/client/fetch.d.ts (4 hunks)
  • libs/windy-sounding/types/client/format.d.ts (1 hunks)
  • libs/windy-sounding/types/client/ga.d.ts (1 hunks)
  • libs/windy-sounding/types/client/geolocation.d.ts (3 hunks)
  • libs/windy-sounding/types/client/globals.d.ts (1 hunks)
  • libs/windy-sounding/types/client/http.d.ts (2 hunks)
  • libs/windy-sounding/types/client/idbInstances.d.ts (1 hunks)
  • libs/windy-sounding/types/client/langFiles.d.ts (1 hunks)
  • libs/windy-sounding/types/client/layers.d.ts (2 hunks)
  • libs/windy-sounding/types/client/lib.d.ts (2 hunks)
  • libs/windy-sounding/types/client/loadArticlesOrWhatsNew.d.ts (1 hunks)
  • libs/windy-sounding/types/client/log.d.ts (1 hunks)
  • libs/windy-sounding/types/client/lruCache.d.ts (1 hunks)
  • libs/windy-sounding/types/client/map.d.ts (3 hunks)
  • libs/windy-sounding/types/client/mobile.d.ts (6 hunks)
  • libs/windy-sounding/types/client/models.d.ts (2 hunks)
  • libs/windy-sounding/types/client/notifications.d.ts (1 hunks)
  • libs/windy-sounding/types/client/offlineController.d.ts (0 hunks)
  • libs/windy-sounding/types/client/overlays.d.ts (2 hunks)
  • libs/windy-sounding/types/client/params.d.ts (0 hunks)
  • libs/windy-sounding/types/client/permanentPromos.d.ts (1 hunks)
  • libs/windy-sounding/types/client/persistentStorage.d.ts (1 hunks)
  • libs/windy-sounding/types/client/picker.d.ts (1 hunks)
  • libs/windy-sounding/types/client/plugins.d.ts (1 hunks)
  • libs/windy-sounding/types/client/pois.d.ts (2 hunks)
  • libs/windy-sounding/types/client/products.d.ts (1 hunks)
  • libs/windy-sounding/types/client/promo.d.ts (1 hunks)
⛔ Files not processed due to max files limit (29)
  • libs/windy-sounding/types/client/pushNotifications.d.ts
  • libs/windy-sounding/types/client/queryString.d.ts
  • libs/windy-sounding/types/client/renderUtils.d.ts
  • libs/windy-sounding/types/client/renderers.d.ts
  • libs/windy-sounding/types/client/rootScope.d.ts
  • libs/windy-sounding/types/client/router.d.ts
  • libs/windy-sounding/types/client/seoParser.d.ts
  • libs/windy-sounding/types/client/serviceWorkerCtrl.d.ts
  • libs/windy-sounding/types/client/singleclick.d.ts
  • libs/windy-sounding/types/client/startupWeather.d.ts
  • libs/windy-sounding/types/client/storage.d.ts
  • libs/windy-sounding/types/client/store.d.ts
  • libs/windy-sounding/types/client/storeLastPosition.d.ts
  • libs/windy-sounding/types/client/subscription.d.ts
  • libs/windy-sounding/types/client/swDownloader.d.ts
  • libs/windy-sounding/types/client/swProxy.d.ts
  • libs/windy-sounding/types/client/swUtils.d.ts
  • libs/windy-sounding/types/client/trans.d.ts
  • libs/windy-sounding/types/client/user.d.ts
  • libs/windy-sounding/types/client/userAlerts.d.ts
  • libs/windy-sounding/types/client/userConsent.d.ts
  • libs/windy-sounding/types/client/userFavs.d.ts
  • libs/windy-sounding/types/client/utils.d.ts
  • libs/windy-sounding/types/iconfont.d.ts
  • libs/windy-sounding/types/interfaces.d.ts
  • libs/windy-sounding/types/lang-files.d.ts
  • libs/windy-sounding/types/offline.d.ts
  • libs/windy-sounding/types/types.d.ts
  • tsconfig.base.json
💤 Files with no reviewable changes (21)
  • libs/windy-sounding/types/client/params.d.ts
  • libs/windy-sounding/types/client/BottomTagPlugin.d.ts
  • libs/windy-sounding/types/client/Legend.d.ts
  • libs/windy-sounding/types/client/d.ts.files/incomingMessages.d.ts
  • libs/windy-sounding/types/client/TimestampBar.d.ts
  • libs/windy-sounding/types/client/BindedSwitch.d.ts
  • libs/windy-sounding/types/client/ProductSwitch.d.ts
  • libs/windy-sounding/types/client/Switch.d.ts
  • libs/windy-sounding/types/client/DraggableDiv.d.ts
  • libs/windy-sounding/types/client/Bar.d.ts
  • libs/windy-sounding/types/client/GhostBox.d.ts
  • libs/windy-sounding/types/client/LongTap.d.ts
  • libs/windy-sounding/types/client/d.ts.files/trans.d.ts
  • libs/windy-sounding/types/client/MobileCalendar.d.ts
  • libs/windy-sounding/types/client/BindedBar.d.ts
  • libs/windy-sounding/types/client/Scrollable.d.ts
  • libs/windy-sounding/types/client/BindedCheckbox.d.ts
  • libs/windy-sounding/types/client/OfflineMessagesClasses.d.ts
  • libs/windy-sounding/types/client/d.ts.files/Product.d.ts
  • libs/windy-sounding/types/client/favs.d.ts
  • libs/windy-sounding/types/client/offlineController.d.ts
✅ Files skipped from review due to trivial changes (12)
  • libs/windy-sounding/types/client/log.d.ts
  • libs/secrets/package.json
  • libs/optimizer/package.json
  • libs/windy-sounding/types/client/dataSpecifications.d.ts
  • libs/windy-sounding/types/client/permanentPromos.d.ts
  • libs/windy-sounding/types/client/errorLogger.d.ts
  • libs/windy-sounding/src/redux/meta.ts
  • libs/windy-sounding/types/client/customColors.d.ts
  • libs/windy-sounding/src/redux/plugin-slice.ts
  • libs/windy-sounding/types/client/GlObj.d.ts
  • libs/windy-sounding/types/client/format.d.ts
  • libs/windy-sounding/types/client/Layer.d.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • libs/windy-sounding/package.json
🧰 Additional context used
🪛 ESLint
libs/windy-sounding/types/client/AccessProducts.d.ts

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/IconProducts.d.ts

[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/BottomSveltePlugins.d.ts

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/appsFlyer.d.ts

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/rootScope.d.ts

[error] 23-23: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 25-25: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/d.ts.files/Layer.d.ts

[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/colorGradients.d.ts

[error] 4-5: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 5-5: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/promo.d.ts

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/WindowPlugin.d.ts

[error] 11-11: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/Calendar.d.ts

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-1: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/d.ts.files/favs.d.ts

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/geolocation.d.ts

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/d.ts.files/user.d.ts

[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 3-3: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/d.ts.files/plugins.d.ts

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 3-3: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 4-4: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 5-5: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/MetricClasses.d.ts

[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/overlays.d.ts

[error] 197-197: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 198-198: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 198-198: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 250-250: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/Renderer.d.ts

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/embed2.d.ts

[error] 13-13: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


[error] 14-21: Run autofix to sort these exports!

(simple-import-sort/exports)


[error] 22-22: Import in body of module; reorder to top.

(import/first)


[error] 23-23: Import in body of module; reorder to top.

(import/first)


[error] 24-24: Import in body of module; reorder to top.

(import/first)


[error] 24-24: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


[error] 26-26: Import in body of module; reorder to top.

(import/first)


[error] 27-27: Import in body of module; reorder to top.

(import/first)


[error] 28-28: Import in body of module; reorder to top.

(import/first)


[error] 28-28: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/TopoMap.d.ts

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/notifications.d.ts

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/storage.d.ts

[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 3-3: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/RadarPlusProduct.d.ts

[error] 1-4: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 4-4: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/products.d.ts

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-9: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 3-3: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 4-4: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 5-5: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 6-6: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 7-7: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 9-9: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/mobile.d.ts

[error] 142-142: Import in body of module; reorder to top.

(import/first)


[error] 143-143: Import in body of module; reorder to top.

(import/first)


[error] 144-144: Import in body of module; reorder to top.

(import/first)

libs/windy-sounding/types/client/SveltePlugin.d.ts

[error] 4-4: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/plugin-params.d.ts

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-18: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 17-17: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/Overlay.d.ts

[error] 9-9: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/dataSpecifications.d.ts

[error] 1-35: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 28-28: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/Metric.d.ts

[error] 1-13: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 13-13: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/d.ts.files/broadcast.d.ts

[error] 11-27: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 19-19: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 20-20: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 21-21: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 22-22: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/d.ts.files/alerts.d.ts

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-4: Run autofix to sort these imports!

(simple-import-sort/imports)

libs/windy-sounding/types/client/Color.d.ts

[error] 1-2: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 2-2: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/idbInstances.d.ts

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-9: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 9-9: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


[error] 15-15: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 23-23: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 24-24: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/types/client/OverlayClasses.d.ts

[error] 5-5: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/Product.d.ts

[error] 7-7: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/Calendar.d.ts

[error] 7-7: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/fetch.d.ts

[error] 1-11: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 11-11: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/DataTiler.d.ts

[error] 1-4: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 4-4: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/TileLayer.d.ts

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/broadcast.d.ts

[error] 9-9: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/plugins.d.ts

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/products.d.ts

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

🪛 Biome (1.9.4)
libs/windy-sounding/types/client/ExternalSveltePlugin.d.ts

[error] 50-50: void is confusing inside a union type.

Unsafe fix: Use undefined instead.

(lint/suspicious/noConfusingVoidType)

libs/windy-sounding/types/client/persistentStorage.d.ts

[error] 7-8: This empty export is useless because there's another export or import.

This export makes useless the empty export.

Safe fix: Remove this useless empty export.

(lint/complexity/noUselessEmptyExport)

libs/windy-sounding/types/client/geolocation.d.ts

[error] 44-45: This empty export is useless because there's another export or import.

This import makes useless the empty export.

Safe fix: Remove this useless empty export.

(lint/complexity/noUselessEmptyExport)

libs/windy-sounding/types/client/RadarPlusProduct.d.ts

[error] 18-18: void is confusing inside a union type.

Unsafe fix: Use undefined instead.

(lint/suspicious/noConfusingVoidType)

libs/windy-sounding/types/client/Product.d.ts

[error] 237-237: void is confusing inside a union type.

Unsafe fix: Use undefined instead.

(lint/suspicious/noConfusingVoidType)


[error] 241-241: void is confusing inside a union type.

Unsafe fix: Use undefined instead.

(lint/suspicious/noConfusingVoidType)

🪛 LanguageTool
libs/windy-sounding/CHANGELOG.md

[typographical] ~3-~3: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: # Release history ## 4.1.11 - Feb 20, 2025 - Sync with the latest win...

(DASH_RULE)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (115)
libs/windy-sounding/types/client/cloudSync.d.ts (1)

11-14: Great improvement to the API!

The return type change from void to boolean along with the clear JSDoc documentation improves the API's functionality by allowing consumers to track whether data was actually merged. This aligns well with the function storeSettings() which follows a similar pattern.

libs/windy-sounding/types/client/d.ts.files/notifications.d.ts (1)

4-5: LGTM! Good addition of pagination support.

The addition of pageSize and current parameters enables proper pagination support, which is essential for handling large notification lists efficiently.

libs/windy-sounding/types/client/d.ts.files/Layer.d.ts (2)

74-74: LGTM: New layer metrics added.

The new radarPlus and topoMap properties are well-defined and consistent with the interface's existing pattern.

Also applies to: 95-95


187-190: LGTM: Well-documented optional parameter added.

The new acRangeInHours property is properly typed and documented, following TypeScript best practices.

libs/windy-sounding/types/client/d.ts.files/startup.d.ts (7)

1-2: LGTM! Clean type-only imports.

The imports follow TypeScript best practices by using type-only imports.


4-4: LGTM! Clear and descriptive type definition.

The union type is well-defined with self-documenting values.


6-8: LGTM! Well-structured discriminator interface.

The interface follows the TypeScript discriminated union pattern correctly.


10-13: LGTM! API response interface follows conventions.

The interface properly uses kebab-case for REST API properties and optional fields for flexibility.


15-17: LGTM! Well-designed type intersection and narrowing.

The interface effectively combines and narrows types for the discriminated union pattern.


34-38: LGTM! Clear tracking properties extension.

The interface effectively extends the base type with well-named tracking properties.


40-59: LGTM! Excellent documentation and type usage.

The interface is thoroughly documented with clear JSDoc comments and uses appropriate types for timestamps.

libs/windy-sounding/types/client/embed2.d.ts (3)

25-25: LGTM!

The user service export follows the established pattern for service exports.


31-33: LGTM!

The new map-related exports are well-organized and logically grouped with other map functionality.


45-45: LGTM!

The notifications service export follows the established pattern for service exports.

libs/windy-sounding/types/client/notifications.d.ts (3)

4-4: Clarify error-handling strategy.

loadNotifications returns a Promise<void> without specifying any rejection or error detail. Consider whether additional error-handling or a more explicit return type (e.g., Promise<HttpPayload<void>>) is needed.


9-12: Consider confirming batch processing sides.

markAllAsSeen() suggests batch updates. Confirm upstream or downstream code handles potential large requests and partial failures gracefully.


27-35: Document test notification behavior clearly.

sendTestNotification returns void. Clarify if there is a success/failure callback or promise. This helps integrate safely into the calling code.

libs/windy-sounding/types/client/d.ts.files/storage.d.ts (1)

46-54: Review the usage of dynamic keys with deprecation.

You’ve introduced new dynamic keys (recents${number}, favs${number}, etc.) marked as deprecated. Verify whether these are strictly needed or can be fully replaced by the new IDB-based solution, to avoid confusion and ensure maintainability.

libs/windy-sounding/types/client/d.ts.files/user.d.ts (1)

28-53: Leverage a discriminated union.

UserInfo is effectively a discriminated union on auth. This is good practice. Ensure that calling code properly narrows on auth before accessing userInfo.

libs/windy-sounding/types/client/Color.d.ts (5)

3-9: Verify mandatory default property usage.
Previously, default might have been optional. Now it's required in ColorInitParams. Ensure all call sites provide this property to avoid potential compile-time or runtime errors.


30-42: Assess new class fields for backward compatibility.
Fields like defaultColorGradient, customColorGradient?, colors?, ident: AnyColorIdent, qualitative?, and steps might alter the existing initialization logic. Verify that older code using Color remains compatible and that the broader codebase is updated to accommodate these changes.


62-63: Correctness of dark/light color transformation.
Although this is only a docstring change, double-check that the colorDark logic operates correctly, especially for extreme values.


90-90: Ensure getColorGradient matches usage expectations.
It now returns a ColorGradient unconditionally. Verify that call sites expecting a possibly undefined value are updated accordingly.


94-94: Confirm error path in checkValidity.
The new signature is straightforward, but ensure that any false return is handled gracefully by callers, particularly if invalid objects lead to user-facing error messages or logs.

libs/windy-sounding/types/client/d.ts.files/plugins.d.ts (4)

57-61: Ensure Map UI plugins align with new or changed overlays.
These expansions ('radar', 'satellite', 'radar-plus', 'map-selector') indicate new or updated map-related Svelte plugins. Validate correct loading priorities, layering, and user toggles.


66-85: Check optional plugin consistency.
Optional properties like widgets, onboarding, rhbottom, 'location-permission', 'mobile-ui', 'embed-ui', contextmenu, upload, screenshot, search, 'startup-articles', 'picker-mobile' should be handled carefully during plugin initialization. Missing or null references can lead to runtime errors if not guarded.


95-95: isolines plugin addition.
This plugin is now part of PlainPlugins. Confirm that the rest of the codebase references it correctly (particularly if it was previously declared elsewhere).


106-109: Evaluate combined Plugins and WindowPlugins interfaces.
Merging TagPlugins, SveltePlugins, SveltePanePlugins, PlainPlugins, and BottomSveltePlugins into these composite interfaces can make them quite large. Confirm that the extended shape doesn’t introduce name collisions or overshadow more specialized plugin usage.

libs/windy-sounding/types/client/d.ts.files/broadcast.d.ts (2)

110-115: Confirm favorite and alert changes are broadcast appropriately.
New events favChanged and alertChanged might require UI updates or data synchronization. Ensure subscribers receive these events and handle them gracefully.


134-151: Validate new leaflet-* and maplibre-* events.
These varied events (leaflet-zoomIn, maplibre-fitBounds, etc.) could overlap in functionality. Confirm that no duplication or conflict arises and that each broadcast is distinct in usage. Also, confirm that calling code properly listens for the right event types.

libs/windy-sounding/types/client/Product.d.ts (3)

36-45: Ensure fallback handling for new optional properties.

The newly introduced metadataServer, hasAccumulations, freeProduct, and hideProductSwitch fields are optional. Verify that code referencing these properties gracefully handles the case where they may be absent.


232-236: Double-check null vs. empty string usage.

refTime(): YYYYMMDDHH | '' and getUpdateTimes(): { ... } | null highlight different ways of handling “no value.” For consistency, ensure the calling code expects an empty string vs. null consistently.


240-240: Confirm promise resolution type.

loadAndGetReftime() resolves to ISODateString | undefined. Verify all callers handle the undefined case correctly, especially if the reference time is essential for subsequent logic.

libs/windy-sounding/types/client/d.ts.files/dataSpecifications.d.ts (8)

30-31: Check usage of newly imported types.

import type { User, LoginAndFinishAction } has been added. Verify these types are indeed consumed in the new code segments, otherwise remove to keep the file lean.


35-35: Confirmed new import is correctly referenced.

NumberRange import appears straightforward; no concerns here.

🧰 Tools
🪛 ESLint

[error] 1-35: Run autofix to sort these imports!

(simple-import-sort/imports)


186-188: Renamed accumulations property.

acRange replaces the previous accumulations time prop. Ensure any referencing code is updated to match.


209-211: Renamed isolines property.

isolinesType clarifies the purpose better than a generic isolines. This rename is a good improvement for clarity.


310-317: Map customization enhancements.

Added mapLibrary and a new doc block for map. Verify that switching map libraries does not conflict with the selected map type (sznmap, sat, etc.).


418-421: Ensure consistent layer naming for airspaces.

displayAirspaces is a straightforward toggle. Double-check that a map or layer named “airspaces” is available and that toggling is consistent with other toggles like displayHeliports.


776-779: Validate usage of radsatTimestamp.

Timers for radar/satellite might be interchanged in some code paths. Confirm any references to older radar timestamps are now updated to radsatTimestamp.


867-871: Push notifications readiness.

pushNotificationsReady is straightforward; ensure the system handles a false or undefined value gracefully and triggers no repeated registration attempts.

libs/windy-sounding/types/client/loadArticlesOrWhatsNew.d.ts (1)

1-2: LGTM!

The function declaration follows TypeScript best practices and its name clearly indicates its purpose.

libs/windy-sounding/types/client/ga.d.ts (1)

1-4: LGTM!

The property rename from qs to reqQs improves clarity by making the name more descriptive.

libs/windy-sounding/types/client/globals.d.ts (1)

4-4: LGTM!

The target constant with its union type provides a type-safe way to identify the runtime environment.

libs/windy-sounding/types/client/appsFlyer.d.ts (1)

1-4: LGTM!

The AppsFlyerPlugin integration is well-structured with proper TypeScript type definitions.

🧰 Tools
🪛 ESLint

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/persistentStorage.d.ts (1)

1-6: LGTM! Well-structured storage class implementation.

The PersistentStorage class provides a clean Promise-based API for storage operations with proper TypeScript access modifiers.

libs/windy-sounding/types/client/AccessProducts.d.ts (1)

3-8: LGTM! Well-structured class hierarchy.

The AccessProduct and AccessCProduct classes provide a clean inheritance hierarchy with proper constructor parameter types.

libs/windy-sounding/types/client/cityLabels.d.ts (1)

7-10: LGTM! Clear and focused function declarations.

The functions have clear, single responsibilities for managing city labels on the map.

libs/windy-sounding/types/client/IconProducts.d.ts (1)

4-7: LGTM! Well-structured type definitions.

The iconOverlays array and IconProducts class are well-defined with proper type constraints.

libs/windy-sounding/types/client/d.ts.files/pois.d.ts (1)

3-3: LGTM!

The import path update aligns with the standardization of type imports across the codebase.

libs/windy-sounding/types/client/TopoMap.d.ts (1)

4-10: LGTM!

The TopoMap class declaration looks good with appropriate method signatures and property types.

libs/windy-sounding/types/client/deviceLogging.d.ts (1)

1-1: LGTM!

The changes improve the function signature by:

  1. Using a more specific type (RegistrationHash)
  2. Making the parameter optional
  3. Converting to async/Promise-based implementation

Also applies to: 14-14

libs/windy-sounding/types/client/pois.d.ts (1)

5-5: LGTM!

The changes:

  1. Standardize the import path with .d extension
  2. Convert displayPoiOnMap to async/Promise-based implementation

Also applies to: 15-15

libs/windy-sounding/types/client/colorGradients.d.ts (2)

1-5: LGTM! Well-documented type imports.

The imports are correctly typed and the documentation comment clearly describes the purpose of the file.

🧰 Tools
🪛 ESLint

[error] 4-5: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 5-5: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


10-13: LGTM! Well-documented utility function.

The createColorGradient function has a clear signature and purpose.

libs/windy-sounding/types/client/BottomSveltePlugins.d.ts (2)

1-3: LGTM! Well-structured imports.

The imports are correctly typed and organized.

🧰 Tools
🪛 ESLint

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


4-8: LGTM! Well-designed type composition.

The BottomSveltePluginInitParams type effectively combines Omit and Pick utility types to create a precise parameter type.

libs/windy-sounding/types/client/promo.d.ts (1)

2-6: LGTM! Well-structured interface.

The PromoInfoObject interface is well-defined with clear types.

libs/windy-sounding/types/client/baseMap.d.ts (2)

1-12: LGTM! Well-defined map tiles type.

The MapTilesKeys type is comprehensive and clearly defines all possible tile types.


17-24: LGTM! Well-documented basemap functions.

The new functions addOrUpdateBasemap and removeBasemap have clear signatures and descriptive documentation.

libs/windy-sounding/types/client/RadarPlusProduct.d.ts (1)

11-14: Well-documented method with clear return type.

The loadInfoJson method has good documentation explaining its purpose and the expected return type.

libs/windy-sounding/types/client/d.ts.files/Renderer.d.ts (1)

6-9: Well-structured type definitions with clear constraints.

The type definitions are well-organized:

  • AllowedRenderPlugins clearly specifies which plugins are supported.
  • AllowedUserControls provides a comprehensive union of possible control types.
  • RendererInitParams interface maintains type safety with these constraints.

Also applies to: 34-40

libs/windy-sounding/types/client/d.ts.files/LabelsLayer.d.ts (1)

14-15: Clear documentation update reflecting data type change.

The documentation has been properly updated to reflect the change from CityForecastData to CityTemperaturesDto, maintaining code clarity.

libs/windy-sounding/src/env.d.ts (1)

13-27: LGTM! The W object has been properly updated with the latest Windy API types.

The new type declarations are well-structured and properly imported from the Windy client modules, ensuring type safety and better IDE support.

libs/windy-sounding/types/client/MetricClasses.d.ts (3)

3-3: LGTM! Import path updated to match the latest Windy API structure.

The import path has been correctly updated from '@windy/types.d' to '@windy/types'.

🧰 Tools
🪛 ESLint

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


7-9: LGTM! The convertNumber method has been enhanced with backward conversion support.

The new back parameter is well-documented and adds useful functionality for inverse conversions.


34-34: LGTM! The updateLines method now supports radar functionality.

The new radarEnabled parameter extends the method's capabilities to handle radar-specific updates.

libs/windy-sounding/types/client/OverlayClasses.d.ts (2)

5-5: LGTM! Import path updated to match the latest Windy API structure.

The import path has been correctly updated to import LoadedTranslations from '@windy/types'.

🧰 Tools
🪛 ESLint

[error] 1-5: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 5-5: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)


6-8: LGTM! Consistent addition of hidePickerElevation property.

The hidePickerElevation property has been consistently added to CurrentOverlay, WaveOverlay, RainPtypeOverlay, and CloudsOverlay classes.

Also applies to: 10-12, 26-28, 30-32

libs/windy-sounding/types/client/d.ts.files/Color.d.ts (3)

53-53: LGTM! ColorIdent type updated with new identifiers.

The type has been updated to include 'radarPlus', 'drought', and 'soilMoisture', replacing more specific identifiers.

Also applies to: 61-62


82-83: LGTM! New AnyColorIdent type added with proper documentation.

The type combines ColorIdent, PluginColorIdent, and additional identifiers, with clear documentation about dynamic creation.


85-88: LGTM! New UserColor interface added for custom color configurations.

The interface provides a clear structure for user-defined colors with associated gradients.

libs/windy-sounding/types/client/d.ts.files/Calendar.d.ts (1)

82-90: LGTM! Good addition of premium and forecast availability flags.

The new properties enhance the CalendarDay interface by providing information about premium-only forecasts and forecast availability. This aligns well with the API synchronization objective.

libs/windy-sounding/types/client/geolocation.d.ts (2)

14-18: LGTM! Well-structured geolocation options.

The new GeolocationOptions interface provides good control over user messages and fallback behavior.


43-44: Good modernization of async APIs.

Converting to Promise-based APIs and adding permission request functionality improves the developer experience.

libs/windy-sounding/types/client/d.ts.files/products.d.ts (1)

14-21: LGTM! Good enhancement of BOM access products.

The addition of region-specific BOM access products with proper typing improves type safety and clarity.

libs/windy-sounding/types/client/SveltePlugin.d.ts (1)

4-4: LGTM! Good enhancement of plugin system flexibility.

The changes improve the plugin system by:

  1. Adding support for bottom plugins
  2. Making the plugin root optional
  3. Allowing null for svelteApp property

Also applies to: 31-32

🧰 Tools
🪛 ESLint

[error] 1-4: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 4-4: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/src/util/utils.ts (2)

1-1: LGTM!

The import statement has been updated to use the new location of the Fav type, which aligns with the type reorganization in favs.d.ts.


24-25:

Details

❓ Verification inconclusive

Verify the impact of removing the name fallback.

The function no longer falls back to fav.name when fav.title is empty. This change might affect the display of favorites that only have a name property.

Run the following script to check for potential impact:


🏁 Script executed:

#!/bin/bash
# Description: Search for usages of getFavLabel with favorites that might only have a name property.

# Search for favorites with only name property
rg -A 5 "name:\s*['\"].*['\"]" --type ts

# Search for direct usage of fav.name
rg "fav\.name" --type ts

Length of output: 62199


Action: Confirm whether the removal of the fav.name fallback is safe.

The updated implementation now returns only fav.title || '', so any favorite object missing a title (but having a name) will yield an empty string. The search results show many object literals setting a name property throughout the repository, but we found no direct reference to fav.name in a context that would trigger the fallback. That said, it remains unclear whether there are runtime scenarios (or data instances) where a favorite might only have a name and no title.

Please verify that in all cases where favorites are displayed the provided data always includes a non-empty title. If there is any chance that a favorite could be defined with only a name, you might want to reinstate the fallback to avoid unintended blank labels.

libs/windy-sounding/types/client/ExternalSveltePlugin.d.ts (1)

8-8: LGTM!

The import of PluginOpeningOptions from @windy/interfaces is correctly added to support the new open method.

libs/windy-sounding/types/client/d.ts.files/favs.d.ts (2)

6-10: LGTM! Clear deprecation notice.

The separation of FavTypeNew from the deprecated FavType is well-documented and provides a clear migration path.


38-58: LGTM! Well-structured type definition.

The Fav type is well-documented with clear explanations for each property, especially the timestamp-based sorting mechanism for pinned favorites.

libs/windy-sounding/types/client/picker.d.ts (1)

37-37: LGTM! Improved return type.

The lockPosition method now returns LatLon, which is more useful and consistent with other location-related methods in the class like getLatLon.

libs/windy-sounding/types/client/lruCache.d.ts (1)

68-73: LGTM! Well-documented forEach method.

The new forEach method is a valuable addition that enables iterating over cache entries in age order. The implementation maintains type safety and includes clear documentation.

libs/windy-sounding/types/client/Renderer.d.ts (1)

50-50: LGTM! Type update improves type safety.

The change from BottomTagPlugins to AllowedUserControls enhances type safety and better represents the allowed control types.

libs/windy-sounding/types/client/IDB.d.ts (1)

1-71: LGTM! Well-structured IndexedDB wrapper with comprehensive type safety.

The IDB class provides a robust type-safe wrapper around IndexedDB with:

  • Clear type definitions for database operations
  • Support for backend synchronization
  • Comprehensive documentation
libs/windy-sounding/types/client/http.d.ts (2)

6-10: LGTM! Security enhancement for mobile applications.

The acceptHeader constant improves security by adding protection against stealing and handling CORS checks for mobile apps.


63-70: LGTM! Consistent PATCH method implementation.

The patch method follows the same pattern as other HTTP methods, maintaining consistency in the API design.

libs/windy-sounding/types/client/map.d.ts (2)

62-65: LGTM! Fixed deprecation notice spelling.

The typo in the deprecation notice has been corrected from "depreciated" to "deprecated".


82-87:

Details

❓ Verification inconclusive

Consider adding initialization state checks.

The mapLibre.wrapper being nullable suggests a need for proper initialization checks in consuming code.


🏁 Script executed:

#!/bin/bash
# Search for direct access to mapLibre.wrapper without null checks
ast-grep --pattern 'mapLibre.wrapper.$$$'

Length of output: 43


Initialization Safety Review
We define mapLibre.wrapper as nullable in the type declaration, which implies consuming code should check its initialization. However, our initial AST grep search didn’t yield evidence of unsafe direct accesses. Since that result is inconclusive, please manually verify that every usage of mapLibre.wrapper in the codebase is properly guarded with null or initialization checks. If any usage lacks such safeguards, consider adding appropriate checks here and at the consuming sites.

libs/windy-sounding/types/client/layers.d.ts (1)

57-58: LGTM! Well-structured layer additions.

The new radarPlus and topoMap layers follow the established type patterns and maintain consistency with existing layer definitions.

Also applies to: 78-78

libs/windy-sounding/types/client/Plugin.d.ts (1)

64-64: Documentation fix: Corrected typo in isOpen property comment.

Fixed typo in documentation: "currentlly" → "currently".

libs/windy-sounding/types/client/Calendar.d.ts (2)

13-16: Documentation added for freeProduct property.

Good addition of documentation for the new freeProduct property, clearly explaining its purpose.


4-7:

Details

❓ Verification inconclusive

Verify import paths with .d.ts extension.

The import paths have been updated to include .d.ts extension. This is unusual for TypeScript declaration files.


🏁 Script executed:

#!/bin/bash
# Check if other files in the project use similar import paths
rg -g '*.d.ts' 'import.*\.d\.ts'

Length of output: 34


Attention: Please verify the explicit use of .d.ts in the import paths.

  • The updated import paths in libs/windy-sounding/types/client/Calendar.d.ts now include what appears to be a .d.ts extension. This is unconventional for TypeScript declaration files.
  • A repository-wide search for import strings containing .d.ts returned no similar cases. Given that this pattern isn’t observed elsewhere, please manually confirm that:
    • The change is intentional.
    • It correctly supports TypeScript’s module resolution without introducing issues.
  • If this behavior is desired, ensure that all related declaration files consistently follow the same convention.
🧰 Tools
🪛 ESLint

[error] 7-7: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/Metric.d.ts (2)

41-44: LGTM! The addition of backward conversion support enhances flexibility.

The new backConv property enables bidirectional unit conversion, which is a valuable addition for handling complex unit transformations.


129-136: LGTM! The static gradient legend method improves reusability.

The refactoring of renderGradientLegend to a static method with a more focused signature is a good architectural decision. It separates the legend generation logic from instance-specific concerns.

libs/windy-sounding/types/client/d.ts.files/Metric.d.ts (1)

104-104: LGTM! The addition of radsat metric type enhances satellite data support.

The new radsat property of type SatelliteMetric is a logical addition to the MetricTypes interface, maintaining consistency with existing satellite-related metrics.

libs/windy-sounding/types/client/lib.d.ts (1)

42-42: LGTM! The standardization of exports improves code organization.

The transition to namespace exports for notifications, cityLabels, log, location, router, showableErrorsService, and userFavs brings consistency to the module export pattern.

Also applies to: 82-82, 87-93

libs/windy-sounding/types/client/fetch.d.ts (3)

74-78: LGTM! The new point forecast URL function improves API flexibility.

The addition of getPointForecastUrl allows clients to obtain the URL separately from data fetching, enabling more flexible usage patterns.


98-112: LGTM! The meteogram forecast functions provide better separation of concerns.

The split into getMeteogramForecastUrl and getMeteogramForecastData functions follows good API design principles by separating URL generation from data fetching.


157-163: LGTM! The new observation and hurricane functions enhance weather data capabilities.

The addition of getObservationPoiUrl and getHurricanesCount functions expands the API's weather data retrieval capabilities in a type-safe manner.

libs/windy-sounding/types/client/Overlay.d.ts (2)

61-64: LGTM! New properties enhance UI customization.

The new properties provide better control over UI elements:

  • hidePickerElevation: Controls elevation visibility in desktop picker
  • hideFromURL: Controls URL display
  • promoBadge and promoBadgeColor: Enables promotional badges
  • menuImage: Supports menu thumbnails

Also applies to: 111-124


125-129: LGTM! New methods improve interactivity.

The new methods enhance overlay functionality:

  • onClick: Handles click events
  • getMenuImagePath: Manages menu image paths

Also applies to: 139-142

libs/windy-sounding/types/client/WindowPlugin.d.ts (1)

121-124: LGTM! New property improves closing behavior.

The closingRequested property helps track if a closing request was made while the plugin was being opened, improving state management.

libs/windy-sounding/types/client/d.ts.files/plugin-params.d.ts (1)

50-86: LGTM! Enhanced type definitions improve type safety.

The changes improve type safety and add new functionality:

  • DetailOpenParams: Updated with better timestamp handling
  • alerts-edit: New type for alert management
  • location-permission: New type for permission handling

Also applies to: 145-158, 194-198

libs/windy-sounding/types/client/mobile.d.ts (1)

39-40: LGTM! New exports enhance functionality.

The new exports add useful functionality:

  • IDB and idbInstances: IndexedDB support
  • userAlerts and userConsent: User management
  • appsFlyer: Analytics integration

Also applies to: 81-83, 139-140

libs/windy-sounding/types/client/overlays.d.ts (2)

195-199: LGTM: New radarPlus overlay added.

The addition of the radarPlus overlay with proper metric and layer types aligns with the Windy API update.

🧰 Tools
🪛 ESLint

[error] 197-197: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 198-198: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 198-198: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


249-251: LGTM: New overlays added for enhanced functionality.

The addition of heatmaps, topoMap, and hurricanes overlays expands the available visualization options. The type definitions are properly structured with appropriate undefined metrics where applicable.

🧰 Tools
🪛 ESLint

[error] 250-250: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)

libs/windy-sounding/CHANGELOG.md (2)

3-6: Version number mismatch with PR title.

The PR title mentions version 4.1.10, but the changelog shows version 4.1.11. Please ensure version numbers are consistent across all files.

🧰 Tools
🪛 LanguageTool

[typographical] ~3-~3: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: # Release history ## 4.1.11 - Feb 20, 2025 - Sync with the latest win...

(DASH_RULE)


5-5: Typo: "windy API" should be "Windy API".

Maintain consistent capitalization for the Windy API reference.

libs/windy-sounding/types/client/plugins.d.ts (1)

1-1: LGTM: Import path standardization.

The update to include .d suffix in import paths improves consistency in file references.

🧰 Tools
🪛 ESLint

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/products.d.ts (1)

1-1: LGTM: Import path standardization.

The update to include .d suffix in import paths improves consistency in file references.

🧰 Tools
🪛 ESLint

[error] 1-1: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/TileLayer.d.ts (1)

4-9: Class Declaration Consistency

The declaration of the TileLayer class using the updated type definitions is correct and consistent with recent changes in the project’s type imports. No issues detected with the class implementation.

libs/windy-sounding/types/client/broadcast.d.ts (1)

1-15: File-Level Consistency Check

Overall, the updates to the import path for the Broadcast type and the existing file documentation remain clear and consistent with the broader codebase refactoring. No further modifications are required.

🧰 Tools
🪛 ESLint

[error] 9-9: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

libs/windy-sounding/types/client/DataTiler.d.ts (1)

5-42: Class and Interface Definitions

The remainder of the file—declaring interfaces and the DataTiler class—remains unchanged and is consistent with the overall project structure. The new import paths pose no issues in this context.

Comment on lines +7 to +8
export declare const persistentStorage: PersistentStorage;
export {};
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Remove redundant empty export.

The empty export at line 8 is redundant since there's already a named export at line 7.

export declare const persistentStorage: PersistentStorage;
-export {};
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export declare const persistentStorage: PersistentStorage;
export {};
export declare const persistentStorage: PersistentStorage;
🧰 Tools
🪛 Biome (1.9.4)

[error] 7-8: This empty export is useless because there's another export or import.

This export makes useless the empty export.

Safe fix: Remove this useless empty export.

(lint/complexity/noUselessEmptyExport)

Comment on lines +1 to +3
import { Renderer } from '@windy/Renderer';
import type { FullRenderParameters } from '@windy/Layer.d';
import type { Renderers } from '@windy/Renderer.d';
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fix import statement formatting.

The static analysis tools suggest:

  1. Sorting the imports
  2. Adding a newline after imports

Apply this diff to fix the formatting:

-import { Renderer } from '@windy/Renderer';
-import type { FullRenderParameters } from '@windy/Layer.d';
-import type { Renderers } from '@windy/Renderer.d';
+import type { FullRenderParameters } from '@windy/Layer.d';
+import { Renderer } from '@windy/Renderer';
+import type { Renderers } from '@windy/Renderer.d';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { Renderer } from '@windy/Renderer';
import type { FullRenderParameters } from '@windy/Layer.d';
import type { Renderers } from '@windy/Renderer.d';
import type { FullRenderParameters } from '@windy/Layer.d';
import { Renderer } from '@windy/Renderer';
import type { Renderers } from '@windy/Renderer.d';
🧰 Tools
🪛 ESLint

[error] 1-3: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 3-3: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

Comment on lines +15 to +57
import('../../types/interfaces').LatLon & {
title: string;
} & (
| {
type: 'fav';
}
| {
type: 'alert';
alert: import('../../types/interfaces').Alert;
alertProps: import('../../types/interfaces').AlertProps;
}
| {
type: 'airport';
icao: string;
}
| {
type: 'station';
stationId:
| `radiation-${string}`
| `airq-${string}`
| `ad-${string}`
| `wmo-${string}`
| `madis-${string}`
| `buoy-${string}`
| `dbuoy-${string}`
| `pws-${string}`
| `ship-${string}`;
}
| {
type: 'webcam';
webcamId: number;
}
| {
type: 'route';
route:
| `car/${string}`
| `vfr/${string}`
| `ifr/${string}`
| `elevation/${string}`
| `boat/${string}`
| `airgram/${string}`;
}
)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fix type imports in the userFavsIdb declaration.

Replace dynamic import() type references with static import type statements.

Apply this diff:

   string,
   Fav,
-  import('../../types/interfaces').LatLon & {
+  LatLon & {
     title: string;
   } & (
       | {
           type: 'fav';
         }
       | {
           type: 'alert';
-          alert: import('../../types/interfaces').Alert;
-          alertProps: import('../../types/interfaces').AlertProps;
+          alert: Alert;
+          alertProps: AlertProps;
         }

Add these imports at the top:

import type { Alert, AlertProps, LatLon } from '../../types/interfaces';
🧰 Tools
🪛 ESLint

[error] 15-15: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 23-23: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)


[error] 24-24: import() type annotations are forbidden.

(@typescript-eslint/consistent-type-imports)

Comment on lines +1 to +9
import { IDB } from '@windy/IDB';
import type { Fav } from '@windy/favs.d';
import type { SearchRecent } from '@plugins/search/search';
import type { AlertResponse, AlertRequest } from '@windy/alerts';
import type { MarkedNotams } from '@plugins/airport/airport';
import type { MinifestObject } from '@windy/Calendar.d';
import type { SeenArticle } from '@windy/startup.d';
import type { PromoInfoObject } from '@windy/promo';
import type { AnyColorIdent, UserColor } from '@windy/Color.d';
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fix import statements to follow TypeScript best practices.

The import statements need to be updated to follow TypeScript's best practices:

  1. Use import type consistently for type-only imports
  2. Sort imports
  3. Add newline after imports

Apply this diff to fix the import statements:

-import { IDB } from '@windy/IDB';
-import type { Fav } from '@windy/favs.d';
-import type { SearchRecent } from '@plugins/search/search';
-import type { AlertResponse, AlertRequest } from '@windy/alerts';
-import type { MarkedNotams } from '@plugins/airport/airport';
-import type { MinifestObject } from '@windy/Calendar.d';
-import type { SeenArticle } from '@windy/startup.d';
-import type { PromoInfoObject } from '@windy/promo';
-import type { AnyColorIdent, UserColor } from '@windy/Color.d';
+import type { IDB } from '@windy/IDB';
+import type { AlertRequest, AlertResponse } from '@windy/alerts';
+import type { AnyColorIdent, UserColor } from '@windy/Color.d';
+import type { MinifestObject } from '@windy/Calendar.d';
+import type { Fav } from '@windy/favs.d';
+import type { PromoInfoObject } from '@windy/promo';
+import type { SeenArticle } from '@windy/startup.d';
+import type { MarkedNotams } from '@plugins/airport/airport';
+import type { SearchRecent } from '@plugins/search/search';

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 ESLint

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-9: Run autofix to sort these imports!

(simple-import-sort/imports)


[error] 9-9: Expected 1 empty line after import statement not followed by another import.

(import/newline-after-import)

Comment on lines +1 to +4
import { AlertConditionType, CloudCoverage, AlertStatus, Direction, Weekday } from '@windy/userAlerts';
import type { Timestamp, UserInterest } from '@windy/types';
import type { Products } from '@windy/rootScope.d';
import type { LatLon } from '@windy/interfaces';
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Convert regular imports to type-only imports.

Since these imports are only used as types, they should use the import type syntax for better type safety and clearer intent.

-import { AlertConditionType, CloudCoverage, AlertStatus, Direction, Weekday } from '@windy/userAlerts';
-import type { Timestamp, UserInterest } from '@windy/types';
-import type { Products } from '@windy/rootScope.d';
-import type { LatLon } from '@windy/interfaces';
+import type { AlertConditionType, CloudCoverage, AlertStatus, Direction, Weekday } from '@windy/userAlerts';
+import type { Timestamp, UserInterest } from '@windy/types';
+import type { Products } from '@windy/rootScope.d';
+import type { LatLon } from '@windy/interfaces';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { AlertConditionType, CloudCoverage, AlertStatus, Direction, Weekday } from '@windy/userAlerts';
import type { Timestamp, UserInterest } from '@windy/types';
import type { Products } from '@windy/rootScope.d';
import type { LatLon } from '@windy/interfaces';
import type { AlertConditionType, CloudCoverage, AlertStatus, Direction, Weekday } from '@windy/userAlerts';
import type { Timestamp, UserInterest } from '@windy/types';
import type { Products } from '@windy/rootScope.d';
import type { LatLon } from '@windy/interfaces';
🧰 Tools
🪛 ESLint

[error] 1-1: All imports in the declaration are only used as types. Use import type.

(@typescript-eslint/consistent-type-imports)


[error] 1-4: Run autofix to sort these imports!

(simple-import-sort/imports)

Comment on lines +42 to +57
| 'aromeFrance'
| 'aromeReunion'
| 'canHrdps'
| 'canRdwpsWaves'
| 'czeAladin'
| 'iconEuWaves'
| 'hrrrAlaska'
| 'hrrrConus'
| 'bomAccess'
| 'bomAccessAd'
| 'bomAccessBn'
| 'bomAccessDn'
| 'bomAccessNq'
| 'bomAccessPh'
| 'bomAccessSy'
| 'bomAccessVt'
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Verify new product identifiers with Windy API documentation.

Several new product identifiers have been added (e.g., aromeFrance, bomAccessAd, etc.). Please ensure these match the latest Windy API documentation.

Also applies to: 89-109


🌐 Web query:

What are the latest supported product identifiers in the Windy API?

💡 Result:

The latest supported product identifiers (weather forecast models) in the Windy API as of February 2025 include:

Core global models:

  • gfs (Global Forecast System)
  • iconEu (ICON European model)
  • geos5 (GEOS-5 atmospheric model)

Regional NAM models:

  • namConus (North American Mesoscale for continental US)
  • namHawaii
  • namAlaska

Wave-specific models:

  • gfsWave (Wavewatch III global waves)
  • arome (French high-resolution wave model)

These products represent distinct weather data sets with different resolutions and coverage areas[6][4]. The availability depends on whether using the free or paid API tier - premium models like iconEu require paid access[4][7].

Recent updates show expanded regional coverage through specialized NAM implementations[6], though ECMWF-based products remain unavailable for third-party redistribution due to licensing restrictions[4]. Developers should verify parameter compatibility using .getAllowed('product') after initialization[1].

Citations:


Action Required: Update Product Identifiers to Match Windy API Documentation

The identifiers in libs/windy-sounding/types/client/models.d.ts (lines 42–57 and 89–109) do not correlate with the latest Windy API documentation. According to the documentation as of February 2025, the supported models include:

  • Core global models: gfs, iconEu, geos5
  • Regional NAM models: namConus, namHawaii, namAlaska
  • Wave-specific models: gfsWave, arome

In contrast, the code lists identifiers such as aromeFrance, bomAccessAd, and others that are not mentioned in the official set. Please verify whether these custom identifiers are intentional extensions or need to be updated to the documented values.

* Required language files
*/
langFiles?: LangFileKey[];
langFiles: LangFileKey[];
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

❓ Verification inconclusive

Breaking change: langFiles property is now required.

The langFiles property has been changed from optional to required. This is a breaking change that requires updates to all plugin instances.

Run this script to find affected plugin instances:


🏁 Script executed:

#!/bin/bash
# Find plugin instances that might be affected by the langFiles change
ast-grep --pattern 'new Plugin({ $$$, langFiles: $_? })'

Length of output: 58


Manual Verification Required: Confirm Plugin Instances Provide the Required langFiles Property

The update to the Plugin interface now makes langFiles required, which is a breaking change. The initial AST search command did not return any results, so it’s unclear whether all Plugin instances have been updated or if the search pattern didn’t capture some cases.

Next Steps:

  • Review Plugin Instantiations:
    Please run the following command to list all Plugin instantiations and check if they include the langFiles property:

    #!/bin/bash
    # List all lines instantiating Plugin for manual inspection
    rg "new Plugin\\(" -n .
  • Manual Check:
    Manually inspect each Plugin instantiation from the output. Ensure that every instance provides the langFiles property. If any instantiation is missing this property, update it accordingly.

Once you’ve confirmed that all Plugin instances include the required langFiles property, we can consider this breaking change properly managed.


Action Required: Verify All Plugin Instantiations Provide langFiles

The change in the file libs/windy-sounding/types/client/Plugin.d.ts makes the langFiles property required, which is a breaking change. The initial AST search did not produce conclusive results. To ensure full coverage, please manually verify that every Plugin instantiation now supplies this required property. For example, you can run:

Then, review the output to confirm that all instances include langFiles. If any instance is missing it, update that instantiation accordingly.


🏁 Script executed:

[run_scripts]
#!/bin/bash
# List all Plugin instantiations for manual review
rg "new Plugin\\(" -n .

Length of output: 146


Manual Verification Required: Review Plugin Instantiations

The change to libs/windy-sounding/types/client/Plugin.d.ts now requires the langFiles property for all Plugin instantiations. Automated searches using both ast-grep and ripgrep did not reveal any instances of new Plugin( with a configuration object (or any pattern using langFiles). This could mean one of two things:

  • Plugin instantiations may be using a different pattern that wasn’t captured by our regex.
  • There may be no direct instantiations in the codebase, reducing the risk of breaking changes—but this needs confirmation.

Action Items:

  • Double‑Check Instantiations:
    Use a more flexible search if needed (or inspect manually) for Plugin usage. For example:

    #!/bin/bash
    # Attempting a broader search for Plugin instantiations with varying whitespace
    rg "new\s+Plugin\s*\(" -n .
  • Manual Review:
    Verify manually that every instantiation or usage of Plugin provides the required langFiles property. Update any instances that omit it.

Once confirmed, the breaking change can be managed safely.


Action Required: Manually Verify Plugin Instantiations for Required langFiles

The change in the Plugin interface now makes the langFiles property required, introducing a breaking change. Automated searches (via both ast-grep and ripgrep) have not returned any Plugin instantiation usage. This inconclusive result suggests that either Plugin instances are not directly instantiated in a way captured by our current search patterns, or instantiations are handled dynamically.

Next Steps:

  • Manual Verification:
    Please review all usages of Plugin in the codebase to ensure that every instantiation includes the required langFiles property. Confirm that no instances (direct or indirect, such as via factories) are missing this property.

  • Action if Issues Are Found:
    If any Plugin instance is missing the langFiles property, kindly update it to include this property.

Once you have performed this manual review and verified that all Plugin instances provide the required property, the changes can be deemed safe.

Comment on lines +12 to +26
/**
const originalGetCurrentPosition = navigator.geolocation.getCurrentPosition;
navigator.geolocation.getCurrentPosition = (...args) => {
alert(`XXX getCurrentPosition ${new Error().stack}`);
debugger;
originalGetCurrentPosition.call(navigator.geolocation, ...args);
};
// Monkey-patch watchPosition
const originalWatchPosition = navigator.geolocation.watchPosition;
navigator.geolocation.watchPosition = (...args) => {
alert('XXX watchPosition');
debugger;
return originalWatchPosition.call(navigator.geolocation, ...args);
};
*/
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Remove commented debugging code.

The commented code contains debugging statements with alert and debugger that should not be in the codebase.

Remove the commented code block to maintain code cleanliness.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant