Git Product home page Git Product logo

shapeshift's Introduction

Sapphire Logo

Sapphire Dev

GitHub app for Sapphire

GitHub

Description

The GitHub app that we use in Sapphire for automating various tasks.

Usage

Setup

# Install dependencies
yarn install

You will need to configure the Wrangler secrets for Cloudflare Workers environment. You will need the following secrets:

  • APP_ID

  • WEBHOOK_SECRET

  • PRIVATE_KEY

The private-key.pem file from GitHub needs to be transformed from the PKCS#1 format to PKCS#8, as the crypto APIs do not support PKCS#1:

openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private-key-pkcs8.pem

Then set the private key

cat private-key-pkcs8.pem | wrangler secret put PRIVATE_KEY

For information on what these values are and how to get them see this guide

Buy us some doughnuts

Sapphire Community is and always will be open source, even if we don't get donations. That being said, we know there are amazing people who may still want to donate just to show their appreciation. Thank you very much in advance!

We accept donations through Open Collective, Ko-fi, Paypal, Patreon and GitHub Sponsorships. You can use the buttons below to donate through your method of choice.

Donate With Address
Open Collective Click Here
Ko-fi Click Here
Patreon Click Here
PayPal Click Here

Contributors

Please make sure to read the Contributing Guide before making a pull request.

Thank you to all the people who already contributed to Sapphire!

shapeshift's People

Contributors

allcontributors[bot] avatar andarist avatar favna avatar igerman00 avatar imranbarbhuiya avatar khafradev avatar khasms avatar kyranet avatar legendhimself avatar realshadownova avatar renovate-bot avatar renovate[bot] avatar vladfrangu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

shapeshift's Issues

bug: BaseError is not correctly exported

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

Node v16, TypeScript, CommonJS, shapeshift 2.1.0

import { BaseError } from '@sapphire/shapeshift';

console.log(BaseError); // logs undefined

So the question is why BaseError is undefined?

And if this is normal behavior, then how can I check that the error was thrown by shapeshift? The original idea was to use instanceof BaseError since all other errors inherits from it

Steps To Reproduce

  1. Environment: Node v16, TypeScript, CommonJS, shapeshift 2.1.0
  2. Import BaseError and log it into console

Expected behavior

BaseError should be exported correctly

OR

Tell me how to check that the error was thrown by shapeshift without instanceof BaseError

Screenshots

No response

Additional context

