Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Type regression between v0.31.2 and v0.40.1 #403

Closed
3 tasks done
Bluzzi opened this issue Apr 27, 2024 · 6 comments · Fixed by zntb/nextjs-lucia-auth#31 · 4 remaining pull requests
Closed
3 tasks done

Type regression between v0.31.2 and v0.40.1 #403

Bluzzi opened this issue Apr 27, 2024 · 6 comments · Fixed by zntb/nextjs-lucia-auth#31 · 4 remaining pull requests

Comments

@Bluzzi
Copy link

Bluzzi commented Apr 27, 2024

Welcome to the issues section if it's your first time!

Before creating an issue, please be sure to:

  • Checkout to the latest version, including submodules
  • Try to find an isolated way to reproduce the behavior
  • Fill in all the blanks in the most specific way you can

Steps to reproduce

import type { Options } from "argon2";

export const options: Options = {
  hashLength: 32,
  saltLength: 16, // <--- Object literal may only specify known properties, and 'saltLength' does not exist in type 'Options'.ts(2353)
  timeCost: 3,
  parallelism: 2
};

Expected behaviour

The “saltLength” field must be present in the Options type, as it was in version 0.31.2 (see the argon2.d.ts file).

Actual behaviour

The “saltLength” field is not present in the Options type, see the argon2.d.cts file in version 0.40.1.

@Bluzzi
Copy link
Author

Bluzzi commented Apr 27, 2024

There are other differences between the two versions:

  • saltLength no longer exists (original issue)
  • the type of salt is any | undefined instead of Buffer | undefined
  • the type of associatedData is any | undefined instead of Buffer | undefined
  • the type of secret is any | undefined instead of Buffer | undefined
  • raw is no longer present - but I see that it is added dynamically when typing the function hash
// v0.40.1
export type Options = {
    hashLength?: number | undefined;
    timeCost?: number | undefined;
    memoryCost?: number | undefined;
    parallelism?: number | undefined;
    type?: 0 | 2 | 1 | undefined;
    version?: number | undefined;
    salt?: any;
    associatedData?: any;
    secret?: any;
};

// v0.31.2
export interface Options {
  hashLength?: number;
  timeCost?: number;
  memoryCost?: number;
  parallelism?: number;
  type?: typeof argon2d | typeof argon2i | typeof argon2id;
  version?: number;
  salt?: Buffer;
  saltLength?: number;
  raw?: boolean;
  secret?: Buffer;
  associatedData?: Buffer;
}

@Jendorski
Copy link

No one has said anything?. They just changed the parameters without changing the doc?

@ranisalt
Copy link
Owner

ranisalt commented May 1, 2024

No one has said anything?. They just changed the parameters without changing the doc?

The parameter was not changed, there is a bug in Typescript when generating object types from JSDoc that I still didn't figure out how to fix, since it works as expected on my machine, in an isolated container

@ranisalt
Copy link
Owner

I just republished and Typescript is still generating incorrect types.

@erichkuba
Copy link

This remains an issue and is blocking us from upgrading from 0.31.2 to the latest version.

Tested with 0.40.3

Is there anything we can do to help with this?

@ranisalt
Copy link
Owner

v0.41.1 was published with proper types! The culprit was missing install before generating the types, which was causing @types/node to be missing - Typescript does not know what a Buffer is without it, so it output any

image

@Bluzzi Bluzzi closed this as completed Sep 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment