Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						0ba41328fd 
					 
					
						
						
							
							openapi: Fix misuse of nullable as sibling of oneOf.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2025-01-24 23:00:21 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						cf1eed9c22 
					 
					
						
						
							
							tools: Use top-level await.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2024-12-10 19:16:25 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						01540b45b0 
					 
					
						
						
							
							web: Set "type": "module" and convert various CJS files to ESM.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2024-11-13 09:18:56 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						ff70ab441d 
					 
					
						
						
							
							dependencies: Remove three JS argument parsing libraries.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2024-11-10 16:00:29 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						ba8b9a445b 
					 
					
						
						
							
							eslint: Fix unicorn/prefer-node-protocol.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2024-10-08 16:54:15 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						15cec69995 
					 
					
						
						
							
							check-openapi: Modernize yargs usage.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2024-04-08 16:50:56 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						202d00ebc6 
					 
					
						
						
							
							dependencies: Upgrade JavaScript dependencies.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2023-12-07 14:29:32 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						407c16fc77 
					 
					
						
						
							
							eslint: Expand no-unused-vars check to all function parameters.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2023-07-02 16:16:38 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						54f90e41c0 
					 
					
						
						
							
							eslint: Fix unicorn/prefer-string-replace-all.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2023-05-12 11:12:20 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						683a6b0411 
					 
					
						
						
							
							dependencies: Upgrade Prettier to 3.0.0-alpha.4.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2022-11-02 16:50:37 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						cf2302b272 
					 
					
						
						
							
							check-openapi: Automatically fix Prettier formatting errors.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-09-10 10:39:25 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						a08c138c03 
					 
					
						
						
							
							check-openapi: Add option to automatically fix errors.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-09-10 10:39:25 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						7af2647d64 
					 
					
						
						
							
							check-openapi: Use low-level YAML parser.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-09-10 10:39:25 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						8854cd7945 
					 
					
						
						
							
							check-openapi: Print diffs for Prettier formatting errors.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-09-10 10:39:25 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						b45548e85a 
					 
					
						
						
							
							check-openapi: Check that descriptions are formatted with Prettier.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-09-10 10:39:25 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						b7b4c033a5 
					 
					
						
						
							
							check-openapi: Use yaml library for better error messages.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-09-10 10:39:25 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Suyash Vardhan Mathur 
							
						 
					 
					
						
						
							
						
						fbf9de671a 
					 
					
						
						
							
							linter: Fix checking for inline refs.  
						
						 
						
						... 
						
						
						
						The current linter disallowed the pattern
where multiple refs were present without
an additional parameter in allOf, which should
be valid.
Fixed the condition to allow the change. 
						
						
					 
					
						2021-06-09 12:43:12 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						bbf7bd949b 
					 
					
						
						
							
							eslint: Enable lines-around-directive.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-02-10 10:27:14 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						2db2f2d6cd 
					 
					
						
						
							
							dependencies: Upgrade JavaScript dependencies.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2021-01-25 14:53:19 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						cf5ededa35 
					 
					
						
						
							
							openapi: Use at most one inline subschema in allOf.  
						
						 
						
						... 
						
						
						
						This fixes some of the warnings from openapi-generator.
Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2020-09-30 19:45:28 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						c21818e093 
					 
					
						
						
							
							check-openapi: Disallow siblings of $ref.  
						
						 
						
						... 
						
						
						
						The specification says “any sibling elements of a $ref are ignored”,
so their presence, although not invalid, indicates a mistake.  yamole
incorrectly merges these siblings into the referenced object, but we
should not rely on this nonstandard behavior.
https://swagger.io/docs/specification/using-ref/#sibling 
Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2020-09-12 11:57:13 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						6ec808b8df 
					 
					
						
						
							
							js: Add "use strict" directive to CommonJS files.  
						
						 
						
						... 
						
						
						
						ES and TypeScript modules are strict by default and don’t need this
directive.  ESLint will remind us to add it to new CommonJS files and
remove it from ES and TypeScript modules.
Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2020-07-31 22:09:46 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						e3b3df328d 
					 
					
						
						
							
							eslint: Replace sort-imports with import/order.  
						
						 
						
						... 
						
						
						
						import/order sorts require() calls as well as import statements.
Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2020-07-24 09:42:56 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						f3726db89a 
					 
					
						
						
							
							js: Normalize strings to double quotes.  
						
						 
						
						... 
						
						
						
						Prettier would do this anyway, but it’s separated out for a more
reviewable diff.  Generated by ESLint.
Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2020-07-17 14:31:24 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								orientor 
							
						 
					 
					
						
						
							
						
						9170931da3 
					 
					
						
						
							
							openapi: Add test for validating examples.  
						
						 
						
						... 
						
						
						
						Zulip's openapi specification in zulip.yaml has various examples
