From f51282a09bf97cc6c3d7bff6e5c040e474821776 Mon Sep 17 00:00:00 2001 From: lingdocs <71590811+lingdocs@users.noreply.github.com> Date: Fri, 17 Sep 2021 16:39:10 -0400 Subject: [PATCH] ability to publish types --- .github/workflows/publish-types.yml | 29 +++++ dist/types.d.ts | 3 + dist/types.js | 3 + dist/website/src/types/account-types.d.ts | 98 +++++++++++++++ dist/website/src/types/account-types.js | 1 + dist/website/src/types/functions-types.d.ts | 65 ++++++++++ dist/website/src/types/functions-types.js | 8 ++ package-lock.json | 132 ++++++++++++++++++++ package.json | 33 +++++ tsconfig.json | 28 +++++ types.ts | 7 ++ 11 files changed, 407 insertions(+) create mode 100644 .github/workflows/publish-types.yml create mode 100644 dist/types.d.ts create mode 100644 dist/types.js create mode 100644 dist/website/src/types/account-types.d.ts create mode 100644 dist/website/src/types/account-types.js create mode 100644 dist/website/src/types/functions-types.d.ts create mode 100644 dist/website/src/types/functions-types.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 tsconfig.json create mode 100644 types.ts diff --git a/.github/workflows/publish-types.yml b/.github/workflows/publish-types.yml new file mode 100644 index 0000000..b0f22ee --- /dev/null +++ b/.github/workflows/publish-types.yml @@ -0,0 +1,29 @@ +name: Publish Types + +on: + push: + branches: [ 'master' ] + + workflow_dispatch: + +jobs: + publish: + runs-on: ubuntu-latest + env: + LINGDOCS_NPM_TOKEN: ${{ secrets.LINGDOCS_NPM_TOKEN }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 14 + - name: Check if version has been updated + id: check + uses: EndBug/version-check@v1 + with: + diff-search: true + token: ${{ secrets.GITHUB_TOKEN }} + - name: Publish when version changed + if: steps.check.outputs.changed == 'true' + run: | + npm run build + npm publish \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts new file mode 100644 index 0000000..7f25b9e --- /dev/null +++ b/dist/types.d.ts @@ -0,0 +1,3 @@ +import * as AT from "./website/src/types/account-types"; +import * as FT from "./website/src/types/functions-types"; +export { AT, FT, }; diff --git a/dist/types.js b/dist/types.js new file mode 100644 index 0000000..7f25b9e --- /dev/null +++ b/dist/types.js @@ -0,0 +1,3 @@ +import * as AT from "./website/src/types/account-types"; +import * as FT from "./website/src/types/functions-types"; +export { AT, FT, }; diff --git a/dist/website/src/types/account-types.d.ts b/dist/website/src/types/account-types.d.ts new file mode 100644 index 0000000..e23422c --- /dev/null +++ b/dist/website/src/types/account-types.d.ts @@ -0,0 +1,98 @@ +export declare type Hash = string & { + __brand: "Hashed String"; +}; +export declare type UUID = string & { + __brand: "Random Unique UID"; +}; +export declare type TimeStamp = number & { + __brand: "UNIX Timestamp in milliseconds"; +}; +export declare type UserDbPassword = string & { + __brand: "password for an individual user couchdb"; +}; +export declare type WordlistDbName = string & { + __brand: "name for an individual user couchdb"; +}; +export declare type URLToken = string & { + __brand: "Base 64 URL Token"; +}; +export declare type EmailVerified = true | Hash | false; +export declare type ActionComplete = { + ok: true; + message: string; +}; +export declare type ActionError = { + ok: false; + error: string; +}; +export declare type APIResponse = ActionComplete | ActionError | { + ok: true; + user: LingdocsUser; +}; +export declare type WoutRJ = Omit; +export declare type GoogleProfile = WoutRJ & { + refreshToken: string; + accessToken: string; +}; +export declare type GitHubProfile = WoutRJ & { + accessToken: string; +}; +export declare type TwitterProfile = WoutRJ & { + token: string; + tokenSecret: string; +}; +export declare type ProviderProfile = GoogleProfile | GitHubProfile | TwitterProfile; +export declare type UserLevel = "basic" | "student" | "editor"; +export declare type UserTextOptions = Omit; +export declare type UserTextOptionsRecord = { + lastModified: TimeStamp; + userTextOptions: UserTextOptions; +}; +export declare type LingdocsUser = { + userId: UUID; + admin?: boolean; + password?: Hash; + name: string; + email?: string; + emailVerified: EmailVerified; + github?: GitHubProfile; + google?: GoogleProfile; + twitter?: TwitterProfile; + passwordReset?: { + tokenHash: Hash; + requestedOn: TimeStamp; + }; + upgradeToStudentRequest?: "waiting" | "denied"; + tests: []; + lastLogin: TimeStamp; + lastActive: TimeStamp; + userTextOptionsRecord: undefined | UserTextOptionsRecord; +} & ({ + level: "basic"; +} | { + level: "student" | "editor"; + couchDbPassword: UserDbPassword; + wordlistDbName: WordlistDbName; +}) & import("nano").MaybeDocument; +export declare type CouchDbAuthUser = { + type: "user"; + name: UUID; + password: UserDbPassword; + roles: []; +} & import("nano").MaybeDocument; +export declare type UpgradeUserResponse = { + ok: false; + error: "incorrect password"; +} | { + ok: true; + message: "user already upgraded" | "user upgraded to student"; + user: LingdocsUser; +}; +export declare type UpdateUserTextOptionsRecordBody = { + userTextOptionsRecord: UserTextOptionsRecord; +}; +export declare type UpdateUserTextOptionsRecordResponse = { + ok: true; + message: "updated userTextOptionsRecord"; + user: LingdocsUser; +}; diff --git a/dist/website/src/types/account-types.js b/dist/website/src/types/account-types.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/website/src/types/account-types.js @@ -0,0 +1 @@ +export {}; diff --git a/dist/website/src/types/functions-types.d.ts b/dist/website/src/types/functions-types.d.ts new file mode 100644 index 0000000..0d1e946 --- /dev/null +++ b/dist/website/src/types/functions-types.d.ts @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2021 lingdocs.com + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +import { Types as T } from "@lingdocs/pashto-inflector"; +import * as AT from "./account-types"; +export declare type FunctionResponse = PublishDictionaryResponse | SubmissionsResponse | FunctionError; +export declare type FunctionError = { + ok: false; + error: string; +}; +export declare type PublishDictionaryResponse = { + ok: true; + info: T.DictionaryInfo; +} | { + ok: false; + errors: T.DictionaryEntryError[]; +}; +export declare type Submission = Edit | ReviewTask; +export declare type Edit = EntryEdit | NewEntry | EntryDeletion; +export declare type SubmissionBase = { + _id: string; + sTs: number; + user: { + userId: AT.UUID; + name: string; + email: string; + }; +}; +export declare type ReviewTask = Issue | EditSuggestion | EntrySuggestion; +export declare type EntryEdit = SubmissionBase & { + type: "entry edit"; + entry: T.DictionaryEntry; +}; +export declare type EntryDeletion = SubmissionBase & { + type: "entry deletion"; + ts: number; +}; +export declare type NewEntry = SubmissionBase & { + type: "new entry"; + entry: T.DictionaryEntry; +}; +export declare type Issue = SubmissionBase & { + type: "issue"; + content: string; +}; +export declare type EditSuggestion = SubmissionBase & { + type: "edit suggestion"; + entry: T.DictionaryEntry; + comment: string; +}; +export declare type EntrySuggestion = SubmissionBase & { + type: "entry suggestion"; + entry: T.DictionaryEntry; + comment: string; +}; +export declare type SubmissionsRequest = Submission[]; +export declare type SubmissionsResponse = { + ok: true; + message: string; + submissions: Submission[]; +}; diff --git a/dist/website/src/types/functions-types.js b/dist/website/src/types/functions-types.js new file mode 100644 index 0000000..06b30e2 --- /dev/null +++ b/dist/website/src/types/functions-types.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2021 lingdocs.com + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +export {}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..36a1a0b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,132 @@ +{ + "name": "lingdocs-main", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" + }, + "passport-github2": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/passport-github2/-/passport-github2-0.1.12.tgz", + "integrity": "sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw==", + "requires": { + "passport-oauth2": "1.x.x" + } + }, + "passport-google-oauth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth/-/passport-google-oauth-2.0.0.tgz", + "integrity": "sha512-JKxZpBx6wBQXX1/a1s7VmdBgwOugohH+IxCy84aPTZNq/iIPX6u7Mqov1zY7MKRz3niFPol0KJz8zPLBoHKtYA==", + "requires": { + "passport-google-oauth1": "1.x.x", + "passport-google-oauth20": "2.x.x" + } + }, + "passport-google-oauth1": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth1/-/passport-google-oauth1-1.0.0.tgz", + "integrity": "sha1-r3SoA99R7GRvZqRNgigr5vEI4Mw=", + "requires": { + "passport-oauth1": "1.x.x" + } + }, + "passport-google-oauth20": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", + "requires": { + "passport-oauth2": "1.x.x" + } + }, + "passport-oauth1": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.2.0.tgz", + "integrity": "sha512-Sv2YWodC6jN12M/OXwmR4BIXeeIHjjbwYTQw4kS6tHK4zYzSEpxBgSJJnknBjICA5cj0ju3FSnG1XmHgIhYnLg==", + "requires": { + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "utils-merge": "1.x.x" + } + }, + "passport-oauth2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.0.tgz", + "integrity": "sha512-emXPLqLcVEcLFR/QvQXZcwLmfK8e9CqvMgmOFJxcNT3okSFMtUbRRKpY20x5euD+01uHsjjCa07DYboEeLXYiw==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, + "passport-twitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/passport-twitter/-/passport-twitter-1.0.4.tgz", + "integrity": "sha1-AaeZ4fdgvy3knyul+6MigvGJMtc=", + "requires": { + "passport-oauth1": "1.x.x", + "xtraverse": "0.1.x" + } + }, + "rollup": { + "version": "2.56.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz", + "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "typescript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "dev": true + }, + "uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "xmldom": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" + }, + "xtraverse": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz", + "integrity": "sha1-t0G60BjveNip0ug63gB7P3lZxzI=", + "requires": { + "xmldom": "0.1.x" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0f3f478 --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "@lingdocs/lingdocs-main", + "version": "0.0.4", + "description": "type definitions for lingdocs stuff", + "main": "dist/types.js", + "module": "dist/types.js", + "types": "dist/types.d.ts", + "files": [ + "dist" + ], + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc" + }, + "repository": { + "type": "git", + "url": "git@github.com-lingdocs:lingdocs/lingdocs-main.git" + }, + "peerDependencies": { + "@lingdocs/pashto-inflector": "^1.0.6" + }, + "author": "lingdocs.com", + "license": "MIT", + "dependencies": { + "passport-github2": "^0.1.12", + "passport-google-oauth": "^2.0.0", + "passport-twitter": "^1.0.4" + }, + "devDependencies": { + "rollup": "^2.56.3", + "typescript": "^4.4.3" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..22decfc --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "downlevelIteration": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "ES6", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "declaration": true, + "jsx": "react-jsx", + "outDir": "dist" + }, + "files": [ + "types.ts", + ] +} \ No newline at end of file diff --git a/types.ts b/types.ts new file mode 100644 index 0000000..ddf1cf1 --- /dev/null +++ b/types.ts @@ -0,0 +1,7 @@ +import * as AT from "./website/src/types/account-types"; +import * as FT from "./website/src/types/functions-types"; + +export { + AT, + FT, +};