Sorry if this is not a bug. I sent a such message to the Sapphire discord server but no response :(

bug: Type 'T' does not satisfy the constraint 'object'

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

On build it throws an error
image

Steps To Reproduce

not sure how to reproduce, after updating to latest version I run into this error, the package is not installed as a dependency on my project but seems being used by library I used which I'm not sure which one

Expected behavior

should not throw an error

Screenshots

No response

Additional context

No response

request: refactor code in order to rely less on type casting

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

In a lot of cases we need to add type casts to our code because of the way it is set up. This makes development really annoying and it also removes a layer of type safety offered by TypeScript going forward. It is therefore prudent to remove the type casts and instead have TypeScript resolves types properly automatically.

Desired solution

Remove type casts such as shown at #40 (comment) and ensure code compiles successfully.

Alternatives considered

Continue to use type casts in the code.

Additional context

Review comment from @vladfrangu #40 (comment)

bug: Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import

Is there an existing issue for this?

  • I have searched the existing issues (The #155 is about it too)

Description of the bug

Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import 'c:\Users\jpedr\Desktop\Visual Code\Node.js\Botter V4.1\node_modules\fast-deep-equal\es6' is not supported resolving ES modules imported from c:\Users\jpedr\Desktop\Visual Code\Node.js\Botter V4.1\node_modules\@sapphire\shapeshift\dist\index.mjs
Did you mean to import fast-deep-equal/es6/index.js?
    at new NodeError (node:internal/errors:371:5)
    at finalizeResolution (node:internal/modules/esm/resolve:390:17)
    at moduleResolve (node:internal/modules/esm/resolve:915:10)
    at defaultResolve (node:internal/modules/esm/resolve:1005:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:530:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:251:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:79:40)
    at link (node:internal/modules/esm/module_job:78:36) {
  code: 'ERR_UNSUPPORTED_DIR_IMPORT',
  url: 'file:///c:/Users/jpedr/Desktop/Visual%20Code/Node.js/Botter%20V4.1/node_modules/fast-deep-equal/es6'
}
    at consoleBoth (file:///c:/Users/jpedr/Desktop/Visual%20Code/Node.js/Botter%20V4.1/src/Functions/Errors/catchHandlers.js:78:10)
    at nullCatch (file:///c:/Users/jpedr/Desktop/Visual%20Code/Node.js/Botter%20V4.1/src/Functions/Errors/catchHandlers.js:3:2)
    at async FileLoader.load (file:///c:/Users/jpedr/Desktop/Visual%20Code/Node.js/Botter%20V4.1/src/Structures/Utils/FileLoader.js:71:26)
    at async loadCommands (file:///c:/Users/jpedr/Desktop/Visual%20Code/Node.js/Botter%20V4.1/src/Structures/Client/Client.js:190:15)
    at async extendClient (file:///c:/Users/jpedr/Desktop/Visual%20Code/Node.js/Botter%20V4.1/src/Structures/Client/Client.js:123:3)
    at async file:///c:/Users/jpedr/Desktop/Visual%20Code/Node.js/Botter%20V4.1/src/index.js:96:1

Steps To Reproduce

Using the tree:

[email protected]
  └─┬ @discordjs/[email protected]
       └── @sapphire/[email protected]

The error is throw

Expected behavior

The #155 should be fixed this issue, but the compiled index.mjs still throws the error

Screenshots

No response

Additional context

No response

bug: Types not working with typescript 4.8

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

With the new changes to the {} type, sapphire is throwing errors when compiling.

Steps To Reproduce

  1. Update to typescript 4.8
  2. Run tsc

Expected behavior

Not throwing an error.

Screenshots

unknown-38

Additional context

No response

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • chore(deps): update yarn to v4.2.2

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

github-actions
.github/workflows/auto-deprecate.yml
  • actions/checkout v4
  • actions/setup-node v4
.github/workflows/ci-node-16.yml
  • actions/checkout v4
  • actions/setup-node v4
.github/workflows/codeql-analysis.yml
  • actions/checkout v4
  • github/codeql-action v3
  • github/codeql-action v3
.github/workflows/continuous-delivery.yml
  • actions/checkout v4
  • actions/setup-node v4
.github/workflows/continuous-integration.yml
  • actions/checkout v4
  • actions/setup-node v4
  • actions/checkout v4
  • actions/setup-node v4
  • actions/checkout v4
  • actions/setup-node v4
  • codecov/codecov-action v4
.github/workflows/deprecate-on-merge.yml
  • actions/checkout v4
  • actions/setup-node v4
.github/workflows/documentation.yml
  • actions/checkout v4
  • actions/setup-node v4
  • actions/upload-artifact v4
  • actions/checkout v4
  • actions/setup-node v4
  • actions/download-artifact v4
  • actions/checkout v4
  • nick-fields/retry v3
.github/workflows/labelsync.yml
  • actions/checkout v4
  • crazy-max/ghaction-github-labeler v5
.github/workflows/release-crosspost.yml
  • kludge-cs/gitcord-release-changelogger v3.0.0
npm
package.json
  • fast-deep-equal ^3.1.3
  • lodash ^4.17.21
  • @commitlint/cli ^19.3.0
  • @commitlint/config-conventional ^19.2.2
  • @favware/cliff-jumper ^3.0.3
  • @favware/npm-deprecate ^1.0.7
  • @sapphire/eslint-config ^5.0.4
  • @sapphire/prettier-config ^2.0.0
  • @sapphire/ts-config ^5.0.1
  • @types/jsdom ^21.1.6
  • @types/lodash ^4.17.1
  • @typescript-eslint/eslint-plugin ^7.8.0
  • @typescript-eslint/parser ^7.8.0
  • @vitest/coverage-v8 ^1.6.0
  • cz-conventional-changelog ^3.3.0
  • esbuild-plugins-node-modules-polyfill ^1.6.3
  • eslint ^8.57.0
  • eslint-config-prettier ^9.1.0
  • eslint-plugin-prettier ^5.1.3
  • jsdom ^24.0.0
  • lint-staged ^15.2.2
  • prettier ^3.2.5
  • rimraf ^5.0.5
  • tsup ^8.0.2
  • typedoc ^0.25.13
  • typedoc-json-parser ^10.0.0
  • typescript ^5.4.5
  • vitest ^1.6.0
  • ansi-regex ^5.0.1
  • minimist ^1.2.8
  • yarn 4.2.1

  • Check this box to trigger a request for Renovate to run again on this repository

bug: Reshape is in the docs, but is nowhere in the code

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

When trying to use s.string.reshape(), TypeScript complains about that method not existing. A simple recursive grep shows that the method is only in README.md, but it nowhere in the code.

Steps To Reproduce

  1. grep reshape -r ./node_modules/@sapphire/shapeshift/dist/ (or rg reshape ./node_modules/@sapphire/shapeshift/dist/)
  2. Command finds nothing

Expected behavior

The method exists

Screenshots

Screenshot

Additional context

No response

request: Narrowing types from schema

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

Add some method of parsing a schema that narrows the type down and doesn't throw an error

Desired solution

import { s } from '@sapphire/shapeshift'

const schema = s.object({
  a: s.string,
  b: s.number
})

// a value from an api, for example
const toCompare: any = {
  a: 'Hello',
  b: 1
}

if (!schema.is(toCompare)) {
  return 'some error message'
}

toCompare // InferType<typeof schema>

Alternatives considered

import { s } from '@sapphire/shapeshift'

const schema = s.object({
  a: s.string,
  b: s.number
})

const obj: any = {
  a: 'hello',
  b: 1
}

const result = schema.run(obj)

// Note: checking result.isErr() does NOT
// limit the type correctly :(
if (!result.isOk()) {
  return 'some error message'
}

result.value // InferType<typeof schema>

or closer to what I'd prefer built in

const isSchema = <T>(obj: unknown): obj is T =>schema.run(obj).isOk()

if (!isSchema<InferType<typeof schema>>(obj)) {
  return 'some error message'
}

obj // InferType<typeof schema>

Additional context

Thanks

bug: Object validators considers keys that have a default return value as required

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

Using an object validator with a key that has a value with a default validator attached to it makes it be considered required

Steps To Reproduce

const obj = s.object({
	limit: s.number.default(100)
});

Expected behavior

It works

Screenshots

No response

Additional context

CombinedPropertyError: Received one or more errors
    at ObjectValidator.handleIgnoreStrategy (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:1105:72)
    at ObjectValidator.handleStrategy (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:1004:47)
    at ObjectValidator.handle (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:1079:17)
    at ObjectValidator.parse (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:113:88)
    at RequestQueueClient.listHead (/Users/vlad/Development/Apify/apify-ts/packages/memory-storage/dist/resource-clients/request-queue.js:135:12)
    at file:///Users/vlad/Development/Apify/apify-ts/test/e2e/globs-vs-regexes-vs-pseudoUrls/test.mjs:90:52 {
  errors: [
    [
      'limit',
      MissingPropertyError: A required property is missing
          at ObjectValidator.handleIgnoreStrategy (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:1101:27)
          at ObjectValidator.handleStrategy (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:1004:47)
          at ObjectValidator.handle (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:1079:17)
          at ObjectValidator.parse (/Users/vlad/Development/Apify/apify-ts/node_modules/@sapphire/shapeshift/dist/index.js:113:88)
          at RequestQueueClient.listHead (/Users/vlad/Development/Apify/apify-ts/packages/memory-storage/dist/resource-clients/request-queue.js:135:12)
          at file:///Users/vlad/Development/Apify/apify-ts/test/e2e/globs-vs-regexes-vs-pseudoUrls/test.mjs:90:52 {
        property: 'limit'
      }
    ]
  ]
}

bug: UnionValidator#setValidationEnabled does not make its members respect that

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

Found when disabling validation in @discordjs/builders on EmbedBuilder#setDescription() it would still throw a CombinedError with ExpectedValidationError in it.

Steps To Reproduce

import {s} from "@sapphire/shapeshift";

s.string
.lengthGreaterThanOrEqual(10)
.nullish
.setValidationEnabled(false).parse("test");

Expected behavior

It should not throw any Error.

Screenshots

No response

Additional context

No response

question: Multiple errors causing my discord bot to crash

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

I'm not quite sure what's really going on. Sapphire is being called as a dependency by the discord.js package. This has been happening often and I'm not sure what I can do about it. I've tried getting support from the discord.js folks and they haven't been helpful. You can review the errors here.

Steps To Reproduce

I don't have any steps. I only know that when an interactionCreate event is fired in my discord bot, the above error occurs.

Expected behavior

No crashing? I'm not quite sure what sapphire is even for. Just know that it's a dependency for discord.js.

Screenshots

No response

Additional context

I'm still new to making discord bots using discord.js. And still pretty new to javascript in general. So I'm not really sure what the next steps in diagnosing this issue. But my bot is highly unstable due to this issue and I need to figure out how to mitigate the crashing.

request: `setValidationEnabled` should [un]wrap the validator into an `PartialValidator<T>`

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

Right now, all validators have checks for whether or not they should run validations, as seen below:

// If validation is disabled (at the validator or global level), we only run the `handle` method, which will do some basic checks
// (like that the input is a string for a string validator)
if (!this.shouldRunConstraints) {
return this.handle(value).unwrap() as R;
}

This comes with a large performance impact, specially from those who desire to use the library without conditional validation. Also goes against Shapeshift's internal design of running the least amount of conditionals as possible.

Before we added conditional validation, Shapeshift was comfortably among the fastest libraries in our benchmarks.

Desired solution

A wrapper would solve the performance impact by making the validators always run the logic and constraints, where the PartialValidator<T> would exclusively only run the handler and never the constraints (with no extra checks, of course).

For function (dynamic validation), we can also add a second class, or add a check in PartialValidator<T>, invalidating the last sentence in the previous paragraph.

Unwrapping a PartialValidator<T> should give back the underlying, fully-checked validator.

Alternatives considered

N/a.

Additional context

No response

request: cloudflare worker support

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

From #248 I could gather that cloudflare worker support is something that was being kept in mind. I recently tried to use @discordjs/builders which depends on sapphire and it gave me errors for needing to enable node_compat, something I could gather is heavily discouraged

Desired solution

Implement an alternative for the inspect function imports from util

Alternatives considered

Find another package which provides the same functionality as the inspect function

Additional context

No response

bug: Type 'T' does not satisfy the constraint 'object'

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

https://stackoverflow.com/questions/73761953/sapphire-shapeshift-discordjs-type-t-does-not-satisfy-the-constraint-objec

Using DiscordJS and typescript, when I try to build using TSC, I get errors in sapphire/shapeshift

node_modules/@sapphire/shapeshift/dist/index.d.ts:590:44 - error TS2344: Type 'T' does not satisfy the constraint 'object'.

590 declare type SchemaOf<T> = ObjectValidator<T>;
                                               ~

  node_modules/@sapphire/shapeshift/dist/index.d.ts:590:23
    590 declare type SchemaOf<T> = ObjectValidator<T>;
                              ~
    This type parameter might need an `extends object` constraint.

node_modules/@sapphire/shapeshift/dist/index.d.ts:641:65 - error TS2344: Type 'T' does not satisfy the constraint 'object'.

641     object<T>(shape: MappedObjectValidator<T>): ObjectValidator<T, UndefinedToOptional<T>>;
                                                                    ~

  node_modules/@sapphire/shapeshift/dist/index.d.ts:641:12
    641     object<T>(shape: MappedObjectValidator<T>): ObjectValidator<T, UndefinedToOptional<T>>;
                   ~
    This type parameter might need an `extends object` constraint.


Found 2 errors in the same file, starting at: node_modules/@sapphire/shapeshift/dist/index.d.ts:590

Steps To Reproduce

  1. Setup a project using DiscordJS14 and typescript
  2. Build using TSC

Expected behavior

Builds properly

Screenshots

No response

Additional context

No response

bug: shapeshift 3.5.0 imports fast-deep-equal wrong breaking it

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

when you use type module in package.json
shapeshift imports fast-deep-equal as
import fastDeepEqual from "fast-deep-equal/es6";
breaking it
changing the code to
import fastDeepEqual from "fast-deep-equal";
fixes it.

Steps To Reproduce

set the type to module

Expected behavior

it shouldnt crash

Screenshots

image

Additional context

No response

request: Add label support to validators, constraints, etc

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

One of the biggest issues with shapeshift right now is that when running a validator of the form s.string.parse(input), the error received is not really useful (it just says that the validator failed, not why or where or for what).

Other modules (notably ow uses callsites to infer the label from the callsite) either allow this or use some interesting mechanisms to detect/infer the label. Since we aim for speed ⚡ here, we should probably stick to letting users provide a label (or even a label factory?)

Desired solution

Support for adding labels on validators (mayhaps s.string.label('url') instead of s.string('label') as the latter is breaking which is not ideal).

Would be nice to also have something like s.string.label((input) => translate('bad-input', input)) to allow dynamic labels in one predicate (for instance for the 1 person planning on using shapeshift in an i18n context)

Alternatives considered

Not supporting this, which is a downside...so none :D

Additional context

No response

bug: `BaseValidator` return type is invalid

Is there an existing issue for this?

  • I have searched the existing issues

Description of the bug

Originally discussed in the discord server. DefaultValidator's return type contains an extra undefined.

Steps To Reproduce

const predicate = s.string.default("Hello");

predicated.parse("hello");

// string | undefined

Expected behavior

It's return type should be string.

Screenshots

image

Additional context

Discord message link: https://discord.com/channels/737141877803057244/934614121687687179/947818834205741066

request: cloudflare worker support

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

when bundling with cloudflare workers, I get an error:

    ../../node_modules/@sapphire/shapeshift/dist/index.mjs:2:24:
      2 │ import { inspect } from 'node:util';
        ╵                         ~~~~~~~~~~~

  The package "node:util" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, 
which will remove this error.


X [ERROR] Build failed with 1 error:

  ../../node_modules/@sapphire/shapeshift/dist/index.mjs:2:24: ERROR: Could not resolve "node:util"

Desired solution

all that's needed is to remove the node: prefix, then the node_compat flag can actually work. Yeah it's really annoying.

Alternatives considered

using another library I guess

Additional context

No response

request: add `s.string.phone` to regex validate a phone number

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

We have s.string.email and in forms it is often required to enter both an email and a phone number so lets also add s.string.phone

Desired solution

  • Add a new validation s.string.phone
  • Add unit tests

Alternatives considered

Using s.string.regex with the regex for a phone number, however this is not ideal because then end-users have to constantly look up the phone regex online

Additional context

Refer to https://ihateregex.io/expr/phone/ for an example for a phone regex

request: Implement something like zod's nativeEnum

Is there an existing issue or pull request for this?

  • I have searched the existing issues and pull requests

Feature description

Implement something like zod's nativeEnum, so we can pass in a TS enum and validate using it (probably with handling transformation of string key -> numeric value too for numeric enums)

Desired solution

See above

Alternatives considered

N.A.

Additional context

Originally posted by @vladfrangu in #44 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.