fix: 🐛 Fixes TS config + lint etc

This commit is contained in:
Viktor Sarström 2021-11-12 13:46:25 +01:00
parent e2e1ff8278
commit 46632691bf
18 changed files with 77 additions and 77 deletions

View File

@ -0,0 +1,23 @@
{
"extends": ["plugin:@nrwl/nx/react", "../../.eslintrc.json"],
"ignorePatterns": ["!**/*", "public", ".cache", "node_modules"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {
"@typescript-eslint/ban-ts-comment": "off"
}
},
{
"files": ["*.js", "*.jsx"],
"rules": {
"@typescript-eslint/no-var-requires": "off"
}
}
]
}

View File

@ -1,19 +0,0 @@
module.exports = {
parser: '@typescript-eslint/parser', // Specifies the ESLint parser
parserOptions: {
ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features
sourceType: 'module', // Allows for the use of imports
project: ['./tsconfig.eslint.json'],
},
extends: ['airbnb-typescript/base', 'prettier'],
plugins: ['prettier'],
ignorePatterns: ['*.test.ts'],
rules: {
// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
// e.g. "@typescript-eslint/explicit-function-return-type": "off",
// '@typescript-eslint/indent': ['error', 2],
'@typescript-eslint/semi': [2, 'never'],
'max-len': ['error', { code: 120, ignoreUrls: true }],
'import/prefer-default-export': 0,
},
}

View File

