mirror of
https://github.com/Kong/insomnia
synced 2024-11-07 22:30:15 +00:00
Enable noImplicitAny. (#4864)
* Enable noImplicitAny. * extracts PreviewMode * Update packages/insomnia/src/network/certificate-url-parse.ts * Add missing type. * un-any-ifies some of the modal onDone callbacks easy enough. * few more onDone, but the async ones this time * Get rid of jsonlint any. * adds noImplicitAny support for insomnia-smoke-test * fixes playwright type error * avoid full @ts-ignore in playwright Co-authored-by: Dimitri Mitropoulos <dimitrimitropoulos@gmail.com>
This commit is contained in:
parent
d1f4063e7d
commit
3234c05c6e
57
package-lock.json
generated
57
package-lock.json
generated
@ -12,6 +12,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@jest/globals": "^28.1.0",
|
"@jest/globals": "^28.1.0",
|
||||||
"@jest/types": "^28.1.0",
|
"@jest/types": "^28.1.0",
|
||||||
|
"@types/eslint": "^8.4.3",
|
||||||
"@types/node": "^17.0.21",
|
"@types/node": "^17.0.21",
|
||||||
"@types/svgo": "^2.6.3",
|
"@types/svgo": "^2.6.3",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
||||||
@ -4082,6 +4083,22 @@
|
|||||||
"@babel/types": "^7.3.0"
|
"@babel/types": "^7.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/eslint": {
|
||||||
|
"version": "8.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.3.tgz",
|
||||||
|
"integrity": "sha512-YP1S7YJRMPs+7KZKDb9G63n8YejIwW9BALq7a5j2+H4yl6iOv9CB29edho+cuFRrvmJbbaH2yiVChKLJVysDGw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/estree": "*",
|
||||||
|
"@types/json-schema": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/estree": {
|
||||||
|
"version": "0.0.51",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
|
||||||
|
"integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/@types/graceful-fs": {
|
"node_modules/@types/graceful-fs": {
|
||||||
"version": "4.1.5",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
|
||||||
@ -4115,6 +4132,12 @@
|
|||||||
"@types/istanbul-lib-report": "*"
|
"@types/istanbul-lib-report": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/json-schema": {
|
||||||
|
"version": "7.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
|
||||||
|
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/@types/json5": {
|
"node_modules/@types/json5": {
|
||||||
"version": "0.0.29",
|
"version": "0.0.29",
|
||||||
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
||||||
@ -4488,12 +4511,6 @@
|
|||||||
"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils/node_modules/@types/json-schema": {
|
|
||||||
"version": "7.0.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
|
|
||||||
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "5.10.2",
|
"version": "5.10.2",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz",
|
||||||
@ -19426,6 +19443,22 @@
|
|||||||
"@babel/types": "^7.3.0"
|
"@babel/types": "^7.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/eslint": {
|
||||||
|
"version": "8.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.3.tgz",
|
||||||
|
"integrity": "sha512-YP1S7YJRMPs+7KZKDb9G63n8YejIwW9BALq7a5j2+H4yl6iOv9CB29edho+cuFRrvmJbbaH2yiVChKLJVysDGw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/estree": "*",
|
||||||
|
"@types/json-schema": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/estree": {
|
||||||
|
"version": "0.0.51",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
|
||||||
|
"integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/graceful-fs": {
|
"@types/graceful-fs": {
|
||||||
"version": "4.1.5",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
|
||||||
@ -19459,6 +19492,12 @@
|
|||||||
"@types/istanbul-lib-report": "*"
|
"@types/istanbul-lib-report": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/json-schema": {
|
||||||
|
"version": "7.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
|
||||||
|
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/json5": {
|
"@types/json5": {
|
||||||
"version": "0.0.29",
|
"version": "0.0.29",
|
||||||
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
||||||
@ -19711,12 +19750,6 @@
|
|||||||
"eslint-utils": "^3.0.0"
|
"eslint-utils": "^3.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/json-schema": {
|
|
||||||
"version": "7.0.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
|
|
||||||
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@typescript-eslint/scope-manager": {
|
"@typescript-eslint/scope-manager": {
|
||||||
"version": "5.10.2",
|
"version": "5.10.2",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz",
|
||||||
|
@ -39,12 +39,14 @@
|
|||||||
"dev": "npm start --prefix packages/insomnia"
|
"dev": "npm start --prefix packages/insomnia"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@jest/types": "^28.1.0",
|
|
||||||
"@jest/globals": "^28.1.0",
|
"@jest/globals": "^28.1.0",
|
||||||
|
"@jest/types": "^28.1.0",
|
||||||
|
"@types/eslint": "^8.4.3",
|
||||||
"@types/node": "^17.0.21",
|
"@types/node": "^17.0.21",
|
||||||
"@types/svgo": "^2.6.3",
|
"@types/svgo": "^2.6.3",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
||||||
"@typescript-eslint/parser": "^5.10.2",
|
"@typescript-eslint/parser": "^5.10.2",
|
||||||
|
"esbuild-runner": "^2.2.1",
|
||||||
"eslint": "^8.8.0",
|
"eslint": "^8.8.0",
|
||||||
"eslint-config-helpers": "^1.1.0",
|
"eslint-config-helpers": "^1.1.0",
|
||||||
"eslint-plugin-filenames": "^1.3.2",
|
"eslint-plugin-filenames": "^1.3.2",
|
||||||
@ -55,7 +57,6 @@
|
|||||||
"eslint-plugin-react": "^7.28.0",
|
"eslint-plugin-react": "^7.28.0",
|
||||||
"eslint-plugin-react-hooks": "^4.3.0",
|
"eslint-plugin-react-hooks": "^4.3.0",
|
||||||
"eslint-plugin-simple-import-sort": "^7.0.0",
|
"eslint-plugin-simple-import-sort": "^7.0.0",
|
||||||
"esbuild-runner": "^2.2.1",
|
|
||||||
"jest": "^28.1.0",
|
"jest": "^28.1.0",
|
||||||
"lerna": "^4.0.0",
|
"lerna": "^4.0.0",
|
||||||
"markdownlint-cli2": "^0.2.0",
|
"markdownlint-cli2": "^0.2.0",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const getCreds = (user, pass, encoding) => ({
|
const getCreds = (user: string, pass: string, encoding: BufferEncoding) => ({
|
||||||
raw: { user, pass },
|
raw: { user, pass },
|
||||||
encoded: {
|
encoded: {
|
||||||
user: Buffer.from(user, encoding).toString(),
|
user: Buffer.from(user, encoding).toString(),
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
"clean": "tsc --build tsconfig.build.json --clean",
|
"clean": "tsc --build tsconfig.build.json --clean",
|
||||||
"postclean": "rimraf dist",
|
"postclean": "rimraf dist",
|
||||||
"build": "tsc --build tsconfig.build.json",
|
"build": "tsc --build tsconfig.build.json",
|
||||||
|
"type-check": "tsc --noEmit --project tsconfig.build.json",
|
||||||
"test:dev": "xvfb-maybe cross-env BUNDLE=dev playwright test",
|
"test:dev": "xvfb-maybe cross-env BUNDLE=dev playwright test",
|
||||||
"test:build": "xvfb-maybe cross-env BUNDLE=build playwright test",
|
"test:build": "xvfb-maybe cross-env BUNDLE=build playwright test",
|
||||||
"test:package": "xvfb-maybe cross-env BUNDLE=package playwright test",
|
"test:package": "xvfb-maybe cross-env BUNDLE=package playwright test",
|
||||||
|
@ -15,7 +15,7 @@ export const loadFixture = async (fixturePath: string) => {
|
|||||||
export const randomDataPath = () => path.join(os.tmpdir(), 'insomnia-smoke-test', `${uuidv4()}`);
|
export const randomDataPath = () => path.join(os.tmpdir(), 'insomnia-smoke-test', `${uuidv4()}`);
|
||||||
export const INSOMNIA_DATA_PATH = randomDataPath();
|
export const INSOMNIA_DATA_PATH = randomDataPath();
|
||||||
|
|
||||||
const pathLookup = {
|
const pathLookup: Record<string, string> = {
|
||||||
win32: path.join('win-unpacked', 'Insomnia.exe'),
|
win32: path.join('win-unpacked', 'Insomnia.exe'),
|
||||||
darwin: path.join('mac', 'Insomnia.app', 'Contents', 'MacOS', 'Insomnia'),
|
darwin: path.join('mac', 'Insomnia.app', 'Contents', 'MacOS', 'Insomnia'),
|
||||||
linux: path.join('linux-unpacked', 'insomnia'),
|
linux: path.join('linux-unpacked', 'insomnia'),
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// inspiration: https://github.com/grpc/grpc/blob/e963544eef6a76f9f86d43418ee2ac57aebba6f6/examples/node/dynamic_codegen/greeter_server.js
|
// inspiration: https://github.com/grpc/grpc/blob/e963544eef6a76f9f86d43418ee2ac57aebba6f6/examples/node/dynamic_codegen/greeter_server.js
|
||||||
import * as grpc from '@grpc/grpc-js';
|
import * as grpc from '@grpc/grpc-js';
|
||||||
|
import { HandleCall } from '@grpc/grpc-js/build/src/server-call';
|
||||||
import * as protoLoader from '@grpc/proto-loader';
|
import * as protoLoader from '@grpc/proto-loader';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
@ -19,9 +20,10 @@ const helloProto = grpc.loadPackageDefinition(packageDefinition).hello;
|
|||||||
/**
|
/**
|
||||||
* Implements the SayHello RPC method.
|
* Implements the SayHello RPC method.
|
||||||
*/
|
*/
|
||||||
function sayHello(call, callback) {
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const sayHello: HandleCall<any, any> = (call: any, callback: any) => {
|
||||||
callback(null, { reply: call.request.greeting });
|
callback(null, { reply: call.request.greeting });
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts an RPC server that receives requests for the Greeter service at the given port
|
* Starts an RPC server that receives requests for the Greeter service at the given port
|
||||||
@ -30,7 +32,7 @@ export const startGRPCServer = (port: number) => {
|
|||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<void>((resolve, reject) => {
|
||||||
const server = new grpc.Server();
|
const server = new grpc.Server();
|
||||||
// @ts-expect-error generated from proto file
|
// @ts-expect-error generated from proto file
|
||||||
server.addService(helloProto.HelloService.service, { sayHello: sayHello });
|
server.addService(helloProto.HelloService.service, { sayHello });
|
||||||
server.bindAsync(`localhost:${port}`, grpc.ServerCredentials.createInsecure(), error => {
|
server.bindAsync(`localhost:${port}`, grpc.ServerCredentials.createInsecure(), error => {
|
||||||
if (error) {
|
if (error) {
|
||||||
return reject(error);
|
return reject(error);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import express, { urlencoded } from 'express';
|
import express, { urlencoded } from 'express';
|
||||||
import { Configuration, Provider } from 'oidc-provider';
|
import { Configuration, Provider } from 'oidc-provider';
|
||||||
|
// @ts-expect-error no typings available for this module
|
||||||
import { InvalidGrant } from 'oidc-provider/lib/helpers/errors';
|
import { InvalidGrant } from 'oidc-provider/lib/helpers/errors';
|
||||||
|
|
||||||
export const oauthRoutes = (port: number) => {
|
export const oauthRoutes = (port: number) => {
|
||||||
@ -255,7 +256,7 @@ export const oauthRoutes = (port: number) => {
|
|||||||
function allowLocalhostImplicit(oidc: Provider) {
|
function allowLocalhostImplicit(oidc: Provider) {
|
||||||
const { invalidate: orig } = (oidc.Client as any).Schema.prototype;
|
const { invalidate: orig } = (oidc.Client as any).Schema.prototype;
|
||||||
|
|
||||||
(oidc.Client as any).Schema.prototype.invalidate = function invalidate(message, code) {
|
(oidc.Client as any).Schema.prototype.invalidate = function invalidate(message: any, code: any) {
|
||||||
if (code === 'implicit-force-https' || code === 'implicit-forbid-localhost') {
|
if (code === 'implicit-force-https' || code === 'implicit-forbid-localhost') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,8 @@ test('Sign in with GitHub', async ({ app, page }) => {
|
|||||||
const webContents = electron.BrowserWindow.getAllWindows()[0].webContents;
|
const webContents = electron.BrowserWindow.getAllWindows()[0].webContents;
|
||||||
// Remove all navigation listeners so that only the one we inject will run
|
// Remove all navigation listeners so that only the one we inject will run
|
||||||
webContents.removeAllListeners('will-navigate');
|
webContents.removeAllListeners('will-navigate');
|
||||||
webContents.on('will-navigate', (e, url) => {
|
webContents.on('will-navigate', (event: Event, url: string) => {
|
||||||
e.preventDefault();
|
event.preventDefault();
|
||||||
const parsedUrl = new URL(url);
|
const parsedUrl = new URL(url);
|
||||||
// We use the same state parameter that the app created to assert that we prevent CSRF
|
// We use the same state parameter that the app created to assert that we prevent CSRF
|
||||||
const stateSearchParam = parsedUrl.searchParams.get('state') || '';
|
const stateSearchParam = parsedUrl.searchParams.get('state') || '';
|
||||||
|
@ -10,8 +10,8 @@ test('Sign in with Gitlab', async ({ app, page }) => {
|
|||||||
const webContents = electron.BrowserWindow.getAllWindows()[0].webContents;
|
const webContents = electron.BrowserWindow.getAllWindows()[0].webContents;
|
||||||
// Remove all navigation listeners so that only the one we inject will run
|
// Remove all navigation listeners so that only the one we inject will run
|
||||||
webContents.removeAllListeners('will-navigate');
|
webContents.removeAllListeners('will-navigate');
|
||||||
webContents.on('will-navigate', (e, url) => {
|
webContents.on('will-navigate', (event: Event, url: string) => {
|
||||||
e.preventDefault();
|
event.preventDefault();
|
||||||
const parsedUrl = new URL(url);
|
const parsedUrl = new URL(url);
|
||||||
// We use the same state parameter that the app created to assert that we prevent CSRF
|
// We use the same state parameter that the app created to assert that we prevent CSRF
|
||||||
const stateSearchParam = parsedUrl.searchParams.get('state') || '';
|
const stateSearchParam = parsedUrl.searchParams.get('state') || '';
|
||||||
|
@ -5,15 +5,15 @@
|
|||||||
"outDir": "dist",
|
"outDir": "dist",
|
||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true
|
||||||
"noImplicitAny": false
|
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"cli",
|
"cli",
|
||||||
"core",
|
"core",
|
||||||
"fixtures",
|
"fixtures",
|
||||||
"modules",
|
"modules",
|
||||||
"server"
|
"server",
|
||||||
|
"**/*.d.ts",
|
||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"dist",
|
"dist",
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
"server",
|
"server",
|
||||||
"jest.config.js",
|
"jest.config.js",
|
||||||
".eslintrc.js",
|
".eslintrc.js",
|
||||||
|
"**/*.d.ts",
|
||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"dist"
|
"dist"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
build
|
build
|
||||||
bin
|
bin
|
||||||
send-request
|
send-request
|
||||||
|
coverage
|
||||||
**/main.min.js
|
**/main.min.js
|
||||||
|
60
packages/insomnia/package-lock.json
generated
60
packages/insomnia/package-lock.json
generated
@ -70,6 +70,7 @@
|
|||||||
"@types/codemirror": "^5.60.2",
|
"@types/codemirror": "^5.60.2",
|
||||||
"@types/color": "^3.0.1",
|
"@types/color": "^3.0.1",
|
||||||
"@types/deep-equal": "^1.0.1",
|
"@types/deep-equal": "^1.0.1",
|
||||||
|
"@types/dompurify": "^2.3.3",
|
||||||
"@types/fs-extra": "^5.1.0",
|
"@types/fs-extra": "^5.1.0",
|
||||||
"@types/hapi__hawk": "^8.0.2",
|
"@types/hapi__hawk": "^8.0.2",
|
||||||
"@types/js-yaml": "^4.0.1",
|
"@types/js-yaml": "^4.0.1",
|
||||||
@ -90,6 +91,7 @@
|
|||||||
"@types/react-redux": "^7.1.22",
|
"@types/react-redux": "^7.1.22",
|
||||||
"@types/react-tabs": "^2.3.4",
|
"@types/react-tabs": "^2.3.4",
|
||||||
"@types/redux-mock-store": "^1.0.2",
|
"@types/redux-mock-store": "^1.0.2",
|
||||||
|
"@types/rimraf": "^3.0.2",
|
||||||
"@types/styled-components": "^5.1.23",
|
"@types/styled-components": "^5.1.23",
|
||||||
"@types/swagger-ui-react": "^4.1.1",
|
"@types/swagger-ui-react": "^4.1.1",
|
||||||
"@types/tough-cookie": "^2.3.7",
|
"@types/tough-cookie": "^2.3.7",
|
||||||
@ -4520,6 +4522,15 @@
|
|||||||
"integrity": "sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==",
|
"integrity": "sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/dompurify": {
|
||||||
|
"version": "2.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.3.3.tgz",
|
||||||
|
"integrity": "sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/trusted-types": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/estree": {
|
"node_modules/@types/estree": {
|
||||||
"version": "0.0.47",
|
"version": "0.0.47",
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz",
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz",
|
||||||
@ -4540,7 +4551,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
|
||||||
"integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
|
"integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/minimatch": "*",
|
"@types/minimatch": "*",
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
@ -4731,8 +4741,7 @@
|
|||||||
"version": "3.0.5",
|
"version": "3.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
|
||||||
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
|
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/@types/mkdirp": {
|
"node_modules/@types/mkdirp": {
|
||||||
"version": "0.5.2",
|
"version": "0.5.2",
|
||||||
@ -4924,6 +4933,16 @@
|
|||||||
"node": ">= 0.12"
|
"node": ">= 0.12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/rimraf": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/glob": "*",
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/scheduler": {
|
"node_modules/@types/scheduler": {
|
||||||
"version": "0.16.1",
|
"version": "0.16.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
|
||||||
@ -4979,6 +4998,12 @@
|
|||||||
"integrity": "sha512-rMQbgMGxnLsdn8e9aPVyuN+zMQLrZ2QW8xlv7eWS1mydfGXN+tsTKffcIzd8rGCcLdmi3xvQw2MDaZI1bBNTaw==",
|
"integrity": "sha512-rMQbgMGxnLsdn8e9aPVyuN+zMQLrZ2QW8xlv7eWS1mydfGXN+tsTKffcIzd8rGCcLdmi3xvQw2MDaZI1bBNTaw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/trusted-types": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/@types/unist": {
|
"node_modules/@types/unist": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
|
||||||
@ -23886,6 +23911,15 @@
|
|||||||
"integrity": "sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==",
|
"integrity": "sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@types/dompurify": {
|
||||||
|
"version": "2.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.3.3.tgz",
|
||||||
|
"integrity": "sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/trusted-types": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/estree": {
|
"@types/estree": {
|
||||||
"version": "0.0.47",
|
"version": "0.0.47",
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz",
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz",
|
||||||
@ -23906,7 +23940,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
|
||||||
"integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
|
"integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/minimatch": "*",
|
"@types/minimatch": "*",
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
@ -24097,8 +24130,7 @@
|
|||||||
"version": "3.0.5",
|
"version": "3.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
|
||||||
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
|
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"@types/mkdirp": {
|
"@types/mkdirp": {
|
||||||
"version": "0.5.2",
|
"version": "0.5.2",
|
||||||
@ -24289,6 +24321,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/rimraf": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/glob": "*",
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/scheduler": {
|
"@types/scheduler": {
|
||||||
"version": "0.16.1",
|
"version": "0.16.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
|
||||||
@ -24344,6 +24386,12 @@
|
|||||||
"integrity": "sha512-rMQbgMGxnLsdn8e9aPVyuN+zMQLrZ2QW8xlv7eWS1mydfGXN+tsTKffcIzd8rGCcLdmi3xvQw2MDaZI1bBNTaw==",
|
"integrity": "sha512-rMQbgMGxnLsdn8e9aPVyuN+zMQLrZ2QW8xlv7eWS1mydfGXN+tsTKffcIzd8rGCcLdmi3xvQw2MDaZI1bBNTaw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@types/trusted-types": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"@types/unist": {
|
"@types/unist": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
|
||||||
|
@ -124,6 +124,7 @@
|
|||||||
"@types/codemirror": "^5.60.2",
|
"@types/codemirror": "^5.60.2",
|
||||||
"@types/color": "^3.0.1",
|
"@types/color": "^3.0.1",
|
||||||
"@types/deep-equal": "^1.0.1",
|
"@types/deep-equal": "^1.0.1",
|
||||||
|
"@types/dompurify": "^2.3.3",
|
||||||
"@types/fs-extra": "^5.1.0",
|
"@types/fs-extra": "^5.1.0",
|
||||||
"@types/hapi__hawk": "^8.0.2",
|
"@types/hapi__hawk": "^8.0.2",
|
||||||
"@types/js-yaml": "^4.0.1",
|
"@types/js-yaml": "^4.0.1",
|
||||||
@ -144,6 +145,7 @@
|
|||||||
"@types/react-redux": "^7.1.22",
|
"@types/react-redux": "^7.1.22",
|
||||||
"@types/react-tabs": "^2.3.4",
|
"@types/react-tabs": "^2.3.4",
|
||||||
"@types/redux-mock-store": "^1.0.2",
|
"@types/redux-mock-store": "^1.0.2",
|
||||||
|
"@types/rimraf": "^3.0.2",
|
||||||
"@types/styled-components": "^5.1.23",
|
"@types/styled-components": "^5.1.23",
|
||||||
"@types/swagger-ui-react": "^4.1.1",
|
"@types/swagger-ui-react": "^4.1.1",
|
||||||
"@types/tough-cookie": "^2.3.7",
|
"@types/tough-cookie": "^2.3.7",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// This file implements just enough of the electron module to get sending requests to work
|
// This file implements just enough of the electron module to get sending requests to work
|
||||||
module.exports = {
|
module.exports = {
|
||||||
app: {
|
app: {
|
||||||
getPath: (name) => name === 'temp' ? require('os').tmpdir() : require('path').join(require('os').tmpdir(), 'insomnia-send-request'),
|
getPath: (/** @type {string} */ name) => name === 'temp' ? require('os').tmpdir() : require('path').join(require('os').tmpdir(), 'insomnia-send-request'),
|
||||||
},
|
},
|
||||||
ipcMain: {
|
ipcMain: {
|
||||||
on: () => {
|
on: () => {
|
||||||
|
@ -3,7 +3,7 @@ import { AxiosRequestConfig } from 'axios';
|
|||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
import { getAccountId } from '../account/session';
|
import { getAccountId } from '../account/session';
|
||||||
import { database as db } from '../common/database';
|
import { ChangeBufferEvent, database as db } from '../common/database';
|
||||||
import * as models from '../models/index';
|
import * as models from '../models/index';
|
||||||
import { isSettings } from '../models/settings';
|
import { isSettings } from '../models/settings';
|
||||||
import {
|
import {
|
||||||
@ -195,7 +195,7 @@ function _getOsName() {
|
|||||||
|
|
||||||
// Monitor database changes to see if analytics gets enabled.
|
// Monitor database changes to see if analytics gets enabled.
|
||||||
// If analytics become enabled, flush any queued events.
|
// If analytics become enabled, flush any queued events.
|
||||||
db.onChange(async changes => {
|
db.onChange(async (changes: ChangeBufferEvent[]) => {
|
||||||
for (const change of changes) {
|
for (const change of changes) {
|
||||||
const [event, doc] = change;
|
const [event, doc] = change;
|
||||||
const isUpdatingSettings = isSettings(doc) && event === 'update';
|
const isUpdatingSettings = isSettings(doc) && event === 'update';
|
||||||
|
@ -244,7 +244,7 @@ const previewModeMap = {
|
|||||||
[PREVIEW_MODE_SOURCE]: ['Source', 'Source Code'],
|
[PREVIEW_MODE_SOURCE]: ['Source', 'Source Code'],
|
||||||
[PREVIEW_MODE_RAW]: ['Raw', 'Raw Data'],
|
[PREVIEW_MODE_RAW]: ['Raw', 'Raw Data'],
|
||||||
};
|
};
|
||||||
export const PREVIEW_MODES = Object.keys(previewModeMap);
|
export const PREVIEW_MODES = Object.keys(previewModeMap) as (keyof typeof previewModeMap)[];
|
||||||
|
|
||||||
// Content Types
|
// Content Types
|
||||||
export const CONTENT_TYPE_JSON = 'application/json';
|
export const CONTENT_TYPE_JSON = 'application/json';
|
||||||
@ -257,7 +257,7 @@ export const CONTENT_TYPE_FORM_DATA = 'multipart/form-data';
|
|||||||
export const CONTENT_TYPE_FILE = 'application/octet-stream';
|
export const CONTENT_TYPE_FILE = 'application/octet-stream';
|
||||||
export const CONTENT_TYPE_GRAPHQL = 'application/graphql';
|
export const CONTENT_TYPE_GRAPHQL = 'application/graphql';
|
||||||
export const CONTENT_TYPE_OTHER = '';
|
export const CONTENT_TYPE_OTHER = '';
|
||||||
const contentTypesMap = {
|
const contentTypesMap: Record<string, string[]> = {
|
||||||
[CONTENT_TYPE_EDN]: ['EDN', 'EDN'],
|
[CONTENT_TYPE_EDN]: ['EDN', 'EDN'],
|
||||||
[CONTENT_TYPE_FILE]: ['File', 'Binary File'],
|
[CONTENT_TYPE_FILE]: ['File', 'Binary File'],
|
||||||
[CONTENT_TYPE_FORM_DATA]: ['Multipart', 'Multipart Form'],
|
[CONTENT_TYPE_FORM_DATA]: ['Multipart', 'Multipart Form'],
|
||||||
@ -289,7 +289,7 @@ export const HAWK_ALGORITHM_SHA1 = 'sha1';
|
|||||||
export const JSON_ORDER_PREFIX = '&';
|
export const JSON_ORDER_PREFIX = '&';
|
||||||
export const JSON_ORDER_SEPARATOR = '~|';
|
export const JSON_ORDER_SEPARATOR = '~|';
|
||||||
|
|
||||||
const authTypesMap = {
|
const authTypesMap: Record<string, string[]> = {
|
||||||
[AUTH_BASIC]: ['Basic', 'Basic Auth'],
|
[AUTH_BASIC]: ['Basic', 'Basic Auth'],
|
||||||
[AUTH_DIGEST]: ['Digest', 'Digest Auth'],
|
[AUTH_DIGEST]: ['Digest', 'Digest Auth'],
|
||||||
[AUTH_NTLM]: ['NTLM', 'Microsoft NTLM'],
|
[AUTH_NTLM]: ['NTLM', 'Microsoft NTLM'],
|
||||||
@ -300,7 +300,7 @@ const authTypesMap = {
|
|||||||
[AUTH_AWS_IAM]: ['AWS', 'AWS IAM v4'],
|
[AUTH_AWS_IAM]: ['AWS', 'AWS IAM v4'],
|
||||||
[AUTH_ASAP]: ['ASAP', 'Atlassian ASAP'],
|
[AUTH_ASAP]: ['ASAP', 'Atlassian ASAP'],
|
||||||
[AUTH_NETRC]: ['Netrc', 'Netrc File'],
|
[AUTH_NETRC]: ['Netrc', 'Netrc File'],
|
||||||
} as const;
|
};
|
||||||
|
|
||||||
// Sort Orders
|
// Sort Orders
|
||||||
export type SortOrder =
|
export type SortOrder =
|
||||||
@ -346,7 +346,7 @@ export type DashboardSortOrder =
|
|||||||
| 'created-desc'
|
| 'created-desc'
|
||||||
| 'modified-desc';
|
| 'modified-desc';
|
||||||
|
|
||||||
export const DASHBOARD_SORT_ORDERS = [
|
export const DASHBOARD_SORT_ORDERS: DashboardSortOrder[] = [
|
||||||
SORT_MODIFIED_DESC,
|
SORT_MODIFIED_DESC,
|
||||||
SORT_NAME_ASC,
|
SORT_NAME_ASC,
|
||||||
SORT_NAME_DESC,
|
SORT_NAME_DESC,
|
||||||
@ -362,7 +362,9 @@ export const dashboardSortOrderName: Record<DashboardSortOrder, string> = {
|
|||||||
[SORT_MODIFIED_DESC]: 'Last Modified',
|
[SORT_MODIFIED_DESC]: 'Last Modified',
|
||||||
};
|
};
|
||||||
|
|
||||||
export function getPreviewModeName(previewMode, useLong = false) {
|
export type PreviewMode = 'friendly' | 'source' | 'raw';
|
||||||
|
|
||||||
|
export function getPreviewModeName(previewMode: PreviewMode, useLong = false) {
|
||||||
if (previewModeMap.hasOwnProperty(previewMode)) {
|
if (previewModeMap.hasOwnProperty(previewMode)) {
|
||||||
return useLong ? previewModeMap[previewMode][1] : previewModeMap[previewMode][0];
|
return useLong ? previewModeMap[previewMode][1] : previewModeMap[previewMode][0];
|
||||||
} else {
|
} else {
|
||||||
@ -382,7 +384,7 @@ export function getContentTypeName(contentType?: string | null, useLong = false)
|
|||||||
return useLong ? contentTypesMap[CONTENT_TYPE_OTHER][1] : contentTypesMap[CONTENT_TYPE_OTHER][0];
|
return useLong ? contentTypesMap[CONTENT_TYPE_OTHER][1] : contentTypesMap[CONTENT_TYPE_OTHER][0];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAuthTypeName(authType, useLong = false) {
|
export function getAuthTypeName(authType: string, useLong = false) {
|
||||||
if (authTypesMap.hasOwnProperty(authType)) {
|
if (authTypesMap.hasOwnProperty(authType)) {
|
||||||
return useLong ? authTypesMap[authType][1] : authTypesMap[authType][0];
|
return useLong ? authTypesMap[authType][1] : authTypesMap[authType][0];
|
||||||
} else {
|
} else {
|
||||||
@ -390,7 +392,7 @@ export function getAuthTypeName(authType, useLong = false) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getContentTypeFromHeaders(headers, defaultValue: string | null = null) {
|
export function getContentTypeFromHeaders(headers: any[], defaultValue: string | null = null) {
|
||||||
if (!Array.isArray(headers)) {
|
if (!Array.isArray(headers)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -400,7 +402,7 @@ export function getContentTypeFromHeaders(headers, defaultValue: string | null =
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sourced from https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
|
// Sourced from https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
|
||||||
export const RESPONSE_CODE_DESCRIPTIONS = {
|
export const RESPONSE_CODE_DESCRIPTIONS: Record<number, string> = {
|
||||||
// Special
|
// Special
|
||||||
[STATUS_CODE_PLUGIN_ERROR]:
|
[STATUS_CODE_PLUGIN_ERROR]:
|
||||||
'An Insomnia plugin threw an error which prevented the request from sending',
|
'An Insomnia plugin threw an error which prevented the request from sending',
|
||||||
@ -471,7 +473,7 @@ export const RESPONSE_CODE_DESCRIPTIONS = {
|
|||||||
511: 'The 511 status code indicates that the client needs to authenticate to gain network access.',
|
511: 'The 511 status code indicates that the client needs to authenticate to gain network access.',
|
||||||
};
|
};
|
||||||
|
|
||||||
export const RESPONSE_CODE_REASONS = {
|
export const RESPONSE_CODE_REASONS: Record<number, string> = {
|
||||||
// Special
|
// Special
|
||||||
[STATUS_CODE_PLUGIN_ERROR]: 'Plugin Error',
|
[STATUS_CODE_PLUGIN_ERROR]: 'Plugin Error',
|
||||||
// 100s
|
// 100s
|
||||||
|
@ -351,6 +351,7 @@ export const database = {
|
|||||||
delete db._empty;
|
delete db._empty;
|
||||||
electron.ipcMain.on('db.fn', async (e, fnName, replyChannel, ...args) => {
|
electron.ipcMain.on('db.fn', async (e, fnName, replyChannel, ...args) => {
|
||||||
try {
|
try {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
const result = await database[fnName](...args);
|
const result = await database[fnName](...args);
|
||||||
e.sender.send(replyChannel, null, result);
|
e.sender.send(replyChannel, null, result);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@ -370,7 +371,7 @@ export const database = {
|
|||||||
|
|
||||||
// This isn't the best place for this but w/e
|
// This isn't the best place for this but w/e
|
||||||
// Listen for response deletions and delete corresponding response body files
|
// Listen for response deletions and delete corresponding response body files
|
||||||
database.onChange(async changes => {
|
database.onChange(async (changes: ChangeBufferEvent[]) => {
|
||||||
for (const [type, doc] of changes) {
|
for (const [type, doc] of changes) {
|
||||||
// TODO(TSCONVERSION) what's returned here is the entire model implementation, not just a model
|
// TODO(TSCONVERSION) what's returned here is the entire model implementation, not just a model
|
||||||
// The type definition will be a little confusing
|
// The type definition will be a little confusing
|
||||||
@ -684,7 +685,7 @@ function getDBFilePath(modelType: string) {
|
|||||||
let bufferingChanges = false;
|
let bufferingChanges = false;
|
||||||
let bufferChangesId = 1;
|
let bufferChangesId = 1;
|
||||||
|
|
||||||
type ChangeBufferEvent = [
|
export type ChangeBufferEvent = [
|
||||||
event: string,
|
event: string,
|
||||||
doc: BaseModel,
|
doc: BaseModel,
|
||||||
fromSync: boolean
|
fromSync: boolean
|
||||||
@ -692,7 +693,7 @@ type ChangeBufferEvent = [
|
|||||||
|
|
||||||
let changeBuffer: ChangeBufferEvent[] = [];
|
let changeBuffer: ChangeBufferEvent[] = [];
|
||||||
|
|
||||||
type ChangeListener = Function;
|
type ChangeListener = (changes: ChangeBufferEvent[]) => void;
|
||||||
|
|
||||||
let changeListeners: ChangeListener[] = [];
|
let changeListeners: ChangeListener[] = [];
|
||||||
|
|
||||||
|
@ -535,7 +535,7 @@ function getRequestPostData(renderedRequest: RenderedRequest): HarPostData | und
|
|||||||
body = renderedRequest.body;
|
body = renderedRequest.body;
|
||||||
}
|
}
|
||||||
|
|
||||||
let params = [];
|
let params: any[] = [];
|
||||||
|
|
||||||
if (body.params) {
|
if (body.params) {
|
||||||
params = body.params.map(param => {
|
params = body.params.map(param => {
|
||||||
|
@ -162,7 +162,7 @@ export async function importRaw(
|
|||||||
// Workspace > Environment > RequestGroup > Request
|
// Workspace > Environment > RequestGroup > Request
|
||||||
// Import everything backwards so they get inserted in the correct order
|
// Import everything backwards so they get inserted in the correct order
|
||||||
data.resources.reverse();
|
data.resources.reverse();
|
||||||
const importedDocs = {};
|
const importedDocs: Record<string, any[]> = {};
|
||||||
|
|
||||||
for (const model of models.all()) {
|
for (const model of models.all()) {
|
||||||
importedDocs[model.type] = [];
|
importedDocs[model.type] = [];
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export const keyboardKeys = {
|
export const keyboardKeys: Record<string, { keyCode: number; label: string }> = {
|
||||||
backspace: {
|
backspace: {
|
||||||
keyCode: 8,
|
keyCode: 8,
|
||||||
label: 'Backspace',
|
label: 'Backspace',
|
||||||
@ -399,7 +399,7 @@ export const keyboardKeys = {
|
|||||||
keyCode: 222,
|
keyCode: 222,
|
||||||
label: "'",
|
label: "'",
|
||||||
},
|
},
|
||||||
} as const;
|
};
|
||||||
|
|
||||||
type KeyName = keyof typeof keyboardKeys;
|
type KeyName = keyof typeof keyboardKeys;
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ export function pluralize(text: string) {
|
|||||||
return `${text.slice(0, text.length - chop)}${trailer}`;
|
return `${text.slice(0, text.length - chop)}${trailer}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function diffPatchObj(baseObj: {}, patchObj: {}, deep = false) {
|
export function diffPatchObj(baseObj: any, patchObj: any, deep = false) {
|
||||||
const clonedBaseObj = JSON.parse(JSON.stringify(baseObj));
|
const clonedBaseObj = JSON.parse(JSON.stringify(baseObj));
|
||||||
|
|
||||||
for (const prop in baseObj) {
|
for (const prop in baseObj) {
|
||||||
|
@ -169,7 +169,7 @@ export async function buildRenderContext(
|
|||||||
const keys = _getOrderedEnvironmentKeys(finalRenderContext);
|
const keys = _getOrderedEnvironmentKeys(finalRenderContext);
|
||||||
|
|
||||||
// Render recursive references and tags.
|
// Render recursive references and tags.
|
||||||
const skipNextTime = {};
|
const skipNextTime: Record<string, boolean> = {};
|
||||||
|
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 3; i++) {
|
||||||
for (const key of keys) {
|
for (const key of keys) {
|
||||||
@ -273,9 +273,11 @@ export async function render<T>(
|
|||||||
|
|
||||||
for (const key of keys) {
|
for (const key of keys) {
|
||||||
if (first && key.indexOf('_') === 0) {
|
if (first && key.indexOf('_') === 0) {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
x[key] = await next(x[key], path);
|
x[key] = await next(x[key], path);
|
||||||
} else {
|
} else {
|
||||||
const pathPrefix = path ? path + '.' : '';
|
const pathPrefix = path ? path + '.' : '';
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
x[key] = await next(x[key], `${pathPrefix}${key}`);
|
x[key] = await next(x[key], `${pathPrefix}${key}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -322,10 +324,10 @@ export async function getRenderContext(
|
|||||||
workspace ? workspace._id : 'n/a',
|
workspace ? workspace._id : 'n/a',
|
||||||
);
|
);
|
||||||
const subEnvironment = await models.environment.getById(environmentId || 'n/a');
|
const subEnvironment = await models.environment.getById(environmentId || 'n/a');
|
||||||
const keySource = {};
|
const keySource: Record<string, string> = {};
|
||||||
|
|
||||||
// Function that gets Keys and stores their Source location
|
// Function that gets Keys and stores their Source location
|
||||||
function getKeySource(subObject, inKey, inSource) {
|
function getKeySource(subObject: string | Record<string, any>, inKey: string, inSource: string) {
|
||||||
// Add key to map if it's not root
|
// Add key to map if it's not root
|
||||||
if (inKey) {
|
if (inKey) {
|
||||||
keySource[templatingUtils.normalizeToDotAndBracketNotation(inKey)] = inSource;
|
keySource[templatingUtils.normalizeToDotAndBracketNotation(inKey)] = inSource;
|
||||||
@ -336,10 +338,12 @@ export async function getRenderContext(
|
|||||||
|
|
||||||
if (typeStr === '[object Object]') {
|
if (typeStr === '[object Object]') {
|
||||||
for (const key of Object.keys(subObject)) {
|
for (const key of Object.keys(subObject)) {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
getKeySource(subObject[key], templatingUtils.forceBracketNotation(inKey, key), inSource);
|
getKeySource(subObject[key], templatingUtils.forceBracketNotation(inKey, key), inSource);
|
||||||
}
|
}
|
||||||
} else if (typeStr === '[object Array]') {
|
} else if (typeStr === '[object Array]') {
|
||||||
for (let i = 0; i < subObject.length; i++) {
|
for (let i = 0; i < subObject.length; i++) {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
getKeySource(subObject[i], templatingUtils.forceBracketNotation(inKey, i), inSource);
|
getKeySource(subObject[i], templatingUtils.forceBracketNotation(inKey, i), inSource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -539,7 +543,7 @@ export async function getRenderedRequestAndContext(
|
|||||||
* @param v
|
* @param v
|
||||||
* @returns {number}
|
* @returns {number}
|
||||||
*/
|
*/
|
||||||
function _nunjucksSortValue(v) {
|
function _nunjucksSortValue(v: string) {
|
||||||
return v?.match?.(/({{|{%)/) ? 2 : 1;
|
return v?.match?.(/({{|{%)/) ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import { ErrorResult } from 'insomnia-config';
|
||||||
|
|
||||||
import { getConfigSettings, isConfigError, isParseError } from '../models/helpers/settings';
|
import { getConfigSettings, isConfigError, isParseError } from '../models/helpers/settings';
|
||||||
|
|
||||||
interface Result {
|
interface Result {
|
||||||
@ -30,7 +32,7 @@ export const validateInsomniaConfig = (): Result => {
|
|||||||
].join('\n');
|
].join('\n');
|
||||||
} else if (isConfigError(configSettings)) {
|
} else if (isConfigError(configSettings)) {
|
||||||
const { humanReadableErrors, configPath } = configSettings.error;
|
const { humanReadableErrors, configPath } = configSettings.error;
|
||||||
const errors = humanReadableErrors.map(({ message, path, suggestion }, index) => ([
|
const errors = humanReadableErrors.map(({ message, path, suggestion }: ErrorResult['humanReadableErrors'][0], index: number) => ([
|
||||||
`[Error ${index + 1}]`,
|
`[Error ${index + 1}]`,
|
||||||
`Path: ${path}`,
|
`Path: ${path}`,
|
||||||
`${message}.${suggestion ? ` ${suggestion}` : ''}`,
|
`${message}.${suggestion ? ` ${suggestion}` : ''}`,
|
||||||
|
2
packages/insomnia/src/jsonlint.d.ts
vendored
Normal file
2
packages/insomnia/src/jsonlint.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
declare module 'jsonlint-mod-fixed' {
|
||||||
|
}
|
@ -66,7 +66,7 @@ class LocalStorage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_getKeyPath(key) {
|
_getKeyPath(key: string) {
|
||||||
// @ts-expect-error -- TSCONVERSION this appears to be a genuine error
|
// @ts-expect-error -- TSCONVERSION this appears to be a genuine error
|
||||||
return path.join(this._basePath, key);
|
return path.join(this._basePath, key);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import * as Sentry from '@sentry/electron/main';
|
import * as Sentry from '@sentry/electron/main';
|
||||||
import type { SentryRequestType } from '@sentry/types';
|
import type { SentryRequestType } from '@sentry/types';
|
||||||
|
|
||||||
import { database as db } from '../common/database';
|
import { ChangeBufferEvent, database as db } from '../common/database';
|
||||||
import { SENTRY_OPTIONS } from '../common/sentry';
|
import { SENTRY_OPTIONS } from '../common/sentry';
|
||||||
import * as models from '../models/index';
|
import * as models from '../models/index';
|
||||||
import { isSettings } from '../models/settings';
|
import { isSettings } from '../models/settings';
|
||||||
@ -16,7 +16,7 @@ export function sentryWatchAnalyticsEnabled() {
|
|||||||
enabled = settings.enableAnalytics;
|
enabled = settings.enableAnalytics;
|
||||||
});
|
});
|
||||||
|
|
||||||
db.onChange(async changes => {
|
db.onChange(async (changes: ChangeBufferEvent[]) => {
|
||||||
for (const change of changes) {
|
for (const change of changes) {
|
||||||
const [event, doc] = change;
|
const [event, doc] = change;
|
||||||
if (isSettings(doc) && event === 'update') {
|
if (isSettings(doc) && event === 'update') {
|
||||||
|
@ -2,7 +2,7 @@ import { spawn } from 'child_process';
|
|||||||
import { app } from 'electron';
|
import { app } from 'electron';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
function run(args, done) {
|
function run(args: readonly string[] | undefined, done: (...args: any[]) => void) {
|
||||||
const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe');
|
const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe');
|
||||||
spawn(updateExe, args, {
|
spawn(updateExe, args, {
|
||||||
detached: true,
|
detached: true,
|
||||||
|
@ -64,7 +64,7 @@ async function getUpdateUrl(force: boolean): Promise<string | null> {
|
|||||||
return fullUrl;
|
return fullUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _sendUpdateStatus(status) {
|
function _sendUpdateStatus(status: string) {
|
||||||
const windows = BrowserWindow.getAllWindows();
|
const windows = BrowserWindow.getAllWindows();
|
||||||
|
|
||||||
for (const window of windows) {
|
for (const window of windows) {
|
||||||
|
@ -15,6 +15,7 @@ const toSchema = <T>(obj: T): Schema<T> => {
|
|||||||
const output: Partial<Schema<T>> = {};
|
const output: Partial<Schema<T>> = {};
|
||||||
|
|
||||||
Object.keys(cloned).forEach(key => {
|
Object.keys(cloned).forEach(key => {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
output[key] = () => cloned[key];
|
output[key] = () => cloned[key];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -196,6 +196,7 @@ export async function initModel<T extends BaseModel>(type: string, ...sources: R
|
|||||||
// Prune extra keys from doc
|
// Prune extra keys from doc
|
||||||
for (const key of Object.keys(migratedDoc)) {
|
for (const key of Object.keys(migratedDoc)) {
|
||||||
if (!objectDefaults.hasOwnProperty(key)) {
|
if (!objectDefaults.hasOwnProperty(key)) {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
delete migratedDoc[key];
|
delete migratedDoc[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -204,7 +205,7 @@ export async function initModel<T extends BaseModel>(type: string, ...sources: R
|
|||||||
return migratedDoc;
|
return migratedDoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const MODELS_BY_EXPORT_TYPE = {
|
export const MODELS_BY_EXPORT_TYPE: Record<string, any> = {
|
||||||
[EXPORT_TYPE_REQUEST]: request,
|
[EXPORT_TYPE_REQUEST]: request,
|
||||||
[EXPORT_TYPE_GRPC_REQUEST]: grpcRequest,
|
[EXPORT_TYPE_GRPC_REQUEST]: grpcRequest,
|
||||||
[EXPORT_TYPE_REQUEST_GROUP]: requestGroup,
|
[EXPORT_TYPE_REQUEST_GROUP]: requestGroup,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { PREVIEW_MODE_FRIENDLY } from '../common/constants';
|
import { PREVIEW_MODE_FRIENDLY, PreviewMode } from '../common/constants';
|
||||||
import { database as db } from '../common/database';
|
import { database as db } from '../common/database';
|
||||||
import type { BaseModel } from './index';
|
import type { BaseModel } from './index';
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ export type RequestAccordionKeys = 'OAuth2AdvancedOptions';
|
|||||||
|
|
||||||
export interface BaseRequestMeta {
|
export interface BaseRequestMeta {
|
||||||
parentId: string;
|
parentId: string;
|
||||||
previewMode: string;
|
previewMode: PreviewMode;
|
||||||
responseFilter: string;
|
responseFilter: string;
|
||||||
responseFilterHistory: string[];
|
responseFilterHistory: string[];
|
||||||
activeResponseId: string | null;
|
activeResponseId: string | null;
|
||||||
|
@ -109,7 +109,7 @@ function _diffRequests(rOld: Request | null, rNew: Request) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const key of Object.keys(rOld)) {
|
for (const key of Object.keys(rOld) as (keyof Request)[]) {
|
||||||
// Skip fields that aren't useful
|
// Skip fields that aren't useful
|
||||||
if (FIELDS_TO_IGNORE.includes(key)) {
|
if (FIELDS_TO_IGNORE.includes(key)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -4,7 +4,7 @@ const WILDCARD_CHARACTER = '*';
|
|||||||
const WILDCARD_SUBSTITUTION = Math.random().toString().split('.')[1];
|
const WILDCARD_SUBSTITUTION = Math.random().toString().split('.')[1];
|
||||||
const WILDCARD_SUBSTITUTION_PATTERN = new RegExp(`${WILDCARD_SUBSTITUTION}`, 'g');
|
const WILDCARD_SUBSTITUTION_PATTERN = new RegExp(`${WILDCARD_SUBSTITUTION}`, 'g');
|
||||||
|
|
||||||
export default function certificateUrlParse(url) {
|
export default function certificateUrlParse(url: string) {
|
||||||
if (url.indexOf(WILDCARD_CHARACTER) === -1) {
|
if (url.indexOf(WILDCARD_CHARACTER) === -1) {
|
||||||
return urlParse(url);
|
return urlParse(url);
|
||||||
} else {
|
} else {
|
||||||
@ -17,7 +17,9 @@ export default function certificateUrlParse(url) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _reinstateWildcards(string) {
|
function _reinstateWildcards(string: string): string;
|
||||||
|
function _reinstateWildcards(string: string | null): string | null;
|
||||||
|
function _reinstateWildcards(string: string | null) {
|
||||||
if (string) {
|
if (string) {
|
||||||
return string.replace(WILDCARD_SUBSTITUTION_PATTERN, WILDCARD_CHARACTER);
|
return string.replace(WILDCARD_SUBSTITUTION_PATTERN, WILDCARD_CHARACTER);
|
||||||
} else {
|
} else {
|
||||||
|
@ -16,23 +16,23 @@ export class ResponseCallbacks implements IResponseCallbacks {
|
|||||||
this._event = event;
|
this._event = event;
|
||||||
}
|
}
|
||||||
|
|
||||||
sendData(requestId, val) {
|
sendData(requestId: string, val: Record<string, any>) {
|
||||||
this._event.reply(GrpcResponseEventEnum.data, requestId, val);
|
this._event.reply(GrpcResponseEventEnum.data, requestId, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendError(requestId, err) {
|
sendError(requestId: string, err: Error) {
|
||||||
this._event.reply(GrpcResponseEventEnum.error, requestId, err);
|
this._event.reply(GrpcResponseEventEnum.error, requestId, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendStart(requestId) {
|
sendStart(requestId: string) {
|
||||||
this._event.reply(GrpcResponseEventEnum.start, requestId);
|
this._event.reply(GrpcResponseEventEnum.start, requestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendEnd(requestId) {
|
sendEnd(requestId: string) {
|
||||||
this._event.reply(GrpcResponseEventEnum.end, requestId);
|
this._event.reply(GrpcResponseEventEnum.end, requestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendStatus(requestId, status) {
|
sendStatus(requestId: string, status: StatusObject) {
|
||||||
this._event.reply(GrpcResponseEventEnum.status, requestId, status);
|
this._event.reply(GrpcResponseEventEnum.status, requestId, status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { parse as urlParse } from 'url';
|
import { parse as urlParse } from 'url';
|
||||||
|
|
||||||
function formatHostname(rawHostname) {
|
function formatHostname(rawHostname: string) {
|
||||||
// canonicalize the hostname, so that 'oogle.com' won't match 'google.com'
|
// canonicalize the hostname, so that 'oogle.com' won't match 'google.com'
|
||||||
const hostname = rawHostname.replace(/^\.*/, '.').toLowerCase();
|
const hostname = rawHostname.replace(/^\.*/, '.').toLowerCase();
|
||||||
return hostname.endsWith('.') ? hostname.slice(0, -1) : hostname;
|
return hostname.endsWith('.') ? hostname.slice(0, -1) : hostname;
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseNoProxyZone(zone) {
|
function parseNoProxyZone(zone: string) {
|
||||||
zone = zone.trim().toLowerCase();
|
zone = zone.trim().toLowerCase();
|
||||||
const zoneParts = zone.split(':', 2);
|
const zoneParts = zone.split(':', 2);
|
||||||
const zoneHost = formatHostname(zoneParts[0]);
|
const zoneHost = formatHostname(zoneParts[0]);
|
||||||
@ -16,7 +16,7 @@ function parseNoProxyZone(zone) {
|
|||||||
return { hostname: zoneHost, port: zonePort, hasPort: hasPort };
|
return { hostname: zoneHost, port: zonePort, hasPort: hasPort };
|
||||||
}
|
}
|
||||||
|
|
||||||
function matchesHostname(hostname, noProxyZoneHostname) {
|
function matchesHostname(hostname: string, noProxyZoneHostname: string) {
|
||||||
const wildcardNeedle = noProxyZoneHostname.startsWith('.*.') ? noProxyZoneHostname.slice(2) : noProxyZoneHostname;
|
const wildcardNeedle = noProxyZoneHostname.startsWith('.*.') ? noProxyZoneHostname.slice(2) : noProxyZoneHostname;
|
||||||
const isMatchedAt = hostname.indexOf(wildcardNeedle);
|
const isMatchedAt = hostname.indexOf(wildcardNeedle);
|
||||||
return (isMatchedAt > -1 && (isMatchedAt === hostname.length - wildcardNeedle.length));
|
return (isMatchedAt > -1 && (isMatchedAt === hostname.length - wildcardNeedle.length));
|
||||||
@ -31,7 +31,9 @@ export function isUrlMatchedInNoProxyRule(url: string | undefined, noProxyRule:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const port = uri.port || (uri.protocol === 'https:' ? '443' : '80');
|
const port = uri.port || (uri.protocol === 'https:' ? '443' : '80');
|
||||||
const hostname = formatHostname(uri.hostname);
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
const hostname = formatHostname(uri.hostname!);
|
||||||
const noProxyList = noProxyRule.split(',');
|
const noProxyList = noProxyRule.split(',');
|
||||||
|
|
||||||
// iterate through the noProxyList until it finds a match.
|
// iterate through the noProxyList until it finds a match.
|
||||||
|
@ -73,8 +73,8 @@ interface CurlRequestOutput {
|
|||||||
const getDataDirectory = () => process.env.INSOMNIA_DATA_PATH || electron.app.getPath('userData');
|
const getDataDirectory = () => process.env.INSOMNIA_DATA_PATH || electron.app.getPath('userData');
|
||||||
|
|
||||||
// NOTE: this is a dictionary of functions to close open listeners
|
// NOTE: this is a dictionary of functions to close open listeners
|
||||||
const cancelCurlRequestHandlers = {};
|
const cancelCurlRequestHandlers: Record<string, () => void> = {};
|
||||||
export const cancelCurlRequest = id => cancelCurlRequestHandlers[id]();
|
export const cancelCurlRequest = (id: string) => cancelCurlRequestHandlers[id]();
|
||||||
export const curlRequest = (options: CurlRequestOptions) => new Promise<CurlRequestOutput>(async resolve => {
|
export const curlRequest = (options: CurlRequestOptions) => new Promise<CurlRequestOutput>(async resolve => {
|
||||||
try {
|
try {
|
||||||
const responsesDir = path.join(getDataDirectory(), 'responses');
|
const responsesDir = path.join(getDataDirectory(), 'responses');
|
||||||
@ -208,7 +208,7 @@ export const curlRequest = (options: CurlRequestOptions) => new Promise<CurlRequ
|
|||||||
const requestBody = parseRequestBody({ body, method });
|
const requestBody = parseRequestBody({ body, method });
|
||||||
const requestBodyPath = await parseRequestBodyPath(body);
|
const requestBodyPath = await parseRequestBodyPath(body);
|
||||||
const isMultipart = body.mimeType === CONTENT_TYPE_FORM_DATA && requestBodyPath;
|
const isMultipart = body.mimeType === CONTENT_TYPE_FORM_DATA && requestBodyPath;
|
||||||
let requestFileDescriptor;
|
let requestFileDescriptor: number;
|
||||||
const { authentication } = req;
|
const { authentication } = req;
|
||||||
if (requestBodyPath) {
|
if (requestBodyPath) {
|
||||||
// AWS IAM file upload not supported
|
// AWS IAM file upload not supported
|
||||||
@ -358,7 +358,7 @@ const closeReadFunction = (fd: number, isMultipart: boolean, path?: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Because node-libcurl changed some names that we used in the timeline
|
// Because node-libcurl changed some names that we used in the timeline
|
||||||
const LIBCURL_DEBUG_MIGRATION_MAP = {
|
const LIBCURL_DEBUG_MIGRATION_MAP: Record<string, string> = {
|
||||||
HeaderIn: 'HEADER_IN',
|
HeaderIn: 'HEADER_IN',
|
||||||
DataIn: 'DATA_IN',
|
DataIn: 'DATA_IN',
|
||||||
SslDataIn: 'SSL_DATA_IN',
|
SslDataIn: 'SSL_DATA_IN',
|
||||||
@ -416,13 +416,13 @@ async function waitForStreamToFinish(stream: Readable | Writable) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const parseRequestBody = ({ body, method }) => {
|
const parseRequestBody = ({ body, method }: { body: any; method: string }) => {
|
||||||
const isUrlEncodedForm = body.mimeType === CONTENT_TYPE_FORM_URLENCODED;
|
const isUrlEncodedForm = body.mimeType === CONTENT_TYPE_FORM_URLENCODED;
|
||||||
const expectsBody = ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase());
|
const expectsBody = ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase());
|
||||||
const hasMimetypeAndUpdateMethod = typeof body.mimeType === 'string' || expectsBody;
|
const hasMimetypeAndUpdateMethod = typeof body.mimeType === 'string' || expectsBody;
|
||||||
if (isUrlEncodedForm) {
|
if (isUrlEncodedForm) {
|
||||||
const urlSearchParams = new URLSearchParams();
|
const urlSearchParams = new URLSearchParams();
|
||||||
(body.params || []).map(p => urlSearchParams.append(p.name, p?.value || ''));
|
(body.params || []).map((p: { name: string; value: any }) => urlSearchParams.append(p.name, p?.value || ''));
|
||||||
return urlSearchParams.toString();
|
return urlSearchParams.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,7 +432,7 @@ const parseRequestBody = ({ body, method }) => {
|
|||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
};
|
};
|
||||||
const parseRequestBodyPath = async body => {
|
const parseRequestBodyPath = async (body: any) => {
|
||||||
const isMultipartForm = body.mimeType === CONTENT_TYPE_FORM_DATA;
|
const isMultipartForm = body.mimeType === CONTENT_TYPE_FORM_DATA;
|
||||||
if (!isMultipartForm) {
|
if (!isMultipartForm) {
|
||||||
return body.fileName;
|
return body.fileName;
|
||||||
@ -441,7 +441,7 @@ const parseRequestBodyPath = async body => {
|
|||||||
return filePath;
|
return filePath;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getHttpVersion = preferredHttpVersion => {
|
export const getHttpVersion = (preferredHttpVersion: string) => {
|
||||||
switch (preferredHttpVersion) {
|
switch (preferredHttpVersion) {
|
||||||
case 'V1_0':
|
case 'V1_0':
|
||||||
return { log: 'Using HTTP 1.0', curlHttpVersion: CurlHttpVersion.V1_0 };
|
return { log: 'Using HTTP 1.0', curlHttpVersion: CurlHttpVersion.V1_0 };
|
||||||
|
@ -26,7 +26,7 @@ export async function buildMultipart(params: RequestBodyParameter[]) {
|
|||||||
|
|
||||||
function addFile(path: string) {
|
function addFile(path: string) {
|
||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<void>((resolve, reject) => {
|
||||||
let size;
|
let size: number | undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
size = fs.statSync(path).size;
|
size = fs.statSync(path).size;
|
||||||
@ -44,7 +44,9 @@ export async function buildMultipart(params: RequestBodyParameter[]) {
|
|||||||
stream.pipe(writeStream, {
|
stream.pipe(writeStream, {
|
||||||
end: false,
|
end: false,
|
||||||
});
|
});
|
||||||
totalSize += size;
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
totalSize += size!;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,11 +64,11 @@ export interface ResponsePatch {
|
|||||||
// Time since user's last keypress to wait before making the request
|
// Time since user's last keypress to wait before making the request
|
||||||
const MAX_DELAY_TIME = 1000;
|
const MAX_DELAY_TIME = 1000;
|
||||||
|
|
||||||
const cancelRequestFunctionMap = {};
|
const cancelRequestFunctionMap: Record<string, () => void> = {};
|
||||||
|
|
||||||
let lastUserInteraction = Date.now();
|
let lastUserInteraction = Date.now();
|
||||||
|
|
||||||
export async function cancelRequestById(requestId) {
|
export async function cancelRequestById(requestId: string) {
|
||||||
const hasCancelFunction = cancelRequestFunctionMap.hasOwnProperty(requestId) && typeof cancelRequestFunctionMap[requestId] === 'function';
|
const hasCancelFunction = cancelRequestFunctionMap.hasOwnProperty(requestId) && typeof cancelRequestFunctionMap[requestId] === 'function';
|
||||||
if (hasCancelFunction) {
|
if (hasCancelFunction) {
|
||||||
return cancelRequestFunctionMap[requestId]();
|
return cancelRequestFunctionMap[requestId]();
|
||||||
@ -154,7 +154,7 @@ export async function _actuallySend(
|
|||||||
// add set-cookie headers to file(cookiejar) and database
|
// add set-cookie headers to file(cookiejar) and database
|
||||||
if (settingStoreCookies) {
|
if (settingStoreCookies) {
|
||||||
// supports many set-cookies over many redirects
|
// supports many set-cookies over many redirects
|
||||||
const redirects: string[][] = headerResults.map(({ headers }) => getSetCookiesFromResponseHeaders(headers));
|
const redirects: string[][] = headerResults.map(({ headers }: any) => getSetCookiesFromResponseHeaders(headers));
|
||||||
const setCookieStrings: string[] = redirects.flat();
|
const setCookieStrings: string[] = redirects.flat();
|
||||||
const totalSetCookies = setCookieStrings.length;
|
const totalSetCookies = setCookieStrings.length;
|
||||||
if (totalSetCookies) {
|
if (totalSetCookies) {
|
||||||
@ -206,9 +206,9 @@ export async function _actuallySend(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getSetCookiesFromResponseHeaders = headers => getSetCookieHeaders(headers).map(h => h.value);
|
export const getSetCookiesFromResponseHeaders = (headers: any[]) => getSetCookieHeaders(headers).map(h => h.value);
|
||||||
|
|
||||||
export const getCurrentUrl = ({ headerResults, finalUrl }) => {
|
export const getCurrentUrl = ({ headerResults, finalUrl }: { headerResults: any; finalUrl: string }): string => {
|
||||||
if (!headerResults || !headerResults.length) {
|
if (!headerResults || !headerResults.length) {
|
||||||
return finalUrl;
|
return finalUrl;
|
||||||
}
|
}
|
||||||
@ -224,7 +224,7 @@ export const getCurrentUrl = ({ headerResults, finalUrl }) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const addSetCookiesToToughCookieJar = async ({ setCookieStrings, currentUrl, cookieJar }) => {
|
const addSetCookiesToToughCookieJar = async ({ setCookieStrings, currentUrl, cookieJar }: any) => {
|
||||||
const rejectedCookies: string[] = [];
|
const rejectedCookies: string[] = [];
|
||||||
const jar = jarFromCookies(cookieJar.cookies);
|
const jar = jarFromCookies(cookieJar.cookies);
|
||||||
for (const setCookieStr of setCookieStrings) {
|
for (const setCookieStr of setCookieStrings) {
|
||||||
|
@ -59,7 +59,7 @@ export default async function(
|
|||||||
hash_function: hashFunction(authentication.signatureMethod),
|
hash_function: hashFunction(authentication.signatureMethod),
|
||||||
realm: authentication.realm || null,
|
realm: authentication.realm || null,
|
||||||
});
|
});
|
||||||
const requestData = {
|
const requestData: OAuth1.RequestOptions = {
|
||||||
url: url,
|
url: url,
|
||||||
method: method,
|
method: method,
|
||||||
includeBodyHash: false,
|
includeBodyHash: false,
|
||||||
@ -69,22 +69,18 @@ export default async function(
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (authentication.callback) {
|
if (authentication.callback) {
|
||||||
// @ts-expect-error -- TSCONVERSION needs type widening
|
|
||||||
requestData.data.oauth_callback = authentication.callback;
|
requestData.data.oauth_callback = authentication.callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authentication.nonce) {
|
if (authentication.nonce) {
|
||||||
// @ts-expect-error -- TSCONVERSION needs type widening
|
|
||||||
requestData.data.oauth_nonce = authentication.nonce;
|
requestData.data.oauth_nonce = authentication.nonce;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authentication.timestamp) {
|
if (authentication.timestamp) {
|
||||||
// @ts-expect-error -- TSCONVERSION needs type widening
|
|
||||||
requestData.data.oauth_timestamp = authentication.timestamp;
|
requestData.data.oauth_timestamp = authentication.timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authentication.verifier) {
|
if (authentication.verifier) {
|
||||||
// @ts-expect-error -- TSCONVERSION needs type widening
|
|
||||||
requestData.data.oauth_verifier = authentication.verifier;
|
requestData.data.oauth_verifier = authentication.verifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ export default async function(
|
|||||||
credentialsInBody,
|
credentialsInBody,
|
||||||
clientId,
|
clientId,
|
||||||
clientSecret,
|
clientSecret,
|
||||||
|
// @ts-expect-error -- unsound typing
|
||||||
authorizeResults[c.P_CODE],
|
authorizeResults[c.P_CODE],
|
||||||
redirectUri,
|
redirectUri,
|
||||||
state,
|
state,
|
||||||
@ -85,8 +86,8 @@ export default async function(
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function _authorize(
|
async function _authorize(
|
||||||
url,
|
url: string,
|
||||||
clientId,
|
clientId: string,
|
||||||
redirectUri = '',
|
redirectUri = '',
|
||||||
scope = '',
|
scope = '',
|
||||||
state = '',
|
state = '',
|
||||||
|
@ -22,18 +22,22 @@ export function initNewOAuthSession() {
|
|||||||
return authWindowSessionId;
|
return authWindowSessionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function responseToObject(body, keys, defaults = {}) {
|
export function responseToObject(body: string | null, keys: string[], defaults: Record<string, string | string[]> = {}) {
|
||||||
let data: querystring.ParsedUrlQuery | null = null;
|
let data: querystring.ParsedUrlQuery | null = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
data = JSON.parse(body);
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
data = JSON.parse(body!);
|
||||||
} catch (err) {}
|
} catch (err) {}
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
try {
|
try {
|
||||||
// NOTE: parse does not return a JS Object, so
|
// NOTE: parse does not return a JS Object, so
|
||||||
// we cannot use hasOwnProperty on it
|
// we cannot use hasOwnProperty on it
|
||||||
data = querystring.parse(body);
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
data = querystring.parse(body!);
|
||||||
} catch (err) {}
|
} catch (err) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +46,7 @@ export function responseToObject(body, keys, defaults = {}) {
|
|||||||
data = {};
|
data = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const results = {};
|
const results: Record<string, string | string[] | null | undefined> = {};
|
||||||
|
|
||||||
for (const key of keys) {
|
for (const key of keys) {
|
||||||
if (data[key] !== undefined) {
|
if (data[key] !== undefined) {
|
||||||
@ -62,7 +66,12 @@ export function authorizeUserInWindow({
|
|||||||
urlSuccessRegex = /(code=).*/,
|
urlSuccessRegex = /(code=).*/,
|
||||||
urlFailureRegex = /(error=).*/,
|
urlFailureRegex = /(error=).*/,
|
||||||
sessionId,
|
sessionId,
|
||||||
}) {
|
}: {
|
||||||
|
url: string;
|
||||||
|
urlSuccessRegex: RegExp;
|
||||||
|
urlFailureRegex: RegExp;
|
||||||
|
sessionId: string;
|
||||||
|
}): Promise<string> {
|
||||||
return new Promise<string>(async (resolve, reject) => {
|
return new Promise<string>(async (resolve, reject) => {
|
||||||
let finalUrl: string | null = null;
|
let finalUrl: string | null = null;
|
||||||
|
|
||||||
|
@ -86,8 +86,8 @@ export const parseHeaderStrings = ({ req, finalUrl, requestBody, requestBodyPath
|
|||||||
headers.push({ name: 'content-type', value: DISABLE_HEADER_VALUE });
|
headers.push({ name: 'content-type', value: DISABLE_HEADER_VALUE });
|
||||||
}
|
}
|
||||||
|
|
||||||
return headers.filter(h => h.name)
|
return headers.filter((h: any) => h.name)
|
||||||
.map(({ name, value }) =>
|
.map(({ name, value }: any) =>
|
||||||
value === '' ? `${name};` // Curl needs a semicolon suffix to send empty header values
|
value === '' ? `${name};` // Curl needs a semicolon suffix to send empty header values
|
||||||
: value === DISABLE_HEADER_VALUE ? `${name}:` // Tell Curl NOT to send the header if value is null
|
: value === DISABLE_HEADER_VALUE ? `${name}:` // Tell Curl NOT to send the header if value is null
|
||||||
: `${name}: ${value}`);
|
: `${name}: ${value}`);
|
||||||
|
@ -6,7 +6,7 @@ import certificateUrlParse from './certificate-url-parse';
|
|||||||
|
|
||||||
const DEFAULT_PORT = 443;
|
const DEFAULT_PORT = 443;
|
||||||
|
|
||||||
export function urlMatchesCertHost(certificateHost, requestUrl) {
|
export function urlMatchesCertHost(certificateHost: string, requestUrl: string) {
|
||||||
const cHostWithProtocol = setDefaultProtocol(certificateHost, 'https:');
|
const cHostWithProtocol = setDefaultProtocol(certificateHost, 'https:');
|
||||||
const { hostname, port } = urlParse(requestUrl);
|
const { hostname, port } = urlParse(requestUrl);
|
||||||
const { hostname: cHostname, port: cPort } = certificateUrlParse(cHostWithProtocol);
|
const { hostname: cHostname, port: cPort } = certificateUrlParse(cHostWithProtocol);
|
||||||
|
3
packages/insomnia/src/nunjucks.d.ts
vendored
Normal file
3
packages/insomnia/src/nunjucks.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
declare module 'nunjucks/browser/nunjucks' {
|
||||||
|
export function configure(options: any);
|
||||||
|
}
|
@ -216,7 +216,7 @@ async function _installPluginToTmpDir(lookupName: string) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function containsOnlyDeprecationWarnings(stderr) {
|
export function containsOnlyDeprecationWarnings(stderr: string) {
|
||||||
// Split on line breaks and remove falsy values (null, undefined, 0, -0, NaN, "", false)
|
// Split on line breaks and remove falsy values (null, undefined, 0, -0, NaN, "", false)
|
||||||
const arr = stderr.split(/\r?\n/).filter(error => error);
|
const arr = stderr.split(/\r?\n/).filter(error => error);
|
||||||
// Retrieve all matching deprecated dependency warning
|
// Retrieve all matching deprecated dependency warning
|
||||||
@ -258,7 +258,7 @@ function _getYarnPath() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function escape(p) {
|
function escape(p: string) {
|
||||||
if (isWindows()) {
|
if (isWindows()) {
|
||||||
// Quote for Windows paths
|
// Quote for Windows paths
|
||||||
return `"${p}"`;
|
return `"${p}"`;
|
||||||
|
@ -173,7 +173,7 @@ function getThemeBlockCSS(block?: ThemeBlock) {
|
|||||||
css += `${indent}--${variable}: ${value};\n`;
|
css += `${indent}--${variable}: ${value};\n`;
|
||||||
};
|
};
|
||||||
|
|
||||||
const addComment = comment => {
|
const addComment = (comment: string) => {
|
||||||
css += `${indent}/* ${comment} */\n`;
|
css += `${indent}/* ${comment} */\n`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,23 +2,23 @@ const { contextBridge, ipcRenderer } = require('electron');
|
|||||||
|
|
||||||
const main = {
|
const main = {
|
||||||
restart: () => ipcRenderer.send('restart'),
|
restart: () => ipcRenderer.send('restart'),
|
||||||
authorizeUserInWindow: options => ipcRenderer.invoke('authorizeUserInWindow', options),
|
authorizeUserInWindow: (/** @type {any} */ options) => ipcRenderer.invoke('authorizeUserInWindow', options),
|
||||||
setMenuBarVisibility: options => ipcRenderer.send('setMenuBarVisibility', options),
|
setMenuBarVisibility: (/** @type {any} */ options) => ipcRenderer.send('setMenuBarVisibility', options),
|
||||||
installPlugin: options => ipcRenderer.invoke('installPlugin', options),
|
installPlugin: (/** @type {any} */ options) => ipcRenderer.invoke('installPlugin', options),
|
||||||
curlRequest: options => ipcRenderer.invoke('curlRequest', options),
|
curlRequest: (/** @type {any} */ options) => ipcRenderer.invoke('curlRequest', options),
|
||||||
cancelCurlRequest: options => ipcRenderer.send('cancelCurlRequest', options),
|
cancelCurlRequest: (/** @type {any} */ options) => ipcRenderer.send('cancelCurlRequest', options),
|
||||||
writeFile: options => ipcRenderer.invoke('writeFile', options),
|
writeFile: (/** @type {any} */ options) => ipcRenderer.invoke('writeFile', options),
|
||||||
};
|
};
|
||||||
const dialog = {
|
const dialog = {
|
||||||
showOpenDialog: options => ipcRenderer.invoke('showOpenDialog', options),
|
showOpenDialog: (/** @type {any} */ options) => ipcRenderer.invoke('showOpenDialog', options),
|
||||||
showSaveDialog: options => ipcRenderer.invoke('showSaveDialog', options),
|
showSaveDialog: (/** @type {any} */ options) => ipcRenderer.invoke('showSaveDialog', options),
|
||||||
};
|
};
|
||||||
const app = {
|
const app = {
|
||||||
getPath: options => ipcRenderer.sendSync('getPath', options),
|
getPath: (/** @type {any} */ options) => ipcRenderer.sendSync('getPath', options),
|
||||||
getAppPath: options => ipcRenderer.sendSync('getAppPath', options),
|
getAppPath: (/** @type {any} */ options) => ipcRenderer.sendSync('getAppPath', options),
|
||||||
};
|
};
|
||||||
const shell = {
|
const shell = {
|
||||||
showItemInFolder: options => ipcRenderer.send('showItemInFolder', options),
|
showItemInFolder: (/** @type {any} */ options) => ipcRenderer.send('showItemInFolder', options),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (process.contextIsolated) {
|
if (process.contextIsolated) {
|
||||||
|
@ -29,7 +29,6 @@ export function diff(source: string, target: string, blockSize: number): Operati
|
|||||||
const targetBlock = getBlock(target, targetPosition, blockSize);
|
const targetBlock = getBlock(target, targetPosition, blockSize);
|
||||||
const sourceBlocks = sourceBlockMap[targetBlock.hash] || [];
|
const sourceBlocks = sourceBlockMap[targetBlock.hash] || [];
|
||||||
|
|
||||||
// @ts-expect-error -- TSCONVERSION appears to be a genuine error
|
|
||||||
if (sourceBlocks.length === 0) {
|
if (sourceBlocks.length === 0) {
|
||||||
targetPosition++;
|
targetPosition++;
|
||||||
continue;
|
continue;
|
||||||
@ -101,8 +100,8 @@ function getBlock(value: string, start: number, blockSize: number): Block {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBlockMap(value: string, blockSize: number): Record<string, Block> {
|
function getBlockMap(value: string, blockSize: number): Record<string, Block[]> {
|
||||||
const map = {};
|
const map: Record<string, Block[]> = {};
|
||||||
|
|
||||||
for (let i = 0; i < value.length;) {
|
for (let i = 0; i < value.length;) {
|
||||||
const block = getBlock(value, i, blockSize);
|
const block = getBlock(value, i, blockSize);
|
||||||
|
@ -2,7 +2,7 @@ import { axiosRequest } from '../../network/axios-request';
|
|||||||
|
|
||||||
/** This is a client for isomorphic-git {@link https://isomorphic-git.org/docs/en/http} */
|
/** This is a client for isomorphic-git {@link https://isomorphic-git.org/docs/en/http} */
|
||||||
export const httpClient = {
|
export const httpClient = {
|
||||||
request: async config => {
|
request: async (config: any) => {
|
||||||
let response;
|
let response;
|
||||||
let body: Buffer | null = null;
|
let body: Buffer | null = null;
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import * as git from 'isomorphic-git';
|
import * as git from 'isomorphic-git';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
type Methods = 'readFile' | 'writeFile' | 'unlink' | 'readdir' | 'mkdir' | 'rmdir' | 'stat' | 'lstat' | 'readlink' | 'symlink';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An isometric-git FS client that can route to various client depending on what the filePath is.
|
* An isometric-git FS client that can route to various client depending on what the filePath is.
|
||||||
*
|
*
|
||||||
@ -12,19 +14,23 @@ export function routableFSClient(
|
|||||||
defaultFS: git.PromiseFsClient,
|
defaultFS: git.PromiseFsClient,
|
||||||
otherFS: Record<string, git.PromiseFsClient>,
|
otherFS: Record<string, git.PromiseFsClient>,
|
||||||
) {
|
) {
|
||||||
const execMethod = async (method: string, filePath: string, ...args: any[]) => {
|
const execMethod = async (method: Methods, filePath: string, ...args: any[]) => {
|
||||||
filePath = path.normalize(filePath);
|
filePath = path.normalize(filePath);
|
||||||
|
|
||||||
for (const prefix of Object.keys(otherFS)) {
|
for (const prefix of Object.keys(otherFS)) {
|
||||||
if (filePath.indexOf(path.normalize(prefix)) === 0) {
|
if (filePath.indexOf(path.normalize(prefix)) === 0) {
|
||||||
return otherFS[prefix].promises[method](filePath, ...args);
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
return otherFS[prefix].promises[method]!(filePath, ...args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uncomment this to debug operations
|
// Uncomment this to debug operations
|
||||||
// console.log('[routablefs] Executing', method, filePath, { args });
|
// console.log('[routablefs] Executing', method, filePath, { args });
|
||||||
// Fallback to default if no prefix matched
|
// Fallback to default if no prefix matched
|
||||||
const result = await defaultFS.promises[method](filePath, ...args);
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
const result = await defaultFS.promises[method]!(filePath, ...args);
|
||||||
// Uncomment this to debug operations
|
// Uncomment this to debug operations
|
||||||
// console.log('[routablefs] Executing', method, filePath, { args }, { result });
|
// console.log('[routablefs] Executing', method, filePath, { args }, { result });
|
||||||
return result;
|
return result;
|
||||||
|
@ -35,8 +35,9 @@ export const deleteKeys = <T extends BaseModel>(doc: T) => {
|
|||||||
|
|
||||||
export const resetKeys = <T extends BaseModel>(doc: T) => {
|
export const resetKeys = <T extends BaseModel>(doc: T) => {
|
||||||
if (isWorkspace(doc)) {
|
if (isWorkspace(doc)) {
|
||||||
Object.keys(RESET_WORKSPACE_KEYS)
|
(Object.keys(RESET_WORKSPACE_KEYS) as (keyof typeof RESET_WORKSPACE_KEYS)[])
|
||||||
.forEach(key => {
|
.forEach(key => {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
doc[key] = RESET_WORKSPACE_KEYS[key];
|
doc[key] = RESET_WORKSPACE_KEYS[key];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ export default class FileSystemDriver implements BaseDriver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async keys(prefix: string, recursive: boolean) {
|
async keys(prefix: string, recursive: boolean) {
|
||||||
const next = dir => {
|
const next = (dir: string) => {
|
||||||
return new Promise<string[]>(async (resolve, reject) => {
|
return new Promise<string[]>(async (resolve, reject) => {
|
||||||
let keys: string[] = [];
|
let keys: string[] = [];
|
||||||
let names: string[] = [];
|
let names: string[] = [];
|
||||||
|
@ -31,7 +31,7 @@ export function generateStateMap(state: SnapshotState | null): SnapshotStateMap
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const map = {};
|
const map: SnapshotStateMap = {};
|
||||||
|
|
||||||
for (const entry of state) {
|
for (const entry of state) {
|
||||||
map[entry.key] = entry;
|
map[entry.key] = entry;
|
||||||
@ -41,7 +41,7 @@ export function generateStateMap(state: SnapshotState | null): SnapshotStateMap
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function generateCandidateMap(candidates: StatusCandidate[]): StatusCandidateMap {
|
export function generateCandidateMap(candidates: StatusCandidate[]): StatusCandidateMap {
|
||||||
const map = {};
|
const map: StatusCandidateMap = {};
|
||||||
|
|
||||||
for (const candidate of candidates) {
|
for (const candidate of candidates) {
|
||||||
map[candidate.key] = candidate;
|
map[candidate.key] = candidate;
|
||||||
@ -53,7 +53,7 @@ export function generateCandidateMap(candidates: StatusCandidate[]): StatusCandi
|
|||||||
export function combinedMapKeys<T extends SnapshotStateMap | StatusCandidateMap>(
|
export function combinedMapKeys<T extends SnapshotStateMap | StatusCandidateMap>(
|
||||||
...maps: T[]
|
...maps: T[]
|
||||||
): DocumentKey[] {
|
): DocumentKey[] {
|
||||||
const keyMap = {};
|
const keyMap: Record<string, unknown> = {};
|
||||||
|
|
||||||
for (const map of maps) {
|
for (const map of maps) {
|
||||||
for (const key of Object.keys(map)) {
|
for (const key of Object.keys(map)) {
|
||||||
@ -524,7 +524,7 @@ export function describeChanges<T extends BaseModel>(a: T, b: T): string[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const changes: string[] = [];
|
const changes: string[] = [];
|
||||||
const allKeys = [...Object.keys({ ...a, ...b })];
|
const allKeys = [...Object.keys({ ...a, ...b })] as (keyof T)[];
|
||||||
|
|
||||||
for (const key of allKeys) {
|
for (const key of allKeys) {
|
||||||
if (shouldIgnoreKey(key as keyof T, a)) {
|
if (shouldIgnoreKey(key as keyof T, a)) {
|
||||||
@ -547,6 +547,7 @@ export function describeChanges<T extends BaseModel>(a: T, b: T): string[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (aStr !== bStr) {
|
if (aStr !== bStr) {
|
||||||
|
// @ts-expect-error -- type unsoundness
|
||||||
changes.push(key);
|
changes.push(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -914,7 +914,7 @@ export class VCS {
|
|||||||
);
|
);
|
||||||
// Store them in case something has changed
|
// Store them in case something has changed
|
||||||
await this._storeSnapshots(snapshotsCreate);
|
await this._storeSnapshots(snapshotsCreate);
|
||||||
console.log('[sync] Pushed snapshots', snapshotsCreate.map(s => s.id).join(', '));
|
console.log('[sync] Pushed snapshots', snapshotsCreate.map((s: any) => s.id).join(', '));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,12 +63,12 @@ export default class BaseExtension {
|
|||||||
return this._ext?.deprecated || false;
|
return this._ext?.deprecated || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
run(...args) {
|
run(...args: any[]) {
|
||||||
// @ts-expect-error -- TSCONVERSION
|
// @ts-expect-error -- TSCONVERSION
|
||||||
return this._ext?.run(...args);
|
return this._ext?.run(...args);
|
||||||
}
|
}
|
||||||
|
|
||||||
parse(parser, nodes, lexer) {
|
parse(parser: any, nodes: any, lexer: any) {
|
||||||
const tok = parser.nextToken();
|
const tok = parser.nextToken();
|
||||||
let args;
|
let args;
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ export default class BaseExtension {
|
|||||||
return new nodes.CallExtensionAsync(this, 'asyncRun', args);
|
return new nodes.CallExtensionAsync(this, 'asyncRun', args);
|
||||||
}
|
}
|
||||||
|
|
||||||
asyncRun({ ctx: renderContext }, ...runArgs) {
|
asyncRun({ ctx: renderContext }: any, ...runArgs: any[]) {
|
||||||
// Pull the callback off the end
|
// Pull the callback off the end
|
||||||
const callback = runArgs[runArgs.length - 1];
|
const callback = runArgs[runArgs.length - 1];
|
||||||
// Pull out the meta helper
|
// Pull out the meta helper
|
||||||
@ -108,14 +108,14 @@ export default class BaseExtension {
|
|||||||
meta: renderMeta,
|
meta: renderMeta,
|
||||||
renderPurpose,
|
renderPurpose,
|
||||||
util: {
|
util: {
|
||||||
render: str =>
|
render: (str: string) =>
|
||||||
templating.render(str, {
|
templating.render(str, {
|
||||||
context: renderContext,
|
context: renderContext,
|
||||||
}),
|
}),
|
||||||
models: {
|
models: {
|
||||||
request: {
|
request: {
|
||||||
getById: models.request.getById,
|
getById: models.request.getById,
|
||||||
getAncestors: async request => {
|
getAncestors: async (request: any) => {
|
||||||
const ancestors = await db.withAncestors(request, [
|
const ancestors = await db.withAncestors(request, [
|
||||||
models.requestGroup.type,
|
models.requestGroup.type,
|
||||||
models.workspace.type,
|
models.workspace.type,
|
||||||
@ -130,7 +130,7 @@ export default class BaseExtension {
|
|||||||
getByRequestId: models.oAuth2Token.getByParentId,
|
getByRequestId: models.oAuth2Token.getByParentId,
|
||||||
},
|
},
|
||||||
cookieJar: {
|
cookieJar: {
|
||||||
getOrCreateForWorkspace: workspace => {
|
getOrCreateForWorkspace: (workspace: any) => {
|
||||||
return models.cookieJar.getOrCreateForParentId(workspace._id);
|
return models.cookieJar.getOrCreateForParentId(workspace._id);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -62,7 +62,7 @@ export function render(
|
|||||||
// NOTE: this is added as a breadcrumb because renderString sometimes hangs
|
// NOTE: this is added as a breadcrumb because renderString sometimes hangs
|
||||||
const id = setTimeout(() => console.log('Warning: nunjucks failed to respond within 5 seconds'), 5000);
|
const id = setTimeout(() => console.log('Warning: nunjucks failed to respond within 5 seconds'), 5000);
|
||||||
const nj = await getNunjucks(renderMode);
|
const nj = await getNunjucks(renderMode);
|
||||||
nj?.renderString(text, templatingContext, (err, result) => {
|
nj?.renderString(text, templatingContext, (err: Error | null, result: any) => {
|
||||||
clearTimeout(id);
|
clearTimeout(id);
|
||||||
if (err) {
|
if (err) {
|
||||||
const sanitizedMsg = err.message
|
const sanitizedMsg = err.message
|
||||||
@ -190,7 +190,7 @@ async function getNunjucks(renderMode: string) {
|
|||||||
nj.addExtension(instance.getTag(), instance);
|
nj.addExtension(instance.getTag(), instance);
|
||||||
// Hidden helper filter to debug complicated things
|
// Hidden helper filter to debug complicated things
|
||||||
// eg. `{{ foo | urlencode | debug | upper }}`
|
// eg. `{{ foo | urlencode | debug | upper }}`
|
||||||
nj.addFilter('debug', o => o);
|
nj.addFilter('debug', (o: any) => o);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ~~~~~~~~~~~~~~~~~~~~ //
|
// ~~~~~~~~~~~~~~~~~~~~ //
|
||||||
|
@ -23,14 +23,14 @@ export class CheckForUpdatesButton extends PureComponent<Props, State> {
|
|||||||
updateAvailable: false,
|
updateAvailable: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
_listenerCheckComplete(_e, updateAvailable: true, status: string) {
|
_listenerCheckComplete(_e: Electron.IpcRendererEvent, updateAvailable: true, status: string) {
|
||||||
this.setState({
|
this.setState({
|
||||||
status,
|
status,
|
||||||
updateAvailable,
|
updateAvailable,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_listenerCheckStatus(_e, status: string) {
|
_listenerCheckStatus(_e: Electron.IpcRendererEvent, status: string) {
|
||||||
if (this.state.checking) {
|
if (this.state.checking) {
|
||||||
this.setState({
|
this.setState({
|
||||||
status,
|
status,
|
||||||
|
@ -38,6 +38,11 @@ import 'codemirror/addon/selection/selection-pointer';
|
|||||||
import 'codemirror/addon/display/placeholder';
|
import 'codemirror/addon/display/placeholder';
|
||||||
import 'codemirror/addon/lint/lint';
|
import 'codemirror/addon/lint/lint';
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
// eslint-disable-next-line no-var -- necessary, let will not work here
|
||||||
|
var jsonlint: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
/**
|
/**
|
||||||
* Unfortunately, the CodeMirror addon for linting makes use of a pattern whereby linting dependencies are required to be attached to `window` (i.e. `global`) at runtime.
|
* Unfortunately, the CodeMirror addon for linting makes use of a pattern whereby linting dependencies are required to be attached to `window` (i.e. `global`) at runtime.
|
||||||
|
@ -41,8 +41,16 @@ import { shouldIndentWithTabs } from './should-indent-with-tabs';
|
|||||||
const TAB_SIZE = 4;
|
const TAB_SIZE = 4;
|
||||||
const MAX_SIZE_FOR_LINTING = 1000000; // Around 1MB
|
const MAX_SIZE_FOR_LINTING = 1000000; // Around 1MB
|
||||||
|
|
||||||
|
interface EditorState {
|
||||||
|
scroll: CodeMirror.ScrollInfo;
|
||||||
|
selections: CodeMirror.Range[];
|
||||||
|
cursor: CodeMirror.Position;
|
||||||
|
history: any;
|
||||||
|
marks: Partial<CodeMirror.MarkerRange>[];
|
||||||
|
}
|
||||||
|
|
||||||
// Global object used for storing and persisting editor states
|
// Global object used for storing and persisting editor states
|
||||||
const editorStates = {};
|
const editorStates: Record<string, EditorState> = {};
|
||||||
const BASE_CODEMIRROR_OPTIONS: CodeMirror.EditorConfiguration = {
|
const BASE_CODEMIRROR_OPTIONS: CodeMirror.EditorConfiguration = {
|
||||||
lineNumbers: true,
|
lineNumbers: true,
|
||||||
placeholder: 'Start Typing...',
|
placeholder: 'Start Typing...',
|
||||||
@ -254,9 +262,9 @@ export class UnconnectedCodeEditor extends Component<CodeEditorProps, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldComponentUpdate(nextProps) {
|
shouldComponentUpdate(nextProps: CodeEditorProps) {
|
||||||
// Update if any properties changed, except value. We ignore value.
|
// Update if any properties changed, except value. We ignore value.
|
||||||
for (const key of Object.keys(nextProps)) {
|
for (const key of Object.keys(nextProps) as (keyof CodeEditorProps)[]) {
|
||||||
if (key === 'defaultValue') {
|
if (key === 'defaultValue') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -468,7 +476,7 @@ export class UnconnectedCodeEditor extends Component<CodeEditorProps, State> {
|
|||||||
const marks = this.codeMirror
|
const marks = this.codeMirror
|
||||||
.getAllMarks()
|
.getAllMarks()
|
||||||
.filter(mark => mark.__isFold)
|
.filter(mark => mark.__isFold)
|
||||||
.map(mark => {
|
.map((mark): Partial<CodeMirror.MarkerRange> => {
|
||||||
const result = mark.find();
|
const result = mark.find();
|
||||||
|
|
||||||
if (isMarkerRange(result)) {
|
if (isMarkerRange(result)) {
|
||||||
@ -512,6 +520,7 @@ export class UnconnectedCodeEditor extends Component<CodeEditorProps, State> {
|
|||||||
|
|
||||||
// Restore marks one-by-one
|
// Restore marks one-by-one
|
||||||
for (const { from, to } of marks || []) {
|
for (const { from, to } of marks || []) {
|
||||||
|
// @ts-expect-error -- type unsoundness
|
||||||
this.codeMirror.foldCode(from, to);
|
this.codeMirror.foldCode(from, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -904,7 +913,7 @@ export class UnconnectedCodeEditor extends Component<CodeEditorProps, State> {
|
|||||||
Object.keys(options).map(key =>
|
Object.keys(options).map(key =>
|
||||||
this._codemirrorSmartSetOption(
|
this._codemirrorSmartSetOption(
|
||||||
key as keyof CodeMirror.EditorConfiguration,
|
key as keyof CodeMirror.EditorConfiguration,
|
||||||
options[key]
|
options[key as keyof CodeMirror.EditorConfiguration]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -1146,7 +1155,7 @@ export class UnconnectedCodeEditor extends Component<CodeEditorProps, State> {
|
|||||||
this._setFilter(filter);
|
this._setFilter(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleFilterChange(event) {
|
_handleFilterChange(event: React.ChangeEvent<HTMLInputElement>) {
|
||||||
this._setFilter(event.target.value);
|
this._setFilter(event.target.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ function hint(cm: CodeMirror.EditorFromTextArea, options: ShowHintOptions) {
|
|||||||
* @param self
|
* @param self
|
||||||
* @param data
|
* @param data
|
||||||
*/
|
*/
|
||||||
async function replaceHintMatch(cm: CodeMirror.EditorFromTextArea, _self, data) {
|
async function replaceHintMatch(cm: CodeMirror.EditorFromTextArea, _self: any, data: any) {
|
||||||
if (typeof data.text === 'function') {
|
if (typeof data.text === 'function') {
|
||||||
data.text = await data.text();
|
data.text = await data.text();
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ const entities = new AllHtmlEntities();
|
|||||||
CodeMirror.defineExtension('makeLinksClickable', function(handleClick: CodeMirrorLinkClickCallback) {
|
CodeMirror.defineExtension('makeLinksClickable', function(handleClick: CodeMirrorLinkClickCallback) {
|
||||||
// Only add the click mode if we have links to click
|
// Only add the click mode if we have links to click
|
||||||
this.addOverlay({
|
this.addOverlay({
|
||||||
token: function(stream) {
|
token: function(stream: any) {
|
||||||
if (stream.match(FLEXIBLE_URL_REGEX, true)) {
|
if (stream.match(FLEXIBLE_URL_REGEX, true)) {
|
||||||
return 'clickable';
|
return 'clickable';
|
||||||
}
|
}
|
||||||
@ -24,7 +24,7 @@ CodeMirror.defineExtension('makeLinksClickable', function(handleClick: CodeMirro
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const el = this.getWrapperElement();
|
const el: HTMLElement = this.getWrapperElement();
|
||||||
let movedDuringClick = false;
|
let movedDuringClick = false;
|
||||||
el.addEventListener('mousemove', () => {
|
el.addEventListener('mousemove', () => {
|
||||||
movedDuringClick = true;
|
movedDuringClick = true;
|
||||||
@ -37,9 +37,11 @@ CodeMirror.defineExtension('makeLinksClickable', function(handleClick: CodeMirro
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @ts-expect-error -- type unsoundness
|
||||||
const cls = event.target.className;
|
const cls = event.target.className;
|
||||||
|
|
||||||
if (cls.indexOf('cm-clickable') >= 0) {
|
if (cls.indexOf('cm-clickable') >= 0) {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
handleClick(entities.decode(event.target.innerHTML));
|
handleClick(entities.decode(event.target.innerHTML));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -25,7 +25,7 @@ CodeMirror.defineExtension('enableNunjucksTags', function(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const debouncedRefreshFn = misc.debounce(refreshFn);
|
const debouncedRefreshFn = misc.debounce(refreshFn);
|
||||||
this.on('change', (_cm, change) => {
|
this.on('change', (_cm: any, change: any) => {
|
||||||
const origin = change.origin || 'unknown';
|
const origin = change.origin || 'unknown';
|
||||||
|
|
||||||
if (!origin.match(/^[+*]/)) {
|
if (!origin.match(/^[+*]/)) {
|
||||||
@ -44,10 +44,10 @@ CodeMirror.defineExtension('enableNunjucksTags', function(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
async function _highlightNunjucksTags(render, renderContext, showVariableSourceAndValue: boolean) {
|
async function _highlightNunjucksTags(render: any, renderContext: any, showVariableSourceAndValue: boolean) {
|
||||||
const renderCacheKey = Math.random() + '';
|
const renderCacheKey = Math.random() + '';
|
||||||
|
|
||||||
const renderString = text => render(text, renderCacheKey);
|
const renderString = (text: any) => render(text, renderCacheKey);
|
||||||
|
|
||||||
const activeMarks: CodeMirror.TextMarker[] = [];
|
const activeMarks: CodeMirror.TextMarker[] = [];
|
||||||
const doc: CodeMirror.Doc = this.getDoc();
|
const doc: CodeMirror.Doc = this.getDoc();
|
||||||
@ -57,7 +57,7 @@ async function _highlightNunjucksTags(render, renderContext, showVariableSourceA
|
|||||||
|
|
||||||
for (let lineNo = vp.from; lineNo < vp.to; lineNo++) {
|
for (let lineNo = vp.from; lineNo < vp.to; lineNo++) {
|
||||||
const line = this.getLineTokens(lineNo);
|
const line = this.getLineTokens(lineNo);
|
||||||
const tokens = line.filter(({ type }) => type?.indexOf('nunjucks') >= 0);
|
const tokens = line.filter(({ type }: any) => type?.indexOf('nunjucks') >= 0);
|
||||||
|
|
||||||
// Aggregate same tokens
|
// Aggregate same tokens
|
||||||
const newTokens: Token[] = [];
|
const newTokens: Token[] = [];
|
||||||
@ -159,7 +159,7 @@ async function _highlightNunjucksTags(render, renderContext, showVariableSourceA
|
|||||||
// Define the dialog HTML
|
// Define the dialog HTML
|
||||||
showModal(NunjucksModal, {
|
showModal(NunjucksModal, {
|
||||||
template: mark.__template,
|
template: mark.__template,
|
||||||
onDone: template => {
|
onDone: (template: string | null) => {
|
||||||
const pos = mark.find();
|
const pos = mark.find();
|
||||||
|
|
||||||
if (pos) {
|
if (pos) {
|
||||||
@ -177,7 +177,7 @@ async function _highlightNunjucksTags(render, renderContext, showVariableSourceA
|
|||||||
let droppedInSameEditor = false;
|
let droppedInSameEditor = false;
|
||||||
|
|
||||||
// Modify paste events so we can merge into them
|
// Modify paste events so we can merge into them
|
||||||
const beforeChangeCb = (_cm, change) => {
|
const beforeChangeCb = (_cm: any, change: any) => {
|
||||||
if (change.origin === 'paste') {
|
if (change.origin === 'paste') {
|
||||||
change.origin = '+dnd';
|
change.origin = '+dnd';
|
||||||
}
|
}
|
||||||
@ -255,7 +255,7 @@ async function _highlightNunjucksTags(render, renderContext, showVariableSourceA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function _updateElementText(render, mark, text, renderContext, showVariableSourceAndValue: boolean) {
|
async function _updateElementText(render: any, mark: any, text: any, renderContext: any, showVariableSourceAndValue: boolean) {
|
||||||
const el = mark.replacedWith;
|
const el = mark.replacedWith;
|
||||||
let innerHTML = '';
|
let innerHTML = '';
|
||||||
let title = '';
|
let title = '';
|
||||||
|
@ -4,7 +4,7 @@ import { initializeSpectral, isLintError } from '../../../../common/spectral';
|
|||||||
|
|
||||||
const spectral = initializeSpectral();
|
const spectral = initializeSpectral();
|
||||||
|
|
||||||
CodeMirror.registerHelper('lint', 'openapi', async function(text) {
|
CodeMirror.registerHelper('lint', 'openapi', async function(text: string) {
|
||||||
const results = (await spectral.run(text)).filter(isLintError);
|
const results = (await spectral.run(text)).filter(isLintError);
|
||||||
|
|
||||||
return results.map(result => ({
|
return results.map(result => ({
|
||||||
|
@ -26,7 +26,7 @@ function _nunjucksMode() {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
token(stream, state) {
|
token(stream: any, state: any) {
|
||||||
let m;
|
let m;
|
||||||
// This makes sure that adjacent tags still have unique types
|
// This makes sure that adjacent tags still have unique types
|
||||||
ticker *= -1;
|
ticker *= -1;
|
||||||
|
@ -2,7 +2,7 @@ import { autoBindMethodsForReact } from 'class-autobind-decorator';
|
|||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import React, { Fragment, PureComponent, ReactNode } from 'react';
|
import React, { Fragment, PureComponent, ReactNode } from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { bindActionCreators } from 'redux';
|
import { AnyAction, bindActionCreators, Dispatch } from 'redux';
|
||||||
|
|
||||||
import { SegmentEvent, trackSegmentEvent, vcsSegmentEventProperties } from '../../../common/analytics';
|
import { SegmentEvent, trackSegmentEvent, vcsSegmentEventProperties } from '../../../common/analytics';
|
||||||
import { AUTOBIND_CFG } from '../../../common/constants';
|
import { AUTOBIND_CFG } from '../../../common/constants';
|
||||||
@ -145,7 +145,7 @@ class GitSyncDropdown extends PureComponent<Props, State> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async _handlePush(_e, force = false) {
|
async _handlePush(_e: unknown, force = false) {
|
||||||
this.setState({
|
this.setState({
|
||||||
loadingPush: true,
|
loadingPush: true,
|
||||||
});
|
});
|
||||||
@ -398,7 +398,7 @@ class GitSyncDropdown extends PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function mapDispatchToProps(dispatch) {
|
function mapDispatchToProps(dispatch: Dispatch<AnyAction>) {
|
||||||
const boundGitActions = bindActionCreators(gitActions, dispatch);
|
const boundGitActions = bindActionCreators(gitActions, dispatch);
|
||||||
return {
|
return {
|
||||||
setupGitRepository: boundGitActions.setupGitRepository,
|
setupGitRepository: boundGitActions.setupGitRepository,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { FC, useCallback } from 'react';
|
import React, { FC, useCallback } from 'react';
|
||||||
|
|
||||||
import { getPreviewModeName, PREVIEW_MODES } from '../../../common/constants';
|
import { getPreviewModeName, PREVIEW_MODES, PreviewMode } from '../../../common/constants';
|
||||||
import { Dropdown } from '../base/dropdown/dropdown';
|
import { Dropdown } from '../base/dropdown/dropdown';
|
||||||
import { DropdownButton } from '../base/dropdown/dropdown-button';
|
import { DropdownButton } from '../base/dropdown/dropdown-button';
|
||||||
import { DropdownDivider } from '../base/dropdown/dropdown-divider';
|
import { DropdownDivider } from '../base/dropdown/dropdown-divider';
|
||||||
@ -12,7 +12,7 @@ interface Props {
|
|||||||
exportAsHAR: () => void;
|
exportAsHAR: () => void;
|
||||||
copyToClipboard: () => any;
|
copyToClipboard: () => any;
|
||||||
updatePreviewMode: Function;
|
updatePreviewMode: Function;
|
||||||
previewMode: string;
|
previewMode: PreviewMode;
|
||||||
showPrettifyOption?: boolean;
|
showPrettifyOption?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import { autoBindMethodsForReact } from 'class-autobind-decorator';
|
|||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import React, { Fragment, PureComponent } from 'react';
|
import React, { Fragment, PureComponent } from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { bindActionCreators } from 'redux';
|
import { AnyAction, bindActionCreators, Dispatch } from 'redux';
|
||||||
|
|
||||||
import * as session from '../../../account/session';
|
import * as session from '../../../account/session';
|
||||||
import { AUTOBIND_CFG, DEFAULT_BRANCH_NAME } from '../../../common/constants';
|
import { AUTOBIND_CFG, DEFAULT_BRANCH_NAME } from '../../../common/constants';
|
||||||
@ -49,7 +49,7 @@ const mapStateToProps = (state: RootState) => ({
|
|||||||
remoteProjects: selectRemoteProjects(state),
|
remoteProjects: selectRemoteProjects(state),
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => {
|
const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {
|
||||||
const bound = bindActionCreators({ activateWorkspace }, dispatch);
|
const bound = bindActionCreators({ activateWorkspace }, dispatch);
|
||||||
return {
|
return {
|
||||||
handleActivateWorkspace: bound.activateWorkspace,
|
handleActivateWorkspace: bound.activateWorkspace,
|
||||||
|
@ -101,7 +101,7 @@ export const BodyEditor: FC<Props> = ({
|
|||||||
Do you want set the <span className="monospace">Content-Type</span> header to{' '}
|
Do you want set the <span className="monospace">Content-Type</span> header to{' '}
|
||||||
<span className="monospace">{newContentType}</span>?
|
<span className="monospace">{newContentType}</span>?
|
||||||
</p>,
|
</p>,
|
||||||
onDone: saidYes => {
|
onDone: (saidYes: boolean) => {
|
||||||
if (saidYes) {
|
if (saidYes) {
|
||||||
onChangeHeaders(newRequest, headers);
|
onChangeHeaders(newRequest, headers);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ export class MarkdownEditor extends PureComponent<Props, State> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleChange(markdown) {
|
_handleChange(markdown: string) {
|
||||||
this.props.onChange(markdown);
|
this.props.onChange(markdown);
|
||||||
this.setState({
|
this.setState({
|
||||||
markdown,
|
markdown,
|
||||||
|
@ -36,7 +36,7 @@ class MarkdownPreviewInternal extends PureComponent<Props, State> {
|
|||||||
/**
|
/**
|
||||||
* Debounce and compile the markdown (won't debounce first render)
|
* Debounce and compile the markdown (won't debounce first render)
|
||||||
*/
|
*/
|
||||||
_compileMarkdown(markdown) {
|
_compileMarkdown(markdown: string) {
|
||||||
if (this._compileTimeout !== null) {
|
if (this._compileTimeout !== null) {
|
||||||
clearTimeout(this._compileTimeout);
|
clearTimeout(this._compileTimeout);
|
||||||
}
|
}
|
||||||
@ -65,7 +65,7 @@ class MarkdownPreviewInternal extends PureComponent<Props, State> {
|
|||||||
this._preview = preview;
|
this._preview = preview;
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleClickLink(event) {
|
_handleClickLink(event: any) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
clickLink(event.target.getAttribute('href'));
|
clickLink(event.target.getAttribute('href'));
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import { ModalHeader } from '../base/modal-header';
|
|||||||
import { CodeEditor } from '../codemirror/code-editor';
|
import { CodeEditor } from '../codemirror/code-editor';
|
||||||
import { MarkdownEditor } from '../markdown-editor';
|
import { MarkdownEditor } from '../markdown-editor';
|
||||||
|
|
||||||
const MODES = {
|
const MODES: Record<string, string> = {
|
||||||
'text/plain': 'Plain Text',
|
'text/plain': 'Plain Text',
|
||||||
'application/json': 'JSON',
|
'application/json': 'JSON',
|
||||||
'application/xml': 'XML',
|
'application/xml': 'XML',
|
||||||
@ -58,11 +58,11 @@ export class CodePromptModal extends PureComponent<{}, State> {
|
|||||||
this.modal = modal;
|
this.modal = modal;
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleChange(value) {
|
_handleChange(value: any) {
|
||||||
this._onChange(value);
|
this._onChange(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleChangeMode(mode) {
|
_handleChangeMode(mode: any) {
|
||||||
this.setState({ mode });
|
this.setState({ mode });
|
||||||
this._onModeChange?.(mode);
|
this._onModeChange?.(mode);
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ export class CodePromptModal extends PureComponent<{}, State> {
|
|||||||
this.modal?.hide();
|
this.modal?.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
show(options) {
|
show(options: any) {
|
||||||
const {
|
const {
|
||||||
title,
|
title,
|
||||||
defaultValue,
|
defaultValue,
|
||||||
|
@ -45,6 +45,7 @@ export class UnconnectedCookieModifyModal extends PureComponent<Props, State> {
|
|||||||
|
|
||||||
async show(cookie: Cookie) {
|
async show(cookie: Cookie) {
|
||||||
// Dunno why this is sent as an array
|
// Dunno why this is sent as an array
|
||||||
|
// @ts-expect-error -- type unsoundness
|
||||||
cookie = cookie[0] || cookie;
|
cookie = cookie[0] || cookie;
|
||||||
const { activeCookeJar } = this.props;
|
const { activeCookeJar } = this.props;
|
||||||
const prevCookie = activeCookeJar?.cookies.find(c => c.id === cookie.id);
|
const prevCookie = activeCookeJar?.cookies.find(c => c.id === cookie.id);
|
||||||
@ -73,7 +74,7 @@ export class UnconnectedCookieModifyModal extends PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
this._rawTimeout = setTimeout(async () => {
|
this._rawTimeout = setTimeout(async () => {
|
||||||
const prevCookie = this.state.cookie;
|
const prevCookie = this.state.cookie;
|
||||||
let cookie;
|
let cookie: Cookie;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// NOTE: Perform toJSON so we have a plain JS object instead of Cookie instance
|
// NOTE: Perform toJSON so we have a plain JS object instead of Cookie instance
|
||||||
@ -181,6 +182,7 @@ export class UnconnectedCookieModifyModal extends PureComponent<Props, State> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
const val = (cookie[field] || '').toString();
|
const val = (cookie[field] || '').toString();
|
||||||
return (
|
return (
|
||||||
<div className="form-control form-control--outlined">
|
<div className="form-control form-control--outlined">
|
||||||
@ -230,6 +232,7 @@ export class UnconnectedCookieModifyModal extends PureComponent<Props, State> {
|
|||||||
</div>
|
</div>
|
||||||
<div className="pad no-pad-top cookie-modify__checkboxes row-around txt-lg">
|
<div className="pad no-pad-top cookie-modify__checkboxes row-around txt-lg">
|
||||||
{checkFields.map((field, i) => {
|
{checkFields.map((field, i) => {
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
const checked = !!cookie[field];
|
const checked = !!cookie[field];
|
||||||
return (
|
return (
|
||||||
<label key={i}>
|
<label key={i}>
|
||||||
|
@ -69,7 +69,7 @@ export class EnvironmentEditModal extends PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
show(requestGroup) {
|
show(requestGroup: RequestGroup) {
|
||||||
this.setState({ requestGroup });
|
this.setState({ requestGroup });
|
||||||
this.modal?.show();
|
this.modal?.show();
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ export class ExportRequestsModal extends PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createNode(item: Record<string, any>): Node {
|
createNode(item: Record<string, any>): Node {
|
||||||
const children: Node[] = item.children.map(child => this.createNode(child));
|
const children: Node[] = item.children.map((child: Record<string, any>) => this.createNode(child));
|
||||||
let totalRequests = children
|
let totalRequests = children
|
||||||
.map(child => child.totalRequests)
|
.map(child => child.totalRequests)
|
||||||
.reduce((acc, totalRequests) => acc + totalRequests, 0);
|
.reduce((acc, totalRequests) => acc + totalRequests, 0);
|
||||||
|
@ -18,7 +18,7 @@ import { CodeEditor, UnconnectedCodeEditor } from '../codemirror/code-editor';
|
|||||||
|
|
||||||
const DEFAULT_TARGET = HTTPSnippet.availableTargets().find(t => t.key === 'shell') as HTTPSnippetTarget;
|
const DEFAULT_TARGET = HTTPSnippet.availableTargets().find(t => t.key === 'shell') as HTTPSnippetTarget;
|
||||||
const DEFAULT_CLIENT = DEFAULT_TARGET?.clients.find(t => t.key === 'curl') as HTTPSnippetClient;
|
const DEFAULT_CLIENT = DEFAULT_TARGET?.clients.find(t => t.key === 'curl') as HTTPSnippetClient;
|
||||||
const MODE_MAP = {
|
const MODE_MAP: Record<string, string> = {
|
||||||
c: 'clike',
|
c: 'clike',
|
||||||
java: 'clike',
|
java: 'clike',
|
||||||
csharp: 'clike',
|
csharp: 'clike',
|
||||||
@ -26,7 +26,7 @@ const MODE_MAP = {
|
|||||||
objc: 'clike',
|
objc: 'clike',
|
||||||
ocaml: 'mllike',
|
ocaml: 'mllike',
|
||||||
};
|
};
|
||||||
const TO_ADD_CONTENT_LENGTH = {
|
const TO_ADD_CONTENT_LENGTH: Record<string, string[]> = {
|
||||||
node: ['native'],
|
node: ['native'],
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ export class GenerateCodeModal extends PureComponent<Props, State> {
|
|||||||
this.modal?.hide();
|
this.modal?.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleClientChange(client) {
|
_handleClientChange(client: HTTPSnippetClient) {
|
||||||
const { target, request } = this.state;
|
const { target, request } = this.state;
|
||||||
|
|
||||||
if (!request) {
|
if (!request) {
|
||||||
@ -89,7 +89,7 @@ export class GenerateCodeModal extends PureComponent<Props, State> {
|
|||||||
this._generateCode(request, target, client);
|
this._generateCode(request, target, client);
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleTargetChange(target) {
|
_handleTargetChange(target: HTTPSnippetTarget) {
|
||||||
const { target: currentTarget, request } = this.state;
|
const { target: currentTarget, request } = this.state;
|
||||||
|
|
||||||
if (currentTarget.key === target.key) {
|
if (currentTarget.key === target.key) {
|
||||||
@ -102,12 +102,14 @@ export class GenerateCodeModal extends PureComponent<Props, State> {
|
|||||||
if (!request) {
|
if (!request) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._generateCode(request, target, client);
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
this._generateCode(request, target, client!);
|
||||||
}
|
}
|
||||||
|
|
||||||
async _generateCode(request: Request, target: HTTPSnippetTarget, client: HTTPSnippetClient) {
|
async _generateCode(request: Request, target: HTTPSnippetTarget, client: HTTPSnippetClient) {
|
||||||
// Some clients need a content-length for the request to succeed
|
// Some clients need a content-length for the request to succeed
|
||||||
const addContentLength = (TO_ADD_CONTENT_LENGTH[target.key] || []).find(c => c === client.key);
|
const addContentLength = Boolean((TO_ADD_CONTENT_LENGTH[target.key] || []).find(c => c === client.key));
|
||||||
const { environmentId } = this.props;
|
const { environmentId } = this.props;
|
||||||
const har = await exportHarRequest(request._id, environmentId, addContentLength);
|
const har = await exportHarRequest(request._id, environmentId, addContentLength);
|
||||||
// @TODO Should we throw instead?
|
// @TODO Should we throw instead?
|
||||||
|
@ -207,7 +207,7 @@ export class GitStagingModal extends PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create status items
|
// Create status items
|
||||||
const items = {};
|
const items: Record<string, Item> = {};
|
||||||
const log = (await vcs.log(1)) || [];
|
const log = (await vcs.log(1)) || [];
|
||||||
|
|
||||||
for (const gitPath of allPaths) {
|
for (const gitPath of allPaths) {
|
||||||
@ -255,7 +255,7 @@ export class GitStagingModal extends PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
items[gitPath] = {
|
items[gitPath] = {
|
||||||
type,
|
type: type as any,
|
||||||
staged,
|
staged,
|
||||||
editable,
|
editable,
|
||||||
status,
|
status,
|
||||||
|
@ -3,9 +3,9 @@ import { AlertModal, AlertModalOptions } from './alert-modal';
|
|||||||
import { ErrorModal, ErrorModalOptions } from './error-modal';
|
import { ErrorModal, ErrorModalOptions } from './error-modal';
|
||||||
import { PromptModal, PromptModalOptions } from './prompt-modal';
|
import { PromptModal, PromptModalOptions } from './prompt-modal';
|
||||||
|
|
||||||
const modals = {};
|
const modals: Record<string, any> = {};
|
||||||
|
|
||||||
export function registerModal(instance) {
|
export function registerModal(instance: any) {
|
||||||
if (instance === null) {
|
if (instance === null) {
|
||||||
// Modal was unmounted
|
// Modal was unmounted
|
||||||
return;
|
return;
|
||||||
@ -14,7 +14,7 @@ export function registerModal(instance) {
|
|||||||
modals[instance.constructor.name] = instance;
|
modals[instance.constructor.name] = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function showModal(modalCls, ...args) {
|
export function showModal(modalCls: any, ...args: any[]) {
|
||||||
trackPageView(modalCls.name);
|
trackPageView(modalCls.name);
|
||||||
return _getModal(modalCls).show(...args);
|
return _getModal(modalCls).show(...args);
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ export function hideAllModals() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _getModal(modalCls) {
|
function _getModal(modalCls: any) {
|
||||||
const m = modals[modalCls.name || modalCls.WrappedComponent?.name];
|
const m = modals[modalCls.name || modalCls.WrappedComponent?.name];
|
||||||
|
|
||||||
if (!m) {
|
if (!m) {
|
||||||
|
@ -42,7 +42,7 @@ export class LoginModal extends PureComponent<{}, State> {
|
|||||||
this._emailInput = emailInput;
|
this._emailInput = emailInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
async _handleLogin(event) {
|
async _handleLogin(event: React.FormEvent) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.setState({
|
this.setState({
|
||||||
error: '',
|
error: '',
|
||||||
|
@ -37,7 +37,7 @@ export class NunjucksModal extends PureComponent<Props, State> {
|
|||||||
this._currentTemplate = template;
|
this._currentTemplate = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleSubmit(event) {
|
_handleSubmit(event: React.FormEvent) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.hide();
|
this.hide();
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ export class NunjucksModal extends PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
show({ template, onDone }) {
|
show({ template, onDone }: any) {
|
||||||
this._onDone = onDone;
|
this._onDone = onDone;
|
||||||
this._currentTemplate = template;
|
this._currentTemplate = template;
|
||||||
this.setState({
|
this.setState({
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { autoBindMethodsForReact } from 'class-autobind-decorator';
|
import { autoBindMethodsForReact } from 'class-autobind-decorator';
|
||||||
import React, { PureComponent } from 'react';
|
import React, { PureComponent } from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { bindActionCreators } from 'redux';
|
import { AnyAction, bindActionCreators, Dispatch } from 'redux';
|
||||||
|
|
||||||
import { AUTOBIND_CFG } from '../../../common/constants';
|
import { AUTOBIND_CFG } from '../../../common/constants';
|
||||||
import { strings } from '../../../common/strings';
|
import { strings } from '../../../common/strings';
|
||||||
@ -105,7 +105,7 @@ const mapStateToProps = (state: RootState) => ({
|
|||||||
project: selectActiveProject(state),
|
project: selectActiveProject(state),
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => {
|
const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {
|
||||||
const boundProjectActions = bindActionCreators(projectActions, dispatch);
|
const boundProjectActions = bindActionCreators(projectActions, dispatch);
|
||||||
return {
|
return {
|
||||||
handleRemoveProject: boundProjectActions.removeProject,
|
handleRemoveProject: boundProjectActions.removeProject,
|
||||||
|
@ -36,7 +36,7 @@ export class RequestRenderErrorModal extends PureComponent<{}, State> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
show({ request, error }) {
|
show({ request, error }: Pick<State, 'request' | 'error'>) {
|
||||||
this.setState({ request, error });
|
this.setState({ request, error });
|
||||||
this.modal?.show();
|
this.modal?.show();
|
||||||
}
|
}
|
||||||
@ -45,7 +45,7 @@ export class RequestRenderErrorModal extends PureComponent<{}, State> {
|
|||||||
this.modal?.hide();
|
this.modal?.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
renderModalBody(request, error) {
|
renderModalBody(request: any, error: any) {
|
||||||
const fullPath = `Request.${error.path}`;
|
const fullPath = `Request.${error.path}`;
|
||||||
const result = JSONPath({ json: request, path: `$.${error.path}` });
|
const result = JSONPath({ json: request, path: `$.${error.path}` });
|
||||||
const template = result && result.length ? result[0] : null;
|
const template = result && result.length ? result[0] : null;
|
||||||
|
@ -238,6 +238,7 @@ export class UnconnectedRequestSettingsModal extends PureComponent<Props, State>
|
|||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name={setting}
|
name={setting}
|
||||||
|
// @ts-expect-error -- mapping unsoundness
|
||||||
checked={request[setting]}
|
checked={request[setting]}
|
||||||
onChange={this._updateRequestSettingBoolean}
|
onChange={this._updateRequestSettingBoolean}
|
||||||
/>
|
/>
|
||||||
|
@ -24,20 +24,19 @@ interface Props extends ReduxProps {
|
|||||||
vcs: VCS;
|
vcs: VCS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LookupMap = Record<string, {
|
||||||
|
entry: StageEntry;
|
||||||
|
changes: null | string[];
|
||||||
|
type: string;
|
||||||
|
checked: boolean;
|
||||||
|
}>;
|
||||||
|
|
||||||
interface State {
|
interface State {
|
||||||
status: Status;
|
status: Status;
|
||||||
message: string;
|
message: string;
|
||||||
error: string;
|
error: string;
|
||||||
branch: string;
|
branch: string;
|
||||||
lookupMap: Record<
|
lookupMap: LookupMap;
|
||||||
string,
|
|
||||||
{
|
|
||||||
entry: StageEntry;
|
|
||||||
changes: null | string[];
|
|
||||||
type: string;
|
|
||||||
checked: boolean;
|
|
||||||
}
|
|
||||||
>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const _initialState: State = {
|
const _initialState: State = {
|
||||||
@ -154,7 +153,7 @@ export class UnconnectedSyncStagingModal extends PureComponent<Props, State> {
|
|||||||
const { vcs, syncItems } = this.props;
|
const { vcs, syncItems } = this.props;
|
||||||
const branch = await vcs.getBranch();
|
const branch = await vcs.getBranch();
|
||||||
const status = await vcs.status(syncItems, newStage);
|
const status = await vcs.status(syncItems, newStage);
|
||||||
const lookupMap = {};
|
const lookupMap: LookupMap = {};
|
||||||
const allKeys = [...Object.keys(status.stage), ...Object.keys(status.unstaged)];
|
const allKeys = [...Object.keys(status.stage), ...Object.keys(status.unstaged)];
|
||||||
|
|
||||||
for (const key of allKeys) {
|
for (const key of allKeys) {
|
||||||
|
@ -8,7 +8,7 @@ import { extension as mimeExtension } from 'mime-types';
|
|||||||
import React, { PureComponent } from 'react';
|
import React, { PureComponent } from 'react';
|
||||||
import { Tab, TabList, TabPanel, Tabs } from 'react-tabs';
|
import { Tab, TabList, TabPanel, Tabs } from 'react-tabs';
|
||||||
|
|
||||||
import { AUTOBIND_CFG, PREVIEW_MODE_SOURCE } from '../../../common/constants';
|
import { AUTOBIND_CFG, PREVIEW_MODE_SOURCE, PreviewMode } from '../../../common/constants';
|
||||||
import { exportHarCurrentRequest } from '../../../common/har';
|
import { exportHarCurrentRequest } from '../../../common/har';
|
||||||
import { getSetCookieHeaders } from '../../../common/misc';
|
import { getSetCookieHeaders } from '../../../common/misc';
|
||||||
import * as models from '../../../models';
|
import * as models from '../../../models';
|
||||||
@ -42,7 +42,7 @@ interface Props {
|
|||||||
handleDeleteResponses: Function;
|
handleDeleteResponses: Function;
|
||||||
handleDeleteResponse: Function;
|
handleDeleteResponse: Function;
|
||||||
handleShowRequestSettings: Function;
|
handleShowRequestSettings: Function;
|
||||||
previewMode: string;
|
previewMode: PreviewMode;
|
||||||
filter: string;
|
filter: string;
|
||||||
filterHistory: string[];
|
filterHistory: string[];
|
||||||
disableHtmlPreviewJs: boolean;
|
disableHtmlPreviewJs: boolean;
|
||||||
|
@ -101,7 +101,7 @@ const moveDoc = async ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function __updateDoc(doc, patch) {
|
function __updateDoc(doc: BaseModel, patch: any) {
|
||||||
// @ts-expect-error -- TSCONVERSION
|
// @ts-expect-error -- TSCONVERSION
|
||||||
return models.getModel(docToMove.type).update(doc, patch);
|
return models.getModel(docToMove.type).update(doc, patch);
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ class UnconnectedSidebarChildren extends PureComponent<Props> {
|
|||||||
// We have a RequestGroup!
|
// We have a RequestGroup!
|
||||||
const requestGroup = child.doc;
|
const requestGroup = child.doc;
|
||||||
|
|
||||||
function hasActiveChild(children) {
|
function hasActiveChild(children: Child[]) {
|
||||||
for (const c of children) {
|
for (const c of children) {
|
||||||
if (hasActiveChild(c.children || [])) {
|
if (hasActiveChild(c.children || [])) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -66,7 +66,7 @@ class UnconnectedSidebarRequestGroupRow extends PureComponent<Props, State> {
|
|||||||
this.dropdownRef.current?.show();
|
this.dropdownRef.current?.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
setDragDirection(dragDirection) {
|
setDragDirection(dragDirection: number) {
|
||||||
if (dragDirection !== this.state.dragDirection) {
|
if (dragDirection !== this.state.dragDirection) {
|
||||||
this.setState({
|
this.setState({
|
||||||
dragDirection,
|
dragDirection,
|
||||||
|
@ -239,7 +239,7 @@ export const _SidebarRequestRow: FC<Props> = forwardRef(({
|
|||||||
className="inline-block"
|
className="inline-block"
|
||||||
onEditStart={startEditing}
|
onEditStart={startEditing}
|
||||||
onSubmit={handleRequestUpdateName}
|
onSubmit={handleRequestUpdateName}
|
||||||
renderReadView={(value, props) => (
|
renderReadView={(value: string, props: any) => (
|
||||||
<Highlight
|
<Highlight
|
||||||
search={filter}
|
search={filter}
|
||||||
text={value}
|
text={value}
|
||||||
|
@ -72,7 +72,9 @@ export class SpecEditorSidebar extends Component<Props, State> {
|
|||||||
);
|
);
|
||||||
const itemMappedPosition = sourceMap.lookup(itemPath, specMap);
|
const itemMappedPosition = sourceMap.lookup(itemPath, specMap);
|
||||||
const isServersSection = itemPath[0] === 'servers';
|
const isServersSection = itemPath[0] === 'servers';
|
||||||
scrollPosition.start.line += itemMappedPosition.start.line;
|
// TODO: remove non-null assertion
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||||
|
scrollPosition.start.line += itemMappedPosition!.start.line;
|
||||||
|
|
||||||
if (!isServersSection) {
|
if (!isServersSection) {
|
||||||
scrollPosition.start.line -= 1;
|
scrollPosition.start.line -= 1;
|
||||||
@ -83,7 +85,7 @@ export class SpecEditorSidebar extends Component<Props, State> {
|
|||||||
this._handleScrollEditor(scrollPosition);
|
this._handleScrollEditor(scrollPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleItemClick = (...itemPath): void => {
|
_handleItemClick = (...itemPath: any[]): void => {
|
||||||
this._mapPosition(itemPath);
|
this._mapPosition(itemPath);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ class TagEditorInternal extends PureComponent<Props, State> {
|
|||||||
this.setState({
|
this.setState({
|
||||||
loadingDocs: true,
|
loadingDocs: true,
|
||||||
});
|
});
|
||||||
const allDocs = {};
|
const allDocs: Record<string, models.BaseModel[]> = {};
|
||||||
|
|
||||||
for (const type of models.types()) {
|
for (const type of models.types()) {
|
||||||
allDocs[type] = [];
|
allDocs[type] = [];
|
||||||
@ -160,6 +160,7 @@ class TagEditorInternal extends PureComponent<Props, State> {
|
|||||||
const requests = allDocs[models.request.type] || [];
|
const requests = allDocs[models.request.type] || [];
|
||||||
const requestGroups = allDocs[models.requestGroup.type] || [];
|
const requestGroups = allDocs[models.requestGroup.type] || [];
|
||||||
|
|
||||||
|
// @ts-expect-error -- type unsoundness
|
||||||
const sortedReqs = this._sortRequests(requests.concat(requestGroups), this.props.workspace._id);
|
const sortedReqs = this._sortRequests(requests.concat(requestGroups), this.props.workspace._id);
|
||||||
|
|
||||||
allDocs[models.request.type] = sortedReqs;
|
allDocs[models.request.type] = sortedReqs;
|
||||||
|
@ -47,7 +47,7 @@ class VariableEditorInternal extends PureComponent<Props, State> {
|
|||||||
this._resize();
|
this._resize();
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleChange(event) {
|
_handleChange(event: React.ChangeEvent<HTMLSelectElement | HTMLInputElement>) {
|
||||||
const name = event.target.value;
|
const name = event.target.value;
|
||||||
this._update(name);
|
this._update(name);
|
||||||
}
|
}
|
||||||
@ -70,7 +70,7 @@ class VariableEditorInternal extends PureComponent<Props, State> {
|
|||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
async _update(value, noCallback = false) {
|
async _update(value: string, noCallback = false) {
|
||||||
const { handleRender } = this.props;
|
const { handleRender } = this.props;
|
||||||
const cleanedValue = value
|
const cleanedValue = value
|
||||||
.replace(/^{%/, '')
|
.replace(/^{%/, '')
|
||||||
|
@ -182,7 +182,7 @@ export class Toast extends PureComponent<{}, State> {
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
_listenerShowNotification(_e, notification: ToastNotification) {
|
_listenerShowNotification(_e: Electron.IpcRendererEvent, notification: ToastNotification) {
|
||||||
this._handleNotification(notification);
|
this._handleNotification(notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const ResponseCookiesViewer: FC<Props> = props => {
|
export const ResponseCookiesViewer: FC<Props> = props => {
|
||||||
const renderRow = (h, i) => {
|
const renderRow = (h: any, i: number) => {
|
||||||
let cookie: Cookie | undefined | null = null;
|
let cookie: Cookie | undefined | null = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -26,7 +26,7 @@ export class ResponseTimelineViewer extends PureComponent<Props, State> {
|
|||||||
this.refreshTimeline();
|
this.refreshTimeline();
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate(prevProps) {
|
componentDidUpdate(prevProps: Props) {
|
||||||
const { response } = this.props;
|
const { response } = this.props;
|
||||||
|
|
||||||
if (response._id !== prevProps.response._id) {
|
if (response._id !== prevProps.response._id) {
|
||||||
|
@ -11,7 +11,7 @@ import {
|
|||||||
} from 'insomnia-components';
|
} from 'insomnia-components';
|
||||||
import React, { PureComponent } from 'react';
|
import React, { PureComponent } from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { bindActionCreators } from 'redux';
|
import { AnyAction, bindActionCreators, Dispatch } from 'redux';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { unreachableCase } from 'ts-assert-unreachable';
|
import { unreachableCase } from 'ts-assert-unreachable';
|
||||||
|
|
||||||
@ -404,7 +404,7 @@ const mapStateToProps = (state: RootState) => ({
|
|||||||
workspacesForActiveProject: selectWorkspacesForActiveProject(state),
|
workspacesForActiveProject: selectWorkspacesForActiveProject(state),
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => {
|
const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {
|
||||||
const bound = bindActionCreators(
|
const bound = bindActionCreators(
|
||||||
{
|
{
|
||||||
createWorkspace,
|
createWorkspace,
|
||||||
|
@ -19,7 +19,7 @@ import { SegmentEvent, trackSegmentEvent } from '../../common/analytics';
|
|||||||
import { AUTOBIND_CFG } from '../../common/constants';
|
import { AUTOBIND_CFG } from '../../common/constants';
|
||||||
import { documentationLinks } from '../../common/documentation';
|
import { documentationLinks } from '../../common/documentation';
|
||||||
import * as models from '../../models';
|
import * as models from '../../models';
|
||||||
import { isRequest } from '../../models/request';
|
import { isRequest, Request } from '../../models/request';
|
||||||
import { isRequestGroup } from '../../models/request-group';
|
import { isRequestGroup } from '../../models/request-group';
|
||||||
import type { UnitTest } from '../../models/unit-test';
|
import type { UnitTest } from '../../models/unit-test';
|
||||||
import type { UnitTestSuite } from '../../models/unit-test-suite';
|
import type { UnitTestSuite } from '../../models/unit-test-suite';
|
||||||
@ -33,7 +33,7 @@ import { showAlert, showModal, showPrompt } from './modals';
|
|||||||
import { SelectModal } from './modals/select-modal';
|
import { SelectModal } from './modals/select-modal';
|
||||||
import { PageLayout } from './page-layout';
|
import { PageLayout } from './page-layout';
|
||||||
import { EmptyStatePane } from './panes/empty-state-pane';
|
import { EmptyStatePane } from './panes/empty-state-pane';
|
||||||
import type { SidebarChildObjects } from './sidebar/sidebar-children';
|
import type { Child, SidebarChildObjects } from './sidebar/sidebar-children';
|
||||||
import { UnitTestEditable } from './unit-test-editable';
|
import { UnitTestEditable } from './unit-test-editable';
|
||||||
import { WorkspacePageHeader } from './workspace-page-header';
|
import { WorkspacePageHeader } from './workspace-page-header';
|
||||||
import type { HandleActivityChange, WrapperProps } from './wrapper';
|
import type { HandleActivityChange, WrapperProps } from './wrapper';
|
||||||
@ -127,11 +127,10 @@ class UnconnectedWrapperUnitTest extends PureComponent<Props, State> {
|
|||||||
...this.buildSelectableRequests().map(({ name, request }) => ({
|
...this.buildSelectableRequests().map(({ name, request }) => ({
|
||||||
name: name,
|
name: name,
|
||||||
displayValue: '',
|
displayValue: '',
|
||||||
// @ts-expect-error -- TSCONVERSION
|
|
||||||
value: this.generateSendReqSnippet(unitTest.code, `'${request._id}'`),
|
value: this.generateSendReqSnippet(unitTest.code, `'${request._id}'`),
|
||||||
})),
|
})),
|
||||||
],
|
],
|
||||||
onDone: value => resolve(value),
|
onDone: (value: string | null) => resolve(value),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -329,7 +328,7 @@ class UnconnectedWrapperUnitTest extends PureComponent<Props, State> {
|
|||||||
request: Request;
|
request: Request;
|
||||||
}[] = [];
|
}[] = [];
|
||||||
|
|
||||||
const next = (p, children) => {
|
const next = (p: string, children: Child[]) => {
|
||||||
for (const c of children) {
|
for (const c of children) {
|
||||||
if (isRequest(c.doc)) {
|
if (isRequest(c.doc)) {
|
||||||
selectableRequests.push({
|
selectableRequests.push({
|
||||||
@ -399,7 +398,7 @@ class UnconnectedWrapperUnitTest extends PureComponent<Props, State> {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<ListGroup>
|
<ListGroup>
|
||||||
{tests.map((t, i) => (
|
{tests.map((t: any, i: number) => (
|
||||||
<UnitTestResultItem key={i} item={t} />
|
<UnitTestResultItem key={i} item={t} />
|
||||||
))}
|
))}
|
||||||
</ListGroup>
|
</ListGroup>
|
||||||
|
@ -460,7 +460,7 @@ export class Wrapper extends PureComponent<WrapperProps, State> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleGitBranchChanged(branch) {
|
_handleGitBranchChanged(branch: string) {
|
||||||
this.setState({
|
this.setState({
|
||||||
activeGitBranch: branch || 'no-vcs',
|
activeGitBranch: branch || 'no-vcs',
|
||||||
});
|
});
|
||||||
|
@ -25,9 +25,10 @@ import {
|
|||||||
MIN_PANE_HEIGHT,
|
MIN_PANE_HEIGHT,
|
||||||
MIN_PANE_WIDTH,
|
MIN_PANE_WIDTH,
|
||||||
MIN_SIDEBAR_REMS,
|
MIN_SIDEBAR_REMS,
|
||||||
|
PreviewMode,
|
||||||
SortOrder,
|
SortOrder,
|
||||||
} from '../../common/constants';
|
} from '../../common/constants';
|
||||||
import { database as db } from '../../common/database';
|
import { type ChangeBufferEvent, database as db } from '../../common/database';
|
||||||
import { getDataDirectory } from '../../common/electron-helpers';
|
import { getDataDirectory } from '../../common/electron-helpers';
|
||||||
import { exportHarRequest } from '../../common/har';
|
import { exportHarRequest } from '../../common/har';
|
||||||
import { hotKeyRefs } from '../../common/hotkeys';
|
import { hotKeyRefs } from '../../common/hotkeys';
|
||||||
@ -46,6 +47,7 @@ import * as requestOperations from '../../models/helpers/request-operations';
|
|||||||
import { isNotDefaultProject } from '../../models/project';
|
import { isNotDefaultProject } from '../../models/project';
|
||||||
import { Request, updateMimeType } from '../../models/request';
|
import { Request, updateMimeType } from '../../models/request';
|
||||||
import { isRequestGroup, RequestGroup } from '../../models/request-group';
|
import { isRequestGroup, RequestGroup } from '../../models/request-group';
|
||||||
|
import { type RequestGroupMeta } from '../../models/request-group-meta';
|
||||||
import { RequestMeta } from '../../models/request-meta';
|
import { RequestMeta } from '../../models/request-meta';
|
||||||
import { Response } from '../../models/response';
|
import { Response } from '../../models/response';
|
||||||
import { isWorkspace } from '../../models/workspace';
|
import { isWorkspace } from '../../models/workspace';
|
||||||
@ -58,6 +60,7 @@ import { GIT_CLONE_DIR, GIT_INSOMNIA_DIR, GIT_INTERNAL_DIR, GitVCS } from '../..
|
|||||||
import { NeDBClient } from '../../sync/git/ne-db-client';
|
import { NeDBClient } from '../../sync/git/ne-db-client';
|
||||||
import { routableFSClient } from '../../sync/git/routable-fs-client';
|
import { routableFSClient } from '../../sync/git/routable-fs-client';
|
||||||
import FileSystemDriver from '../../sync/store/drivers/file-system-driver';
|
import FileSystemDriver from '../../sync/store/drivers/file-system-driver';
|
||||||
|
import { type MergeConflict } from '../../sync/types';
|
||||||
import { VCS } from '../../sync/vcs/vcs';
|
import { VCS } from '../../sync/vcs/vcs';
|
||||||
import * as templating from '../../templating/index';
|
import * as templating from '../../templating/index';
|
||||||
import { ErrorBoundary } from '../components/error-boundary';
|
import { ErrorBoundary } from '../components/error-boundary';
|
||||||
@ -298,7 +301,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
showModal(AskModal, {
|
showModal(AskModal, {
|
||||||
title: 'Delete Request?',
|
title: 'Delete Request?',
|
||||||
message: `Really delete ${activeRequest.name}?`,
|
message: `Really delete ${activeRequest.name}?`,
|
||||||
onDone: async confirmed => {
|
onDone: async (confirmed: boolean) => {
|
||||||
if (!confirmed) {
|
if (!confirmed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -347,7 +350,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
? entities.grpcRequestMetas
|
? entities.grpcRequestMetas
|
||||||
: entities.requestMetas;
|
: entities.requestMetas;
|
||||||
const meta = Object.values<GrpcRequestMeta | RequestMeta>(entitiesToCheck).find(m => m.parentId === activeRequest._id);
|
const meta = Object.values<GrpcRequestMeta | RequestMeta>(entitiesToCheck).find(m => m.parentId === activeRequest._id);
|
||||||
await this._handleSetRequestPinned(this.props.activeRequest, !meta?.pinned);
|
await this._handleSetRequestPinned(activeRequest, !meta?.pinned);
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[hotKeyRefs.PLUGIN_RELOAD, this._handleReloadPlugins],
|
[hotKeyRefs.PLUGIN_RELOAD, this._handleReloadPlugins],
|
||||||
@ -390,7 +393,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _recalculateMetaSortKey(docs: (RequestGroup | Request | GrpcRequest)[]) {
|
async _recalculateMetaSortKey(docs: (RequestGroup | Request | GrpcRequest)[]) {
|
||||||
function __updateDoc(doc, metaSortKey) {
|
function __updateDoc(doc: RequestGroup | Request | GrpcRequest, metaSortKey: number) {
|
||||||
// @ts-expect-error -- TSCONVERSION the fetched model will only ever be a RequestGroup, Request, or GrpcRequest
|
// @ts-expect-error -- TSCONVERSION the fetched model will only ever be a RequestGroup, Request, or GrpcRequest
|
||||||
// Which all have the .update method. How do we better filter types?
|
// Which all have the .update method. How do we better filter types?
|
||||||
return models.getModel(doc.type)?.update(doc, {
|
return models.getModel(doc.type)?.update(doc, {
|
||||||
@ -486,7 +489,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static async _updateRequestGroupMetaByParentId(requestGroupId, patch) {
|
static async _updateRequestGroupMetaByParentId(requestGroupId: string, patch: Partial<RequestGroupMeta>) {
|
||||||
const requestGroupMeta = await models.requestGroupMeta.getByParentId(requestGroupId);
|
const requestGroupMeta = await models.requestGroupMeta.getByParentId(requestGroupId);
|
||||||
|
|
||||||
if (requestGroupMeta) {
|
if (requestGroupMeta) {
|
||||||
@ -576,25 +579,25 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async _handleSetRequestPinned(request, pinned) {
|
async _handleSetRequestPinned(request: Request | GrpcRequest, pinned: boolean) {
|
||||||
updateRequestMetaByParentId(request._id, {
|
updateRequestMetaByParentId(request._id, {
|
||||||
pinned,
|
pinned,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleSetResponsePreviewMode(requestId, previewMode) {
|
_handleSetResponsePreviewMode(requestId: string, previewMode: PreviewMode) {
|
||||||
updateRequestMetaByParentId(requestId, {
|
updateRequestMetaByParentId(requestId, {
|
||||||
previewMode,
|
previewMode,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleUpdateDownloadPath(requestId, downloadPath) {
|
_handleUpdateDownloadPath(requestId: string, downloadPath: string) {
|
||||||
updateRequestMetaByParentId(requestId, {
|
updateRequestMetaByParentId(requestId, {
|
||||||
downloadPath,
|
downloadPath,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async _handleSetResponseFilter(requestId, responseFilter) {
|
async _handleSetResponseFilter(requestId: string, responseFilter: string) {
|
||||||
await updateRequestMetaByParentId(requestId, {
|
await updateRequestMetaByParentId(requestId, {
|
||||||
responseFilter,
|
responseFilter,
|
||||||
});
|
});
|
||||||
@ -706,7 +709,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
const extension = sanitizedExtension || 'unknown';
|
const extension = sanitizedExtension || 'unknown';
|
||||||
const name =
|
const name =
|
||||||
nameFromHeader || `${request.name.replace(/\s/g, '-').toLowerCase()}.${extension}`;
|
nameFromHeader || `${request.name.replace(/\s/g, '-').toLowerCase()}.${extension}`;
|
||||||
let filename;
|
let filename: string | null;
|
||||||
|
|
||||||
if (dir) {
|
if (dir) {
|
||||||
filename = path.join(dir, name);
|
filename = path.join(dir, name);
|
||||||
@ -763,7 +766,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async _handleSendRequestWithEnvironment(requestId, environmentId) {
|
async _handleSendRequestWithEnvironment(requestId: string, environmentId?: string) {
|
||||||
const { handleStartLoading, handleStopLoading, settings } = this.props;
|
const { handleStartLoading, handleStopLoading, settings } = this.props;
|
||||||
const request = await models.request.getById(requestId);
|
const request = await models.request.getById(requestId);
|
||||||
|
|
||||||
@ -878,7 +881,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
setTimeout(() => this._handleSetPaneHeight(DEFAULT_PANE_HEIGHT), 50);
|
setTimeout(() => this._handleSetPaneHeight(DEFAULT_PANE_HEIGHT), 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleMouseMove(event) {
|
_handleMouseMove(event: MouseEvent) {
|
||||||
if (this.state.draggingPaneHorizontal) {
|
if (this.state.draggingPaneHorizontal) {
|
||||||
// Only pop the overlay after we've moved it a bit (so we don't block doubleclick);
|
// Only pop the overlay after we've moved it a bit (so we don't block doubleclick);
|
||||||
const distance = this.props.paneWidth - this.state.paneWidth;
|
const distance = this.props.paneWidth - this.state.paneWidth;
|
||||||
@ -1166,7 +1169,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
showModal(SyncMergeModal, {
|
showModal(SyncMergeModal, {
|
||||||
conflicts,
|
conflicts,
|
||||||
handleDone: conflicts => resolve(conflicts),
|
handleDone: (conflicts: MergeConflict[]) => resolve(conflicts),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -1186,7 +1189,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async _handleDbChange(changes) {
|
async _handleDbChange(changes: ChangeBufferEvent[]) {
|
||||||
let needsRefresh = false;
|
let needsRefresh = false;
|
||||||
|
|
||||||
for (const change of changes) {
|
for (const change of changes) {
|
||||||
@ -1270,7 +1273,7 @@ class App extends PureComponent<AppProps, State> {
|
|||||||
message: 'Are you sure you want to clear all models? This operation cannot be undone.',
|
message: 'Are you sure you want to clear all models? This operation cannot be undone.',
|
||||||
yesText: 'Yes',
|
yesText: 'Yes',
|
||||||
noText: 'No',
|
noText: 'No',
|
||||||
onDone: async yes => {
|
onDone: async (yes: boolean) => {
|
||||||
if (yes) {
|
if (yes) {
|
||||||
const bufferId = await db.bufferChanges();
|
const bufferId = await db.bufferChanges();
|
||||||
const promises = models
|
const promises = models
|
||||||
|
@ -57,7 +57,7 @@ const multiRequestReducer = (state: GrpcState, action: GrpcActionMany): GrpcStat
|
|||||||
|
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case GrpcActionTypeEnum.invalidateMany: {
|
case GrpcActionTypeEnum.invalidateMany: {
|
||||||
const newStates = {};
|
const newStates: GrpcState = {};
|
||||||
requestIds.forEach(id => {
|
requestIds.forEach(id => {
|
||||||
const oldState = findGrpcRequestState(state, id);
|
const oldState = findGrpcRequestState(state, id);
|
||||||
const newState: GrpcRequestState = { ...oldState, reloadMethods: true };
|
const newState: GrpcRequestState = { ...oldState, reloadMethods: true };
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user