for various schemas. Validate the example with their respective
schemas to ensure that all the examples are schematically correct.
Part of #14100 . 
						
						
					 
					
						2020-05-12 23:03:06 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						7f52329256 
					 
					
						
						
							
							check-openapi: Improve error handling.  
						
						 
						
						... 
						
						
						
						Previously a YAML syntax error resulted in an
UnhandledPromiseRejectionWarning and a successful exit code; now it
gives a clear message and a failing exit code.
Signed-off-by: Anders Kaseorg <anders@zulip.com > 
						
						
					 
					
						2020-05-06 16:28:55 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						9620611ec9 
					 
					
						
						
							
							check-openapi: Restore functionality after OpenAPI definitions moved.  
						
						 
						
						... 
						
						
						
						Commit 35577a1f66  (#9406 ) moved the
OpenAPI definitions to zerver/openapi, and this script was not
updated, so it has been validating nothing for two years.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com > 
						
						
					 
					
						2020-04-21 16:11:56 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						7bbbc46aad 
					 
					
						
						
							
							check-openapi: Remove check_duplicate_operation_ids.  
						
						 
						
						... 
						
						
						
						This is handled by swagger-parser now.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com > 
						
						
					 
					
						2020-04-21 16:11:56 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						719546641f 
					 
					
						
						
							
							js: Convert a.indexOf(…) !== -1 to a.includes(…).  
						
						 
						
						... 
						
						
						
						Babel polyfills this for us for Internet Explorer.
import * as babelParser from "recast/parsers/babel";
import * as recast from "recast";
import * as tsParser from "recast/parsers/typescript";
import { builders as b, namedTypes as n } from "ast-types";
import K from "ast-types/gen/kinds";
import fs from "fs";
import path from "path";
import process from "process";
const checkExpression = (node: n.Node): node is K.ExpressionKind =>
  n.Expression.check(node);
for (const file of process.argv.slice(2)) {
  console.log("Parsing", file);
  const ast = recast.parse(fs.readFileSync(file, { encoding: "utf8" }), {
    parser: path.extname(file) === ".ts" ? tsParser : babelParser,
  });
  let changed = false;
  recast.visit(ast, {
    visitBinaryExpression(path) {
      const { operator, left, right } = path.node;
      if (
        n.CallExpression.check(left) &&
        n.MemberExpression.check(left.callee) &&
        !left.callee.computed &&
        n.Identifier.check(left.callee.property) &&
        left.callee.property.name === "indexOf" &&
        left.arguments.length === 1 &&
        checkExpression(left.arguments[0]) &&
        ((["===", "!==", "==", "!=", ">", "<="].includes(operator) &&
          n.UnaryExpression.check(right) &&
          right.operator == "-" &&
          n.Literal.check(right.argument) &&
          right.argument.value === 1) ||
          ([">=", "<"].includes(operator) &&
            n.Literal.check(right) &&
            right.value === 0))
      ) {
        const test = b.callExpression(
          b.memberExpression(left.callee.object, b.identifier("includes")),
          [left.arguments[0]]
        );
        path.replace(
          ["!==", "!=", ">", ">="].includes(operator)
            ? test
            : b.unaryExpression("!", test)
        );
        changed = true;
      }
      this.traverse(path);
    },
  });
  if (changed) {
    console.log("Writing", file);
    fs.writeFileSync(file, recast.print(ast).code, { encoding: "utf8" });
  }
}
Signed-off-by: Anders Kaseorg <anders@zulipchat.com > 
						
						
					 
					
						2020-02-10 14:08:12 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						02511bff1c 
					 
					
						
						
							
							js: Automatically convert _.each to for…of.  
						
						 
						
						... 
						
						
						
						This commit was automatically generated by the following script,
followed by lint --fix and a few small manual lint-related cleanups.
import * as babelParser from "recast/parsers/babel";
import * as recast from "recast";
import * as tsParser from "recast/parsers/typescript";
import { builders as b, namedTypes as n } from "ast-types";
import { Context } from "ast-types/lib/path-visitor";
import K from "ast-types/gen/kinds";
import { NodePath } from "ast-types/lib/node-path";
import assert from "assert";
import fs from "fs";
import path from "path";
import process from "process";
const checkExpression = (node: n.Node): node is K.ExpressionKind =>
  n.Expression.check(node);
const checkStatement = (node: n.Node): node is K.StatementKind =>
  n.Statement.check(node);
for (const file of process.argv.slice(2)) {
  console.log("Parsing", file);
  const ast = recast.parse(fs.readFileSync(file, { encoding: "utf8" }), {
    parser: path.extname(file) === ".ts" ? tsParser : babelParser,
  });
  let changed = false;
  let inLoop = false;
  let replaceReturn = false;
  const visitLoop = (...args: string[]) =>
    function(this: Context, path: NodePath) {
      for (const arg of args) {
        this.visit(path.get(arg));
      }
      const old = { inLoop };
      inLoop = true;
      this.visit(path.get("body"));
      inLoop = old.inLoop;
      return false;
    };
  recast.visit(ast, {
    visitDoWhileStatement: visitLoop("test"),
    visitExpressionStatement(path) {
      const { expression, comments } = path.node;
      let valueOnly;
      if (
        n.CallExpression.check(expression) &&
        n.MemberExpression.check(expression.callee) &&
        !expression.callee.computed &&
        n.Identifier.check(expression.callee.object) &&
        expression.callee.object.name === "_" &&
        n.Identifier.check(expression.callee.property) &&
        ["each", "forEach"].includes(expression.callee.property.name) &&
        [2, 3].includes(expression.arguments.length) &&
        checkExpression(expression.arguments[0]) &&
        (n.FunctionExpression.check(expression.arguments[1]) ||
          n.ArrowFunctionExpression.check(expression.arguments[1])) &&
        [1, 2].includes(expression.arguments[1].params.length) &&
        n.Identifier.check(expression.arguments[1].params[0]) &&
        ((valueOnly = expression.arguments[1].params[1] === undefined) ||
          n.Identifier.check(expression.arguments[1].params[1])) &&
        (expression.arguments[2] === undefined ||
          n.ThisExpression.check(expression.arguments[2]))
      ) {
        const old = { inLoop, replaceReturn };
        inLoop = false;
        replaceReturn = true;
        this.visit(
          path
            .get("expression")
            .get("arguments")
            .get(1)
            .get("body")
        );
        inLoop = old.inLoop;
        replaceReturn = old.replaceReturn;
        const [right, { body, params }] = expression.arguments;
        const loop = b.forOfStatement(
          b.variableDeclaration("let", [
            b.variableDeclarator(
              valueOnly ? params[0] : b.arrayPattern([params[1], params[0]])
            ),
          ]),
          valueOnly
            ? right
            : b.callExpression(
                b.memberExpression(right, b.identifier("entries")),
                []
              ),
          checkStatement(body) ? body : b.expressionStatement(body)
        );
        loop.comments = comments;
        path.replace(loop);
        changed = true;
      }
      this.traverse(path);
    },
    visitForStatement: visitLoop("init", "test", "update"),
    visitForInStatement: visitLoop("left", "right"),
    visitForOfStatement: visitLoop("left", "right"),
    visitFunction(path) {
      this.visit(path.get("params"));
      const old = { replaceReturn };
      replaceReturn = false;
      this.visit(path.get("body"));
      replaceReturn = old.replaceReturn;
      return false;
    },
    visitReturnStatement(path) {
      if (replaceReturn) {
        assert(!inLoop); // could use labeled continue if this ever fires
        const { argument, comments } = path.node;
        if (argument === null) {
          const s = b.continueStatement();
          s.comments = comments;
          path.replace(s);
        } else {
          const s = b.expressionStatement(argument);
          s.comments = comments;
          path.replace(s, b.continueStatement());
        }
        return false;
      }
      this.traverse(path);
    },
    visitWhileStatement: visitLoop("test"),
  });
  if (changed) {
    console.log("Writing", file);
    fs.writeFileSync(file, recast.print(ast).code, { encoding: "utf8" });
  }
}
Signed-off-by: Anders Kaseorg <anders@zulipchat.com > 
						
						
					 
					
						2020-02-07 14:09:47 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Anders Kaseorg 
							
						 
					 
					
						
						
							
						
						811e128787 
					 
					
						
						
							
							check-openapi: Fix lint errors and remove lint exclusion.  
						
						 
						
						... 
						
						
						
						Signed-off-by: Anders Kaseorg <anders@zulipchat.com > 
						
						
					 
					
						2020-02-07 14:09:47 -08:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Tim Abbott 
							
						 
					 
					
						
						
							
						
						d9e5becb0e 
					 
					
						
						
							
							tools: Fix running check-openapi locally.  
						
						 
						
						
						
						
					 
					
						2019-08-07 14:18:27 -07:00  
					
					
						 
						
						
							
							
							 
							
							
							
							
							 
						
					 
				 
			
				
					
						
							
							
								 
								Hemanth V. Alluri 
							
						 
					 
					
						
						
							
						
						c90056bdb2 
					 
					
						
						
							
							tools: Move check-swagger to check-openapi and make it executable.  
						
						 
						
						
						
						
					 
					
						2019-08-05 21:06:19 -07:00