diff --git a/.eslintrc.js b/.eslintrc.js index b94604ec..b1696b58 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,452 +1,466 @@ module.exports = { - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 12, - sourceType: "module", - tsconfigRootDir: __dirname, - project: ["./tsconfig.json"], - }, - plugins: [ - "import", - "react", - "react-hooks", - "jsx-a11y", - "@typescript-eslint/eslint-plugin", - "no-loops", - "no-use-extend-native", - "promise", - ], - extends: [ - "eslint:recommended", - "plugin:no-use-extend-native/recommended", - "plugin:promise/recommended", - "plugin:import/recommended", - "plugin:import/typescript", - "plugin:react/recommended", - "plugin:react/jsx-runtime", - "plugin:jsx-a11y/strict", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - "plugin:@typescript-eslint/strict", - ], - root: true, - env: { - browser: true, - node: true, - jest: true, - es2021: true, - }, - ignorePatterns: ["test", "dist", "build", "public", "/**/node_modules/*", ".eslintrc.js", "vite.config.ts", "vite-env.d.ts", "postcss.config.js", "tailwind.config.js", "vitest.config.ts", "playwright.config.ts", "e2e"], - rules: { - "indent": "off", - "@typescript-eslint/indent": "error", - // eslint:recommended - "arrow-body-style": ["error", "as-needed"], - curly: ["error", "all"], - "dot-notation": "error", - eqeqeq: ["error", "always"], - "multiline-comment-style": ["error", "starred-block"], - "no-confusing-arrow": "error", - "no-div-regex": "error", - "no-else-return": [ - "error", - { - allowElseIf: false, - }, - ], - "no-extra-bind": "error", - "no-extra-boolean-cast": [ - "error", - { - enforceForLogicalOperands: true, - }, - ], - "no-extra-label": "error", - "no-floating-decimal": "error", - "no-implicit-coercion": [ - "error", - { - allow: ["!!"], - }, - ], - "no-lonely-if": "error", - "no-undef-init": "error", - "no-unneeded-ternary": "error", - "no-useless-computed-key": [ - "error", - { - enforceForClassMembers: true, - }, - ], - "no-useless-rename": "error", - "no-useless-return": "error", - "no-var": "error", - "object-shorthand": "error", - "one-var": ["error", "never"], - "one-var-declaration-per-line": ["error", "always"], - "operator-assignment": ["error", "always"], - "prefer-arrow-callback": "error", - "prefer-const": "error", - "prefer-destructuring": [ - "error", - { - VariableDeclarator: { - array: false, - object: true, - }, - AssignmentExpression: { - array: true, - object: true, - }, - }, - { - enforceForRenamedProperties: false, - }, - ], - "prefer-exponentiation-operator": "error", - "prefer-object-has-own": "error", - "prefer-object-spread": "error", - "prefer-template": "error", - "quote-props": ["error", "as-needed"], - "sort-vars": "error", - "spaced-comment": ["error", "always"], - strict: ["error", "never"], - yoda: [ - "error", - "never", - { - onlyEquality: true, - }, - ], - "array-bracket-newline": ["error", "consistent"], - "array-bracket-spacing": [ - "error", - "never", - { - arraysInArrays: true, - }, - ], - "array-element-newline": ["error", "consistent"], - "arrow-parens": ["error", "as-needed"], - "arrow-spacing": "error", - "block-spacing": ["error", "always"], - "brace-style": ["error", "1tbs"], - "comma-dangle": ["error", "always-multiline"], - "comma-spacing": [ - "error", - { - before: false, - after: true, - }, - ], - "comma-style": ["error", "last"], - "computed-property-spacing": ["error", "never"], - "dot-location": ["error", "property"], - "eol-last": ["error", "always"], - "func-call-spacing": ["error", "never"], - "function-call-argument-newline": ["error", "consistent"], - "function-paren-newline": ["error", "multiline-arguments"], - "jsx-quotes": ["error", "prefer-double"], - "key-spacing": [ - "error", - { - beforeColon: false, - afterColon: true, - }, - ], - "keyword-spacing": [ - "error", - { - before: true, - after: true, - }, - ], - "line-comment-position": [ - "error", - { - position: "above", - ignorePattern: "pragma", - applyDefaultIgnorePatterns: false, - }, - ], - "linebreak-style": ["error", "unix"], - "lines-around-comment": [ - "error", - { - beforeBlockComment: true, - afterBlockComment: true, - beforeLineComment: true, - allowBlockStart: true, - allowBlockEnd: false, - allowClassStart: true, - allowObjectStart: true, - allowObjectEnd: false, - allowArrayStart: false, - allowArrayEnd: false, - applyDefaultIgnorePatterns: false, - }, - ], - "lines-between-class-members": [ - "error", - "always", - { - exceptAfterSingleLine: true, - }, - ], - "multiline-ternary": ["error", "always-multiline"], - "new-parens": ["error", "never"], - "newline-per-chained-call": [ - "error", - { - ignoreChainWithDepth: 2, - }, - ], - "no-multi-spaces": "error", - "no-multiple-empty-lines": "error", - "no-trailing-spaces": "error", - "no-whitespace-before-property": "error", - "object-curly-newline": [ - "error", - { - multiline: true, - }, - ], - "object-curly-spacing": [ - "error", - "always", - { - arraysInObjects: true, - objectsInObjects: true, - }, - ], - "object-property-newline": [ - "error", - { - allowAllPropertiesOnSameLine: true, - }, - ], - "operator-linebreak": [ - "error", - "after", - { - overrides: { - "?": "before", - ":": "before", - }, - }, - ], - "padded-blocks": ["error", "never"], - "padding-line-between-statements": [ - "error", - { - blankLine: "always", - prev: ["const", "let", "var"], - next: "*", - }, - { - blankLine: "any", - prev: ["const", "let", "var"], - next: ["const", "let", "var"], - }, - ], - quotes: [ - "error", - "double", - { - allowTemplateLiterals: true, - }, - ], - "rest-spread-spacing": ["error", "never"], - semi: [ - "error", - "always", - { - omitLastInOneLineBlock: true, - }, - ], - "semi-spacing": [ - "error", - { - before: false, - after: true, - }, - ], - "semi-style": ["error", "last"], - "space-before-blocks": ["error", "always"], - "space-before-function-paren": ["error", "always"], - "space-infix-ops": [ - "error", - { - int32Hint: false, - }, - ], - "space-unary-ops": [ - "error", - { - words: true, - nonwords: false, - }, - ], - "switch-colon-spacing": [ - "error", - { - after: true, - before: false, - }, - ], - "template-curly-spacing": ["error", "never"], - "template-tag-spacing": ["error", "always"], - "unicode-bom": "error", - "wrap-iife": [ - "error", - "inside", - { - functionPrototypeMethods: true, - }, - ], - "wrap-regex": "error", + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 12, + sourceType: "module", + tsconfigRootDir: __dirname, + project: ["./tsconfig.json"], + }, + plugins: [ + "import", + "react", + "react-hooks", + "jsx-a11y", + "@typescript-eslint/eslint-plugin", + "no-loops", + "no-use-extend-native", + "promise", + ], + extends: [ + "eslint:recommended", + "plugin:no-use-extend-native/recommended", + "plugin:promise/recommended", + "plugin:import/recommended", + "plugin:import/typescript", + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "plugin:jsx-a11y/strict", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "plugin:@typescript-eslint/strict", + ], + root: true, + env: { + browser: true, + node: true, + jest: true, + es2021: true, + }, + ignorePatterns: [ + "test", + "dist", + "build", + "public", + "/**/node_modules/*", + ".eslintrc.js", + "vite.config.ts", + "vite-env.d.ts", + "postcss.config.js", + "tailwind.config.js", + "vitest.config.ts", + "playwright.config.ts", + "e2e", + ], + rules: { + indent: "off", + "@typescript-eslint/indent": "error", + // eslint:recommended + "arrow-body-style": ["error", "as-needed"], + curly: ["error", "all"], + "dot-notation": "error", + eqeqeq: ["error", "always"], + "multiline-comment-style": ["error", "starred-block"], + "no-confusing-arrow": "error", + "no-div-regex": "error", + "no-else-return": [ + "error", + { + allowElseIf: false, + }, + ], + "no-extra-bind": "error", + "no-extra-boolean-cast": [ + "error", + { + enforceForLogicalOperands: true, + }, + ], + "no-extra-label": "error", + "no-floating-decimal": "error", + "no-implicit-coercion": [ + "error", + { + allow: ["!!"], + }, + ], + "no-lonely-if": "error", + "no-undef-init": "error", + "no-unneeded-ternary": "error", + "no-useless-computed-key": [ + "error", + { + enforceForClassMembers: true, + }, + ], + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "object-shorthand": "error", + "one-var": ["error", "never"], + "one-var-declaration-per-line": ["error", "always"], + "operator-assignment": ["error", "always"], + "prefer-arrow-callback": "error", + "prefer-const": "error", + "prefer-destructuring": [ + "error", + { + VariableDeclarator: { + array: false, + object: true, + }, + AssignmentExpression: { + array: true, + object: true, + }, + }, + { + enforceForRenamedProperties: false, + }, + ], + "prefer-exponentiation-operator": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-template": "error", + "quote-props": ["error", "as-needed"], + "sort-vars": "error", + "spaced-comment": ["error", "always"], + strict: ["error", "never"], + yoda: [ + "error", + "never", + { + onlyEquality: true, + }, + ], + "array-bracket-newline": ["error", "consistent"], + "array-bracket-spacing": [ + "error", + "never", + { + arraysInArrays: true, + }, + ], + "array-element-newline": ["error", "consistent"], + "arrow-parens": ["error", "as-needed"], + "arrow-spacing": "error", + "block-spacing": ["error", "always"], + "brace-style": ["error", "1tbs"], + "comma-dangle": ["error", "always-multiline"], + "comma-spacing": [ + "error", + { + before: false, + after: true, + }, + ], + "comma-style": ["error", "last"], + "computed-property-spacing": ["error", "never"], + "dot-location": ["error", "property"], + "eol-last": ["error", "always"], + "func-call-spacing": ["error", "never"], + "function-call-argument-newline": ["error", "consistent"], + "function-paren-newline": ["error", "multiline-arguments"], + "jsx-quotes": ["error", "prefer-double"], + "key-spacing": [ + "error", + { + beforeColon: false, + afterColon: true, + }, + ], + "keyword-spacing": [ + "error", + { + before: true, + after: true, + }, + ], + "line-comment-position": [ + "error", + { + position: "above", + ignorePattern: "pragma", + applyDefaultIgnorePatterns: false, + }, + ], + "linebreak-style": ["error", "unix"], + "lines-around-comment": [ + "error", + { + beforeBlockComment: true, + afterBlockComment: true, + beforeLineComment: true, + allowBlockStart: true, + allowBlockEnd: false, + allowClassStart: true, + allowObjectStart: true, + allowObjectEnd: false, + allowArrayStart: false, + allowArrayEnd: false, + applyDefaultIgnorePatterns: false, + }, + ], + "lines-between-class-members": [ + "error", + "always", + { + exceptAfterSingleLine: true, + }, + ], + "multiline-ternary": ["error", "always-multiline"], + "new-parens": ["error", "never"], + "newline-per-chained-call": [ + "error", + { + ignoreChainWithDepth: 2, + }, + ], + "no-multi-spaces": "error", + "no-multiple-empty-lines": "error", + "no-trailing-spaces": "error", + "no-whitespace-before-property": "error", + "object-curly-newline": [ + "error", + { + multiline: true, + }, + ], + "object-curly-spacing": [ + "error", + "always", + { + arraysInObjects: true, + objectsInObjects: true, + }, + ], + "object-property-newline": [ + "error", + { + allowAllPropertiesOnSameLine: true, + }, + ], + "operator-linebreak": [ + "error", + "after", + { + overrides: { + "?": "before", + ":": "before", + }, + }, + ], + "padded-blocks": ["error", "never"], + "padding-line-between-statements": [ + "error", + { + blankLine: "always", + prev: ["const", "let", "var"], + next: "*", + }, + { + blankLine: "any", + prev: ["const", "let", "var"], + next: ["const", "let", "var"], + }, + ], + quotes: [ + "error", + "double", + { + allowTemplateLiterals: true, + }, + ], + "rest-spread-spacing": ["error", "never"], + semi: [ + "error", + "always", + { + omitLastInOneLineBlock: true, + }, + ], + "semi-spacing": [ + "error", + { + before: false, + after: true, + }, + ], + "semi-style": ["error", "last"], + "space-before-blocks": ["error", "always"], + "space-before-function-paren": ["error", "always"], + "space-infix-ops": [ + "error", + { + int32Hint: false, + }, + ], + "space-unary-ops": [ + "error", + { + words: true, + nonwords: false, + }, + ], + "switch-colon-spacing": [ + "error", + { + after: true, + before: false, + }, + ], + "template-curly-spacing": ["error", "never"], + "template-tag-spacing": ["error", "always"], + "unicode-bom": "error", + "wrap-iife": [ + "error", + "inside", + { + functionPrototypeMethods: true, + }, + ], + "wrap-regex": "error", - // plugin:react/recommended - "react/destructuring-assignment": [ - "error", - "always", - { - destructureInSignature: "always", - }, - ], - "react/function-component-definition": [ - "error", - { - namedComponents: "arrow-function", - unnamedComponents: "arrow-function", - }, - ], - "react/no-arrow-function-lifecycle": "error", - "react/no-invalid-html-attribute": "error", - "react/no-unknown-property": "error", - "react/self-closing-comp": [ - "error", - { - component: true, - html: true, - }, - ], - "react/jsx-boolean-value": ["error", "never"], - "react/jsx-closing-bracket-location": "error", - "react/jsx-closing-tag-location": "error", - "react/jsx-curly-brace-presence": ["error", "never"], - "react/jsx-curly-newline": ["error", "consistent"], - "react/jsx-equals-spacing": ["error", "never"], - "react/jsx-first-prop-new-line": ["error", "multiline-multiprop"], - "react/jsx-fragments": ["error", "syntax"], - "react/jsx-indent-props": "off", - "react/jsx-max-props-per-line": [ - "error", - { - maximum: 1, - }, - ], - "react/jsx-newline": [ - "error", - { - prevent: false, - }, - ], - // "react/jsx-no-leaked-render": ["error", { - // "validStrategies": ["coerce"] - // }], - "react/jsx-no-useless-fragment": [ - "error", - { - allowExpressions: true, - }, - ], - "react/jsx-one-expression-per-line": [ - "error", - { - allow: "literal", - }, - ], - "react/jsx-props-no-multi-spaces": "error", - "react/jsx-sort-props": [ - "error", - { - callbacksLast: true, - shorthandFirst: true, - multiline: "last", - reservedFirst: true, - }, - ], - "react/jsx-tag-spacing": [ - "error", - { - closingSlash: "never", - beforeSelfClosing: "always", - afterOpening: "never", - beforeClosing: "allow", - }, - ], - "react/jsx-wrap-multilines": "error", - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-unused-vars": "warn", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/quotes": [ - "error", - "double", - { - avoidEscape: true, - allowTemplateLiterals: true, - }, - ], - "object-curly-spacing": "off", - "@typescript-eslint/object-curly-spacing": ["error", "always"], - semi: "off", - "@typescript-eslint/semi": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "interface"], - "no-loops/no-loops": "error", - "no-async-promise-executor": "error", - "no-await-in-loop": "error", - "no-promise-executor-return": "error", - "require-atomic-updates": "error", - "max-nested-callbacks": ["error", 3], - "no-return-await": "error", - "prefer-promise-reject-errors": "error", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-misused-promises": [ - "error", - { - checksVoidReturn: false, - }, - ], - "@typescript-eslint/promise-function-async": "error", - "@typescript-eslint/no-non-null-assertion": "off", - }, - settings: { - react: { - version: "detect", - }, - "import/resolver": { - node: { - extensions: [".js", ".jsx", ".ts", ".tsx"], - paths: ["src"], - }, - }, - "import/extensions": [".js", ".jsx", ".ts", ".tsx"], - "import/parsers": { - "@typescript-eslint/parser": [".js", ".jsx", ".ts", ".tsx"], - }, - }, + // plugin:react/recommended + "react/destructuring-assignment": [ + "error", + "always", + { + destructureInSignature: "always", + }, + ], + "react/function-component-definition": [ + "error", + { + namedComponents: "arrow-function", + unnamedComponents: "arrow-function", + }, + ], + "react/no-arrow-function-lifecycle": "error", + "react/no-invalid-html-attribute": "error", + "react/no-unknown-property": "error", + "react/self-closing-comp": [ + "error", + { + component: true, + html: true, + }, + ], + "react/jsx-boolean-value": ["error", "never"], + "react/jsx-closing-bracket-location": "error", + "react/jsx-closing-tag-location": "error", + "react/jsx-curly-brace-presence": ["error", "never"], + "react/jsx-curly-newline": ["error", "consistent"], + "react/jsx-equals-spacing": ["error", "never"], + "react/jsx-first-prop-new-line": ["error", "multiline-multiprop"], + "react/jsx-fragments": ["error", "syntax"], + "react/jsx-indent-props": "off", + "react/jsx-max-props-per-line": [ + "error", + { + maximum: 1, + }, + ], + "react/jsx-newline": [ + "error", + { + prevent: false, + }, + ], + // "react/jsx-no-leaked-render": ["error", { + // "validStrategies": ["coerce"] + // }], + "react/jsx-no-useless-fragment": [ + "error", + { + allowExpressions: true, + }, + ], + "react/jsx-one-expression-per-line": [ + "error", + { + allow: "literal", + }, + ], + "react/jsx-props-no-multi-spaces": "error", + "react/jsx-sort-props": [ + "error", + { + callbacksLast: true, + shorthandFirst: true, + multiline: "last", + reservedFirst: true, + }, + ], + "react/jsx-tag-spacing": [ + "error", + { + closingSlash: "never", + beforeSelfClosing: "always", + afterOpening: "never", + beforeClosing: "allow", + }, + ], + "react/jsx-wrap-multilines": "error", + "@typescript-eslint/interface-name-prefix": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/quotes": [ + "error", + "double", + { + avoidEscape: true, + allowTemplateLiterals: true, + }, + ], + "object-curly-spacing": "off", + "@typescript-eslint/object-curly-spacing": ["error", "always"], + semi: "off", + "@typescript-eslint/semi": "error", + "@typescript-eslint/consistent-type-definitions": ["error", "interface"], + "no-loops/no-loops": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-promise-executor-return": "error", + "require-atomic-updates": "error", + "max-nested-callbacks": ["error", 3], + "no-return-await": "error", + "prefer-promise-reject-errors": "error", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: false, + }, + ], + "@typescript-eslint/promise-function-async": "error", + "@typescript-eslint/no-non-null-assertion": "off", + }, + settings: { + react: { + version: "detect", + }, + "import/resolver": { + node: { + extensions: [".js", ".jsx", ".ts", ".tsx"], + paths: ["src"], + }, + }, + "import/extensions": [".js", ".jsx", ".ts", ".tsx"], + "import/parsers": { + "@typescript-eslint/parser": [".js", ".jsx", ".ts", ".tsx"], + }, + }, }; diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml index 31493559..b76a3fe1 100644 --- a/.github/workflows/development.yml +++ b/.github/workflows/development.yml @@ -13,7 +13,7 @@ jobs: uses: open-sauced/hot/.github/workflows/development.yml@main build: runs-on: ubuntu-latest - steps: + steps: - name: "☁️ checkout repository" uses: actions/checkout@v2 diff --git a/.github/workflows/issue-metrics.yml b/.github/workflows/issue-metrics.yml index 02d8c6b4..d86c78a4 100644 --- a/.github/workflows/issue-metrics.yml +++ b/.github/workflows/issue-metrics.yml @@ -2,46 +2,45 @@ name: Monthly issue metrics on: workflow_dispatch: schedule: - - cron: '13 2 1 * *' + - cron: "13 2 1 * *" jobs: build: name: issue metrics runs-on: ubuntu-latest - - steps: - - - name: Get dates for last month - shell: bash - run: | - # Get the current date - current_date=$(date +'%Y-%m-%d') - - # Calculate the previous month - previous_date=$(date -d "$current_date -1 month" +'%Y-%m-%d') - - # Extract the year and month from the previous date - previous_year=$(date -d "$previous_date" +'%Y') - previous_month=$(date -d "$previous_date" +'%m') - - # Calculate the first day of the previous month - first_day=$(date -d "$previous_year-$previous_month-01" +'%Y-%m-%d') - # Calculate the last day of the previous month - last_day=$(date -d "$first_day +1 month -1 day" +'%Y-%m-%d') - - echo "$first_day..$last_day" - echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV" - - - name: Run issue-metrics tool - uses: github/issue-metrics@v2 - env: - GH_TOKEN: ${{ secrets.GH_TOKEN }} - SEARCH_QUERY: 'repo:open-sauced/ai is:issue created:${{ env.last_month }} -reason:"not planned"' - - - name: Create issue - uses: peter-evans/create-issue-from-file@v4 - with: - title: Monthly issue metrics report - content-filepath: ./issue_metrics.md - assignees: bdougie + steps: + - name: Get dates for last month + shell: bash + run: | + # Get the current date + current_date=$(date +'%Y-%m-%d') + + # Calculate the previous month + previous_date=$(date -d "$current_date -1 month" +'%Y-%m-%d') + + # Extract the year and month from the previous date + previous_year=$(date -d "$previous_date" +'%Y') + previous_month=$(date -d "$previous_date" +'%m') + + # Calculate the first day of the previous month + first_day=$(date -d "$previous_year-$previous_month-01" +'%Y-%m-%d') + + # Calculate the last day of the previous month + last_day=$(date -d "$first_day +1 month -1 day" +'%Y-%m-%d') + + echo "$first_day..$last_day" + echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV" + + - name: Run issue-metrics tool + uses: github/issue-metrics@v2 + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + SEARCH_QUERY: 'repo:open-sauced/ai is:issue created:${{ env.last_month }} -reason:"not planned"' + + - name: Create issue + uses: peter-evans/create-issue-from-file@v4 + with: + title: Monthly issue metrics report + content-filepath: ./issue_metrics.md + assignees: bdougie diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 9aa15ecb..928f022e 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -1,26 +1,26 @@ name: Playwright Tests on: push: - branches: [ main, beta ] + branches: [main, beta] pull_request: - branches: [ main, beta ] + branches: [main, beta] jobs: test: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: "🔧 setup Bun" - uses: oven-sh/setup-bun@v1 - - name: Install dependencies - run: bun install - - name: Install Playwright Browsers - run: bun x playwright install --with-deps - - name: Run Playwright tests - run: bun x playwright test - - uses: actions/upload-artifact@v3 - if: always() - with: - name: playwright-report - path: playwright-report/ - retention-days: 30 + - uses: actions/checkout@v3 + - name: "🔧 setup Bun" + uses: oven-sh/setup-bun@v1 + - name: Install dependencies + run: bun install + - name: Install Playwright Browsers + run: bun x playwright install --with-deps + - name: Run Playwright tests + run: bun x playwright test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/CHANGELOG.md b/CHANGELOG.md index 79871743..10223c49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,762 +7,653 @@ ## [1.15.0](https://github.com/open-sauced/ai/compare/v1.14.2...v1.15.0) (2024-01-30) - ### 🐛 Bug Fixes -* add `.gitattributes` file and normalize all the line endings ([#301](https://github.com/open-sauced/ai/issues/301)) ([a6279ea](https://github.com/open-sauced/ai/commit/a6279eaea274922b16b8854ab7b4fb39b66de69c)) -* change the classname and remove extra code ([241c385](https://github.com/open-sauced/ai/commit/241c385e82f3757b95b045423fbb01e512772bfd)) -* chunk processing in Chat component ([#289](https://github.com/open-sauced/ai/issues/289)) ([f1c29ff](https://github.com/open-sauced/ai/commit/f1c29ff9e219c46a768bc46b22553bb8a436e6c1)) -* elemenet to the dom if it's not added already ([c654b82](https://github.com/open-sauced/ai/commit/c654b826d2443adc6cffbeaa61970b6294596ca6)) -* Link to Usage Guide and Update README ([#298](https://github.com/open-sauced/ai/issues/298)) ([ba5cef6](https://github.com/open-sauced/ai/commit/ba5cef65dad7c2bc8340e274195b8a5b37e57b4f)) - +- add `.gitattributes` file and normalize all the line endings ([#301](https://github.com/open-sauced/ai/issues/301)) ([a6279ea](https://github.com/open-sauced/ai/commit/a6279eaea274922b16b8854ab7b4fb39b66de69c)) +- change the classname and remove extra code ([241c385](https://github.com/open-sauced/ai/commit/241c385e82f3757b95b045423fbb01e512772bfd)) +- chunk processing in Chat component ([#289](https://github.com/open-sauced/ai/issues/289)) ([f1c29ff](https://github.com/open-sauced/ai/commit/f1c29ff9e219c46a768bc46b22553bb8a436e6c1)) +- elemenet to the dom if it's not added already ([c654b82](https://github.com/open-sauced/ai/commit/c654b826d2443adc6cffbeaa61970b6294596ca6)) +- Link to Usage Guide and Update README ([#298](https://github.com/open-sauced/ai/issues/298)) ([ba5cef6](https://github.com/open-sauced/ai/commit/ba5cef65dad7c2bc8340e274195b8a5b37e57b4f)) ### 🍕 Features -* enable AI description generator on comments ([#285](https://github.com/open-sauced/ai/issues/285)) ([a30380b](https://github.com/open-sauced/ai/commit/a30380b1def14b97cf28f3945a1608cca6e3ba54)) -* Upgrade to v2 API ([693d459](https://github.com/open-sauced/ai/commit/693d45998dba2cacc18be10b397fdc624668fb03)) +- enable AI description generator on comments ([#285](https://github.com/open-sauced/ai/issues/285)) ([a30380b](https://github.com/open-sauced/ai/commit/a30380b1def14b97cf28f3945a1608cca6e3ba54)) +- Upgrade to v2 API ([693d459](https://github.com/open-sauced/ai/commit/693d45998dba2cacc18be10b397fdc624668fb03)) ## [1.15.0-beta.2](https://github.com/open-sauced/ai/compare/v1.15.0-beta.1...v1.15.0-beta.2) (2024-01-25) - ### 🍕 Features -* Upgrade to v2 API ([693d459](https://github.com/open-sauced/ai/commit/693d45998dba2cacc18be10b397fdc624668fb03)) +- Upgrade to v2 API ([693d459](https://github.com/open-sauced/ai/commit/693d45998dba2cacc18be10b397fdc624668fb03)) ## [1.15.0-beta.1](https://github.com/open-sauced/ai/compare/v1.14.3-beta.3...v1.15.0-beta.1) (2024-01-12) - ### 🍕 Features -* enable AI description generator on comments ([#285](https://github.com/open-sauced/ai/issues/285)) ([a30380b](https://github.com/open-sauced/ai/commit/a30380b1def14b97cf28f3945a1608cca6e3ba54)) +- enable AI description generator on comments ([#285](https://github.com/open-sauced/ai/issues/285)) ([a30380b](https://github.com/open-sauced/ai/commit/a30380b1def14b97cf28f3945a1608cca6e3ba54)) ## [1.14.3-beta.3](https://github.com/open-sauced/ai/compare/v1.14.3-beta.2...v1.14.3-beta.3) (2024-01-12) - ### 🐛 Bug Fixes -* Link to Usage Guide and Update README ([#298](https://github.com/open-sauced/ai/issues/298)) ([ba5cef6](https://github.com/open-sauced/ai/commit/ba5cef65dad7c2bc8340e274195b8a5b37e57b4f)) +- Link to Usage Guide and Update README ([#298](https://github.com/open-sauced/ai/issues/298)) ([ba5cef6](https://github.com/open-sauced/ai/commit/ba5cef65dad7c2bc8340e274195b8a5b37e57b4f)) ## [1.14.3-beta.2](https://github.com/open-sauced/ai/compare/v1.14.3-beta.1...v1.14.3-beta.2) (2024-01-12) - ### 🐛 Bug Fixes -* add `.gitattributes` file and normalize all the line endings ([#301](https://github.com/open-sauced/ai/issues/301)) ([a6279ea](https://github.com/open-sauced/ai/commit/a6279eaea274922b16b8854ab7b4fb39b66de69c)) -* chunk processing in Chat component ([#289](https://github.com/open-sauced/ai/issues/289)) ([f1c29ff](https://github.com/open-sauced/ai/commit/f1c29ff9e219c46a768bc46b22553bb8a436e6c1)) +- add `.gitattributes` file and normalize all the line endings ([#301](https://github.com/open-sauced/ai/issues/301)) ([a6279ea](https://github.com/open-sauced/ai/commit/a6279eaea274922b16b8854ab7b4fb39b66de69c)) +- chunk processing in Chat component ([#289](https://github.com/open-sauced/ai/issues/289)) ([f1c29ff](https://github.com/open-sauced/ai/commit/f1c29ff9e219c46a768bc46b22553bb8a436e6c1)) ## [1.14.3-beta.1](https://github.com/open-sauced/ai/compare/v1.14.2...v1.14.3-beta.1) (2023-11-09) - ### 🐛 Bug Fixes -* change the classname and remove extra code ([241c385](https://github.com/open-sauced/ai/commit/241c385e82f3757b95b045423fbb01e512772bfd)) -* elemenet to the dom if it's not added already ([c654b82](https://github.com/open-sauced/ai/commit/c654b826d2443adc6cffbeaa61970b6294596ca6)) +- change the classname and remove extra code ([241c385](https://github.com/open-sauced/ai/commit/241c385e82f3757b95b045423fbb01e512772bfd)) +- elemenet to the dom if it's not added already ([c654b82](https://github.com/open-sauced/ai/commit/c654b826d2443adc6cffbeaa61970b6294596ca6)) ## [1.14.2](https://github.com/open-sauced/ai/compare/v1.14.1...v1.14.2) (2023-11-06) - ### 🐛 Bug Fixes -* view on open sauced ([#278](https://github.com/open-sauced/ai/issues/278)) ([eb56300](https://github.com/open-sauced/ai/commit/eb563009c32adabede89187035aff9e46ce4f962)) +- view on open sauced ([#278](https://github.com/open-sauced/ai/issues/278)) ([eb56300](https://github.com/open-sauced/ai/commit/eb563009c32adabede89187035aff9e46ce4f962)) ## [1.14.2-beta.1](https://github.com/open-sauced/ai/compare/v1.14.1...v1.14.2-beta.1) (2023-11-05) - ### 🐛 Bug Fixes -* view on open sauced ([#278](https://github.com/open-sauced/ai/issues/278)) ([eb56300](https://github.com/open-sauced/ai/commit/eb563009c32adabede89187035aff9e46ce4f962)) +- view on open sauced ([#278](https://github.com/open-sauced/ai/issues/278)) ([eb56300](https://github.com/open-sauced/ai/commit/eb563009c32adabede89187035aff9e46ce4f962)) ## [1.14.1](https://github.com/open-sauced/ai/compare/v1.14.0...v1.14.1) (2023-11-01) - ### ✅ Tests -* setup playwright for e2e testing ([#262](https://github.com/open-sauced/ai/issues/262)) ([fc9acca](https://github.com/open-sauced/ai/commit/fc9acca13bd0ea97173eb81598037244272bc4ea)) - +- setup playwright for e2e testing ([#262](https://github.com/open-sauced/ai/issues/262)) ([fc9acca](https://github.com/open-sauced/ai/commit/fc9acca13bd0ea97173eb81598037244272bc4ea)) ### 🔁 Continuous Integration -* bun install, x ([#265](https://github.com/open-sauced/ai/issues/265)) ([6c765e0](https://github.com/open-sauced/ai/commit/6c765e05e16c8d90c3a2638328e7df4a32e83b14)) - +- bun install, x ([#265](https://github.com/open-sauced/ai/issues/265)) ([6c765e0](https://github.com/open-sauced/ai/commit/6c765e05e16c8d90c3a2638328e7df4a32e83b14)) ### 🐛 Bug Fixes -* linkedin projects share ([#264](https://github.com/open-sauced/ai/issues/264)) ([481472b](https://github.com/open-sauced/ai/commit/481472bf073f5c8d4c279ec13b751ab827a2c50f)) -* login to the website after rename ([1070a0c](https://github.com/open-sauced/ai/commit/1070a0c2693cf46d99219f4fe3b102032ce6a671)) -* prevent error when viewing repo and not logged in ([#260](https://github.com/open-sauced/ai/issues/260)) ([05fcf5e](https://github.com/open-sauced/ai/commit/05fcf5ea658e34472fc0913d1154b03ceca87e8b)) -* syntax error being thrown in Firefox for anonymous objects with computed property names ([#241](https://github.com/open-sauced/ai/issues/241)) ([00ba2c8](https://github.com/open-sauced/ai/commit/00ba2c8408486bcdba4698848b52adf0f807cc2a)) +- linkedin projects share ([#264](https://github.com/open-sauced/ai/issues/264)) ([481472b](https://github.com/open-sauced/ai/commit/481472bf073f5c8d4c279ec13b751ab827a2c50f)) +- login to the website after rename ([1070a0c](https://github.com/open-sauced/ai/commit/1070a0c2693cf46d99219f4fe3b102032ce6a671)) +- prevent error when viewing repo and not logged in ([#260](https://github.com/open-sauced/ai/issues/260)) ([05fcf5e](https://github.com/open-sauced/ai/commit/05fcf5ea658e34472fc0913d1154b03ceca87e8b)) +- syntax error being thrown in Firefox for anonymous objects with computed property names ([#241](https://github.com/open-sauced/ai/issues/241)) ([00ba2c8](https://github.com/open-sauced/ai/commit/00ba2c8408486bcdba4698848b52adf0f807cc2a)) ## [1.14.1-beta.6](https://github.com/open-sauced/ai/compare/v1.14.1-beta.5...v1.14.1-beta.6) (2023-11-01) - ### 🐛 Bug Fixes -* login to the website after rename ([1070a0c](https://github.com/open-sauced/ai/commit/1070a0c2693cf46d99219f4fe3b102032ce6a671)) +- login to the website after rename ([1070a0c](https://github.com/open-sauced/ai/commit/1070a0c2693cf46d99219f4fe3b102032ce6a671)) ## [1.14.1-beta.5](https://github.com/open-sauced/ai/compare/v1.14.1-beta.4...v1.14.1-beta.5) (2023-09-21) - ### 🔁 Continuous Integration -* bun install, x ([#265](https://github.com/open-sauced/ai/issues/265)) ([6c765e0](https://github.com/open-sauced/ai/commit/6c765e05e16c8d90c3a2638328e7df4a32e83b14)) +- bun install, x ([#265](https://github.com/open-sauced/ai/issues/265)) ([6c765e0](https://github.com/open-sauced/ai/commit/6c765e05e16c8d90c3a2638328e7df4a32e83b14)) ## [1.14.1-beta.4](https://github.com/open-sauced/ai/compare/v1.14.1-beta.3...v1.14.1-beta.4) (2023-09-18) - ### 🐛 Bug Fixes -* linkedin projects share ([#264](https://github.com/open-sauced/ai/issues/264)) ([481472b](https://github.com/open-sauced/ai/commit/481472bf073f5c8d4c279ec13b751ab827a2c50f)) +- linkedin projects share ([#264](https://github.com/open-sauced/ai/issues/264)) ([481472b](https://github.com/open-sauced/ai/commit/481472bf073f5c8d4c279ec13b751ab827a2c50f)) ## [1.14.1-beta.3](https://github.com/open-sauced/ai/compare/v1.14.1-beta.2...v1.14.1-beta.3) (2023-09-01) - ### ✅ Tests -* setup playwright for e2e testing ([#262](https://github.com/open-sauced/ai/issues/262)) ([fc9acca](https://github.com/open-sauced/ai/commit/fc9acca13bd0ea97173eb81598037244272bc4ea)) +- setup playwright for e2e testing ([#262](https://github.com/open-sauced/ai/issues/262)) ([fc9acca](https://github.com/open-sauced/ai/commit/fc9acca13bd0ea97173eb81598037244272bc4ea)) ## [1.14.1-beta.2](https://github.com/open-sauced/ai/compare/v1.14.1-beta.1...v1.14.1-beta.2) (2023-08-22) - ### 🐛 Bug Fixes -* prevent error when viewing repo and not logged in ([#260](https://github.com/open-sauced/ai/issues/260)) ([05fcf5e](https://github.com/open-sauced/ai/commit/05fcf5ea658e34472fc0913d1154b03ceca87e8b)) +- prevent error when viewing repo and not logged in ([#260](https://github.com/open-sauced/ai/issues/260)) ([05fcf5e](https://github.com/open-sauced/ai/commit/05fcf5ea658e34472fc0913d1154b03ceca87e8b)) ## [1.14.1-beta.1](https://github.com/open-sauced/ai/compare/v1.14.0...v1.14.1-beta.1) (2023-08-15) - ### 🐛 Bug Fixes -* syntax error being thrown in Firefox for anonymous objects with computed property names ([#241](https://github.com/open-sauced/ai/issues/241)) ([00ba2c8](https://github.com/open-sauced/ai/commit/00ba2c8408486bcdba4698848b52adf0f807cc2a)) +- syntax error being thrown in Firefox for anonymous objects with computed property names ([#241](https://github.com/open-sauced/ai/issues/241)) ([00ba2c8](https://github.com/open-sauced/ai/commit/00ba2c8408486bcdba4698848b52adf0f807cc2a)) ## [1.14.0](https://github.com/open-sauced/ai/compare/v1.13.0...v1.14.0) (2023-08-15) - ### 🍕 Features -* modify suggested queries ([#251](https://github.com/open-sauced/ai/issues/251)) ([d3ac35a](https://github.com/open-sauced/ai/commit/d3ac35a3bc7183c26a4bdf5687734e248a942b36)) - +- modify suggested queries ([#251](https://github.com/open-sauced/ai/issues/251)) ([d3ac35a](https://github.com/open-sauced/ai/commit/d3ac35a3bc7183c26a4bdf5687734e248a942b36)) ### 🐛 Bug Fixes -* incorrect embedding status, regex security warnings ([#253](https://github.com/open-sauced/ai/issues/253)) ([34f66b1](https://github.com/open-sauced/ai/commit/34f66b18bd8c665a6d7199143eeeec8c18ac8379)) -* updated link ([#245](https://github.com/open-sauced/ai/issues/245)) ([fe1a58b](https://github.com/open-sauced/ai/commit/fe1a58b6244c9ca1aba1700c3efb406267929ed0)) +- incorrect embedding status, regex security warnings ([#253](https://github.com/open-sauced/ai/issues/253)) ([34f66b1](https://github.com/open-sauced/ai/commit/34f66b18bd8c665a6d7199143eeeec8c18ac8379)) +- updated link ([#245](https://github.com/open-sauced/ai/issues/245)) ([fe1a58b](https://github.com/open-sauced/ai/commit/fe1a58b6244c9ca1aba1700c3efb406267929ed0)) ## [1.14.0-beta.2](https://github.com/open-sauced/ai/compare/v1.14.0-beta.1...v1.14.0-beta.2) (2023-08-15) - ### 🐛 Bug Fixes -* updated link ([#245](https://github.com/open-sauced/ai/issues/245)) ([fe1a58b](https://github.com/open-sauced/ai/commit/fe1a58b6244c9ca1aba1700c3efb406267929ed0)) +- updated link ([#245](https://github.com/open-sauced/ai/issues/245)) ([fe1a58b](https://github.com/open-sauced/ai/commit/fe1a58b6244c9ca1aba1700c3efb406267929ed0)) ## [1.14.0-beta.1](https://github.com/open-sauced/ai/compare/v1.13.1-beta.1...v1.14.0-beta.1) (2023-08-11) - ### 🍕 Features -* modify suggested queries ([#251](https://github.com/open-sauced/ai/issues/251)) ([d3ac35a](https://github.com/open-sauced/ai/commit/d3ac35a3bc7183c26a4bdf5687734e248a942b36)) +- modify suggested queries ([#251](https://github.com/open-sauced/ai/issues/251)) ([d3ac35a](https://github.com/open-sauced/ai/commit/d3ac35a3bc7183c26a4bdf5687734e248a942b36)) ## [1.13.1-beta.1](https://github.com/open-sauced/ai/compare/v1.13.0...v1.13.1-beta.1) (2023-08-11) - ### 🐛 Bug Fixes -* incorrect embedding status, regex security warnings ([#253](https://github.com/open-sauced/ai/issues/253)) ([34f66b1](https://github.com/open-sauced/ai/commit/34f66b18bd8c665a6d7199143eeeec8c18ac8379)) +- incorrect embedding status, regex security warnings ([#253](https://github.com/open-sauced/ai/issues/253)) ([34f66b1](https://github.com/open-sauced/ai/commit/34f66b18bd8c665a6d7199143eeeec8c18ac8379)) ## [1.13.0](https://github.com/open-sauced/ai/compare/v1.12.1...v1.13.0) (2023-08-10) - ### 🍕 Features -* chat dialog for talking to repos ([#226](https://github.com/open-sauced/ai/issues/226)) ([67f04d7](https://github.com/open-sauced/ai/commit/67f04d7420a1cddc6c99a8bedc1382b460e35ed5)) +- chat dialog for talking to repos ([#226](https://github.com/open-sauced/ai/issues/226)) ([67f04d7](https://github.com/open-sauced/ai/commit/67f04d7420a1cddc6c99a8bedc1382b460e35ed5)) ## [1.13.0-beta.1](https://github.com/open-sauced/ai/compare/v1.12.1...v1.13.0-beta.1) (2023-08-10) - ### 🍕 Features -* chat dialog for talking to repos ([#226](https://github.com/open-sauced/ai/issues/226)) ([67f04d7](https://github.com/open-sauced/ai/commit/67f04d7420a1cddc6c99a8bedc1382b460e35ed5)) +- chat dialog for talking to repos ([#226](https://github.com/open-sauced/ai/issues/226)) ([67f04d7](https://github.com/open-sauced/ai/commit/67f04d7420a1cddc6c99a8bedc1382b460e35ed5)) ## [1.12.1](https://github.com/open-sauced/ai/compare/v1.12.0...v1.12.1) (2023-08-10) - ### 🐛 Bug Fixes -* Multiple button injections ([#244](https://github.com/open-sauced/ai/issues/244)) ([0e06d3e](https://github.com/open-sauced/ai/commit/0e06d3edd5639f469dc8504077487cfd88eb3506)) +- Multiple button injections ([#244](https://github.com/open-sauced/ai/issues/244)) ([0e06d3e](https://github.com/open-sauced/ai/commit/0e06d3edd5639f469dc8504077487cfd88eb3506)) ## [1.12.1-beta.1](https://github.com/open-sauced/ai/compare/v1.12.0...v1.12.1-beta.1) (2023-08-10) - ### 🐛 Bug Fixes -* Multiple button injections ([#244](https://github.com/open-sauced/ai/issues/244)) ([0e06d3e](https://github.com/open-sauced/ai/commit/0e06d3edd5639f469dc8504077487cfd88eb3506)) +- Multiple button injections ([#244](https://github.com/open-sauced/ai/issues/244)) ([0e06d3e](https://github.com/open-sauced/ai/commit/0e06d3edd5639f469dc8504077487cfd88eb3506)) ## [1.12.0](https://github.com/open-sauced/ai/compare/v1.11.1...v1.12.0) (2023-07-31) - ### 🍕 Features -* Login with pkce ([#230](https://github.com/open-sauced/ai/issues/230)) ([42e8d4a](https://github.com/open-sauced/ai/commit/42e8d4ad4d3bc47c4138b2eeec20920015183849)) -* view repos on opensauced ([#218](https://github.com/open-sauced/ai/issues/218)) ([f33d9fd](https://github.com/open-sauced/ai/commit/f33d9fd8ab66242aecf07be23d961c33b9779727)) - +- Login with pkce ([#230](https://github.com/open-sauced/ai/issues/230)) ([42e8d4a](https://github.com/open-sauced/ai/commit/42e8d4ad4d3bc47c4138b2eeec20920015183849)) +- view repos on opensauced ([#218](https://github.com/open-sauced/ai/issues/218)) ([f33d9fd](https://github.com/open-sauced/ai/commit/f33d9fd8ab66242aecf07be23d961c33b9779727)) ### 🐛 Bug Fixes -* manual release.yml ([a41de3f](https://github.com/open-sauced/ai/commit/a41de3f288b1147e5cf9fc0139ac80fcd1c8e2ee)) -* post highlights from the extension ([#223](https://github.com/open-sauced/ai/issues/223)) ([7d91011](https://github.com/open-sauced/ai/commit/7d910114ed4c094e8040549496873c79aff2196e)) -* redirect to home page after posting a highlight ([#203](https://github.com/open-sauced/ai/issues/203)) ([4ebd2d1](https://github.com/open-sauced/ai/commit/4ebd2d15b8b3bae0ea6b563568b0b7b01a86f832)) -* view on open sauced location ([#225](https://github.com/open-sauced/ai/issues/225)) ([0ecfef0](https://github.com/open-sauced/ai/commit/0ecfef0dda3a83b43deaa12189a7dc0474f29d78)) +- manual release.yml ([a41de3f](https://github.com/open-sauced/ai/commit/a41de3f288b1147e5cf9fc0139ac80fcd1c8e2ee)) +- post highlights from the extension ([#223](https://github.com/open-sauced/ai/issues/223)) ([7d91011](https://github.com/open-sauced/ai/commit/7d910114ed4c094e8040549496873c79aff2196e)) +- redirect to home page after posting a highlight ([#203](https://github.com/open-sauced/ai/issues/203)) ([4ebd2d1](https://github.com/open-sauced/ai/commit/4ebd2d15b8b3bae0ea6b563568b0b7b01a86f832)) +- view on open sauced location ([#225](https://github.com/open-sauced/ai/issues/225)) ([0ecfef0](https://github.com/open-sauced/ai/commit/0ecfef0dda3a83b43deaa12189a7dc0474f29d78)) ## [1.12.0-beta.6](https://github.com/open-sauced/ai/compare/v1.12.0-beta.5...v1.12.0-beta.6) (2023-07-31) - ### 🐛 Bug Fixes -* manual release.yml ([a41de3f](https://github.com/open-sauced/ai/commit/a41de3f288b1147e5cf9fc0139ac80fcd1c8e2ee)) +- manual release.yml ([a41de3f](https://github.com/open-sauced/ai/commit/a41de3f288b1147e5cf9fc0139ac80fcd1c8e2ee)) ## [1.12.0-beta.5](https://github.com/open-sauced/ai/compare/v1.12.0-beta.4...v1.12.0-beta.5) (2023-07-28) - ### 🍕 Features -* Login with pkce ([#230](https://github.com/open-sauced/ai/issues/230)) ([42e8d4a](https://github.com/open-sauced/ai/commit/42e8d4ad4d3bc47c4138b2eeec20920015183849)) +- Login with pkce ([#230](https://github.com/open-sauced/ai/issues/230)) ([42e8d4a](https://github.com/open-sauced/ai/commit/42e8d4ad4d3bc47c4138b2eeec20920015183849)) ## [1.12.0-beta.4](https://github.com/open-sauced/ai/compare/v1.12.0-beta.3...v1.12.0-beta.4) (2023-07-25) - ### 🐛 Bug Fixes -* view on open sauced location ([#225](https://github.com/open-sauced/ai/issues/225)) ([0ecfef0](https://github.com/open-sauced/ai/commit/0ecfef0dda3a83b43deaa12189a7dc0474f29d78)) +- view on open sauced location ([#225](https://github.com/open-sauced/ai/issues/225)) ([0ecfef0](https://github.com/open-sauced/ai/commit/0ecfef0dda3a83b43deaa12189a7dc0474f29d78)) ## [1.12.0-beta.3](https://github.com/open-sauced/ai/compare/v1.12.0-beta.2...v1.12.0-beta.3) (2023-07-20) - ### 🐛 Bug Fixes -* redirect to home page after posting a highlight ([#203](https://github.com/open-sauced/ai/issues/203)) ([4ebd2d1](https://github.com/open-sauced/ai/commit/4ebd2d15b8b3bae0ea6b563568b0b7b01a86f832)) +- redirect to home page after posting a highlight ([#203](https://github.com/open-sauced/ai/issues/203)) ([4ebd2d1](https://github.com/open-sauced/ai/commit/4ebd2d15b8b3bae0ea6b563568b0b7b01a86f832)) ## [1.12.0-beta.2](https://github.com/open-sauced/ai/compare/v1.12.0-beta.1...v1.12.0-beta.2) (2023-07-19) - ### 🐛 Bug Fixes -* post highlights from the extension ([#223](https://github.com/open-sauced/ai/issues/223)) ([7d91011](https://github.com/open-sauced/ai/commit/7d910114ed4c094e8040549496873c79aff2196e)) +- post highlights from the extension ([#223](https://github.com/open-sauced/ai/issues/223)) ([7d91011](https://github.com/open-sauced/ai/commit/7d910114ed4c094e8040549496873c79aff2196e)) ## [1.12.0-beta.1](https://github.com/open-sauced/ai/compare/v1.11.1...v1.12.0-beta.1) (2023-07-18) - ### 🍕 Features -* view repos on opensauced ([#218](https://github.com/open-sauced/ai/issues/218)) ([f33d9fd](https://github.com/open-sauced/ai/commit/f33d9fd8ab66242aecf07be23d961c33b9779727)) +- view repos on opensauced ([#218](https://github.com/open-sauced/ai/issues/218)) ([f33d9fd](https://github.com/open-sauced/ai/commit/f33d9fd8ab66242aecf07be23d961c33b9779727)) ## [1.11.1](https://github.com/open-sauced/ai/compare/v1.11.0...v1.11.1) (2023-07-18) - ### ✅ Tests -* api responses match our expectations ([#216](https://github.com/open-sauced/ai/issues/216)) ([7f79b0a](https://github.com/open-sauced/ai/commit/7f79b0a3d79ff4120b01574dd730cf54bc608b82)) - +- api responses match our expectations ([#216](https://github.com/open-sauced/ai/issues/216)) ([7f79b0a](https://github.com/open-sauced/ai/commit/7f79b0a3d79ff4120b01574dd730cf54bc608b82)) ### 🐛 Bug Fixes -* Broken authentication on dev ([#215](https://github.com/open-sauced/ai/issues/215)) ([c6bf2c8](https://github.com/open-sauced/ai/commit/c6bf2c801a5dc39131e8bf6fb8a4965316d8bbb2)) +- Broken authentication on dev ([#215](https://github.com/open-sauced/ai/issues/215)) ([c6bf2c8](https://github.com/open-sauced/ai/commit/c6bf2c801a5dc39131e8bf6fb8a4965316d8bbb2)) ## [1.11.1-beta.2](https://github.com/open-sauced/ai/compare/v1.11.1-beta.1...v1.11.1-beta.2) (2023-07-15) - ### 🐛 Bug Fixes -* Broken authentication on dev ([#215](https://github.com/open-sauced/ai/issues/215)) ([c6bf2c8](https://github.com/open-sauced/ai/commit/c6bf2c801a5dc39131e8bf6fb8a4965316d8bbb2)) +- Broken authentication on dev ([#215](https://github.com/open-sauced/ai/issues/215)) ([c6bf2c8](https://github.com/open-sauced/ai/commit/c6bf2c801a5dc39131e8bf6fb8a4965316d8bbb2)) ## [1.11.1-beta.1](https://github.com/open-sauced/ai/compare/v1.11.0...v1.11.1-beta.1) (2023-07-15) - ### ✅ Tests -* api responses match our expectations ([#216](https://github.com/open-sauced/ai/issues/216)) ([7f79b0a](https://github.com/open-sauced/ai/commit/7f79b0a3d79ff4120b01574dd730cf54bc608b82)) +- api responses match our expectations ([#216](https://github.com/open-sauced/ai/issues/216)) ([7f79b0a](https://github.com/open-sauced/ai/commit/7f79b0a3d79ff4120b01574dd730cf54bc608b82)) ## [1.11.0](https://github.com/open-sauced/ai/compare/v1.10.0...v1.11.0) (2023-07-14) - ### 🍕 Features -* make formal the default tone ([#211](https://github.com/open-sauced/ai/issues/211)) ([814378d](https://github.com/open-sauced/ai/commit/814378d4cbe31aa4c38ea1f8900c9f8bd3c97ae0)) +- make formal the default tone ([#211](https://github.com/open-sauced/ai/issues/211)) ([814378d](https://github.com/open-sauced/ai/commit/814378d4cbe31aa4c38ea1f8900c9f8bd3c97ae0)) ## [1.11.0-beta.1](https://github.com/open-sauced/ai/compare/v1.10.0...v1.11.0-beta.1) (2023-07-14) - ### 🍕 Features -* make formal the default tone ([#211](https://github.com/open-sauced/ai/issues/211)) ([814378d](https://github.com/open-sauced/ai/commit/814378d4cbe31aa4c38ea1f8900c9f8bd3c97ae0)) +- make formal the default tone ([#211](https://github.com/open-sauced/ai/issues/211)) ([814378d](https://github.com/open-sauced/ai/commit/814378d4cbe31aa4c38ea1f8900c9f8bd3c97ae0)) ## [1.10.0](https://github.com/open-sauced/ai/compare/v1.9.0...v1.10.0) (2023-07-12) - ### 🍕 Features -* Cherry pick susmita ([#204](https://github.com/open-sauced/ai/issues/204)) ([7458724](https://github.com/open-sauced/ai/commit/74587246034fb985d1a56cad0a1eface13a67ab0)) -* react/unreact on highlights ([#200](https://github.com/open-sauced/ai/issues/200)) ([c65eca0](https://github.com/open-sauced/ai/commit/c65eca043b78dd662d58768e6ab0bebb2fe9b845)) - +- Cherry pick susmita ([#204](https://github.com/open-sauced/ai/issues/204)) ([7458724](https://github.com/open-sauced/ai/commit/74587246034fb985d1a56cad0a1eface13a67ab0)) +- react/unreact on highlights ([#200](https://github.com/open-sauced/ai/issues/200)) ([c65eca0](https://github.com/open-sauced/ai/commit/c65eca043b78dd662d58768e6ab0bebb2fe9b845)) ### 🐛 Bug Fixes -* Create issue-metrics.yml ([4a6c19d](https://github.com/open-sauced/ai/commit/4a6c19dfe767c11e02206f40a8000a02a7139181)) -* Rename project-utilities.md to 3-project-utilities.md ([d0a6702](https://github.com/open-sauced/ai/commit/d0a67026188786cc91a004a2488723439b8a9051)) -* Updated RepoChecker to allow all types of repos ([#202](https://github.com/open-sauced/ai/issues/202)) ([2161918](https://github.com/open-sauced/ai/commit/2161918c3c4fe731a65e9aaa80cce154faf7b0b6)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) +- Create issue-metrics.yml ([4a6c19d](https://github.com/open-sauced/ai/commit/4a6c19dfe767c11e02206f40a8000a02a7139181)) +- Rename project-utilities.md to 3-project-utilities.md ([d0a6702](https://github.com/open-sauced/ai/commit/d0a67026188786cc91a004a2488723439b8a9051)) +- Updated RepoChecker to allow all types of repos ([#202](https://github.com/open-sauced/ai/issues/202)) ([2161918](https://github.com/open-sauced/ai/commit/2161918c3c4fe731a65e9aaa80cce154faf7b0b6)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) ## [1.10.0-beta.4](https://github.com/open-sauced/ai/compare/v1.10.0-beta.3...v1.10.0-beta.4) (2023-07-12) - ### 🐛 Bug Fixes -* Create issue-metrics.yml ([4a6c19d](https://github.com/open-sauced/ai/commit/4a6c19dfe767c11e02206f40a8000a02a7139181)) +- Create issue-metrics.yml ([4a6c19d](https://github.com/open-sauced/ai/commit/4a6c19dfe767c11e02206f40a8000a02a7139181)) ## [1.10.0-beta.3](https://github.com/open-sauced/ai/compare/v1.10.0-beta.2...v1.10.0-beta.3) (2023-07-11) - ### 🐛 Bug Fixes -* Rename project-utilities.md to 3-project-utilities.md ([d0a6702](https://github.com/open-sauced/ai/commit/d0a67026188786cc91a004a2488723439b8a9051)) -* Updated RepoChecker to allow all types of repos ([#202](https://github.com/open-sauced/ai/issues/202)) ([2161918](https://github.com/open-sauced/ai/commit/2161918c3c4fe731a65e9aaa80cce154faf7b0b6)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) +- Rename project-utilities.md to 3-project-utilities.md ([d0a6702](https://github.com/open-sauced/ai/commit/d0a67026188786cc91a004a2488723439b8a9051)) +- Updated RepoChecker to allow all types of repos ([#202](https://github.com/open-sauced/ai/issues/202)) ([2161918](https://github.com/open-sauced/ai/commit/2161918c3c4fe731a65e9aaa80cce154faf7b0b6)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) ## [1.10.0-beta.2](https://github.com/open-sauced/ai/compare/v1.10.0-beta.1...v1.10.0-beta.2) (2023-07-11) - ### 🍕 Features -* Cherry pick susmita ([#204](https://github.com/open-sauced/ai/issues/204)) ([7458724](https://github.com/open-sauced/ai/commit/74587246034fb985d1a56cad0a1eface13a67ab0)) +- Cherry pick susmita ([#204](https://github.com/open-sauced/ai/issues/204)) ([7458724](https://github.com/open-sauced/ai/commit/74587246034fb985d1a56cad0a1eface13a67ab0)) ## [1.10.0-beta.1](https://github.com/open-sauced/ai/compare/v1.9.0...v1.10.0-beta.1) (2023-07-10) - ### 🍕 Features -* react/unreact on highlights ([#200](https://github.com/open-sauced/ai/issues/200)) ([c65eca0](https://github.com/open-sauced/ai/commit/c65eca043b78dd662d58768e6ab0bebb2fe9b845)) +- react/unreact on highlights ([#200](https://github.com/open-sauced/ai/issues/200)) ([c65eca0](https://github.com/open-sauced/ai/commit/c65eca043b78dd662d58768e6ab0bebb2fe9b845)) ## [1.9.0](https://github.com/open-sauced/ai/compare/v1.8.0...v1.9.0) (2023-06-29) - ### ✅ Tests -* Tests for colorPreference and getUserPRVelocity ([#190](https://github.com/open-sauced/ai/issues/190)) ([6b9a5c3](https://github.com/open-sauced/ai/commit/6b9a5c320e07b10e4222d7210f8f8b7917e6abe7)) - +- Tests for colorPreference and getUserPRVelocity ([#190](https://github.com/open-sauced/ai/issues/190)) ([6b9a5c3](https://github.com/open-sauced/ai/commit/6b9a5c320e07b10e4222d7210f8f8b7917e6abe7)) ### 🍕 Features -* post to linkedin projects ([#177](https://github.com/open-sauced/ai/issues/177)) ([a20bff4](https://github.com/open-sauced/ai/commit/a20bff4aaa762b40fb5d80da8a02ee76271f3ac4)) - +- post to linkedin projects ([#177](https://github.com/open-sauced/ai/issues/177)) ([a20bff4](https://github.com/open-sauced/ai/commit/a20bff4aaa762b40fb5d80da8a02ee76271f3ac4)) ### 🐛 Bug Fixes -* Made the "Tools:" conditional according to the current page ([#197](https://github.com/open-sauced/ai/issues/197)) ([b08ad07](https://github.com/open-sauced/ai/commit/b08ad0713e625f999a422f65b569b700649a963c)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) -* separate vite and vitest configs ([#193](https://github.com/open-sauced/ai/issues/193)) ([7a980c8](https://github.com/open-sauced/ai/commit/7a980c82d1056cd1f798c39e51ba9fbc4d205ad7)) +- Made the "Tools:" conditional according to the current page ([#197](https://github.com/open-sauced/ai/issues/197)) ([b08ad07](https://github.com/open-sauced/ai/commit/b08ad0713e625f999a422f65b569b700649a963c)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) +- separate vite and vitest configs ([#193](https://github.com/open-sauced/ai/issues/193)) ([7a980c8](https://github.com/open-sauced/ai/commit/7a980c82d1056cd1f798c39e51ba9fbc4d205ad7)) ## [1.9.0-beta.3](https://github.com/open-sauced/ai/compare/v1.9.0-beta.2...v1.9.0-beta.3) (2023-06-29) - ### 🐛 Bug Fixes -* Made the "Tools:" conditional according to the current page ([#197](https://github.com/open-sauced/ai/issues/197)) ([b08ad07](https://github.com/open-sauced/ai/commit/b08ad0713e625f999a422f65b569b700649a963c)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) +- Made the "Tools:" conditional according to the current page ([#197](https://github.com/open-sauced/ai/issues/197)) ([b08ad07](https://github.com/open-sauced/ai/commit/b08ad0713e625f999a422f65b569b700649a963c)), closes [issue#112](https://github.com/open-sauced/issue/issues/112) [issue#112](https://github.com/open-sauced/issue/issues/112) ## [1.9.0-beta.2](https://github.com/open-sauced/ai/compare/v1.9.0-beta.1...v1.9.0-beta.2) (2023-06-21) - ### 🐛 Bug Fixes -* separate vite and vitest configs ([#193](https://github.com/open-sauced/ai/issues/193)) ([7a980c8](https://github.com/open-sauced/ai/commit/7a980c82d1056cd1f798c39e51ba9fbc4d205ad7)) +- separate vite and vitest configs ([#193](https://github.com/open-sauced/ai/issues/193)) ([7a980c8](https://github.com/open-sauced/ai/commit/7a980c82d1056cd1f798c39e51ba9fbc4d205ad7)) ## [1.9.0-beta.1](https://github.com/open-sauced/ai/compare/v1.8.1-beta.1...v1.9.0-beta.1) (2023-06-21) - ### 🍕 Features -* post to linkedin projects ([#177](https://github.com/open-sauced/ai/issues/177)) ([a20bff4](https://github.com/open-sauced/ai/commit/a20bff4aaa762b40fb5d80da8a02ee76271f3ac4)) +- post to linkedin projects ([#177](https://github.com/open-sauced/ai/issues/177)) ([a20bff4](https://github.com/open-sauced/ai/commit/a20bff4aaa762b40fb5d80da8a02ee76271f3ac4)) ## [1.8.1-beta.1](https://github.com/open-sauced/ai/compare/v1.8.0...v1.8.1-beta.1) (2023-06-20) - ### ✅ Tests -* Tests for colorPreference and getUserPRVelocity ([#190](https://github.com/open-sauced/ai/issues/190)) ([6b9a5c3](https://github.com/open-sauced/ai/commit/6b9a5c320e07b10e4222d7210f8f8b7917e6abe7)) +- Tests for colorPreference and getUserPRVelocity ([#190](https://github.com/open-sauced/ai/issues/190)) ([6b9a5c3](https://github.com/open-sauced/ai/commit/6b9a5c320e07b10e4222d7210f8f8b7917e6abe7)) ## [1.8.0](https://github.com/open-sauced/ai/compare/v1.7.0...v1.8.0) (2023-06-18) - ### 🧑‍💻 Code Refactoring -* move ai config to settings ([#183](https://github.com/open-sauced/ai/issues/183)) ([c31bd61](https://github.com/open-sauced/ai/commit/c31bd61d77878465c359455294865007ff07e7c0)) -* remove link to dashboard ([#185](https://github.com/open-sauced/ai/issues/185)) ([25b0017](https://github.com/open-sauced/ai/commit/25b0017ea538e20934ce7b0f751e7903a5d5276b)) - +- move ai config to settings ([#183](https://github.com/open-sauced/ai/issues/183)) ([c31bd61](https://github.com/open-sauced/ai/commit/c31bd61d77878465c359455294865007ff07e7c0)) +- remove link to dashboard ([#185](https://github.com/open-sauced/ai/issues/185)) ([25b0017](https://github.com/open-sauced/ai/commit/25b0017ea538e20934ce7b0f751e7903a5d5276b)) ### 🍕 Features -* show highlight reactions ([#186](https://github.com/open-sauced/ai/issues/186)) ([6707b0b](https://github.com/open-sauced/ai/commit/6707b0bf3abe67f9b9a26821c8ae4c8eeafb6d07)) +- show highlight reactions ([#186](https://github.com/open-sauced/ai/issues/186)) ([6707b0b](https://github.com/open-sauced/ai/commit/6707b0bf3abe67f9b9a26821c8ae4c8eeafb6d07)) ## [1.8.0-beta.1](https://github.com/open-sauced/ai/compare/v1.7.1-beta.2...v1.8.0-beta.1) (2023-06-17) - ### 🍕 Features -* show highlight reactions ([#186](https://github.com/open-sauced/ai/issues/186)) ([6707b0b](https://github.com/open-sauced/ai/commit/6707b0bf3abe67f9b9a26821c8ae4c8eeafb6d07)) +- show highlight reactions ([#186](https://github.com/open-sauced/ai/issues/186)) ([6707b0b](https://github.com/open-sauced/ai/commit/6707b0bf3abe67f9b9a26821c8ae4c8eeafb6d07)) ## [1.7.1-beta.2](https://github.com/open-sauced/ai/compare/v1.7.1-beta.1...v1.7.1-beta.2) (2023-06-16) - ### 🧑‍💻 Code Refactoring -* remove link to dashboard ([#185](https://github.com/open-sauced/ai/issues/185)) ([25b0017](https://github.com/open-sauced/ai/commit/25b0017ea538e20934ce7b0f751e7903a5d5276b)) +- remove link to dashboard ([#185](https://github.com/open-sauced/ai/issues/185)) ([25b0017](https://github.com/open-sauced/ai/commit/25b0017ea538e20934ce7b0f751e7903a5d5276b)) ## [1.7.1-beta.1](https://github.com/open-sauced/ai/compare/v1.7.0...v1.7.1-beta.1) (2023-06-16) - ### 🧑‍💻 Code Refactoring -* move ai config to settings ([#183](https://github.com/open-sauced/ai/issues/183)) ([c31bd61](https://github.com/open-sauced/ai/commit/c31bd61d77878465c359455294865007ff07e7c0)) +- move ai config to settings ([#183](https://github.com/open-sauced/ai/issues/183)) ([c31bd61](https://github.com/open-sauced/ai/commit/c31bd61d77878465c359455294865007ff07e7c0)) ## [1.7.0](https://github.com/open-sauced/ai/compare/v1.6.0...v1.7.0) (2023-06-15) - ### 🐛 Bug Fixes -* update email invite message ([c1008e5](https://github.com/open-sauced/ai/commit/c1008e5f94f82cc87f9f3691bdd8d664b6a6f684)) - +- update email invite message ([c1008e5](https://github.com/open-sauced/ai/commit/c1008e5f94f82cc87f9f3691bdd8d664b6a6f684)) ### 🍕 Features -* Added Contributed Repos to profile page ([#181](https://github.com/open-sauced/ai/issues/181)) ([4901f7b](https://github.com/open-sauced/ai/commit/4901f7b322b87e27ed755be598c2975d6329f067)) -* AI PR review menu ([#174](https://github.com/open-sauced/ai/issues/174)) ([ef52439](https://github.com/open-sauced/ai/commit/ef5243921ced600cec4ed0270c76ecdf9885ab0b)) +- Added Contributed Repos to profile page ([#181](https://github.com/open-sauced/ai/issues/181)) ([4901f7b](https://github.com/open-sauced/ai/commit/4901f7b322b87e27ed755be598c2975d6329f067)) +- AI PR review menu ([#174](https://github.com/open-sauced/ai/issues/174)) ([ef52439](https://github.com/open-sauced/ai/commit/ef5243921ced600cec4ed0270c76ecdf9885ab0b)) ## [1.7.0-beta.2](https://github.com/open-sauced/ai/compare/v1.7.0-beta.1...v1.7.0-beta.2) (2023-06-15) - ### 🍕 Features -* AI PR review menu ([#174](https://github.com/open-sauced/ai/issues/174)) ([ef52439](https://github.com/open-sauced/ai/commit/ef5243921ced600cec4ed0270c76ecdf9885ab0b)) +- AI PR review menu ([#174](https://github.com/open-sauced/ai/issues/174)) ([ef52439](https://github.com/open-sauced/ai/commit/ef5243921ced600cec4ed0270c76ecdf9885ab0b)) ## [1.7.0-beta.1](https://github.com/open-sauced/ai/compare/v1.6.1-beta.1...v1.7.0-beta.1) (2023-06-14) - ### 🍕 Features -* Added Contributed Repos to profile page ([#181](https://github.com/open-sauced/ai/issues/181)) ([4901f7b](https://github.com/open-sauced/ai/commit/4901f7b322b87e27ed755be598c2975d6329f067)) +- Added Contributed Repos to profile page ([#181](https://github.com/open-sauced/ai/issues/181)) ([4901f7b](https://github.com/open-sauced/ai/commit/4901f7b322b87e27ed755be598c2975d6329f067)) ## [1.6.1-beta.1](https://github.com/open-sauced/ai/compare/v1.6.0...v1.6.1-beta.1) (2023-06-13) - ### 🐛 Bug Fixes -* update email invite message ([c1008e5](https://github.com/open-sauced/ai/commit/c1008e5f94f82cc87f9f3691bdd8d664b6a6f684)) +- update email invite message ([c1008e5](https://github.com/open-sauced/ai/commit/c1008e5f94f82cc87f9f3691bdd8d664b6a6f684)) ## [1.6.0](https://github.com/open-sauced/ai/compare/v1.5.0...v1.6.0) (2023-06-13) - ### 🍕 Features -* carousel design for the highlights feed ([#173](https://github.com/open-sauced/ai/issues/173)) ([0392654](https://github.com/open-sauced/ai/commit/03926540cc0ae2203d00bda69d65a40e147e1d46)) +- carousel design for the highlights feed ([#173](https://github.com/open-sauced/ai/issues/173)) ([0392654](https://github.com/open-sauced/ai/commit/03926540cc0ae2203d00bda69d65a40e147e1d46)) ## [1.6.0-beta.1](https://github.com/open-sauced/ai/compare/v1.5.0...v1.6.0-beta.1) (2023-06-13) - ### 🍕 Features -* carousel design for the highlights feed ([#173](https://github.com/open-sauced/ai/issues/173)) ([0392654](https://github.com/open-sauced/ai/commit/03926540cc0ae2203d00bda69d65a40e147e1d46)) +- carousel design for the highlights feed ([#173](https://github.com/open-sauced/ai/issues/173)) ([0392654](https://github.com/open-sauced/ai/commit/03926540cc0ae2203d00bda69d65a40e147e1d46)) ## [1.5.0](https://github.com/open-sauced/ai/compare/v1.4.0...v1.5.0) (2023-06-06) - ### 🧑‍💻 Code Refactoring -* removed post highlight message passing ([#165](https://github.com/open-sauced/ai/issues/165)) ([bad2112](https://github.com/open-sauced/ai/commit/bad211295a593f59530999d886ac99cc7f398da2)) - +- removed post highlight message passing ([#165](https://github.com/open-sauced/ai/issues/165)) ([bad2112](https://github.com/open-sauced/ai/commit/bad211295a593f59530999d886ac99cc7f398da2)) ### 🍕 Features -* extension settings ([#132](https://github.com/open-sauced/ai/issues/132)) ([722cbbe](https://github.com/open-sauced/ai/commit/722cbbecd1843c088b065e91d363e83f71909e4e)) - +- extension settings ([#132](https://github.com/open-sauced/ai/issues/132)) ([722cbbe](https://github.com/open-sauced/ai/commit/722cbbecd1843c088b065e91d363e83f71909e4e)) ### 🐛 Bug Fixes -* highlight redirection, multiple AI generation, draft commit messages ([#163](https://github.com/open-sauced/ai/issues/163)) ([03b91ab](https://github.com/open-sauced/ai/commit/03b91ab3b73f37e2c916b3cf6c079f2e4b58879c)) -* post-highlight-page-check ([#164](https://github.com/open-sauced/ai/issues/164)) ([ed98eb2](https://github.com/open-sauced/ai/commit/ed98eb2c865819adba1cf4a82716c4834c977d0a)) -* remove configuration enabled check from AI button ([#170](https://github.com/open-sauced/ai/issues/170)) ([cedca79](https://github.com/open-sauced/ai/commit/cedca79650f5f2dd9d4196ce6d6048097315f6c9)) +- highlight redirection, multiple AI generation, draft commit messages ([#163](https://github.com/open-sauced/ai/issues/163)) ([03b91ab](https://github.com/open-sauced/ai/commit/03b91ab3b73f37e2c916b3cf6c079f2e4b58879c)) +- post-highlight-page-check ([#164](https://github.com/open-sauced/ai/issues/164)) ([ed98eb2](https://github.com/open-sauced/ai/commit/ed98eb2c865819adba1cf4a82716c4834c977d0a)) +- remove configuration enabled check from AI button ([#170](https://github.com/open-sauced/ai/issues/170)) ([cedca79](https://github.com/open-sauced/ai/commit/cedca79650f5f2dd9d4196ce6d6048097315f6c9)) ## [1.5.0-beta.2](https://github.com/open-sauced/ai/compare/v1.5.0-beta.1...v1.5.0-beta.2) (2023-06-06) - ### 🐛 Bug Fixes -* remove configuration enabled check from AI button ([#170](https://github.com/open-sauced/ai/issues/170)) ([cedca79](https://github.com/open-sauced/ai/commit/cedca79650f5f2dd9d4196ce6d6048097315f6c9)) +- remove configuration enabled check from AI button ([#170](https://github.com/open-sauced/ai/issues/170)) ([cedca79](https://github.com/open-sauced/ai/commit/cedca79650f5f2dd9d4196ce6d6048097315f6c9)) ## [1.5.0-beta.1](https://github.com/open-sauced/ai/compare/v1.4.1-beta.3...v1.5.0-beta.1) (2023-06-05) - ### 🍕 Features -* extension settings ([#132](https://github.com/open-sauced/ai/issues/132)) ([722cbbe](https://github.com/open-sauced/ai/commit/722cbbecd1843c088b065e91d363e83f71909e4e)) +- extension settings ([#132](https://github.com/open-sauced/ai/issues/132)) ([722cbbe](https://github.com/open-sauced/ai/commit/722cbbecd1843c088b065e91d363e83f71909e4e)) ## [1.4.1-beta.3](https://github.com/open-sauced/ai/compare/v1.4.1-beta.2...v1.4.1-beta.3) (2023-06-04) - ### 🧑‍💻 Code Refactoring -* removed post highlight message passing ([#165](https://github.com/open-sauced/ai/issues/165)) ([bad2112](https://github.com/open-sauced/ai/commit/bad211295a593f59530999d886ac99cc7f398da2)) +- removed post highlight message passing ([#165](https://github.com/open-sauced/ai/issues/165)) ([bad2112](https://github.com/open-sauced/ai/commit/bad211295a593f59530999d886ac99cc7f398da2)) ## [1.4.1-beta.2](https://github.com/open-sauced/ai/compare/v1.4.1-beta.1...v1.4.1-beta.2) (2023-06-04) - ### 🐛 Bug Fixes -* post-highlight-page-check ([#164](https://github.com/open-sauced/ai/issues/164)) ([ed98eb2](https://github.com/open-sauced/ai/commit/ed98eb2c865819adba1cf4a82716c4834c977d0a)) +- post-highlight-page-check ([#164](https://github.com/open-sauced/ai/issues/164)) ([ed98eb2](https://github.com/open-sauced/ai/commit/ed98eb2c865819adba1cf4a82716c4834c977d0a)) ## [1.4.1-beta.1](https://github.com/open-sauced/ai/compare/v1.4.0...v1.4.1-beta.1) (2023-06-04) - ### 🐛 Bug Fixes -* highlight redirection, multiple AI generation, draft commit messages ([#163](https://github.com/open-sauced/ai/issues/163)) ([03b91ab](https://github.com/open-sauced/ai/commit/03b91ab3b73f37e2c916b3cf6c079f2e4b58879c)) +- highlight redirection, multiple AI generation, draft commit messages ([#163](https://github.com/open-sauced/ai/issues/163)) ([03b91ab](https://github.com/open-sauced/ai/commit/03b91ab3b73f37e2c916b3cf6c079f2e4b58879c)) ## [1.4.0](https://github.com/open-sauced/ai/compare/v1.3.0...v1.4.0) (2023-06-03) - ### ✅ Tests -* add tests for checkAuth.ts ([#149](https://github.com/open-sauced/ai/issues/149)) ([3a79fac](https://github.com/open-sauced/ai/commit/3a79facf2196537b4cfc0ce763ed74934c7b268f)) -* add tests for utils/urlMatchers.ts ([#143](https://github.com/open-sauced/ai/issues/143)) ([26702e6](https://github.com/open-sauced/ai/commit/26702e689641138a791f3c8cb935ddc99540a19e)) - +- add tests for checkAuth.ts ([#149](https://github.com/open-sauced/ai/issues/149)) ([3a79fac](https://github.com/open-sauced/ai/commit/3a79facf2196537b4cfc0ce763ed74934c7b268f)) +- add tests for utils/urlMatchers.ts ([#143](https://github.com/open-sauced/ai/issues/143)) ([26702e6](https://github.com/open-sauced/ai/commit/26702e689641138a791f3c8cb935ddc99540a19e)) ### 🐛 Bug Fixes -* Post a highlight ([#101](https://github.com/open-sauced/ai/issues/101)) ([e3b7051](https://github.com/open-sauced/ai/commit/e3b7051826f016bbd64c8d0b6a37ae2c48865879)) -* remove auto-take message from triage.yml ([258a828](https://github.com/open-sauced/ai/commit/258a8284d294d01b4228ca17d3b4d591692a890b)) -* rename triage.yml ([3b9a14b](https://github.com/open-sauced/ai/commit/3b9a14bab991c739b9e57b1d0d829100695f47fb)) -* undefined config during build ([#158](https://github.com/open-sauced/ai/issues/158)) ([c986086](https://github.com/open-sauced/ai/commit/c986086f0b819746bd330fe17e3c94537633e6f4)) - +- Post a highlight ([#101](https://github.com/open-sauced/ai/issues/101)) ([e3b7051](https://github.com/open-sauced/ai/commit/e3b7051826f016bbd64c8d0b6a37ae2c48865879)) +- remove auto-take message from triage.yml ([258a828](https://github.com/open-sauced/ai/commit/258a8284d294d01b4228ca17d3b4d591692a890b)) +- rename triage.yml ([3b9a14b](https://github.com/open-sauced/ai/commit/3b9a14bab991c739b9e57b1d0d829100695f47fb)) +- undefined config during build ([#158](https://github.com/open-sauced/ai/issues/158)) ([c986086](https://github.com/open-sauced/ai/commit/c986086f0b819746bd330fe17e3c94537633e6f4)) ### 🍕 Features -* latest highlights ([#154](https://github.com/open-sauced/ai/issues/154)) ([0ccd0e7](https://github.com/open-sauced/ai/commit/0ccd0e778c7d290e9ab2c9fbe97fc3c04f3be878)) -* uses username on highlight instead of full name ([#162](https://github.com/open-sauced/ai/issues/162)) ([801fe5a](https://github.com/open-sauced/ai/commit/801fe5a2fdfa69268b46bc9bdf7ef00ffadf5fdb)) +- latest highlights ([#154](https://github.com/open-sauced/ai/issues/154)) ([0ccd0e7](https://github.com/open-sauced/ai/commit/0ccd0e778c7d290e9ab2c9fbe97fc3c04f3be878)) +- uses username on highlight instead of full name ([#162](https://github.com/open-sauced/ai/issues/162)) ([801fe5a](https://github.com/open-sauced/ai/commit/801fe5a2fdfa69268b46bc9bdf7ef00ffadf5fdb)) ## [1.4.0-beta.2](https://github.com/open-sauced/ai/compare/v1.4.0-beta.1...v1.4.0-beta.2) (2023-06-03) - ### 🍕 Features -* uses username on highlight instead of full name ([#162](https://github.com/open-sauced/ai/issues/162)) ([801fe5a](https://github.com/open-sauced/ai/commit/801fe5a2fdfa69268b46bc9bdf7ef00ffadf5fdb)) +- uses username on highlight instead of full name ([#162](https://github.com/open-sauced/ai/issues/162)) ([801fe5a](https://github.com/open-sauced/ai/commit/801fe5a2fdfa69268b46bc9bdf7ef00ffadf5fdb)) ## [1.4.0-beta.1](https://github.com/open-sauced/ai/compare/v1.3.1-beta.5...v1.4.0-beta.1) (2023-06-03) - ### 🍕 Features -* latest highlights ([#154](https://github.com/open-sauced/ai/issues/154)) ([0ccd0e7](https://github.com/open-sauced/ai/commit/0ccd0e778c7d290e9ab2c9fbe97fc3c04f3be878)) +- latest highlights ([#154](https://github.com/open-sauced/ai/issues/154)) ([0ccd0e7](https://github.com/open-sauced/ai/commit/0ccd0e778c7d290e9ab2c9fbe97fc3c04f3be878)) ## [1.3.1-beta.5](https://github.com/open-sauced/ai/compare/v1.3.1-beta.4...v1.3.1-beta.5) (2023-06-03) - ### 🐛 Bug Fixes -* undefined config during build ([#158](https://github.com/open-sauced/ai/issues/158)) ([c986086](https://github.com/open-sauced/ai/commit/c986086f0b819746bd330fe17e3c94537633e6f4)) +- undefined config during build ([#158](https://github.com/open-sauced/ai/issues/158)) ([c986086](https://github.com/open-sauced/ai/commit/c986086f0b819746bd330fe17e3c94537633e6f4)) ## [1.3.1-beta.4](https://github.com/open-sauced/ai/compare/v1.3.1-beta.3...v1.3.1-beta.4) (2023-05-29) - ### 🐛 Bug Fixes -* Post a highlight ([#101](https://github.com/open-sauced/ai/issues/101)) ([e3b7051](https://github.com/open-sauced/ai/commit/e3b7051826f016bbd64c8d0b6a37ae2c48865879)) +- Post a highlight ([#101](https://github.com/open-sauced/ai/issues/101)) ([e3b7051](https://github.com/open-sauced/ai/commit/e3b7051826f016bbd64c8d0b6a37ae2c48865879)) ## [1.3.1-beta.3](https://github.com/open-sauced/ai/compare/v1.3.1-beta.2...v1.3.1-beta.3) (2023-05-29) - ### ✅ Tests -* add tests for checkAuth.ts ([#149](https://github.com/open-sauced/ai/issues/149)) ([3a79fac](https://github.com/open-sauced/ai/commit/3a79facf2196537b4cfc0ce763ed74934c7b268f)) +- add tests for checkAuth.ts ([#149](https://github.com/open-sauced/ai/issues/149)) ([3a79fac](https://github.com/open-sauced/ai/commit/3a79facf2196537b4cfc0ce763ed74934c7b268f)) ## [1.3.1-beta.2](https://github.com/open-sauced/ai/compare/v1.3.1-beta.1...v1.3.1-beta.2) (2023-05-27) - ### ✅ Tests -* add tests for utils/urlMatchers.ts ([#143](https://github.com/open-sauced/ai/issues/143)) ([26702e6](https://github.com/open-sauced/ai/commit/26702e689641138a791f3c8cb935ddc99540a19e)) +- add tests for utils/urlMatchers.ts ([#143](https://github.com/open-sauced/ai/issues/143)) ([26702e6](https://github.com/open-sauced/ai/commit/26702e689641138a791f3c8cb935ddc99540a19e)) ## [1.3.1-beta.1](https://github.com/open-sauced/ai/compare/v1.3.0...v1.3.1-beta.1) (2023-05-27) - ### 🐛 Bug Fixes -* remove auto-take message from triage.yml ([258a828](https://github.com/open-sauced/ai/commit/258a8284d294d01b4228ca17d3b4d591692a890b)) -* rename triage.yml ([3b9a14b](https://github.com/open-sauced/ai/commit/3b9a14bab991c739b9e57b1d0d829100695f47fb)) +- remove auto-take message from triage.yml ([258a828](https://github.com/open-sauced/ai/commit/258a8284d294d01b4228ca17d3b4d591692a890b)) +- rename triage.yml ([3b9a14b](https://github.com/open-sauced/ai/commit/3b9a14bab991c739b9e57b1d0d829100695f47fb)) ## [1.3.0](https://github.com/open-sauced/ai/compare/v1.2.0...v1.3.0) (2023-05-27) - ### 🍕 Features -* adds test and lint to build ([#127](https://github.com/open-sauced/ai/issues/127)) ([6f1cfc7](https://github.com/open-sauced/ai/commit/6f1cfc7435548b3f5cffb83dfa675612603a2869)) -* Logout from the extension ([#138](https://github.com/open-sauced/ai/issues/138)) ([1f62f0e](https://github.com/open-sauced/ai/commit/1f62f0eae2b5a2a8ff73f4c2e99ab31a9ff0684c)) - +- adds test and lint to build ([#127](https://github.com/open-sauced/ai/issues/127)) ([6f1cfc7](https://github.com/open-sauced/ai/commit/6f1cfc7435548b3f5cffb83dfa675612603a2869)) +- Logout from the extension ([#138](https://github.com/open-sauced/ai/issues/138)) ([1f62f0e](https://github.com/open-sauced/ai/commit/1f62f0eae2b5a2a8ff73f4c2e99ab31a9ff0684c)) ### ✅ Tests -* setup tests ([#139](https://github.com/open-sauced/ai/issues/139)) ([8d61ab0](https://github.com/open-sauced/ai/commit/8d61ab068e77687700bf25596ee853ab1a3a26ee)) - +- setup tests ([#139](https://github.com/open-sauced/ai/issues/139)) ([8d61ab0](https://github.com/open-sauced/ai/commit/8d61ab068e77687700bf25596ee853ab1a3a26ee)) ### 🐛 Bug Fixes -* run builds on PRs ([a755e38](https://github.com/open-sauced/ai/commit/a755e38ffdd8533c8cbba66d2d662faeae4cad64)) +- run builds on PRs ([a755e38](https://github.com/open-sauced/ai/commit/a755e38ffdd8533c8cbba66d2d662faeae4cad64)) ## [1.3.0-beta.4](https://github.com/open-sauced/ai/compare/v1.3.0-beta.3...v1.3.0-beta.4) (2023-05-26) - ### 🐛 Bug Fixes -* run builds on PRs ([a755e38](https://github.com/open-sauced/ai/commit/a755e38ffdd8533c8cbba66d2d662faeae4cad64)) +- run builds on PRs ([a755e38](https://github.com/open-sauced/ai/commit/a755e38ffdd8533c8cbba66d2d662faeae4cad64)) ## [1.3.0-beta.3](https://github.com/open-sauced/ai/compare/v1.3.0-beta.2...v1.3.0-beta.3) (2023-05-26) - ### ✅ Tests -* setup tests ([#139](https://github.com/open-sauced/ai/issues/139)) ([8d61ab0](https://github.com/open-sauced/ai/commit/8d61ab068e77687700bf25596ee853ab1a3a26ee)) +- setup tests ([#139](https://github.com/open-sauced/ai/issues/139)) ([8d61ab0](https://github.com/open-sauced/ai/commit/8d61ab068e77687700bf25596ee853ab1a3a26ee)) ## [1.3.0-beta.2](https://github.com/open-sauced/ai/compare/v1.3.0-beta.1...v1.3.0-beta.2) (2023-05-26) - ### 🍕 Features -* Logout from the extension ([#138](https://github.com/open-sauced/ai/issues/138)) ([1f62f0e](https://github.com/open-sauced/ai/commit/1f62f0eae2b5a2a8ff73f4c2e99ab31a9ff0684c)) +- Logout from the extension ([#138](https://github.com/open-sauced/ai/issues/138)) ([1f62f0e](https://github.com/open-sauced/ai/commit/1f62f0eae2b5a2a8ff73f4c2e99ab31a9ff0684c)) ## [1.3.0-beta.1](https://github.com/open-sauced/ai/compare/v1.2.0...v1.3.0-beta.1) (2023-05-25) - ### 🍕 Features -* adds test and lint to build ([#127](https://github.com/open-sauced/ai/issues/127)) ([6f1cfc7](https://github.com/open-sauced/ai/commit/6f1cfc7435548b3f5cffb83dfa675612603a2869)) +- adds test and lint to build ([#127](https://github.com/open-sauced/ai/issues/127)) ([6f1cfc7](https://github.com/open-sauced/ai/commit/6f1cfc7435548b3f5cffb83dfa675612603a2869)) ## [1.2.0](https://github.com/open-sauced/ai/compare/v1.1.0...v1.2.0) (2023-05-25) - ### 🧑‍💻 Code Refactoring -* improved-extension-navigation ([#99](https://github.com/open-sauced/ai/issues/99)) ([5b2f5c1](https://github.com/open-sauced/ai/commit/5b2f5c18e6103b4297d925aa487b5900a954e495)) - +- improved-extension-navigation ([#99](https://github.com/open-sauced/ai/issues/99)) ([5b2f5c1](https://github.com/open-sauced/ai/commit/5b2f5c18e6103b4297d925aa487b5900a954e495)) ### 📝 Documentation -* dev docs ([#83](https://github.com/open-sauced/ai/issues/83)) ([4eff6eb](https://github.com/open-sauced/ai/commit/4eff6eb58498dd9b0f1ff5a8311d4e1c05a56ca9)) - +- dev docs ([#83](https://github.com/open-sauced/ai/issues/83)) ([4eff6eb](https://github.com/open-sauced/ai/commit/4eff6eb58498dd9b0f1ff5a8311d4e1c05a56ca9)) ### 🐛 Bug Fixes -* adds demo to readme ([c27e614](https://github.com/open-sauced/ai/commit/c27e61432be557c4f7e54ba684e69206e35560f4)) -* bump manifest version on main only ([#124](https://github.com/open-sauced/ai/issues/124)) ([e4a86e4](https://github.com/open-sauced/ai/commit/e4a86e49f209051092ceef8930061277886afeca)) -* duplicate-button-injections using guards ([#110](https://github.com/open-sauced/ai/issues/110)) ([3978766](https://github.com/open-sauced/ai/commit/39787668594b558ac8cb206ad894de94df767c81)) - +- adds demo to readme ([c27e614](https://github.com/open-sauced/ai/commit/c27e61432be557c4f7e54ba684e69206e35560f4)) +- bump manifest version on main only ([#124](https://github.com/open-sauced/ai/issues/124)) ([e4a86e4](https://github.com/open-sauced/ai/commit/e4a86e49f209051092ceef8930061277886afeca)) +- duplicate-button-injections using guards ([#110](https://github.com/open-sauced/ai/issues/110)) ([3978766](https://github.com/open-sauced/ai/commit/39787668594b558ac8cb206ad894de94df767c81)) ### 🍕 Features -* add PR velocity to profile page ([#111](https://github.com/open-sauced/ai/issues/111)) ([ba7fad6](https://github.com/open-sauced/ai/commit/ba7fad6ce96d04d15fc7c0ca2b5ffc52e50f9125)) -* generate code suggestions via AI ([#90](https://github.com/open-sauced/ai/issues/90)) ([14eede1](https://github.com/open-sauced/ai/commit/14eede1b5e1912aba04e17daf2a022497510c16b)), closes [#104](https://github.com/open-sauced/ai/issues/104) -* Manifest.json version bump ([#120](https://github.com/open-sauced/ai/issues/120)) ([488046b](https://github.com/open-sauced/ai/commit/488046b2eca3b605c38b354e265dc8ed16f637c5)) -* Resources page to link users to open-sauced feedback/discussions ([#100](https://github.com/open-sauced/ai/issues/100)) ([3d607ae](https://github.com/open-sauced/ai/commit/3d607aeeb86d663064fb8b857ea829950ddb1082)) +- add PR velocity to profile page ([#111](https://github.com/open-sauced/ai/issues/111)) ([ba7fad6](https://github.com/open-sauced/ai/commit/ba7fad6ce96d04d15fc7c0ca2b5ffc52e50f9125)) +- generate code suggestions via AI ([#90](https://github.com/open-sauced/ai/issues/90)) ([14eede1](https://github.com/open-sauced/ai/commit/14eede1b5e1912aba04e17daf2a022497510c16b)), closes [#104](https://github.com/open-sauced/ai/issues/104) +- Manifest.json version bump ([#120](https://github.com/open-sauced/ai/issues/120)) ([488046b](https://github.com/open-sauced/ai/commit/488046b2eca3b605c38b354e265dc8ed16f637c5)) +- Resources page to link users to open-sauced feedback/discussions ([#100](https://github.com/open-sauced/ai/issues/100)) ([3d607ae](https://github.com/open-sauced/ai/commit/3d607aeeb86d663064fb8b857ea829950ddb1082)) ## [1.2.0-beta.7](https://github.com/open-sauced/ai/compare/v1.2.0-beta.6...v1.2.0-beta.7) (2023-05-25) - ### 🍕 Features -* add PR velocity to profile page ([#111](https://github.com/open-sauced/ai/issues/111)) ([ba7fad6](https://github.com/open-sauced/ai/commit/ba7fad6ce96d04d15fc7c0ca2b5ffc52e50f9125)) +- add PR velocity to profile page ([#111](https://github.com/open-sauced/ai/issues/111)) ([ba7fad6](https://github.com/open-sauced/ai/commit/ba7fad6ce96d04d15fc7c0ca2b5ffc52e50f9125)) ## [1.2.0-beta.6](https://github.com/open-sauced/ai/compare/v1.2.0-beta.5...v1.2.0-beta.6) (2023-05-25) - ### 🐛 Bug Fixes -* bump manifest version on main only ([#124](https://github.com/open-sauced/ai/issues/124)) ([e4a86e4](https://github.com/open-sauced/ai/commit/e4a86e49f209051092ceef8930061277886afeca)) +- bump manifest version on main only ([#124](https://github.com/open-sauced/ai/issues/124)) ([e4a86e4](https://github.com/open-sauced/ai/commit/e4a86e49f209051092ceef8930061277886afeca)) ## [1.2.0-beta.5](https://github.com/open-sauced/ai/compare/v1.2.0-beta.4...v1.2.0-beta.5) (2023-05-25) - ### 📝 Documentation -* dev docs ([#83](https://github.com/open-sauced/ai/issues/83)) ([4eff6eb](https://github.com/open-sauced/ai/commit/4eff6eb58498dd9b0f1ff5a8311d4e1c05a56ca9)) +- dev docs ([#83](https://github.com/open-sauced/ai/issues/83)) ([4eff6eb](https://github.com/open-sauced/ai/commit/4eff6eb58498dd9b0f1ff5a8311d4e1c05a56ca9)) ## [1.2.0-beta.4](https://github.com/open-sauced/ai/compare/v1.2.0-beta.3...v1.2.0-beta.4) (2023-05-25) - ### 🍕 Features -* Manifest.json version bump ([#120](https://github.com/open-sauced/ai/issues/120)) ([488046b](https://github.com/open-sauced/ai/commit/488046b2eca3b605c38b354e265dc8ed16f637c5)) +- Manifest.json version bump ([#120](https://github.com/open-sauced/ai/issues/120)) ([488046b](https://github.com/open-sauced/ai/commit/488046b2eca3b605c38b354e265dc8ed16f637c5)) ## [1.2.0-beta.3](https://github.com/open-sauced/ai/compare/v1.2.0-beta.2...v1.2.0-beta.3) (2023-05-23) - ### 🍕 Features -* generate code suggestions via AI ([#90](https://github.com/open-sauced/ai/issues/90)) ([14eede1](https://github.com/open-sauced/ai/commit/14eede1b5e1912aba04e17daf2a022497510c16b)), closes [#104](https://github.com/open-sauced/ai/issues/104) +- generate code suggestions via AI ([#90](https://github.com/open-sauced/ai/issues/90)) ([14eede1](https://github.com/open-sauced/ai/commit/14eede1b5e1912aba04e17daf2a022497510c16b)), closes [#104](https://github.com/open-sauced/ai/issues/104) ## [1.2.0-beta.2](https://github.com/open-sauced/ai/compare/v1.2.0-beta.1...v1.2.0-beta.2) (2023-05-23) - ### 🐛 Bug Fixes -* duplicate-button-injections using guards ([#110](https://github.com/open-sauced/ai/issues/110)) ([3978766](https://github.com/open-sauced/ai/commit/39787668594b558ac8cb206ad894de94df767c81)) +- duplicate-button-injections using guards ([#110](https://github.com/open-sauced/ai/issues/110)) ([3978766](https://github.com/open-sauced/ai/commit/39787668594b558ac8cb206ad894de94df767c81)) ## [1.2.0-beta.1](https://github.com/open-sauced/ai/compare/v1.1.1-beta.2...v1.2.0-beta.1) (2023-05-23) - ### 🍕 Features -* Resources page to link users to open-sauced feedback/discussions ([#100](https://github.com/open-sauced/ai/issues/100)) ([3d607ae](https://github.com/open-sauced/ai/commit/3d607aeeb86d663064fb8b857ea829950ddb1082)) +- Resources page to link users to open-sauced feedback/discussions ([#100](https://github.com/open-sauced/ai/issues/100)) ([3d607ae](https://github.com/open-sauced/ai/commit/3d607aeeb86d663064fb8b857ea829950ddb1082)) ### [1.1.1-beta.2](https://github.com/open-sauced/ai/compare/v1.1.1-beta.1...v1.1.1-beta.2) (2023-05-23) - ### 🐛 Bug Fixes -* adds demo to readme ([c27e614](https://github.com/open-sauced/ai/commit/c27e61432be557c4f7e54ba684e69206e35560f4)) +- adds demo to readme ([c27e614](https://github.com/open-sauced/ai/commit/c27e61432be557c4f7e54ba684e69206e35560f4)) ### [1.1.1-beta.1](https://github.com/open-sauced/ai/compare/v1.1.0...v1.1.1-beta.1) (2023-05-22) - ### 🧑‍💻 Code Refactoring -* improved-extension-navigation ([#99](https://github.com/open-sauced/ai/issues/99)) ([5b2f5c1](https://github.com/open-sauced/ai/commit/5b2f5c18e6103b4297d925aa487b5900a954e495)) +- improved-extension-navigation ([#99](https://github.com/open-sauced/ai/issues/99)) ([5b2f5c1](https://github.com/open-sauced/ai/commit/5b2f5c18e6103b4297d925aa487b5900a954e495)) ## [1.1.0](https://github.com/open-sauced/ai/compare/v1.0.0...v1.1.0) (2023-05-20) - ### 📝 Documentation -* how we create extension releases ([#81](https://github.com/open-sauced/ai/issues/81)) ([10b1c48](https://github.com/open-sauced/ai/commit/10b1c48b799bfa412525e6c7da5a0f8268da6b16)) - +- how we create extension releases ([#81](https://github.com/open-sauced/ai/issues/81)) ([10b1c48](https://github.com/open-sauced/ai/commit/10b1c48b799bfa412525e6c7da5a0f8268da6b16)) ### 🐛 Bug Fixes -* add extra line and italics ([#93](https://github.com/open-sauced/ai/issues/93)) ([2cbd790](https://github.com/open-sauced/ai/commit/2cbd790345b7412224915c8175f2d273cd537294)) -* update name in README ([dba4734](https://github.com/open-sauced/ai/commit/dba473404d24e421bf748e691291109e2fe267ac)) - +- add extra line and italics ([#93](https://github.com/open-sauced/ai/issues/93)) ([2cbd790](https://github.com/open-sauced/ai/commit/2cbd790345b7412224915c8175f2d273cd537294)) +- update name in README ([dba4734](https://github.com/open-sauced/ai/commit/dba473404d24e421bf748e691291109e2fe267ac)) ### 🍕 Features -* add/remove repos to/from insights. ([#77](https://github.com/open-sauced/ai/issues/77)) ([8e4a6ed](https://github.com/open-sauced/ai/commit/8e4a6ed61efd8c52812d42e216b05baacd006dea)) -* OpenSauced AI PR description ([#79](https://github.com/open-sauced/ai/issues/79)) ([0e38777](https://github.com/open-sauced/ai/commit/0e387771a60c17417bb0c8806f2684eae4c69c42)) -* replace open issues count with highlights count ([#76](https://github.com/open-sauced/ai/issues/76)) ([0fb8149](https://github.com/open-sauced/ai/commit/0fb814901fd575d3f1434740f8f8140fc6ff1aae)) -* Updated to the new AI PR description endpoint ([#94](https://github.com/open-sauced/ai/issues/94)) ([cf8f64c](https://github.com/open-sauced/ai/commit/cf8f64cf4860ce96903234989920ec25bced2b76)) +- add/remove repos to/from insights. ([#77](https://github.com/open-sauced/ai/issues/77)) ([8e4a6ed](https://github.com/open-sauced/ai/commit/8e4a6ed61efd8c52812d42e216b05baacd006dea)) +- OpenSauced AI PR description ([#79](https://github.com/open-sauced/ai/issues/79)) ([0e38777](https://github.com/open-sauced/ai/commit/0e387771a60c17417bb0c8806f2684eae4c69c42)) +- replace open issues count with highlights count ([#76](https://github.com/open-sauced/ai/issues/76)) ([0fb8149](https://github.com/open-sauced/ai/commit/0fb814901fd575d3f1434740f8f8140fc6ff1aae)) +- Updated to the new AI PR description endpoint ([#94](https://github.com/open-sauced/ai/issues/94)) ([cf8f64c](https://github.com/open-sauced/ai/commit/cf8f64cf4860ce96903234989920ec25bced2b76)) ## [1.1.0-beta.7](https://github.com/open-sauced/ai/compare/v1.1.0-beta.6...v1.1.0-beta.7) (2023-05-19) - ### 🍕 Features -* Updated to the new AI PR description endpoint ([#94](https://github.com/open-sauced/ai/issues/94)) ([cf8f64c](https://github.com/open-sauced/ai/commit/cf8f64cf4860ce96903234989920ec25bced2b76)) +- Updated to the new AI PR description endpoint ([#94](https://github.com/open-sauced/ai/issues/94)) ([cf8f64c](https://github.com/open-sauced/ai/commit/cf8f64cf4860ce96903234989920ec25bced2b76)) ## [1.1.0-beta.6](https://github.com/open-sauced/ai/compare/v1.1.0-beta.5...v1.1.0-beta.6) (2023-05-18) - ### 🐛 Bug Fixes -* add extra line and italics ([#93](https://github.com/open-sauced/ai/issues/93)) ([2cbd790](https://github.com/open-sauced/ai/commit/2cbd790345b7412224915c8175f2d273cd537294)) +- add extra line and italics ([#93](https://github.com/open-sauced/ai/issues/93)) ([2cbd790](https://github.com/open-sauced/ai/commit/2cbd790345b7412224915c8175f2d273cd537294)) # 📦 open-sauced/browser-extensions changelog @@ -773,205 +664,179 @@ ## [1.1.0-beta.5](https://github.com/open-sauced/browser-extensions/compare/v1.1.0-beta.4...v1.1.0-beta.5) (2023-05-18) - ### 🐛 Bug Fixes -* update name in README ([dba4734](https://github.com/open-sauced/browser-extensions/commit/dba473404d24e421bf748e691291109e2fe267ac)) +- update name in README ([dba4734](https://github.com/open-sauced/browser-extensions/commit/dba473404d24e421bf748e691291109e2fe267ac)) ## [1.1.0-beta.4](https://github.com/open-sauced/browser-extensions/compare/v1.1.0-beta.3...v1.1.0-beta.4) (2023-05-18) - ### 🍕 Features -* OpenSauced AI PR description ([#79](https://github.com/open-sauced/browser-extensions/issues/79)) ([0e38777](https://github.com/open-sauced/browser-extensions/commit/0e387771a60c17417bb0c8806f2684eae4c69c42)) +- OpenSauced AI PR description ([#79](https://github.com/open-sauced/browser-extensions/issues/79)) ([0e38777](https://github.com/open-sauced/browser-extensions/commit/0e387771a60c17417bb0c8806f2684eae4c69c42)) ## [1.1.0-beta.3](https://github.com/open-sauced/browser-extensions/compare/v1.1.0-beta.2...v1.1.0-beta.3) (2023-05-17) - ### 📝 Documentation -* how we create extension releases ([#81](https://github.com/open-sauced/browser-extensions/issues/81)) ([10b1c48](https://github.com/open-sauced/browser-extensions/commit/10b1c48b799bfa412525e6c7da5a0f8268da6b16)) +- how we create extension releases ([#81](https://github.com/open-sauced/browser-extensions/issues/81)) ([10b1c48](https://github.com/open-sauced/browser-extensions/commit/10b1c48b799bfa412525e6c7da5a0f8268da6b16)) ## [1.1.0-beta.2](https://github.com/open-sauced/browser-extensions/compare/v1.1.0-beta.1...v1.1.0-beta.2) (2023-05-16) - ### 🍕 Features -* add/remove repos to/from insights. ([#77](https://github.com/open-sauced/browser-extensions/issues/77)) ([8e4a6ed](https://github.com/open-sauced/browser-extensions/commit/8e4a6ed61efd8c52812d42e216b05baacd006dea)) +- add/remove repos to/from insights. ([#77](https://github.com/open-sauced/browser-extensions/issues/77)) ([8e4a6ed](https://github.com/open-sauced/browser-extensions/commit/8e4a6ed61efd8c52812d42e216b05baacd006dea)) ## [1.1.0-beta.1](https://github.com/open-sauced/browser-extensions/compare/v1.0.0...v1.1.0-beta.1) (2023-05-14) - ### 🍕 Features -* replace open issues count with highlights count ([#76](https://github.com/open-sauced/browser-extensions/issues/76)) ([0fb8149](https://github.com/open-sauced/browser-extensions/commit/0fb814901fd575d3f1434740f8f8140fc6ff1aae)) +- replace open issues count with highlights count ([#76](https://github.com/open-sauced/browser-extensions/issues/76)) ([0fb8149](https://github.com/open-sauced/browser-extensions/commit/0fb814901fd575d3f1434740f8f8140fc6ff1aae)) ## 1.0.0 (2023-05-13) - ### 📝 Documentation -* README and LICENSE ([917f7b0](https://github.com/open-sauced/browser-extensions/commit/917f7b0ba3000eee64e4344d9a21205512b3cc2e)) -* Updated the README.md ([#15](https://github.com/open-sauced/browser-extensions/issues/15)) ([3e4dd69](https://github.com/open-sauced/browser-extensions/commit/3e4dd69c52477596bb5a2f5e4d4a1b46bbb981df)) - +- README and LICENSE ([917f7b0](https://github.com/open-sauced/browser-extensions/commit/917f7b0ba3000eee64e4344d9a21205512b3cc2e)) +- Updated the README.md ([#15](https://github.com/open-sauced/browser-extensions/issues/15)) ([3e4dd69](https://github.com/open-sauced/browser-extensions/commit/3e4dd69c52477596bb5a2f5e4d4a1b46bbb981df)) ### 🔁 Continuous Integration -* automated github releases ([#39](https://github.com/open-sauced/browser-extensions/issues/39)) ([735fa66](https://github.com/open-sauced/browser-extensions/commit/735fa669bf6bb96ebe53a9f9841615be6b1b7ded)), closes [#16](https://github.com/open-sauced/browser-extensions/issues/16) - +- automated github releases ([#39](https://github.com/open-sauced/browser-extensions/issues/39)) ([735fa66](https://github.com/open-sauced/browser-extensions/commit/735fa669bf6bb96ebe53a9f9841615be6b1b7ded)), closes [#16](https://github.com/open-sauced/browser-extensions/issues/16) ### 🧑‍💻 Code Refactoring -* improved-auth-strategy ([#56](https://github.com/open-sauced/browser-extensions/issues/56)) ([d8b27c3](https://github.com/open-sauced/browser-extensions/commit/d8b27c3e8a4259a4f40086feaf5e229a95fb59e9)) - +- improved-auth-strategy ([#56](https://github.com/open-sauced/browser-extensions/issues/56)) ([d8b27c3](https://github.com/open-sauced/browser-extensions/commit/d8b27c3e8a4259a4f40086feaf5e229a95fb59e9)) ### 🍕 Features -* add home page and profile page ([#36](https://github.com/open-sauced/browser-extensions/issues/36)) ([8a43288](https://github.com/open-sauced/browser-extensions/commit/8a4328892d138a9f1eb92aa8a80b33a970659de0)) -* add to highlights button ([#64](https://github.com/open-sauced/browser-extensions/issues/64)) ([e2120a1](https://github.com/open-sauced/browser-extensions/commit/e2120a13d64fee2ab0867e5f17d647f64796467a)) -* Added a configuration file ([#32](https://github.com/open-sauced/browser-extensions/issues/32)) ([ec6722c](https://github.com/open-sauced/browser-extensions/commit/ec6722c360dfcdb5cc10cb2300448e1656d58456)) -* Added light mode to GH profile buttons ([#40](https://github.com/open-sauced/browser-extensions/issues/40)) ([a7ea43a](https://github.com/open-sauced/browser-extensions/commit/a7ea43afb743de445e8d1c20c0dd9a362214aaa2)) -* Added linting to the project. ([#49](https://github.com/open-sauced/browser-extensions/issues/49)) ([1f73007](https://github.com/open-sauced/browser-extensions/commit/1f730079bffb8f2514c90860b09a0d0d5cc36892)) -* Auto PAT authentication ([#29](https://github.com/open-sauced/browser-extensions/issues/29)) ([f4f8cf6](https://github.com/open-sauced/browser-extensions/commit/f4f8cf6d1749d9aa23d3011dd130047f884e3e0f)) -* extension window navigation ([#21](https://github.com/open-sauced/browser-extensions/issues/21)) ([b5ae9a6](https://github.com/open-sauced/browser-extensions/commit/b5ae9a6e5d032b0ce2ab344b30f029598ca8608f)) -* GitHub page update listener ([#37](https://github.com/open-sauced/browser-extensions/issues/37)) ([06b070f](https://github.com/open-sauced/browser-extensions/commit/06b070fbd1a39f043a640d3f6e3de278a880b983)) -* Invite to OpenSauced ([#20](https://github.com/open-sauced/browser-extensions/issues/20)) ([0c8f222](https://github.com/open-sauced/browser-extensions/commit/0c8f22286475edeff53f9226f71e46bbb338287f)) -* PAT authentication ([#27](https://github.com/open-sauced/browser-extensions/issues/27)) ([e726a93](https://github.com/open-sauced/browser-extensions/commit/e726a937684faf20c14530de14f22ba1116195af)) -* updated the extension logo ([#22](https://github.com/open-sauced/browser-extensions/issues/22)) ([d19034d](https://github.com/open-sauced/browser-extensions/commit/d19034daaf40d322e2c400c65191caf3e5866e39)) -* view on OpenSauced button ([#14](https://github.com/open-sauced/browser-extensions/issues/14)) ([a447551](https://github.com/open-sauced/browser-extensions/commit/a447551d46ea35dde6b674853ab55094728014c2)) -* vote repos ([#70](https://github.com/open-sauced/browser-extensions/issues/70)) ([ff2c8f4](https://github.com/open-sauced/browser-extensions/commit/ff2c8f4198cd09fa8f591498298e6eddbc982c49)) - +- add home page and profile page ([#36](https://github.com/open-sauced/browser-extensions/issues/36)) ([8a43288](https://github.com/open-sauced/browser-extensions/commit/8a4328892d138a9f1eb92aa8a80b33a970659de0)) +- add to highlights button ([#64](https://github.com/open-sauced/browser-extensions/issues/64)) ([e2120a1](https://github.com/open-sauced/browser-extensions/commit/e2120a13d64fee2ab0867e5f17d647f64796467a)) +- Added a configuration file ([#32](https://github.com/open-sauced/browser-extensions/issues/32)) ([ec6722c](https://github.com/open-sauced/browser-extensions/commit/ec6722c360dfcdb5cc10cb2300448e1656d58456)) +- Added light mode to GH profile buttons ([#40](https://github.com/open-sauced/browser-extensions/issues/40)) ([a7ea43a](https://github.com/open-sauced/browser-extensions/commit/a7ea43afb743de445e8d1c20c0dd9a362214aaa2)) +- Added linting to the project. ([#49](https://github.com/open-sauced/browser-extensions/issues/49)) ([1f73007](https://github.com/open-sauced/browser-extensions/commit/1f730079bffb8f2514c90860b09a0d0d5cc36892)) +- Auto PAT authentication ([#29](https://github.com/open-sauced/browser-extensions/issues/29)) ([f4f8cf6](https://github.com/open-sauced/browser-extensions/commit/f4f8cf6d1749d9aa23d3011dd130047f884e3e0f)) +- extension window navigation ([#21](https://github.com/open-sauced/browser-extensions/issues/21)) ([b5ae9a6](https://github.com/open-sauced/browser-extensions/commit/b5ae9a6e5d032b0ce2ab344b30f029598ca8608f)) +- GitHub page update listener ([#37](https://github.com/open-sauced/browser-extensions/issues/37)) ([06b070f](https://github.com/open-sauced/browser-extensions/commit/06b070fbd1a39f043a640d3f6e3de278a880b983)) +- Invite to OpenSauced ([#20](https://github.com/open-sauced/browser-extensions/issues/20)) ([0c8f222](https://github.com/open-sauced/browser-extensions/commit/0c8f22286475edeff53f9226f71e46bbb338287f)) +- PAT authentication ([#27](https://github.com/open-sauced/browser-extensions/issues/27)) ([e726a93](https://github.com/open-sauced/browser-extensions/commit/e726a937684faf20c14530de14f22ba1116195af)) +- updated the extension logo ([#22](https://github.com/open-sauced/browser-extensions/issues/22)) ([d19034d](https://github.com/open-sauced/browser-extensions/commit/d19034daaf40d322e2c400c65191caf3e5866e39)) +- view on OpenSauced button ([#14](https://github.com/open-sauced/browser-extensions/issues/14)) ([a447551](https://github.com/open-sauced/browser-extensions/commit/a447551d46ea35dde6b674853ab55094728014c2)) +- vote repos ([#70](https://github.com/open-sauced/browser-extensions/issues/70)) ([ff2c8f4](https://github.com/open-sauced/browser-extensions/commit/ff2c8f4198cd09fa8f591498298e6eddbc982c49)) ### 🐛 Bug Fixes -* rename the. extension ([294e499](https://github.com/open-sauced/browser-extensions/commit/294e499f1db5e4c9d094a620417c46287bfbfb06)) -* Update URLs ([5828e20](https://github.com/open-sauced/browser-extensions/commit/5828e204a00b9731e8d9075184b4c008f66c294b)) -* attach dist folder to release assets ([#47](https://github.com/open-sauced/browser-extensions/issues/47)) ([4f50e72](https://github.com/open-sauced/browser-extensions/commit/4f50e721cdb52bc74d906b17fecb72a84f312928)) -* circular-deps in vote buttons ([675496c](https://github.com/open-sauced/browser-extensions/commit/675496cc3b3cbbb214c0ea77e49a059bc5ba6d7c)) -* Duplicate buttons on GH profile page ([#48](https://github.com/open-sauced/browser-extensions/issues/48)) ([9ee2dca](https://github.com/open-sauced/browser-extensions/commit/9ee2dcab3d85eef164b43b886a959c9aaff4cdc5)) -* incorrect request for voting ([#72](https://github.com/open-sauced/browser-extensions/issues/72)) ([7a35014](https://github.com/open-sauced/browser-extensions/commit/7a35014448fbf836702251176f54e4983f638bef)) -* make emails less creepy ([a08fa45](https://github.com/open-sauced/browser-extensions/commit/a08fa4510130f357e1d8be12536d20a84f7c1098)) -* re-enable tailwind base class on extension popup ([#31](https://github.com/open-sauced/browser-extensions/issues/31)) ([c081217](https://github.com/open-sauced/browser-extensions/commit/c081217e778ad6b91352d2e7e6d1693a61ca2b8f)) -* remove activeTab manifest.json ([#50](https://github.com/open-sauced/browser-extensions/issues/50)) ([dd71480](https://github.com/open-sauced/browser-extensions/commit/dd7148064b66109c744be288593b1adb0a26fa77)) -* render emojis in user bio ([#68](https://github.com/open-sauced/browser-extensions/issues/68)) ([d0158a5](https://github.com/open-sauced/browser-extensions/commit/d0158a55fd49960d1f8d07af87d7621871965679)) -* set-output deprecation warning ([#51](https://github.com/open-sauced/browser-extensions/issues/51)) ([486f84b](https://github.com/open-sauced/browser-extensions/commit/486f84baba98f219b3ac69bd447da22e710e3daa)) -* unrecognized-manifest-key ([#55](https://github.com/open-sauced/browser-extensions/issues/55)) ([d622500](https://github.com/open-sauced/browser-extensions/commit/d6225003fd3bcf5b16ab7c5113c6e559e5a50849)) -* Wrapped the await call in an async() ([#26](https://github.com/open-sauced/browser-extensions/issues/26)) ([357aab5](https://github.com/open-sauced/browser-extensions/commit/357aab514ee1cbcd0e61c3220cff20c7c8a197be)) +- rename the. extension ([294e499](https://github.com/open-sauced/browser-extensions/commit/294e499f1db5e4c9d094a620417c46287bfbfb06)) +- Update URLs ([5828e20](https://github.com/open-sauced/browser-extensions/commit/5828e204a00b9731e8d9075184b4c008f66c294b)) +- attach dist folder to release assets ([#47](https://github.com/open-sauced/browser-extensions/issues/47)) ([4f50e72](https://github.com/open-sauced/browser-extensions/commit/4f50e721cdb52bc74d906b17fecb72a84f312928)) +- circular-deps in vote buttons ([675496c](https://github.com/open-sauced/browser-extensions/commit/675496cc3b3cbbb214c0ea77e49a059bc5ba6d7c)) +- Duplicate buttons on GH profile page ([#48](https://github.com/open-sauced/browser-extensions/issues/48)) ([9ee2dca](https://github.com/open-sauced/browser-extensions/commit/9ee2dcab3d85eef164b43b886a959c9aaff4cdc5)) +- incorrect request for voting ([#72](https://github.com/open-sauced/browser-extensions/issues/72)) ([7a35014](https://github.com/open-sauced/browser-extensions/commit/7a35014448fbf836702251176f54e4983f638bef)) +- make emails less creepy ([a08fa45](https://github.com/open-sauced/browser-extensions/commit/a08fa4510130f357e1d8be12536d20a84f7c1098)) +- re-enable tailwind base class on extension popup ([#31](https://github.com/open-sauced/browser-extensions/issues/31)) ([c081217](https://github.com/open-sauced/browser-extensions/commit/c081217e778ad6b91352d2e7e6d1693a61ca2b8f)) +- remove activeTab manifest.json ([#50](https://github.com/open-sauced/browser-extensions/issues/50)) ([dd71480](https://github.com/open-sauced/browser-extensions/commit/dd7148064b66109c744be288593b1adb0a26fa77)) +- render emojis in user bio ([#68](https://github.com/open-sauced/browser-extensions/issues/68)) ([d0158a5](https://github.com/open-sauced/browser-extensions/commit/d0158a55fd49960d1f8d07af87d7621871965679)) +- set-output deprecation warning ([#51](https://github.com/open-sauced/browser-extensions/issues/51)) ([486f84b](https://github.com/open-sauced/browser-extensions/commit/486f84baba98f219b3ac69bd447da22e710e3daa)) +- unrecognized-manifest-key ([#55](https://github.com/open-sauced/browser-extensions/issues/55)) ([d622500](https://github.com/open-sauced/browser-extensions/commit/d6225003fd3bcf5b16ab7c5113c6e559e5a50849)) +- Wrapped the await call in an async() ([#26](https://github.com/open-sauced/browser-extensions/issues/26)) ([357aab5](https://github.com/open-sauced/browser-extensions/commit/357aab514ee1cbcd0e61c3220cff20c7c8a197be)) ## [1.0.0-beta.12](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.11...v1.0.0-beta.12) (2023-05-13) - ### 🐛 Bug Fixes -* circular-deps in vote buttons ([675496c](https://github.com/open-sauced/browser-extensions/commit/675496cc3b3cbbb214c0ea77e49a059bc5ba6d7c)) +- circular-deps in vote buttons ([675496c](https://github.com/open-sauced/browser-extensions/commit/675496cc3b3cbbb214c0ea77e49a059bc5ba6d7c)) ## [1.0.0-beta.11](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2023-05-13) - ### 🐛 Bug Fixes -* incorrect request for voting ([#72](https://github.com/open-sauced/browser-extensions/issues/72)) ([7a35014](https://github.com/open-sauced/browser-extensions/commit/7a35014448fbf836702251176f54e4983f638bef)) +- incorrect request for voting ([#72](https://github.com/open-sauced/browser-extensions/issues/72)) ([7a35014](https://github.com/open-sauced/browser-extensions/commit/7a35014448fbf836702251176f54e4983f638bef)) ## [1.0.0-beta.10](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2023-05-12) - ### 🍕 Features -* vote repos ([#70](https://github.com/open-sauced/browser-extensions/issues/70)) ([ff2c8f4](https://github.com/open-sauced/browser-extensions/commit/ff2c8f4198cd09fa8f591498298e6eddbc982c49)) +- vote repos ([#70](https://github.com/open-sauced/browser-extensions/issues/70)) ([ff2c8f4](https://github.com/open-sauced/browser-extensions/commit/ff2c8f4198cd09fa8f591498298e6eddbc982c49)) ## [1.0.0-beta.9](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2023-05-05) - ### 🐛 Bug Fixes -* render emojis in user bio ([#68](https://github.com/open-sauced/browser-extensions/issues/68)) ([d0158a5](https://github.com/open-sauced/browser-extensions/commit/d0158a55fd49960d1f8d07af87d7621871965679)) +- render emojis in user bio ([#68](https://github.com/open-sauced/browser-extensions/issues/68)) ([d0158a5](https://github.com/open-sauced/browser-extensions/commit/d0158a55fd49960d1f8d07af87d7621871965679)) ## [1.0.0-beta.8](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2023-05-04) - ### 🍕 Features -* add to highlights button ([#64](https://github.com/open-sauced/browser-extensions/issues/64)) ([e2120a1](https://github.com/open-sauced/browser-extensions/commit/e2120a13d64fee2ab0867e5f17d647f64796467a)) +- add to highlights button ([#64](https://github.com/open-sauced/browser-extensions/issues/64)) ([e2120a1](https://github.com/open-sauced/browser-extensions/commit/e2120a13d64fee2ab0867e5f17d647f64796467a)) ## [1.0.0-beta.7](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2023-05-02) - ### 🧑‍💻 Code Refactoring -* improved-auth-strategy ([#56](https://github.com/open-sauced/browser-extensions/issues/56)) ([d8b27c3](https://github.com/open-sauced/browser-extensions/commit/d8b27c3e8a4259a4f40086feaf5e229a95fb59e9)) +- improved-auth-strategy ([#56](https://github.com/open-sauced/browser-extensions/issues/56)) ([d8b27c3](https://github.com/open-sauced/browser-extensions/commit/d8b27c3e8a4259a4f40086feaf5e229a95fb59e9)) ## [1.0.0-beta.6](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2023-05-01) - ### 🐛 Bug Fixes -* unrecognized-manifest-key ([#55](https://github.com/open-sauced/browser-extensions/issues/55)) ([d622500](https://github.com/open-sauced/browser-extensions/commit/d6225003fd3bcf5b16ab7c5113c6e559e5a50849)) +- unrecognized-manifest-key ([#55](https://github.com/open-sauced/browser-extensions/issues/55)) ([d622500](https://github.com/open-sauced/browser-extensions/commit/d6225003fd3bcf5b16ab7c5113c6e559e5a50849)) ## [1.0.0-beta.5](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2023-04-29) - ### 🍕 Features -* Added linting to the project. ([#49](https://github.com/open-sauced/browser-extensions/issues/49)) ([1f73007](https://github.com/open-sauced/browser-extensions/commit/1f730079bffb8f2514c90860b09a0d0d5cc36892)) - +- Added linting to the project. ([#49](https://github.com/open-sauced/browser-extensions/issues/49)) ([1f73007](https://github.com/open-sauced/browser-extensions/commit/1f730079bffb8f2514c90860b09a0d0d5cc36892)) ### 🐛 Bug Fixes -* remove activeTab manifest.json ([#50](https://github.com/open-sauced/browser-extensions/issues/50)) ([dd71480](https://github.com/open-sauced/browser-extensions/commit/dd7148064b66109c744be288593b1adb0a26fa77)) -* set-output deprecation warning ([#51](https://github.com/open-sauced/browser-extensions/issues/51)) ([486f84b](https://github.com/open-sauced/browser-extensions/commit/486f84baba98f219b3ac69bd447da22e710e3daa)) +- remove activeTab manifest.json ([#50](https://github.com/open-sauced/browser-extensions/issues/50)) ([dd71480](https://github.com/open-sauced/browser-extensions/commit/dd7148064b66109c744be288593b1adb0a26fa77)) +- set-output deprecation warning ([#51](https://github.com/open-sauced/browser-extensions/issues/51)) ([486f84b](https://github.com/open-sauced/browser-extensions/commit/486f84baba98f219b3ac69bd447da22e710e3daa)) ## [1.0.0-beta.4](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2023-04-28) - ### 🐛 Bug Fixes -* Duplicate buttons on GH profile page ([#48](https://github.com/open-sauced/browser-extensions/issues/48)) ([9ee2dca](https://github.com/open-sauced/browser-extensions/commit/9ee2dcab3d85eef164b43b886a959c9aaff4cdc5)) +- Duplicate buttons on GH profile page ([#48](https://github.com/open-sauced/browser-extensions/issues/48)) ([9ee2dca](https://github.com/open-sauced/browser-extensions/commit/9ee2dcab3d85eef164b43b886a959c9aaff4cdc5)) ## [1.0.0-beta.3](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2023-04-28) - ### 🍕 Features -* Added light mode to GH profile buttons ([#40](https://github.com/open-sauced/browser-extensions/issues/40)) ([a7ea43a](https://github.com/open-sauced/browser-extensions/commit/a7ea43afb743de445e8d1c20c0dd9a362214aaa2)) +- Added light mode to GH profile buttons ([#40](https://github.com/open-sauced/browser-extensions/issues/40)) ([a7ea43a](https://github.com/open-sauced/browser-extensions/commit/a7ea43afb743de445e8d1c20c0dd9a362214aaa2)) ## [1.0.0-beta.2](https://github.com/open-sauced/browser-extensions/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2023-04-27) - ### 🐛 Bug Fixes -* attach dist folder to release assets ([#47](https://github.com/open-sauced/browser-extensions/issues/47)) ([4f50e72](https://github.com/open-sauced/browser-extensions/commit/4f50e721cdb52bc74d906b17fecb72a84f312928)) +- attach dist folder to release assets ([#47](https://github.com/open-sauced/browser-extensions/issues/47)) ([4f50e72](https://github.com/open-sauced/browser-extensions/commit/4f50e721cdb52bc74d906b17fecb72a84f312928)) ## 1.0.0-beta.1 (2023-04-27) - ### 📝 Documentation -* README and LICENSE ([917f7b0](https://github.com/open-sauced/browser-extensions/commit/917f7b0ba3000eee64e4344d9a21205512b3cc2e)) -* Updated the README.md ([#15](https://github.com/open-sauced/browser-extensions/issues/15)) ([3e4dd69](https://github.com/open-sauced/browser-extensions/commit/3e4dd69c52477596bb5a2f5e4d4a1b46bbb981df)) - +- README and LICENSE ([917f7b0](https://github.com/open-sauced/browser-extensions/commit/917f7b0ba3000eee64e4344d9a21205512b3cc2e)) +- Updated the README.md ([#15](https://github.com/open-sauced/browser-extensions/issues/15)) ([3e4dd69](https://github.com/open-sauced/browser-extensions/commit/3e4dd69c52477596bb5a2f5e4d4a1b46bbb981df)) ### 🐛 Bug Fixes -* rename the. extension ([294e499](https://github.com/open-sauced/browser-extensions/commit/294e499f1db5e4c9d094a620417c46287bfbfb06)) -* Update URLs ([5828e20](https://github.com/open-sauced/browser-extensions/commit/5828e204a00b9731e8d9075184b4c008f66c294b)) -* make emails less creepy ([a08fa45](https://github.com/open-sauced/browser-extensions/commit/a08fa4510130f357e1d8be12536d20a84f7c1098)) -* re-enable tailwind base class on extension popup ([#31](https://github.com/open-sauced/browser-extensions/issues/31)) ([c081217](https://github.com/open-sauced/browser-extensions/commit/c081217e778ad6b91352d2e7e6d1693a61ca2b8f)) -* Wrapped the await call in an async() ([#26](https://github.com/open-sauced/browser-extensions/issues/26)) ([357aab5](https://github.com/open-sauced/browser-extensions/commit/357aab514ee1cbcd0e61c3220cff20c7c8a197be)) - +- rename the. extension ([294e499](https://github.com/open-sauced/browser-extensions/commit/294e499f1db5e4c9d094a620417c46287bfbfb06)) +- Update URLs ([5828e20](https://github.com/open-sauced/browser-extensions/commit/5828e204a00b9731e8d9075184b4c008f66c294b)) +- make emails less creepy ([a08fa45](https://github.com/open-sauced/browser-extensions/commit/a08fa4510130f357e1d8be12536d20a84f7c1098)) +- re-enable tailwind base class on extension popup ([#31](https://github.com/open-sauced/browser-extensions/issues/31)) ([c081217](https://github.com/open-sauced/browser-extensions/commit/c081217e778ad6b91352d2e7e6d1693a61ca2b8f)) +- Wrapped the await call in an async() ([#26](https://github.com/open-sauced/browser-extensions/issues/26)) ([357aab5](https://github.com/open-sauced/browser-extensions/commit/357aab514ee1cbcd0e61c3220cff20c7c8a197be)) ### 🍕 Features -* add home page and profile page ([#36](https://github.com/open-sauced/browser-extensions/issues/36)) ([8a43288](https://github.com/open-sauced/browser-extensions/commit/8a4328892d138a9f1eb92aa8a80b33a970659de0)) -* Added a configuration file ([#32](https://github.com/open-sauced/browser-extensions/issues/32)) ([ec6722c](https://github.com/open-sauced/browser-extensions/commit/ec6722c360dfcdb5cc10cb2300448e1656d58456)) -* Auto PAT authentication ([#29](https://github.com/open-sauced/browser-extensions/issues/29)) ([f4f8cf6](https://github.com/open-sauced/browser-extensions/commit/f4f8cf6d1749d9aa23d3011dd130047f884e3e0f)) -* extension window navigation ([#21](https://github.com/open-sauced/browser-extensions/issues/21)) ([b5ae9a6](https://github.com/open-sauced/browser-extensions/commit/b5ae9a6e5d032b0ce2ab344b30f029598ca8608f)) -* GitHub page update listener ([#37](https://github.com/open-sauced/browser-extensions/issues/37)) ([06b070f](https://github.com/open-sauced/browser-extensions/commit/06b070fbd1a39f043a640d3f6e3de278a880b983)) -* Invite to OpenSauced ([#20](https://github.com/open-sauced/browser-extensions/issues/20)) ([0c8f222](https://github.com/open-sauced/browser-extensions/commit/0c8f22286475edeff53f9226f71e46bbb338287f)) -* PAT authentication ([#27](https://github.com/open-sauced/browser-extensions/issues/27)) ([e726a93](https://github.com/open-sauced/browser-extensions/commit/e726a937684faf20c14530de14f22ba1116195af)) -* updated the extension logo ([#22](https://github.com/open-sauced/browser-extensions/issues/22)) ([d19034d](https://github.com/open-sauced/browser-extensions/commit/d19034daaf40d322e2c400c65191caf3e5866e39)) -* view on OpenSauced button ([#14](https://github.com/open-sauced/browser-extensions/issues/14)) ([a447551](https://github.com/open-sauced/browser-extensions/commit/a447551d46ea35dde6b674853ab55094728014c2)) - +- add home page and profile page ([#36](https://github.com/open-sauced/browser-extensions/issues/36)) ([8a43288](https://github.com/open-sauced/browser-extensions/commit/8a4328892d138a9f1eb92aa8a80b33a970659de0)) +- Added a configuration file ([#32](https://github.com/open-sauced/browser-extensions/issues/32)) ([ec6722c](https://github.com/open-sauced/browser-extensions/commit/ec6722c360dfcdb5cc10cb2300448e1656d58456)) +- Auto PAT authentication ([#29](https://github.com/open-sauced/browser-extensions/issues/29)) ([f4f8cf6](https://github.com/open-sauced/browser-extensions/commit/f4f8cf6d1749d9aa23d3011dd130047f884e3e0f)) +- extension window navigation ([#21](https://github.com/open-sauced/browser-extensions/issues/21)) ([b5ae9a6](https://github.com/open-sauced/browser-extensions/commit/b5ae9a6e5d032b0ce2ab344b30f029598ca8608f)) +- GitHub page update listener ([#37](https://github.com/open-sauced/browser-extensions/issues/37)) ([06b070f](https://github.com/open-sauced/browser-extensions/commit/06b070fbd1a39f043a640d3f6e3de278a880b983)) +- Invite to OpenSauced ([#20](https://github.com/open-sauced/browser-extensions/issues/20)) ([0c8f222](https://github.com/open-sauced/browser-extensions/commit/0c8f22286475edeff53f9226f71e46bbb338287f)) +- PAT authentication ([#27](https://github.com/open-sauced/browser-extensions/issues/27)) ([e726a93](https://github.com/open-sauced/browser-extensions/commit/e726a937684faf20c14530de14f22ba1116195af)) +- updated the extension logo ([#22](https://github.com/open-sauced/browser-extensions/issues/22)) ([d19034d](https://github.com/open-sauced/browser-extensions/commit/d19034daaf40d322e2c400c65191caf3e5866e39)) +- view on OpenSauced button ([#14](https://github.com/open-sauced/browser-extensions/issues/14)) ([a447551](https://github.com/open-sauced/browser-extensions/commit/a447551d46ea35dde6b674853ab55094728014c2)) ### 🔁 Continuous Integration -* automated github releases ([#39](https://github.com/open-sauced/browser-extensions/issues/39)) ([735fa66](https://github.com/open-sauced/browser-extensions/commit/735fa669bf6bb96ebe53a9f9841615be6b1b7ded)), closes [#16](https://github.com/open-sauced/browser-extensions/issues/16) +- automated github releases ([#39](https://github.com/open-sauced/browser-extensions/issues/39)) ([735fa66](https://github.com/open-sauced/browser-extensions/commit/735fa669bf6bb96ebe53a9f9841615be6b1b7ded)), closes [#16](https://github.com/open-sauced/browser-extensions/issues/16) diff --git a/docs/0-introduction.md b/docs/0-introduction.md index f0d4679f..fe50905e 100644 --- a/docs/0-introduction.md +++ b/docs/0-introduction.md @@ -15,4 +15,4 @@ For styling, we use [Tailwind CSS](https://tailwindcss.com/) and GitHub's design ## Index - [Folder Structure](./1-folder-structure.md) -- [Adding a New Component](#adding-a-new-component) \ No newline at end of file +- [Adding a New Component](#adding-a-new-component) diff --git a/docs/1-folder-structure.md b/docs/1-folder-structure.md index 5bd46306..51dd646d 100644 --- a/docs/1-folder-structure.md +++ b/docs/1-folder-structure.md @@ -4,15 +4,15 @@ The source code for the extension is located in the `src` directory. The `src` d - `assets`: contains static assets such as images and fonts. - `content-scripts`: contains the content scripts that are used to manipulate the GitHub DOM. - - `components`: contains the custom-made vanilla JS components that are injected into the GitHub DOM. - - `github.ts`: contains the functions that are used to check which page the user is on and inject the appropriate components. - - `content-scripts.css`: contains the styles for our injected components. + - `components`: contains the custom-made vanilla JS components that are injected into the GitHub DOM. + - `github.ts`: contains the functions that are used to check which page the user is on and inject the appropriate components. + - `content-scripts.css`: contains the styles for our injected components. - `hooks`: contains custom React hooks that are used throughout the extension. - `pages`: contains the React components that are used to render the extension popup. We use [`react-chrome-extension-router`](https://npmjs.org/package/react-chrome-extension-router) for navigation through the popup pages. - `ts`: contains the TypeScript type definitions for DTOs and other custom types. - `utils`: contains utility functions that are used throughout the extension, such as functions for fetching OpenSauced API data, caching data, and parsing GitHub URLs. - - `dom-utils`: contains pre-injection verification functions that are used to check which (if any) component should be injected into the GitHub DOM. Some checks that can be done here include checking if the user is authenticated, checking if a repo exists on OpenSauced, etc. + - `dom-utils`: contains pre-injection verification functions that are used to check which (if any) component should be injected into the GitHub DOM. Some checks that can be done here include checking if the user is authenticated, checking if a repo exists on OpenSauced, etc. - `worker`: contains web workers that are used to run expensive tasks in the background, off the main thread. -For example, the `background.ts` script uses a web worker to check for authentication cookies in the background, so that the user can be logged in to the extension without having to enter any information directly in the extension popup. + For example, the `background.ts` script uses a web worker to check for authentication cookies in the background, so that the user can be logged in to the extension without having to enter any information directly in the extension popup. - `App.tsx`: contains the main React component that is rendered in the extension popup. The first authentication check is also done here. -- `constants.ts`: contains constants that are used throughout the extension, such as the API endpoints, GitHub URLs and classes, etc. \ No newline at end of file +- `constants.ts`: contains constants that are used throughout the extension, such as the API endpoints, GitHub URLs and classes, etc. diff --git a/docs/2-adding-a-new-component.md b/docs/2-adding-a-new-component.md index d29d6989..d9f8873e 100644 --- a/docs/2-adding-a-new-component.md +++ b/docs/2-adding-a-new-component.md @@ -1,22 +1,22 @@ ## Adding a new component + So you've set up your development environment and you're ready to start contributing to the OpenSauced Chrome Extension. Great! Let's walk through the process of adding a new component to the extension, or updating an existing component. Here are some steps to follow when adding a new component: -1. Identify the component you want to add or update, and it's location. The component can be present in either the Extension Popup, or be an injected component on the GitHub website. - * Injected components are located in their respective folders inside the `src/content-scripts/components` directory. - * Popup components are located in the `src/pages` directory. +1. Identify the component you want to add or update, and it's location. The component can be present in either the Extension Popup, or be an injected component on the GitHub website. + + - Injected components are located in their respective folders inside the `src/content-scripts/components` directory. + - Popup components are located in the `src/pages` directory. 2. Adding popup components is relatively simpler, as they are just React components. You can add a new component by creating a new file in the `src/pages` directory, and importing it in the `src/App.tsx` file. This is already done for other components, so you can follow the same pattern. -3. Injected components are written in vanilla JavaScript, and are injected into the GitHub website using a content script. For adding a new injected component, you will need to identify which GitHub page you need to inject the component into. For example, the `src/content-scripts/components/ViewOnOpenSaucedButton` component is injected into the GitHub profile page. +3. Injected components are written in vanilla JavaScript, and are injected into the GitHub website using a content script. For adding a new injected component, you will need to identify which GitHub page you need to inject the component into. For example, the `src/content-scripts/components/ViewOnOpenSaucedButton` component is injected into the GitHub profile page. 4. Once you've identified the page you want to inject the component into, you will need to add a conditonal statement in the `src/content-scripts/github.ts` file. This conditional statement will check if the current page is the page you want to inject the component into, and if it is, it will inject the component into the page. To match URL patterns inside the conditional statement, you can use the `window.location.href` variable, and create your own matcher inside the `src/utils.ts/urlMatcher.ts` file. Again, this is already done for other components, so you can follow the same pattern. -5. Once you've added the conditional statement to check for the current GitHub page, you can add an injection script for your component inside the `src/utils/dom-utils` directory. This injection script will be responsible for injecting your component into the page. You can follow the pattern of other injection scripts to add your own. Normally, all logical checks and validations are done inside the injection script, like the user being logged in, or the component not already being injected into the page. +5. Once you've added the conditional statement to check for the current GitHub page, you can add an injection script for your component inside the `src/utils/dom-utils` directory. This injection script will be responsible for injecting your component into the page. You can follow the pattern of other injection scripts to add your own. Normally, all logical checks and validations are done inside the injection script, like the user being logged in, or the component not already being injected into the page. 6. Inside the injection script, you create an instance of your component, and append it to the DOM. You can follow the pattern of other injection scripts to do this. We use the `src/utils/createHtmlElement.ts::createHtmlElement` function to create the DOM element for our component. The creation is done inside the `components` directory (including all event handlers, like click events), while the injection and locgical validations are done inside the `utils/dom-utils` directory. Tada🎉! You've successfully added a new component to the extension. You can now test your component by running the extension locally, and checking if it works as expected. - - diff --git a/docs/3-project-utilities.md b/docs/3-project-utilities.md index d4e71a23..8a387b91 100644 --- a/docs/3-project-utilities.md +++ b/docs/3-project-utilities.md @@ -12,7 +12,9 @@ Added in PR [#36](https://github.com/open-sauced/ai/pull/36), the function allow Added in PR [#20](https://github.com/open-sauced/ai/pull/20), the function creates an HTML element of a specified tag name and with optional properties. The properties can include styles, which are applied to the element's inline style attribute. Other non-style properties are also supported and added to the created element using `Object.assign()`. [Orginal implementation](https://gist.github.com/nickytonline/8223b27b19c080c28d9f0d3b7fce1e82). ### [checkAuthentication()](https://github.com/open-sauced/ai/blob/beta/src/utils/checkAuthentication.ts) + Added in PR [#56](https://github.com/open-sauced/ai/pull/56), this function checks if the user is authenticated by retrieving a cookie from Chrome storage and verifying its validity. If the cookie does not exist or is invalid, it removes any saved authentication token from Chrome storage. ### [domUpdateWatch()](https://github.com/open-sauced/ai/blob/beta/src/utils/dom-utils/domUpdateWatcher.ts) + Added in PR [64](https://github.com/open-sauced/ai/pull/64), this function is used to observe changes in the DOM and trigger a callback function when changes occur. The function uses a `MutationObserver` to track changes in the document body, and checks if the page has fully loaded before executing the callback with any specified delay time. diff --git a/e2e/open-popup.spec.ts b/e2e/open-popup.spec.ts index 1e5d2a8b..c253dc7d 100644 --- a/e2e/open-popup.spec.ts +++ b/e2e/open-popup.spec.ts @@ -1,6 +1,6 @@ -import { test, expect } from './popupFixture'; +import { test, expect } from "./popupFixture"; -test('popup page', async ({ page, extensionId }) => { - await page.goto(`chrome-extension://${extensionId}/index.html`); - expect(page.locator('body')).toBeTruthy(); +test("popup page", async ({ page, extensionId }) => { + await page.goto(`chrome-extension://${extensionId}/index.html`); + expect(page.locator("body")).toBeTruthy(); }); diff --git a/e2e/popupFixture.ts b/e2e/popupFixture.ts index 281ad137..e1c01acb 100644 --- a/e2e/popupFixture.ts +++ b/e2e/popupFixture.ts @@ -2,29 +2,29 @@ import { test as base, chromium, type BrowserContext } from "@playwright/test"; import path from "path"; export const test = base.extend<{ - context: BrowserContext; - extensionId: string; + context: BrowserContext; + extensionId: string; }>({ - context: async ({}, use) => { - const pathToExtension = path.join(__dirname, "../dist"); - const context = await chromium.launchPersistentContext("", { - headless: false, - args: [ - `--headless=new`, - `--disable-extensions-except=${pathToExtension}`, - `--load-extension=${pathToExtension}`, - ], - }); - await use(context); - await context.close(); - }, - extensionId: async ({ context }, use) => { - let [background] = context.serviceWorkers(); - if (!background) background = await context.waitForEvent("serviceworker"); + context: async ({}, use) => { + const pathToExtension = path.join(__dirname, "../dist"); + const context = await chromium.launchPersistentContext("", { + headless: false, + args: [ + `--headless=new`, + `--disable-extensions-except=${pathToExtension}`, + `--load-extension=${pathToExtension}`, + ], + }); + await use(context); + await context.close(); + }, + extensionId: async ({ context }, use) => { + let [background] = context.serviceWorkers(); + if (!background) background = await context.waitForEvent("serviceworker"); - const extensionId = background.url().split("/")[2]; - await use(extensionId); - }, + const extensionId = background.url().split("/")[2]; + await use(extensionId); + }, }); export const expect = test.expect; diff --git a/index.html b/index.html index a1c5c97a..6d496289 100644 --- a/index.html +++ b/index.html @@ -1,8 +1,12 @@ - + - + OpenSauced.ai diff --git a/manifest.json b/manifest.json index 5fc55853..3d292335 100644 --- a/manifest.json +++ b/manifest.json @@ -20,6 +20,10 @@ "48": "src/assets/os-icons/os-icon-48.png", "128": "src/assets/os-icons/os-icon-128.png" }, - "host_permissions": ["https://github.com/*", "https://*.app.opensauced.pizza/*" , "https://www.linkedin.com/*"], + "host_permissions": [ + "https://github.com/*", + "https://*.app.opensauced.pizza/*", + "https://www.linkedin.com/*" + ], "permissions": ["scripting", "storage", "tabs", "cookies"] } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 8b3f0485..cb936b52 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -545,14 +545,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], + "cpu": ["arm"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -561,14 +557,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -577,14 +569,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -593,14 +581,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">=12" } @@ -609,14 +593,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">=12" } @@ -625,14 +605,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "freebsd" - ], + "os": ["freebsd"], "engines": { "node": ">=12" } @@ -641,14 +617,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "freebsd" - ], + "os": ["freebsd"], "engines": { "node": ">=12" } @@ -657,14 +629,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], + "cpu": ["arm"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -673,14 +641,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -689,14 +653,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], + "cpu": ["ia32"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -705,14 +665,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], + "cpu": ["loong64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -721,14 +677,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], + "cpu": ["mips64el"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -737,14 +689,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], + "cpu": ["ppc64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -753,14 +701,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], + "cpu": ["riscv64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -769,14 +713,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], + "cpu": ["s390x"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -785,14 +725,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -801,14 +737,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "netbsd" - ], + "os": ["netbsd"], "engines": { "node": ">=12" } @@ -817,14 +749,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "openbsd" - ], + "os": ["openbsd"], "engines": { "node": ">=12" } @@ -833,14 +761,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "sunos" - ], + "os": ["sunos"], "engines": { "node": ">=12" } @@ -849,14 +773,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -865,14 +785,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], + "cpu": ["ia32"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -881,14 +797,10 @@ "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -3062,14 +2974,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -3078,14 +2986,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -3094,14 +2998,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">=12" } @@ -3110,14 +3010,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">=12" } @@ -3126,14 +3022,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "freebsd" - ], + "os": ["freebsd"], "engines": { "node": ">=12" } @@ -3142,14 +3034,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "freebsd" - ], + "os": ["freebsd"], "engines": { "node": ">=12" } @@ -3158,14 +3046,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], + "cpu": ["ia32"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3174,15 +3058,11 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3191,14 +3071,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], + "cpu": ["arm"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3207,14 +3083,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3223,14 +3095,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], + "cpu": ["mips64el"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3239,14 +3107,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], + "cpu": ["ppc64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3255,14 +3119,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], + "cpu": ["riscv64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3271,14 +3131,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], + "cpu": ["s390x"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3287,14 +3143,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "netbsd" - ], + "os": ["netbsd"], "engines": { "node": ">=12" } @@ -3303,14 +3155,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "openbsd" - ], + "os": ["openbsd"], "engines": { "node": ">=12" } @@ -3319,14 +3167,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "sunos" - ], + "os": ["sunos"], "engines": { "node": ">=12" } @@ -3335,14 +3179,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], + "cpu": ["ia32"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -3351,14 +3191,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -3367,14 +3203,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -3383,14 +3215,10 @@ "version": "0.14.54", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], + "cpu": ["loong64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -4116,9 +3944,7 @@ "dev": true, "hasInstallScript": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } diff --git a/playwright.config.ts b/playwright.config.ts index 82f08d6d..b56786f6 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,45 +1,45 @@ -import { defineConfig, devices } from '@playwright/test'; +import { defineConfig, devices } from "@playwright/test"; /** * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ - testDir: './e2e', - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://127.0.0.1:3000', + testDir: "./e2e", + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: "html", + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://127.0.0.1:3000', - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: 'on-first-retry', - }, - - /* Configure projects for major browsers */ - projects: [ - { - name: 'chromium', - use: { ...devices['Desktop Chrome'] }, - }, - // { - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, - ], + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + }, - /* Run your local dev server before starting the tests */ - webServer: { - command: 'npm run dev', - url: 'http://127.0.0.1:3000', - reuseExistingServer: !process.env.CI, + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, }, + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: "npm run dev", + url: "http://127.0.0.1:3000", + reuseExistingServer: !process.env.CI, + }, }); diff --git a/postcss.config.js b/postcss.config.js index 33ad091d..12a703d9 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -3,4 +3,4 @@ module.exports = { tailwindcss: {}, autoprefixer: {}, }, -} +}; diff --git a/src/App.tsx b/src/App.tsx index 280afc14..13e5084b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,15 +5,15 @@ import { useAuth } from "./hooks/useAuth"; import { goTo } from "react-chrome-extension-router"; const App = () => { - const { isTokenValid } = useAuth(); + const { isTokenValid } = useAuth(); - useEffect(() => { - if (isTokenValid) { - goTo(Home); - } - }, [isTokenValid]); + useEffect(() => { + if (isTokenValid) { + goTo(Home); + } + }, [isTokenValid]); - return ; + return ; }; export default App; diff --git a/src/constants.ts b/src/constants.ts index 68fe569e..3836532f 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,6 +1,8 @@ // OpenSauced constants -export const OPEN_SAUCED_INSIGHTS_DOMAIN = import.meta.env.VITE_OPEN_SAUCED_INSIGHTS_DOMAIN; -export const OPEN_SAUCED_API_ENDPOINT = import.meta.env.VITE_OPEN_SAUCED_API_ENDPOINT; +export const OPEN_SAUCED_INSIGHTS_DOMAIN = import.meta.env + .VITE_OPEN_SAUCED_INSIGHTS_DOMAIN; +export const OPEN_SAUCED_API_ENDPOINT = import.meta.env + .VITE_OPEN_SAUCED_API_ENDPOINT; export const REPO_QUERY_API_ENDPOINT = "https://opensauced.tools"; export const SUPABASE_LOGIN_URL = `https://${import.meta.env.VITE_OPEN_SAUCED_SUPABASE_ID}.supabase.co/auth/v1/authorize`; @@ -14,7 +16,6 @@ export const OPEN_SAUCED_AUTH_TOKEN_KEY = "os-access-token"; export const OPEN_SAUCED_OPTED_LOG_OUT_KEY = "opted-log-out"; export const AI_PR_DESCRIPTION_CONFIG_KEY = "ai-pr-description-config"; - export const OPEN_SAUCED_USERS_ENDPOINT = `${OPEN_SAUCED_API_ENDPOINT}/users`; export const OPEN_SAUCED_REPOS_ENDPOINT = `${OPEN_SAUCED_API_ENDPOINT}/repos`; export const OPEN_SAUCED_SESSION_ENDPOINT = `${OPEN_SAUCED_API_ENDPOINT}/auth/session`; @@ -29,24 +30,29 @@ export const OPEN_SAUCED_HIGHLIGHTS_LIST_ENDPOINT = `${OPEN_SAUCED_API_ENDPOINT} export const OPEN_SAUCED_EMOJIS_ENDPOINT = `${OPEN_SAUCED_API_ENDPOINT}/emojis`; // Content-scripts selectors -export const GITHUB_PROFILE_MENU_SELECTOR = ".p-nickname.vcard-username.d-block"; -export const GITHUB_PROFILE_EDIT_MENU_CLASS = "button.js-profile-editable-edit-button"; -export const GITHUB_PR_COMMENT_HEADER_CLASS = "timeline-comment-header clearfix d-flex"; -export const GITHUB_REVIEW_SUGGESTION_CLASS = "js-suggestion-button-placeholder"; +export const GITHUB_PROFILE_MENU_SELECTOR = + ".p-nickname.vcard-username.d-block"; +export const GITHUB_PROFILE_EDIT_MENU_CLASS = + "button.js-profile-editable-edit-button"; +export const GITHUB_PR_COMMENT_HEADER_CLASS = + "timeline-comment-header clearfix d-flex"; +export const GITHUB_REVIEW_SUGGESTION_CLASS = + "js-suggestion-button-placeholder"; export const GITHUB_REPO_ACTIONS_SELECTOR = ".pagehead-actions"; -export const GITHUB_PR_SUGGESTION_TEXT_AREA_Attribute = "[name='comment[body]']"; +export const GITHUB_PR_SUGGESTION_TEXT_AREA_Attribute = + "[name='comment[body]']"; export const GITHUB_PR_BASE_BRANCH_CLASS = "css-truncate css-truncate-target"; export const LINKEDIN_PROJECT_FORM_SELECTOR = ".artdeco-text-input--input"; // External Links export const EXTERNAL_RESOURCES = [ - { - link: "https://docs.opensauced.pizza/tools/chrome-extension/introduction-to-the-chrome-extension/", - key: "Docs", - }, - { link: "https://github.com/open-sauced/ai/issues", key: "Issues" }, - { - link: "https://github.com/orgs/open-sauced/discussions", - key: "Discussions", - }, + { + link: "https://docs.opensauced.pizza/tools/chrome-extension/introduction-to-the-chrome-extension/", + key: "Docs", + }, + { link: "https://github.com/open-sauced/ai/issues", key: "Issues" }, + { + link: "https://github.com/orgs/open-sauced/discussions", + key: "Discussions", + }, ]; diff --git a/src/content-scripts/components/AICodeReview/AICodeReviewButton.ts b/src/content-scripts/components/AICodeReview/AICodeReviewButton.ts index 273ed1f0..ba09ce60 100644 --- a/src/content-scripts/components/AICodeReview/AICodeReviewButton.ts +++ b/src/content-scripts/components/AICodeReview/AICodeReviewButton.ts @@ -1,49 +1,47 @@ import { createHtmlElement } from "../../../utils/createHtmlElement"; import openSaucedLogoIcon from "../../../assets/opensauced-icon.svg"; -import { generateCodeExplanation, generateCodeSuggestion, generateCodeTest } from "../../../utils/ai-utils/openai"; import { - AICodeReviewMenu, - AICodeReviewMenuItem, -} from "./AICodeReviewMenu"; - + generateCodeExplanation, + generateCodeSuggestion, + generateCodeTest, +} from "../../../utils/ai-utils/openai"; +import { AICodeReviewMenu, AICodeReviewMenuItem } from "./AICodeReviewMenu"; export const AICodeReviewButton = (commentNode: HTMLElement) => { - const changeSuggestorButton = createHtmlElement("a", { - innerHTML: ` + const changeSuggestorButton = createHtmlElement("a", { + innerHTML: ` + openSaucedLogoIcon + )}> `, - onclick: (event: MouseEvent) => { - event.stopPropagation(); - menu.classList.toggle("hidden"); - }, - id: "os-ai-change-gen", - }); + onclick: (event: MouseEvent) => { + event.stopPropagation(); + menu.classList.toggle("hidden"); + }, + id: "os-ai-change-gen", + }); - const refactorCode = AICodeReviewMenuItem( - "Refactor Code", - "Generate a code refactor", - generateCodeSuggestion, - commentNode, - ); - const testCode = AICodeReviewMenuItem( - "Test Code", - "Generate a test for the code", - generateCodeTest, - commentNode, - ); - const explainCode = AICodeReviewMenuItem( - "Explain Code", - "Generate an explanation for the code", - generateCodeExplanation, - commentNode, - ); + const refactorCode = AICodeReviewMenuItem( + "Refactor Code", + "Generate a code refactor", + generateCodeSuggestion, + commentNode + ); + const testCode = AICodeReviewMenuItem( + "Test Code", + "Generate a test for the code", + generateCodeTest, + commentNode + ); + const explainCode = AICodeReviewMenuItem( + "Explain Code", + "Generate an explanation for the code", + generateCodeExplanation, + commentNode + ); - const menu = AICodeReviewMenu([refactorCode, testCode, explainCode]); + const menu = AICodeReviewMenu([refactorCode, testCode, explainCode]); - changeSuggestorButton.append(menu); - return changeSuggestorButton; + changeSuggestorButton.append(menu); + return changeSuggestorButton; }; - - diff --git a/src/content-scripts/components/AICodeReview/AICodeReviewMenu.ts b/src/content-scripts/components/AICodeReview/AICodeReviewMenu.ts index dc5c05a2..f5e243b8 100644 --- a/src/content-scripts/components/AICodeReview/AICodeReviewMenu.ts +++ b/src/content-scripts/components/AICodeReview/AICodeReviewMenu.ts @@ -1,23 +1,27 @@ import { GITHUB_PR_SUGGESTION_TEXT_AREA_Attribute } from "../../../constants"; import { insertTextAtCursor } from "../../../utils/ai-utils/cursorPositionInsert"; import { - DescriptionConfig, - getAIDescriptionConfig, + DescriptionConfig, + getAIDescriptionConfig, } from "../../../utils/ai-utils/descriptionconfig"; -import { getAuthToken, isLoggedIn, optLogIn } from "../../../utils/checkAuthentication"; +import { + getAuthToken, + isLoggedIn, + optLogIn, +} from "../../../utils/checkAuthentication"; import { createHtmlElement } from "../../../utils/createHtmlElement"; import { isOutOfContextBounds } from "../../../utils/fetchGithubAPIData"; type SuggestionGenerator = ( - token: string, - code: string, - config: DescriptionConfig + token: string, + code: string, + config: DescriptionConfig ) => Promise; export const AICodeReviewMenu = (items: HTMLLIElement[]) => { - const menu = createHtmlElement("div", { - className: "SelectMenu js-slash-command-menu hidden mt-6", - innerHTML: `
+ const menu = createHtmlElement("div", { + className: "SelectMenu js-slash-command-menu hidden mt-6", + innerHTML: `
`, - }); + }); - menu.querySelector("ul")?.append(...items); + menu.querySelector("ul")?.append(...items); - document.addEventListener("click", event => { - if (event.target instanceof HTMLElement) { - menu.classList.add("hidden"); - } - }); - return menu; + document.addEventListener("click", (event) => { + if (event.target instanceof HTMLElement) { + menu.classList.add("hidden"); + } + }); + return menu; }; -export const AICodeReviewMenuItem = (title: string, description: string, suggestionGenerator: SuggestionGenerator, commentNode: HTMLElement) => { - const menuItem = createHtmlElement("li", { - className: "SelectMenu-item d-block slash-command-menu-item", - role: "option", - onclick: () => { - void handleSubmit(suggestionGenerator, commentNode); - }, - innerHTML: `
${title}
+export const AICodeReviewMenuItem = ( + title: string, + description: string, + suggestionGenerator: SuggestionGenerator, + commentNode: HTMLElement +) => { + const menuItem = createHtmlElement("li", { + className: "SelectMenu-item d-block slash-command-menu-item", + role: "option", + onclick: () => { + void handleSubmit(suggestionGenerator, commentNode); + }, + innerHTML: `
${title}
${description}`, - }); + }); - return menuItem; + return menuItem; }; const handleSubmit = async ( - suggestionGenerator: SuggestionGenerator, - commentNode: HTMLElement, + suggestionGenerator: SuggestionGenerator, + commentNode: HTMLElement ) => { - const logo = commentNode.querySelector("#ai-description-button-logo"); - const button = commentNode.querySelector("#os-ai-change-gen"); + const logo = commentNode.querySelector("#ai-description-button-logo"); + const button = commentNode.querySelector("#os-ai-change-gen"); - try { - if (!(await isLoggedIn())) { - return void optLogIn(); - } + try { + if (!(await isLoggedIn())) { + return void optLogIn(); + } - if (!logo || !button) { - return; - } + if (!logo || !button) { + return; + } - const descriptionConfig = await getAIDescriptionConfig(); + const descriptionConfig = await getAIDescriptionConfig(); - if (!descriptionConfig) { - return; - } + if (!descriptionConfig) { + return; + } - logo.classList.toggle("animate-spin"); - button.classList.toggle("pointer-events-none"); + logo.classList.toggle("animate-spin"); + button.classList.toggle("pointer-events-none"); - const selectedLines = document.querySelectorAll( - ".code-review.selected-line", - ); - let selectedCode = Array.from(selectedLines) - .map(line => line.textContent) - .join("\n"); + const selectedLines = document.querySelectorAll( + ".code-review.selected-line" + ); + let selectedCode = Array.from(selectedLines) + .map((line) => line.textContent) + .join("\n"); - // find input with name="position" and get its value - if (!selectedCode) { - const positionElement = commentNode.querySelector( - "input[name=position]", - )!; - const position = positionElement.getAttribute("value")!; + // find input with name="position" and get its value + if (!selectedCode) { + const positionElement = commentNode.querySelector( + "input[name=position]" + )!; + const position = positionElement.getAttribute("value")!; - const codeDiv = document.querySelector(`[data-line-number="${position}"]`) - ?.nextSibling?.nextSibling as HTMLElement; + const codeDiv = document.querySelector(`[data-line-number="${position}"]`) + ?.nextSibling?.nextSibling as HTMLElement; - selectedCode = + selectedCode = codeDiv.getElementsByClassName("blob-code-inner")[0].textContent!; - } - if ( - isOutOfContextBounds( - [selectedCode, [] ], - descriptionConfig.config.maxInputLength, - ) - ) { - logo.classList.toggle("animate-spin"); - return alert( - `Max input length exceeded. Try reducing the number of selected lines to refactor.`, - ); - } - const token = await getAuthToken(); - const suggestionStream = await suggestionGenerator( - token, - selectedCode, - descriptionConfig, - ); - - logo.classList.toggle("animate-spin"); - button.classList.toggle("pointer-events-none"); - if (!suggestionStream) { - return console.error("No description was generated!"); - } - const textArea = commentNode.querySelector( - GITHUB_PR_SUGGESTION_TEXT_AREA_Attribute, - )!; - - insertTextAtCursor(textArea as HTMLTextAreaElement, suggestionStream); - } catch (error: unknown) { - logo?.classList.toggle("animate-spin"); - button?.classList.toggle("pointer-events-none"); - - if (error instanceof Error) { - console.error("Description generation error:", error.message); - } } + if ( + isOutOfContextBounds( + [selectedCode, []], + descriptionConfig.config.maxInputLength + ) + ) { + logo.classList.toggle("animate-spin"); + return alert( + `Max input length exceeded. Try reducing the number of selected lines to refactor.` + ); + } + const token = await getAuthToken(); + const suggestionStream = await suggestionGenerator( + token, + selectedCode, + descriptionConfig + ); + + logo.classList.toggle("animate-spin"); + button.classList.toggle("pointer-events-none"); + if (!suggestionStream) { + return console.error("No description was generated!"); + } + const textArea = commentNode.querySelector( + GITHUB_PR_SUGGESTION_TEXT_AREA_Attribute + )!; + + insertTextAtCursor(textArea as HTMLTextAreaElement, suggestionStream); + } catch (error: unknown) { + logo?.classList.toggle("animate-spin"); + button?.classList.toggle("pointer-events-none"); + + if (error instanceof Error) { + console.error("Description generation error:", error.message); + } + } }; diff --git a/src/content-scripts/components/AddPRToHighlights/AddPRToHighlightsButton.ts b/src/content-scripts/components/AddPRToHighlights/AddPRToHighlightsButton.ts index b5acc441..d297754e 100644 --- a/src/content-scripts/components/AddPRToHighlights/AddPRToHighlightsButton.ts +++ b/src/content-scripts/components/AddPRToHighlights/AddPRToHighlightsButton.ts @@ -3,43 +3,43 @@ import openSaucedLogoIcon from "../../../assets/opensauced-icon.svg"; import { OPEN_SAUCED_INSIGHTS_DOMAIN } from "../../../constants"; export const AddPRToHighlightsButton = () => { - const addPRToHighlightsButton = createHtmlElement("a", { - id: "add-pr-to-highlights-button", - className: "relative cursor-pointer", - innerHTML: ` + const addPRToHighlightsButton = createHtmlElement("a", { + id: "add-pr-to-highlights-button", + className: "relative cursor-pointer", + innerHTML: ` `, - onclick: () => { - const menu = document.getElementById("details-menu-os"); + onclick: () => { + const menu = document.getElementById("details-menu-os"); - if (!menu) { - return; - } - menu.classList.toggle("hidden"); - }, - }); + if (!menu) { + return; + } + menu.classList.toggle("hidden"); + }, + }); - addPRToHighlightsButton.addEventListener("click", e => { - e.stopPropagation(); - }); + addPRToHighlightsButton.addEventListener("click", (e) => { + e.stopPropagation(); + }); - document.addEventListener("click", () => { - const menu = document.getElementById("details-menu-os"); + document.addEventListener("click", () => { + const menu = document.getElementById("details-menu-os"); - if (!menu) { - return; - } - menu.classList.add("hidden"); - }); + if (!menu) { + return; + } + menu.classList.add("hidden"); + }); - return addPRToHighlightsButton; + return addPRToHighlightsButton; }; diff --git a/src/content-scripts/components/GenerateAIDescription/DescriptionGeneratorButton.ts b/src/content-scripts/components/GenerateAIDescription/DescriptionGeneratorButton.ts index 12803465..ebbbc9ff 100644 --- a/src/content-scripts/components/GenerateAIDescription/DescriptionGeneratorButton.ts +++ b/src/content-scripts/components/GenerateAIDescription/DescriptionGeneratorButton.ts @@ -1,99 +1,116 @@ import { createHtmlElement } from "../../../utils/createHtmlElement"; import openSaucedLogoIcon from "../../../assets/opensauced-icon.svg"; import { getPullRequestAPIURL } from "../../../utils/urlMatchers"; -import { getDescriptionContext, isOutOfContextBounds } from "../../../utils/fetchGithubAPIData"; +import { + getDescriptionContext, + isOutOfContextBounds, +} from "../../../utils/fetchGithubAPIData"; import { generateDescription } from "../../../utils/ai-utils/openai"; import { insertTextAtCursor } from "../../../utils/ai-utils/cursorPositionInsert"; import { getAIDescriptionConfig } from "../../../utils/ai-utils/descriptionconfig"; -import { getAuthToken, isLoggedIn, optLogIn } from "../../../utils/checkAuthentication"; +import { + getAuthToken, + isLoggedIn, + optLogIn, +} from "../../../utils/checkAuthentication"; export const DescriptionGeneratorButton = (number: number) => { - const descriptionGeneratorButton = createHtmlElement("a", { - id: `ai-description-button-${number}`, - innerHTML: ` + const descriptionGeneratorButton = createHtmlElement("a", { + id: `ai-description-button-${number}`, + innerHTML: ` Generate PR description`, - onclick: handleSubmit, - }); + onclick: handleSubmit, + }); - return descriptionGeneratorButton; + return descriptionGeneratorButton; }; const handleSubmit = async (event: Event) => { - const button = event.currentTarget as HTMLElement; - const logo = button.querySelector("#ai-description-button-logo"); + const button = event.currentTarget as HTMLElement; + const logo = button.querySelector("#ai-description-button-logo"); - - try { - if (!(await isLoggedIn())) { - return void optLogIn(); - } - - const descriptionConfig = await getAIDescriptionConfig(); - - if (!descriptionConfig) { - return; - } - - logo?.classList.toggle("animate-spin"); - button.classList.toggle("pointer-events-none"); - - - const { protocol, hostname, pathname } = window.location; - const descriptionStream = await getAiDescription(`${protocol}//${hostname}${pathname}`); - - logo?.classList.toggle("animate-spin"); - button.classList.toggle("pointer-events-none"); - const textArea = button.closest(".Box.CommentBox")?.querySelector("textarea"); - - if (textArea) { - insertTextAtCursor(textArea, descriptionStream); - } - } catch (error: unknown) { - logo?.classList.toggle("animate-spin"); - button.classList.toggle("pointer-events-none"); - - if (error instanceof Error) { - alert(error.message); - console.error("Description generation error:", error.message); - } + try { + if (!(await isLoggedIn())) { + return void optLogIn(); } -}; - -export const getAiDescription = async (prUrl: string) => { - const prApiUrl = await getPullRequestAPIURL(prUrl); const descriptionConfig = await getAIDescriptionConfig(); if (!descriptionConfig) { - throw new Error("Configuration file is empty!"); + return; } - const [diff, commitMessages] = await getDescriptionContext(prApiUrl, descriptionConfig.config.source); + logo?.classList.toggle("animate-spin"); + button.classList.toggle("pointer-events-none"); - if (!diff && !commitMessages) { - throw new Error(`No input context was generated.`); - } - if (isOutOfContextBounds([diff, commitMessages], descriptionConfig.config.maxInputLength)) { - throw new Error(`Max input length exceeded. Try setting the description source to commit-messages.`); - } - const token = await getAuthToken(); - const description = await generateDescription( - token, - descriptionConfig.config.language, - descriptionConfig.config.length, - descriptionConfig.config.temperature / 10, - descriptionConfig.config.tone, - diff, - commitMessages, + const { protocol, hostname, pathname } = window.location; + const descriptionStream = await getAiDescription( + `${protocol}//${hostname}${pathname}` ); - if (!description) { - throw new Error("No description was generated!"); + logo?.classList.toggle("animate-spin"); + button.classList.toggle("pointer-events-none"); + const textArea = button + .closest(".Box.CommentBox") + ?.querySelector("textarea"); + + if (textArea) { + insertTextAtCursor(textArea, descriptionStream); } + } catch (error: unknown) { + logo?.classList.toggle("animate-spin"); + button.classList.toggle("pointer-events-none"); - return description; + if (error instanceof Error) { + alert(error.message); + console.error("Description generation error:", error.message); + } + } }; - +export const getAiDescription = async (prUrl: string) => { + const prApiUrl = await getPullRequestAPIURL(prUrl); + + const descriptionConfig = await getAIDescriptionConfig(); + + if (!descriptionConfig) { + throw new Error("Configuration file is empty!"); + } + + const [diff, commitMessages] = await getDescriptionContext( + prApiUrl, + descriptionConfig.config.source + ); + + if (!diff && !commitMessages) { + throw new Error(`No input context was generated.`); + } + if ( + isOutOfContextBounds( + [diff, commitMessages], + descriptionConfig.config.maxInputLength + ) + ) { + throw new Error( + `Max input length exceeded. Try setting the description source to commit-messages.` + ); + } + const token = await getAuthToken(); + const description = await generateDescription( + token, + descriptionConfig.config.language, + descriptionConfig.config.length, + descriptionConfig.config.temperature / 10, + descriptionConfig.config.tone, + diff, + commitMessages + ); + + if (!description) { + throw new Error("No description was generated!"); + } + + return description; +}; diff --git a/src/content-scripts/components/InsightsSelectDropdown/InsightsSelectDropdown.ts b/src/content-scripts/components/InsightsSelectDropdown/InsightsSelectDropdown.ts index 961116a2..1dd3f1cd 100644 --- a/src/content-scripts/components/InsightsSelectDropdown/InsightsSelectDropdown.ts +++ b/src/content-scripts/components/InsightsSelectDropdown/InsightsSelectDropdown.ts @@ -1,14 +1,21 @@ import "../../content-scripts.css"; import { createHtmlElement } from "../../../utils/createHtmlElement"; import { getAuthToken } from "../../../utils/checkAuthentication"; -import { getUserInsightsData, getRepoData, updateInsight } from "../../../utils/fetchOpenSaucedApiData"; +import { + getUserInsightsData, + getRepoData, + updateInsight, +} from "../../../utils/fetchOpenSaucedApiData"; import { IInsight } from "../../../ts/InsightDto"; import { OPEN_SAUCED_INSIGHTS_DOMAIN } from "../../../constants"; -export const InsightsSelectDropdown = async (ownerName: string, repoName: string) => { - const insightsDropdown = createHtmlElement("div", { - className: "SelectMenu cursor-default right-0 mt-1 hidden text-inherit", - innerHTML: ` +export const InsightsSelectDropdown = async ( + ownerName: string, + repoName: string +) => { + const insightsDropdown = createHtmlElement("div", { + className: "SelectMenu cursor-default right-0 mt-1 hidden text-inherit", + innerHTML: `
Add Repo To Insights
@@ -30,30 +37,28 @@ export const InsightsSelectDropdown = async (ownerName: string, repoName: string `, - }); + }); - const userToken = await getAuthToken(); - const userInsightsData = await getUserInsightsData(userToken); - const currentRepoData = await getRepoData(ownerName, repoName); + const userToken = await getAuthToken(); + const userInsightsData = await getUserInsightsData(userToken); + const currentRepoData = await getRepoData(ownerName, repoName); - const userInsights = userInsightsData.data as any[]; + const userInsights = userInsightsData.data as any[]; - const closeButton = insightsDropdown.querySelector( - ".SelectMenu-closeButton", - )!; + const closeButton = insightsDropdown.querySelector( + ".SelectMenu-closeButton" + )!; - closeButton.addEventListener("click", () => { - insightsDropdown.classList.add("hidden"); - }); + closeButton.addEventListener("click", () => { + insightsDropdown.classList.add("hidden"); + }); - const insightsList = insightsDropdown.querySelector( - ".SelectMenu-list", - )!; + const insightsList = insightsDropdown.querySelector(".SelectMenu-list")!; - userInsights.forEach((insight: IInsight) => { - const insightLabel = createHtmlElement("div", { - className: "form-checkbox mt-1 mb-0 p-1", - innerHTML: ` + userInsights.forEach((insight: IInsight) => { + const insightLabel = createHtmlElement("div", { + className: "form-checkbox mt-1 mb-0 p-1", + innerHTML: ` `, - }); - - const insightCheckbox = insightLabel.querySelector( - "input", - )!; - - if (insight.repos.some((repo: any) => repo.repo_id === currentRepoData.id)) { - insightCheckbox.setAttribute("checked", "true"); - } - - insightCheckbox.addEventListener("click", async () => { - const currentRepoId = currentRepoData.id; - const { checked } = insightCheckbox; - - const updatedInsight = await updateInsight( - userToken, - currentRepoId, - checked, - `${ownerName}/${repoName}`, - insight, - ); - - if (!updatedInsight) { - console.log("Something went wrong"); - } - }); - - insightsList.appendChild(insightLabel); }); - - document.addEventListener("click", () => { - insightsDropdown.classList.add("hidden"); + const insightCheckbox = insightLabel.querySelector("input")!; + + if ( + insight.repos.some((repo: any) => repo.repo_id === currentRepoData.id) + ) { + insightCheckbox.setAttribute("checked", "true"); + } + + insightCheckbox.addEventListener("click", async () => { + const currentRepoId = currentRepoData.id; + const { checked } = insightCheckbox; + + const updatedInsight = await updateInsight( + userToken, + currentRepoId, + checked, + `${ownerName}/${repoName}`, + insight + ); + + if (!updatedInsight) { + console.log("Something went wrong"); + } }); - insightsDropdown.addEventListener("click", e => { - e.stopPropagation(); - }); + insightsList.appendChild(insightLabel); + }); - const addInsightBtn = insightsDropdown.querySelector( - ".user-lists-menu-action", - )!; + document.addEventListener("click", () => { + insightsDropdown.classList.add("hidden"); + }); - addInsightBtn.addEventListener("click", () => { - window.open( - `https://${OPEN_SAUCED_INSIGHTS_DOMAIN}/hub/insights/new`, - "_blank", - ); - }); + insightsDropdown.addEventListener("click", (e) => { + e.stopPropagation(); + }); - return insightsDropdown; -}; + const addInsightBtn = insightsDropdown.querySelector( + ".user-lists-menu-action" + )!; + addInsightBtn.addEventListener("click", () => { + window.open( + `https://${OPEN_SAUCED_INSIGHTS_DOMAIN}/hub/insights/new`, + "_blank" + ); + }); + + return insightsDropdown; +}; diff --git a/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedButton.ts b/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedButton.ts index 1b0ac593..2c69ab9d 100644 --- a/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedButton.ts +++ b/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedButton.ts @@ -3,11 +3,11 @@ import "../../content-scripts.css"; import { createHtmlElement } from "../../../utils/createHtmlElement"; export const InviteToOpenSaucedButton = () => { - const inviteToOpenSaucedButton = createHtmlElement("a", { - id: "invite-to-opensauced-button", - className: + const inviteToOpenSaucedButton = createHtmlElement("a", { + id: "invite-to-opensauced-button", + className: "inline-block mt-4 text-black bg-gh-white dark:bg-gh-gray dark:text-white rounded-md p-2 text-sm font-semibold text-center select-none w-full border hover:shadow-button hover:no-underline", - innerHTML: `OpenSauced Logo { /> Invite to OpenSauced `, - }); + }); - return inviteToOpenSaucedButton; + return inviteToOpenSaucedButton; }; diff --git a/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedModal.ts b/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedModal.ts index e8272d67..f1e7c68b 100644 --- a/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedModal.ts +++ b/src/content-scripts/components/InviteToOpenSauced/InviteToOpenSaucedModal.ts @@ -6,77 +6,79 @@ import linkedInSocailIcon from "../../../assets/linkedin-icon.svg"; import { OPEN_SAUCED_INSIGHTS_DOMAIN } from "../../../constants"; interface Socials { - emailAddress?: string | null; - twitterUsername?: string | null; - linkedInUsername?: string | null; + emailAddress?: string | null; + twitterUsername?: string | null; + linkedInUsername?: string | null; } export const InviteToOpenSaucedModal = ( - username: string, - { emailAddress, twitterUsername, linkedInUsername }: Socials = {}, - modalDisplayTrigger?: HTMLElement, + username: string, + { emailAddress, twitterUsername, linkedInUsername }: Socials = {}, + modalDisplayTrigger?: HTMLElement ) => { - const emailBody = + const emailBody = typeof emailAddress === "string" && `Hey ${username}. I'm using OpenSauced to keep track of my contributions and discover new projects. Try connecting your GitHub to https://opensauced.pizza/`; - const emailHref = + const emailHref = typeof emailAddress === "string" && `mailto:${emailAddress}?subject=${encodeURIComponent( - "Invitation to join OpenSauced!", + "Invitation to join OpenSauced!" )}&body=${encodeURIComponent(emailBody)}`; - const tweetHref = + const tweetHref = typeof twitterUsername === "string" && `https://twitter.com/intent/tweet?text=${encodeURIComponent( - `Check out @saucedopen. The platform for open source contributors to find their next contribution. https://opensauced.pizza/blog/social-coding-is-back. @${twitterUsername}`, + `Check out @saucedopen. The platform for open source contributors to find their next contribution. https://opensauced.pizza/blog/social-coding-is-back. @${twitterUsername}` )}&hashtags=opensource,github`; - const linkedinHref = + const linkedinHref = typeof linkedInUsername === "string" && `https://www.linkedin.com/in/${linkedInUsername}`; - const emailIcon = emailBody - ? createHtmlElement("a", { - href: emailHref, - target: "_blank", - rel: "noopener noreferrer", - innerHTML: `Email`, - }) - : ""; - const twitterIcon = tweetHref - ? createHtmlElement("a", { - href: tweetHref, - target: "_blank", - rel: "noopener noreferrer", - innerHTML: `Twitter`, - }) - : ""; - const linkedInIcon = linkedinHref - ? createHtmlElement("a", { - href: linkedinHref, - target: "_blank", - rel: "noopener noreferrer", - innerHTML: `LinkedIn`, - }) - : ""; + const emailIcon = emailBody + ? createHtmlElement("a", { + href: emailHref, + target: "_blank", + rel: "noopener noreferrer", + innerHTML: `Email`, + }) + : ""; + const twitterIcon = tweetHref + ? createHtmlElement("a", { + href: tweetHref, + target: "_blank", + rel: "noopener noreferrer", + innerHTML: `Twitter`, + }) + : ""; + const linkedInIcon = linkedinHref + ? createHtmlElement("a", { + href: linkedinHref, + target: "_blank", + rel: "noopener noreferrer", + innerHTML: `LinkedIn`, + }) + : ""; - const socialIcons = createHtmlElement("span", { className: "flex flex-nowrap space-x-3" }); + const socialIcons = createHtmlElement("span", { + className: "flex flex-nowrap space-x-3", + }); - const inviteToOpenSaucedModal = createHtmlElement("div", { - className: + const inviteToOpenSaucedModal = createHtmlElement("div", { + className: "fixed h-full w-full z-50 bg-gray-600 bg-opacity-80 dark:bg-opacity-50 overflow-y-auto inset-0", - style: { display: "none" }, - id: "invite-modal", - }); + style: { display: "none" }, + id: "invite-modal", + }); - const inviteToOpenSaucedModalContainer = createHtmlElement("div", { - className: + const inviteToOpenSaucedModalContainer = createHtmlElement("div", { + className: "mt-2 min-w-[33%] relative top-60 mx-auto p-4 border w-96 rounded-md shadow-button border-solid border-orange bg-slate-800", - innerHTML: ` + innerHTML: `

Invite ${username} to OpenSauced!

@@ -84,23 +86,23 @@ export const InviteToOpenSaucedModal = (

`, - }); + }); - inviteToOpenSaucedModal.onclick = e => { - if (e.target === inviteToOpenSaucedModal) { - inviteToOpenSaucedModal.style.display = "none"; - } - }; - - if (modalDisplayTrigger) { - modalDisplayTrigger.onclick = () => { - inviteToOpenSaucedModal.style.display = "block"; - }; + inviteToOpenSaucedModal.onclick = (e) => { + if (e.target === inviteToOpenSaucedModal) { + inviteToOpenSaucedModal.style.display = "none"; } + }; + + if (modalDisplayTrigger) { + modalDisplayTrigger.onclick = () => { + inviteToOpenSaucedModal.style.display = "block"; + }; + } - socialIcons.replaceChildren(emailIcon, twitterIcon, linkedInIcon); - inviteToOpenSaucedModalContainer.appendChild(socialIcons); - inviteToOpenSaucedModal.appendChild(inviteToOpenSaucedModalContainer); + socialIcons.replaceChildren(emailIcon, twitterIcon, linkedInIcon); + inviteToOpenSaucedModalContainer.appendChild(socialIcons); + inviteToOpenSaucedModal.appendChild(inviteToOpenSaucedModalContainer); - return inviteToOpenSaucedModal; + return inviteToOpenSaucedModal; }; diff --git a/src/content-scripts/components/RepoQuery/RepoQuery.tsx b/src/content-scripts/components/RepoQuery/RepoQuery.tsx index ce58da4f..bfd84319 100644 --- a/src/content-scripts/components/RepoQuery/RepoQuery.tsx +++ b/src/content-scripts/components/RepoQuery/RepoQuery.tsx @@ -4,18 +4,13 @@ import { RepoQuery } from "../../../repo-query/pages/main"; import { createHtmlElement } from "../../../utils/createHtmlElement"; export const RepoQueryRoot = (ownerName: string, repoName: string) => { - const repoQueryRoot = createHtmlElement("div", { id: "repo-query-root" }); + const repoQueryRoot = createHtmlElement("div", { id: "repo-query-root" }); - ReactDOM.createRoot(repoQueryRoot).render( - - - , - ); + ReactDOM.createRoot(repoQueryRoot).render( + + + + ); - - return repoQueryRoot; + return repoQueryRoot; }; - diff --git a/src/content-scripts/components/RepoVoting/RepoUnvoteButton.ts b/src/content-scripts/components/RepoVoting/RepoUnvoteButton.ts index 2b2ac353..53db3ccd 100644 --- a/src/content-scripts/components/RepoVoting/RepoUnvoteButton.ts +++ b/src/content-scripts/components/RepoVoting/RepoUnvoteButton.ts @@ -5,50 +5,58 @@ import { voteOrUnvoteRepo } from "../../../utils/fetchOpenSaucedApiData"; import { InsightsSelectDropdown } from "../InsightsSelectDropdown/InsightsSelectDropdown"; export const RepoUnvoteButton = (ownerName: string, repoName: string) => { - const repoUnvoteButton = createHtmlElement("li", { - id: "repo-voting-button", - className: + const repoUnvoteButton = createHtmlElement("li", { + id: "repo-voting-button", + className: "text-white text-center hover:shadow-button bg-gradient-to-r from-[#e67e22] to-[#d35400] btn btn-sm", - innerHTML: ` + innerHTML: ` Unvote `, - }); + }); - repoUnvoteButton.addEventListener("click", async () => { - repoUnvoteButton.innerHTML = ` + repoUnvoteButton.addEventListener("click", async () => { + repoUnvoteButton.innerHTML = ` Loading... `; - const userToken = await getAuthToken(); - - const unvoted = await voteOrUnvoteRepo(userToken, ownerName, repoName, "DELETE"); - - if (unvoted) { - const { VoteRepoButton } = await import("./RepoVoteButton"); - - repoUnvoteButton.replaceWith(VoteRepoButton(ownerName, repoName)); - } else { - console.log("Something went wrong"); - repoUnvoteButton.innerHTML = ` + const userToken = await getAuthToken(); + + const unvoted = await voteOrUnvoteRepo( + userToken, + ownerName, + repoName, + "DELETE" + ); + + if (unvoted) { + const { VoteRepoButton } = await import("./RepoVoteButton"); + + repoUnvoteButton.replaceWith(VoteRepoButton(ownerName, repoName)); + } else { + console.log("Something went wrong"); + repoUnvoteButton.innerHTML = ` Unvote `; - } - }); + } + }); - const insightsDropdownBtn = repoUnvoteButton.querySelector( - "#insights-dropdown-btn", - )!; + const insightsDropdownBtn = repoUnvoteButton.querySelector( + "#insights-dropdown-btn" + )!; - insightsDropdownBtn.addEventListener("click", async e => { - e.stopPropagation(); - const insightsDropdown = await InsightsSelectDropdown(ownerName, repoName) as HTMLDivElement; + insightsDropdownBtn.addEventListener("click", async (e) => { + e.stopPropagation(); + const insightsDropdown = (await InsightsSelectDropdown( + ownerName, + repoName + )) as HTMLDivElement; - repoUnvoteButton.appendChild(insightsDropdown); - insightsDropdown.classList.toggle("hidden"); - }); + repoUnvoteButton.appendChild(insightsDropdown); + insightsDropdown.classList.toggle("hidden"); + }); - return repoUnvoteButton; + return repoUnvoteButton; }; diff --git a/src/content-scripts/components/RepoVoting/RepoVoteButton.ts b/src/content-scripts/components/RepoVoting/RepoVoteButton.ts index ceecfcd9..81837c7f 100644 --- a/src/content-scripts/components/RepoVoting/RepoVoteButton.ts +++ b/src/content-scripts/components/RepoVoting/RepoVoteButton.ts @@ -5,50 +5,53 @@ import { voteOrUnvoteRepo } from "../../../utils/fetchOpenSaucedApiData"; import { InsightsSelectDropdown } from "../InsightsSelectDropdown/InsightsSelectDropdown"; export const VoteRepoButton = (ownerName: string, repoName: string) => { - const voteRepoButton = createHtmlElement("li", { - id: "repo-voting-button", - className: + const voteRepoButton = createHtmlElement("li", { + id: "repo-voting-button", + className: "text-white text-center hover:shadow-button bg-gradient-to-r from-[#e67e22] to-[#d35400] btn btn-sm", - innerHTML: ` + innerHTML: ` Upvote `, - }); + }); - voteRepoButton.addEventListener("click", async () => { - voteRepoButton.innerHTML = ` + voteRepoButton.addEventListener("click", async () => { + voteRepoButton.innerHTML = ` Loading... `; - const userToken = await getAuthToken(); + const userToken = await getAuthToken(); - const voted = await voteOrUnvoteRepo(userToken, ownerName, repoName, "PUT"); + const voted = await voteOrUnvoteRepo(userToken, ownerName, repoName, "PUT"); - if (voted) { - const { RepoUnvoteButton } = await import("./RepoUnvoteButton"); + if (voted) { + const { RepoUnvoteButton } = await import("./RepoUnvoteButton"); - voteRepoButton.replaceWith(RepoUnvoteButton(ownerName, repoName)); - } else { - console.log("Something went wrong"); - voteRepoButton.innerHTML = ` + voteRepoButton.replaceWith(RepoUnvoteButton(ownerName, repoName)); + } else { + console.log("Something went wrong"); + voteRepoButton.innerHTML = ` Upvote `; - } - }); + } + }); - const insightsDropdownBtn = voteRepoButton.querySelector( - "#insights-dropdown-btn", - )!; + const insightsDropdownBtn = voteRepoButton.querySelector( + "#insights-dropdown-btn" + )!; - insightsDropdownBtn.addEventListener("click", async e => { - e.stopPropagation(); - const insightsDropdown = await InsightsSelectDropdown(ownerName, repoName) as HTMLDivElement; + insightsDropdownBtn.addEventListener("click", async (e) => { + e.stopPropagation(); + const insightsDropdown = (await InsightsSelectDropdown( + ownerName, + repoName + )) as HTMLDivElement; - voteRepoButton.appendChild(insightsDropdown); - insightsDropdown.classList.toggle("hidden"); - }); + voteRepoButton.appendChild(insightsDropdown); + insightsDropdown.classList.toggle("hidden"); + }); - return voteRepoButton; + return voteRepoButton; }; diff --git a/src/content-scripts/components/ViewOnOpenSaucedButton/ViewOnOpenSaucedButton.ts b/src/content-scripts/components/ViewOnOpenSaucedButton/ViewOnOpenSaucedButton.ts index 8a6c0cf2..67acf3f9 100644 --- a/src/content-scripts/components/ViewOnOpenSaucedButton/ViewOnOpenSaucedButton.ts +++ b/src/content-scripts/components/ViewOnOpenSaucedButton/ViewOnOpenSaucedButton.ts @@ -4,13 +4,14 @@ import { createHtmlElement } from "../../../utils/createHtmlElement"; import { OPEN_SAUCED_INSIGHTS_DOMAIN } from "../../../constants"; export const ViewOnOpenSaucedButton = (username: string) => { - const viewOnOpenSaucedButton = createHtmlElement("a", { - id: "view-on-opensauced-button", - href: `https://${OPEN_SAUCED_INSIGHTS_DOMAIN}/user/${username}/contributions`, - className: "inline-block mb-2 text-black bg-gh-white dark:bg-gh-gray dark:text-white rounded-md p-2 text-sm font-semibold text-center select-none w-full border hover:shadow-button hover:no-underline", - target: "_blank", - rel: "noopener noreferrer", - innerHTML: ` + const viewOnOpenSaucedButton = createHtmlElement("a", { + id: "view-on-opensauced-button", + href: `https://${OPEN_SAUCED_INSIGHTS_DOMAIN}/user/${username}/contributions`, + className: + "inline-block mb-2 text-black bg-gh-white dark:bg-gh-gray dark:text-white rounded-md p-2 text-sm font-semibold text-center select-none w-full border hover:shadow-button hover:no-underline", + target: "_blank", + rel: "noopener noreferrer", + innerHTML: ` { /> View On OpenSauced `, - }); + }); - return viewOnOpenSaucedButton; + return viewOnOpenSaucedButton; }; diff --git a/src/content-scripts/content-scripts.css b/src/content-scripts/content-scripts.css index 87822a00..cd262701 100644 --- a/src/content-scripts/content-scripts.css +++ b/src/content-scripts/content-scripts.css @@ -28,6 +28,6 @@ code { .SelectMenu-modal { font-size: 12px; - color: var(--color-fg-default)!important; - line-height: 1.5!important; -} \ No newline at end of file + color: var(--color-fg-default) !important; + line-height: 1.5 !important; +} diff --git a/src/content-scripts/github.ts b/src/content-scripts/github.ts index 26fcc681..371ee205 100644 --- a/src/content-scripts/github.ts +++ b/src/content-scripts/github.ts @@ -1,10 +1,10 @@ import { - getGithubUsername, - isGithubProfilePage, - isGithubPullRequestPage, - isGithubRepoPage, - isPullRequestCreatePage, - isPullRequestFilesChangedPage, + getGithubUsername, + isGithubProfilePage, + isGithubPullRequestPage, + isGithubRepoPage, + isPullRequestCreatePage, + isPullRequestFilesChangedPage, } from "../utils/urlMatchers"; import { isOpenSaucedUser } from "../utils/fetchOpenSaucedApiData"; import injectViewOnOpenSauced from "../utils/dom-utils/viewOnOpenSauced"; @@ -21,52 +21,52 @@ import injectChatDialog from "../utils/dom-utils/addChatDialog"; import { pageUrlWatch } from "../utils/dom-utils/pageUrlWatcher"; const processGithubPage = async () => { - if (prefersDarkMode(document.cookie)) { - document.documentElement.classList.add("dark"); - } - if (isPullRequestCreatePage(window.location.href)) { - void injectDescriptionGeneratorButton(); - } else if (isPullRequestFilesChangedPage(window.location.href)) { - prReviewWatch(injectChangeSuggestorButton, 500); - } else if (isGithubPullRequestPage(window.location.href)) { - prEditWatch(injectDescriptionGeneratorButton, 500); - void injectDescriptionGeneratorButton(); - void injectAddPRToHighlightsButton(); - } else if (isGithubProfilePage(window.location.href)) { - const username = getGithubUsername(window.location.href); + if (prefersDarkMode(document.cookie)) { + document.documentElement.classList.add("dark"); + } + if (isPullRequestCreatePage(window.location.href)) { + void injectDescriptionGeneratorButton(); + } else if (isPullRequestFilesChangedPage(window.location.href)) { + prReviewWatch(injectChangeSuggestorButton, 500); + } else if (isGithubPullRequestPage(window.location.href)) { + prEditWatch(injectDescriptionGeneratorButton, 500); + void injectDescriptionGeneratorButton(); + void injectAddPRToHighlightsButton(); + } else if (isGithubProfilePage(window.location.href)) { + const username = getGithubUsername(window.location.href); - if (!username) { - return; - } - if (await isOpenSaucedUser(username)) { - injectViewOnOpenSauced(username); - } else { - injectInviteToOpenSauced(username); - } - } else if (isGithubRepoPage(window.location.href)) { - const ownerName = getGithubUsername(window.location.href) ?? ""; - const repoName = window.location.href.split("/").pop() ?? ""; + if (!username) { + return; + } + if (await isOpenSaucedUser(username)) { + injectViewOnOpenSauced(username); + } else { + injectInviteToOpenSauced(username); + } + } else if (isGithubRepoPage(window.location.href)) { + const ownerName = getGithubUsername(window.location.href) ?? ""; + const repoName = window.location.href.split("/").pop() ?? ""; - await injectChatDialog(ownerName, repoName); + await injectChatDialog(ownerName, repoName); - pageUrlWatch(() => { - if (document.getElementById("repo-query-root")) { - document.getElementById("repo-query-root")?.remove(); - } - }, 50); - } + pageUrlWatch(() => { + if (document.getElementById("repo-query-root")) { + document.getElementById("repo-query-root")?.remove(); + } + }, 50); + } - /* - * commenting out repo voting because it's not ready yet // issue #106 - * } else if (isGithubRepoPage(window.location.href)) { - * const ownerName = getGithubUsername(window.location.href) ?? ""; - * const repoName = window.location.href.split("/").pop() ?? ""; - * - * await injectRepoVotingButtons(ownerName, repoName); - * } - */ + /* + * commenting out repo voting because it's not ready yet // issue #106 + * } else if (isGithubRepoPage(window.location.href)) { + * const ownerName = getGithubUsername(window.location.href) ?? ""; + * const repoName = window.location.href.split("/").pop() ?? ""; + * + * await injectRepoVotingButtons(ownerName, repoName); + * } + */ - domUpdateWatch(processGithubPage, 50); + domUpdateWatch(processGithubPage, 50); }; void processGithubPage(); diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts index 9da38913..0077ecb8 100644 --- a/src/hooks/useAuth.ts +++ b/src/hooks/useAuth.ts @@ -1,66 +1,66 @@ import { useEffect, useState } from "react"; import { - OPEN_SAUCED_INSIGHTS_DOMAIN, - OPEN_SAUCED_SESSION_ENDPOINT, - SUPABASE_AUTH_COOKIE_NAME, + OPEN_SAUCED_INSIGHTS_DOMAIN, + OPEN_SAUCED_SESSION_ENDPOINT, + SUPABASE_AUTH_COOKIE_NAME, } from "../constants"; import { cachedFetch } from "../utils/cache"; import { - hasOptedLogOut, - removeAuthTokenFromStorage, + hasOptedLogOut, + removeAuthTokenFromStorage, } from "../utils/checkAuthentication"; import setAuthTokenInChromeStorage from "../utils/setAccessToken"; export const useAuth = () => { - const [authToken, setAuthToken] = useState(null); - const [user, setUser] = useState( - null, - ); - const [isTokenValid, setIsTokenValid] = useState(false); + const [authToken, setAuthToken] = useState(null); + const [user, setUser] = useState( + null + ); + const [isTokenValid, setIsTokenValid] = useState(false); - useEffect(() => { - const authenticate = async () => { - try { - if (await hasOptedLogOut()) { - return; - } - const cookie = await chrome.cookies.get({ - name: SUPABASE_AUTH_COOKIE_NAME, - url: `https://${OPEN_SAUCED_INSIGHTS_DOMAIN}`, - }); + useEffect(() => { + const authenticate = async () => { + try { + if (await hasOptedLogOut()) { + return; + } + const cookie = await chrome.cookies.get({ + name: SUPABASE_AUTH_COOKIE_NAME, + url: `https://${OPEN_SAUCED_INSIGHTS_DOMAIN}`, + }); - if (!cookie) { - return removeAuthTokenFromStorage(); - } - const token = JSON.parse(decodeURIComponent(cookie.value))[0]; + if (!cookie) { + return removeAuthTokenFromStorage(); + } + const token = JSON.parse(decodeURIComponent(cookie.value))[0]; - const response = await cachedFetch(OPEN_SAUCED_SESSION_ENDPOINT, { - expireInSeconds: 2 * 60 * 60, - headers: { - Authorization: `Bearer ${token}`, - Accept: "application/json", - }, - }); + const response = await cachedFetch(OPEN_SAUCED_SESSION_ENDPOINT, { + expireInSeconds: 2 * 60 * 60, + headers: { + Authorization: `Bearer ${token}`, + Accept: "application/json", + }, + }); - if (response?.ok) { - const json = await response.json(); + if (response?.ok) { + const json = await response.json(); - setUser(json); - setIsTokenValid(true); - setAuthToken(token); - void setAuthTokenInChromeStorage(token); - } else { - await removeAuthTokenFromStorage(); - } - } catch (error) { - if (error instanceof Error) { - console.error(error.message); - } - } - }; + setUser(json); + setIsTokenValid(true); + setAuthToken(token); + void setAuthTokenInChromeStorage(token); + } else { + await removeAuthTokenFromStorage(); + } + } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } + } + }; - void authenticate(); - }, []); + void authenticate(); + }, []); - return { authToken, user, isTokenValid }; + return { authToken, user, isTokenValid }; }; diff --git a/src/hooks/useGetGitHubPageInfo.ts b/src/hooks/useGetGitHubPageInfo.ts index 16ed69ec..dbd29755 100644 --- a/src/hooks/useGetGitHubPageInfo.ts +++ b/src/hooks/useGetGitHubPageInfo.ts @@ -1,30 +1,43 @@ import { useEffect, useState } from "react"; -import { isGithubPullRequestPage, isGithubRepoPage } from "../utils/urlMatchers"; +import { + isGithubPullRequestPage, + isGithubRepoPage, +} from "../utils/urlMatchers"; import { isPublicRepository } from "../utils/fetchGithubAPIData"; interface GitHubPageInfo { - pageUrl: string; - pageTitle: string; - type: "unknown" | "PR" | "REPO"; + pageUrl: string; + pageTitle: string; + type: "unknown" | "PR" | "REPO"; } export const usGetGitHubPageInfo = () => { - const [GithubPage, setGithubPage] = useState({ pageUrl: "", pageTitle: "", type: "unknown" }); + const [GithubPage, setGithubPage] = useState({ + pageUrl: "", + pageTitle: "", + type: "unknown", + }); - useEffect(() => { - chrome.tabs.query({ active: true, currentWindow: true }, async tabs => { - if (tabs.length > 0) { - const tab = tabs[0]; + useEffect(() => { + chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { + if (tabs.length > 0) { + const tab = tabs[0]; - if (isGithubPullRequestPage(tab.url!)) { - setGithubPage({ pageUrl: tab.url!, pageTitle: tab.title!.split("by")[0].trim(), type: "PR" }); - } else if (isGithubRepoPage(tab.url!) && (await isPublicRepository(tab.url!))) { - setGithubPage({ pageUrl: tab.url!, pageTitle: "", type: "REPO" }); - } - } - }); - }, []); + if (isGithubPullRequestPage(tab.url!)) { + setGithubPage({ + pageUrl: tab.url!, + pageTitle: tab.title!.split("by")[0].trim(), + type: "PR", + }); + } else if ( + isGithubRepoPage(tab.url!) && + (await isPublicRepository(tab.url!)) + ) { + setGithubPage({ pageUrl: tab.url!, pageTitle: "", type: "REPO" }); + } + } + }); + }, []); - - return GithubPage; + return GithubPage; }; diff --git a/src/hooks/useOpensaucedUserCheck.ts b/src/hooks/useOpensaucedUserCheck.ts index 72eca17d..056995f0 100644 --- a/src/hooks/useOpensaucedUserCheck.ts +++ b/src/hooks/useOpensaucedUserCheck.ts @@ -3,26 +3,26 @@ import { isOpenSaucedUser } from "../utils/fetchOpenSaucedApiData"; import { getGithubUsername } from "../utils/urlMatchers"; export const useOpensaucedUserCheck = () => { - const [currentTabIsOpensaucedUser, setCurrentTabIsOpensaucedUser] = useState(false); - const [checkedUser, setCheckedUser] = useState(null); + const [currentTabIsOpensaucedUser, setCurrentTabIsOpensaucedUser] = + useState(false); + const [checkedUser, setCheckedUser] = useState(null); - useEffect(() => { - chrome.tabs.query({ active: true, currentWindow: true }, async tabs => { - if (tabs.length > 0) { - const tab = tabs[0]; - const username = getGithubUsername(tab.url!); + useEffect(() => { + chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => { + if (tabs.length > 0) { + const tab = tabs[0]; + const username = getGithubUsername(tab.url!); - if (username) { - setCheckedUser(username); - setCurrentTabIsOpensaucedUser(await isOpenSaucedUser(username)); - } else { - setCheckedUser(null); - setCurrentTabIsOpensaucedUser(false); - } - } - }); - }, []); + if (username) { + setCheckedUser(username); + setCurrentTabIsOpensaucedUser(await isOpenSaucedUser(username)); + } else { + setCheckedUser(null); + setCurrentTabIsOpensaucedUser(false); + } + } + }); + }, []); - - return { currentTabIsOpensaucedUser, checkedUser }; + return { currentTabIsOpensaucedUser, checkedUser }; }; diff --git a/src/main.tsx b/src/main.tsx index cf935aea..2b9e2d8d 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -5,9 +5,9 @@ import "./popup.css"; import { Router } from "react-chrome-extension-router"; ReactDOM.createRoot(document.getElementById("root")!).render( - - - - - , + + + + + ); diff --git a/src/popup.css b/src/popup.css index 5cc2cc66..46092744 100644 --- a/src/popup.css +++ b/src/popup.css @@ -28,9 +28,9 @@ code { --swiper-pagination-bullet-inactive-color: rgb(255, 159, 115); --swiper-pagination-bullet-size: 6px; --swiper-navigation-size: 18px; - --swiper-navigation-sides-offset:5px; + --swiper-navigation-sides-offset: 5px; } -.swiper-pagination{ +.swiper-pagination { position: relative; -} \ No newline at end of file +} diff --git a/src/popup/components/HighlightSlide.tsx b/src/popup/components/HighlightSlide.tsx index f55a8764..3b50e7a7 100644 --- a/src/popup/components/HighlightSlide.tsx +++ b/src/popup/components/HighlightSlide.tsx @@ -1,227 +1,254 @@ import { useEffect, useState } from "react"; -import { getHighlightReactions, getUserHighlightReactions, reactOnHighlight, removeReactionOnHighlight } from "../../utils/fetchOpenSaucedApiData"; +import { + getHighlightReactions, + getUserHighlightReactions, + reactOnHighlight, + removeReactionOnHighlight, +} from "../../utils/fetchOpenSaucedApiData"; import { getAuthToken } from "../../utils/checkAuthentication"; interface HighlightSlideProps { - highlight: { - id: string; - url: string; - title: string; - login: string; - highlight: string; - }; - emojis: Record[]; + highlight: { + id: string; + url: string; + title: string; + login: string; + highlight: string; + }; + emojis: Record[]; } interface HighlightReaction { - url: string; - reaction_count: string; - reactedByUser: boolean; - emojiId: string; + url: string; + reaction_count: string; + reactedByUser: boolean; + emojiId: string; } export const HighlightSlide = ({ highlight, emojis }: HighlightSlideProps) => { - const [highlightReactions, setHighlightReactions] = useState([]); - const [reactingDivOpen, setReactingDivOpen] = useState(false); - - async function fetchHighlightReactions () { - const highlightReactionData = await getHighlightReactions(highlight.id); - const userHighlightReactionData = await getUserHighlightReactions(await getAuthToken(), highlight.id); - - const highlightReactionsWithEmojiUrls = emojis.filter(emoji => highlightReactionData.some(highlightReaction => highlightReaction.emoji_id === emoji.id)).map(emoji => { - const highlightReaction = highlightReactionData.find(highlightReaction => highlightReaction.emoji_id === emoji.id)!; - - const reactedByUser = userHighlightReactionData.some(userHighlightReaction => userHighlightReaction.emoji_id === emoji.id); - - return { - url: emoji.url, - reaction_count: highlightReaction.reaction_count, - reactedByUser, - emojiId: emoji.id, - } as HighlightReaction; - }); - - - setHighlightReactions(highlightReactionsWithEmojiUrls); - } - - useEffect(() => { - void fetchHighlightReactions(); - }, []); - - const { url, title, login, highlight: highlightText } = highlight; - - const openGraphSearchParameter = url.split("/").slice(3) - .join("/"); - const openGraphUrl = `https://opengraph.githubassets.com/1/${openGraphSearchParameter}`; - - const addReactionToHighlight = async (highlightId: string, emojiId: string) => { - await reactOnHighlight(await getAuthToken(), highlightId, emojiId); - setReactingDivOpen(false); - await fetchHighlightReactions(); - }; - - const removeReactionFromHighlight = async (highlightId: string, emojiId: string) => { - await removeReactionOnHighlight(await getAuthToken(), highlightId, emojiId); - await fetchHighlightReactions(); - }; - - return ( -
- {/* fixed height, content ellipsis */} - - { - - title - ? ( -

{ + await reactOnHighlight(await getAuthToken(), highlightId, emojiId); + setReactingDivOpen(false); + await fetchHighlightReactions(); + }; + + const removeReactionFromHighlight = async ( + highlightId: string, + emojiId: string + ) => { + await removeReactionOnHighlight(await getAuthToken(), highlightId, emojiId); + await fetchHighlightReactions(); + }; + + return ( +
+ {/* fixed height, content ellipsis */} + + {title ? ( +

- - {title} - -

) - : null - } - -
- Author: - - - {login} - -
- -

+ {title} + +

+ ) : null} + +
+ Author: + + + {login} + +
+ +

+ {highlightText} +

+ + OpenGraph + +
+
+ -
- - - - - { - highlightReactions.length > 0 && !reactingDivOpen - ? ( - highlightReactions.map(highlightReaction => ( -
{ - await removeReactionFromHighlight(highlight.id, highlightReaction.emojiId); - } - : async () => { - await addReactionToHighlight(highlight.id, highlightReaction.emojiId); - } - } - onKeyDown={ - highlightReaction.reactedByUser - ? async () => { - await removeReactionFromHighlight(highlight.id, highlightReaction.emojiId); - } - : async () => { - await addReactionToHighlight(highlight.id, highlightReaction.emojiId); - } - } - > - Emoji - - - {highlightReaction.reaction_count} - -
- ))) - : null - } + + + +
+ + ); + ))} +
+ + {highlightReactions.length > 0 && !reactingDivOpen + ? highlightReactions.map((highlightReaction) => ( +
{ + await removeReactionFromHighlight( + highlight.id, + highlightReaction.emojiId + ); + } + : async () => { + await addReactionToHighlight( + highlight.id, + highlightReaction.emojiId + ); + } + } + onKeyDown={ + highlightReaction.reactedByUser + ? async () => { + await removeReactionFromHighlight( + highlight.id, + highlightReaction.emojiId + ); + } + : async () => { + await addReactionToHighlight( + highlight.id, + highlightReaction.emojiId + ); + } + } + > + Emoji + + + {highlightReaction.reaction_count} + +
+ )) + : null} +
+
+ ); }; diff --git a/src/popup/components/ToggleSwitch.tsx b/src/popup/components/ToggleSwitch.tsx index 731a80e9..9346de2b 100644 --- a/src/popup/components/ToggleSwitch.tsx +++ b/src/popup/components/ToggleSwitch.tsx @@ -1,55 +1,64 @@ import { useState } from "react"; -const Toggle = ({ settingName, settingLabel, enabledSetting }: { settingName: string; enabledSetting: boolean; settingLabel: string }) => { - const [enabled, setEnabled] = useState(enabledSetting); +const Toggle = ({ + settingName, + settingLabel, + enabledSetting, +}: { + settingName: string; + enabledSetting: boolean; + settingLabel: string; +}) => { + const [enabled, setEnabled] = useState(enabledSetting); - const changeSetting = async (value: boolean) => { - const settingsConfig = await chrome.storage.sync.get("osSettingsConfig"); + const changeSetting = async (value: boolean) => { + const settingsConfig = await chrome.storage.sync.get("osSettingsConfig"); - if (settingsConfig.osSettingsConfig === undefined) { - const defaultSettings = { aiPrDescription: false }; + if (settingsConfig.osSettingsConfig === undefined) { + const defaultSettings = { aiPrDescription: false }; - await chrome.storage.sync.set({ osSettingsConfig: defaultSettings }); - } + await chrome.storage.sync.set({ osSettingsConfig: defaultSettings }); + } - const newSettingsConfig = { ...settingsConfig.osSettingsConfig, [settingName]: value }; + const newSettingsConfig = { + ...settingsConfig.osSettingsConfig, + [settingName]: value, + }; - await chrome.storage.sync.set({ osSettingsConfig: newSettingsConfig }); + await chrome.storage.sync.set({ osSettingsConfig: newSettingsConfig }); - setEnabled(value); - }; + setEnabled(value); + }; + + return ( +
+ {settingLabel} + +