83 lines · 2.3 KB · TypeScript
RawDownload
import { assert, describe } from "@effect/vitest"; import { createOxlintRuleHarness } from "../test/utils.ts"; const rule = createOxlintRuleHarness("t3code/no-inline-schema-compile"); describe("t3code/no-inline-schema-compile", () => {  rule.valid(    "allows schema compilers hoisted to module scope",    `      import { Schema } from "effect";       const User = Schema.Struct({ name: Schema.String });      const decodeUser = Schema.decodeUnknownEffect(User);       export const parseUser = (input: unknown) => decodeUser(input);    `,  );   rule.valid(    "allows factory helpers that return a precompiled decoder",    `      import { Schema } from "effect";       export const makeParser = <A, I>(schema: Schema.Codec<A, I>) => {        const decode = Schema.decodeUnknownEffect(schema);        return (input: unknown) => decode(input);      };    `,  );   rule.valid(    "allows schema construction helpers that use encode transformations",    `      import { Schema } from "effect";       export const makePrettyJson = <S extends Schema.Top>(schema: S) =>        Schema.fromJsonString(schema).pipe(          Schema.encode({            decode: Schema.String,            encode: Schema.String,          }),        );    `,  );   rule.valid(    "allows dynamic schema parameters that cannot be hoisted to module scope",    `      import { Schema } from "effect";       export const parseWith = <A, I>(schema: Schema.Codec<A, I>, input: unknown) =>        Schema.decodeUnknownEffect(schema)(input);    `,  );   rule.invalid(    "reports schema compilers inside function bodies",    `      import { Schema } from "effect";       const User = Schema.Struct({ name: Schema.String });       export const parseUser = (input: unknown) => Schema.decodeUnknownEffect(User)(input);    `,    (output) => {      assert.match(output, /Hoist Schema\.decodeUnknownEffect/);    },  );   rule.invalid(    "reports inline schema literals as high confidence findings",    `      import { Schema } from "effect";       export const parseUser = (input: unknown) =>        Schema.decodeUnknownEffect(Schema.Struct({ name: Schema.String }))(input);    `,    (output) => {      assert.match(output, /inline schema literal and the compiled function/);    },  );});