@ -1,9 +1,6 @@
import init from './'
import { ApiHjarntorget } from './apiHjarntorget'
import { Fetcher } from '../../api/lib/fetcher'
import { checkStatus } from './loginStatus'
import { wrapToughCookie } from '../../api/lib/cookies'
import { wrapToughCookie } from '@skolplattformen/api'
import { CookieJar } from 'tough-cookie'
const setupSuccessfullLoginInitiation = (fetcherMock: jest.Mock) => {
@ -83,7 +80,7 @@ describe('api', () => {
fetcherMock = fetcher as jest.Mock
const cookieManager = wrapToughCookie(new CookieJar())
cookieManager.clearAll
cookieManager.clearAll();
api = new ApiHjarntorget(jest.fn(), cookieManager)
api.replaceFetcher(fetcher)
})
@ -210,6 +207,7 @@ describe('api', () => {
expect(api.isLoggedIn).toBe(false)
})
it('forgets personalNumber', async () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(api as any).personalNumber = 'my personal number'
api.isLoggedIn = true

View File

@ -1,10 +1,9 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { DateTime, FixedOffsetZone } from 'luxon'
import { EventEmitter } from 'events'
import * as html from 'node-html-parser'
import { decode } from 'he'
import wrap, { Fetcher, FetcherOptions } from '../../api/lib/fetcher'
import {
CalendarItem,
import { toMarkdown, Api, URLSearchParams, LoginStatusChecker, CalendarItem,
Classmate,
CookieManager,
EtjanstChild,
@ -15,12 +14,11 @@ import {
ScheduleItem,
Skola24Child,
TimetableEntry,
User
} from "../../api/lib/types"
import { LoginStatusChecker } from '../../api/lib/loginStatus'
import { URLSearchParams } from '../../api/lib/URLSearchParams'
import { Api } from '../../api/lib/api'
import { toMarkdown } from '../../api/lib/parseHtml'
User,
Fetcher,
FetcherOptions,
wrap
} from '@skolplattformen/api'
import { checkStatus } from './loginStatus'
import { extractMvghostRequestBody, parseCalendarItem } from './parse/parsers'
import {
@ -91,7 +89,8 @@ export class ApiHjarntorget extends EventEmitter implements Api {
options?: FetcherOptions
) {
super()
this.realFetcher = this.fetch = wrap(fetch, options)
this.fetch = wrap(fetch, options);
this.realFetcher = this.fetch;
this.cookieManager = cookieManager
}

View File

@ -1,28 +1,19 @@
import { Api } from '../../api/lib/api'
import { FetcherOptions } from '../../api/lib/fetcher'
import { Fetch } from '../../api/lib/types'
import {
RNCookieManager,
import { ApiHjarntorget } from './apiHjarntorget'
import { Api, FetcherOptions, Fetch, RNCookieManager,
ToughCookieJar,
wrapReactNativeCookieManager,
wrapToughCookie,
} from '../../api/lib/cookies'
import { ApiHjarntorget } from './apiHjarntorget'
export { Api, FetcherOptions }
export * from '../../api/lib/types'
export { LoginStatusChecker } from '../../api/lib/loginStatus'
wrapToughCookie } from '@skolplattformen/api'
const init = (
fetch: Fetch,
cookieManagerImpl: RNCookieManager | ToughCookieJar,
fetchImpl: Fetch,
cookieManagerImpl: any,
options?: FetcherOptions
): Api => {
// prettier-ignore
const cookieManager = ((cookieManagerImpl as RNCookieManager).get)
? wrapReactNativeCookieManager(cookieManagerImpl as RNCookieManager)
: wrapToughCookie(cookieManagerImpl as ToughCookieJar)
return new ApiHjarntorget(fetch, cookieManager, options)
return new ApiHjarntorget(fetchImpl, cookieManager, options)
}
export default init
export default init

View File

@ -1,6 +1,5 @@
import { EventEmitter } from 'events'
import { Fetcher } from '../../api/lib/fetcher'
import { LoginStatusChecker } from '../../api/lib/loginStatus'
import { LoginStatusChecker, Fetcher} from '@skolplattformen/api'
import {
extractAuthGbgLoginRequestBody,
extractHjarntorgetSAMLLogin

View File

@ -15,7 +15,6 @@
"exclude": [
"node_modules",
"**/__tests__/*",
"**/__mocks__/*",
"**/*.test.ts"
"**/__mocks__/*"
]
}

View File

@ -1,6 +1,6 @@
import init from './'
import { ApiSkolplattformen } from './api'
import { Fetch, Headers, Response } from '../../api/lib/types'
import { Fetch, Headers, Response } from '@skolplattformen/api'
import CookieManager from '@react-native-cookies/cookies'
describe('api', () => {
@ -110,6 +110,7 @@ describe('api', () => {
const personalNumber = 'my personal number'
try {
await api.login(personalNumber)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (error: any) {
expect(error.message).toEqual(expect.stringContaining('Server Error'))
}

View File

@ -2,7 +2,7 @@ import { EventEmitter } from 'events'
import { decode } from 'he'
import { DateTime } from 'luxon'
import * as html from 'node-html-parser'
import { LoginStatusChecker } from '../../api/lib/loginStatus'
import { LoginStatusChecker, FetcherOptions, Fetcher, wrap } from '@skolplattformen/api'
import {
AuthTicket,
CalendarItem,
@ -20,13 +20,12 @@ import {
TimetableEntry,
User,
Response
} from '../../api/lib/types'
} from '@skolplattformen/api'
import * as routes from './routes'
import * as parse from './parse/index'
import wrap, { Fetcher, FetcherOptions } from '../../api/lib/fetcher'
import * as fake from './fakeData'
import { checkStatus } from './loginStatusChecker'
import { Api } from '../../api/lib/api'
import { Api } from '@skolplattformen/api'
import { Language } from '@skolplattformen/curriculum'
const fakeResponse = <T>(data: T): Promise<T> =>
@ -55,6 +54,7 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
private personalNumber?: string
// eslint-disable-next-line @typescript-eslint/no-explicit-any
private headers: any
private cookieManager: CookieManager
@ -199,6 +199,7 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
this.emit('login')
}, 50)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const emitter: any = new EventEmitter()
emitter.token = 'fake'
return emitter

View File

@ -11,7 +11,7 @@ import {
Skola24Child,
TimetableEntry,
User,
} from '../../api/lib/types'
} from '@skolplattformen/api';
const data: any = {
'39b59e-bf4b9f-f68ac25321-977218-bf0': {

View File

@ -1,16 +1,8 @@
import { ApiSkolplattformen } from './api'
import { Api } from '../../api/lib/api'
import { FetcherOptions } from '../../api/lib/fetcher'
import { Fetch } from '../../api/lib/types'
import {
RNCookieManager,
import { Api, FetcherOptions, Fetch, RNCookieManager,
ToughCookieJar,
wrapReactNativeCookieManager,
wrapToughCookie,
} from '../../api/lib/cookies'
export * from '../../api/lib/types'
export { LoginStatusChecker } from '../../api/lib/loginStatus'
wrapToughCookie } from '@skolplattformen/api'
const init = (
fetchImpl: Fetch,

View File

@ -1,7 +1,6 @@
import { EventEmitter } from 'events'
import { loginStatus } from './routes'
import { Fetcher } from '../../api/lib/fetcher'
import { AuthTicket } from '../..//api/lib/types'
import { Fetcher, AuthTicket } from '@skolplattformen/api'
/*
export enum LoginEvent {

View File

@ -1,8 +1,6 @@
import { EventEmitter } from 'events';
import { loginStatus } from './routes';
import { AuthTicket } from '../../api/lib/types';
import { Fetcher } from '../../api/lib/fetcher';
import { LoginStatusChecker } from '.';
import { AuthTicket, Fetcher, LoginStatusChecker } from '@skolplattformen/api';
export class Checker extends EventEmitter {
public token: string;
@ -11,7 +9,7 @@ export class Checker extends EventEmitter {
private url: string;
private cancelled: boolean = false;
private cancelled = false;
constructor(fetcher: Fetcher, ticket: AuthTicket) {
super();

View File

@ -16,6 +16,5 @@
"node_modules",
"**/__tests__/*",
"**/__mocks__/*",
"**/*.test.ts"
]
}

16
libs/api/lib/index.ts Normal file
View File

@ -0,0 +1,16 @@
import wrap from './fetcher'
export { toMarkdown } from './parseHtml'
export * from './types'
export { LoginStatusChecker } from './loginStatus'
export { Api } from './api'
export { FetcherOptions, Fetcher } from './fetcher'
export {
RNCookieManager,
ToughCookieJar,
wrapReactNativeCookieManager,
wrapToughCookie,
} from './cookies'
export { URLSearchParams } from './URLSearchParams'
export { wrap };

View File

@ -17,6 +17,7 @@ export interface CookieManager {
setCookieString: (cookieString: string, url: string) => Promise<void>
getCookieString: (url: string) => Promise<string>
clearAll: () => Promise<void>
removeAllCookies?: () => Promise<void>
}
export interface RequestInit {

View File

@ -14,6 +14,9 @@
"skipDefaultLibCheck": true,
"baseUrl": ".",
"paths": {
"@skolplattformen/api": [
"libs/api/lib/index.ts"
],
"@skolplattformen/api-skolplattformen": [
"libs/api-skolplattformen/lib/index.ts"
],