Skip to content

Commit

Permalink
chore: resolve merge conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
BartoszGrajdek committed May 29, 2024
2 parents b78e80a + 05c03d4 commit e333030
Show file tree
Hide file tree
Showing 45 changed files with 1,678 additions and 1,450 deletions.
3 changes: 3 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
*.d.ts
dist
node_modules
*.config.js
85 changes: 77 additions & 8 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,80 @@
module.exports = {
extends: ['expensify', 'prettier'],
rules: {
// Allow JSX to be written in any file ignoring the extension type
'react/jsx-filename-extension': 'off'
},
plugins: ['jest'],
env: {
"jest/globals": true
}
parser: '@typescript-eslint/parser',
overrides: [
{
files: ['*.js', '*.jsx'],
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
rules: {
// Allow JSX to be written in any file ignoring the extension type
'react/jsx-filename-extension': 'off',
'rulesdir/no-api-in-views': 'off',
'rulesdir/no-multiple-api-calls': 'off',
'rulesdir/prefer-import-module-contents': 'off',
'no-constructor-return': 'off',
'import/extensions': [
'error',
'ignorePackages',
{
js: 'never',
jsx: 'never',
ts: 'never',
tsx: 'never',
},
],
},
},
{
files: ['*.ts', '*.tsx'],
extends: [
'expensify',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/stylistic',
'plugin:import/typescript',
'plugin:you-dont-need-lodash-underscore/all',
'prettier',
'plugin:prettier/recommended',
],
plugins: ['react', 'import', '@typescript-eslint'],
parserOptions: {
project: './tsconfig.json',
},
rules: {
'prefer-regex-literals': 'off',
'rulesdir/prefer-underscore-method': 'off',
'react/jsx-props-no-spreading': 'off',
'react/require-default-props': 'off',
'valid-jsdoc': 'off',
'es/no-optional-chaining': 'off',
'es/no-nullish-coalescing-operators': 'off',
'react/jsx-filename-extension': ['error', {extensions: ['.tsx', '.jsx']}],
'import/no-unresolved': 'error',
'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
'no-use-before-define': 'off',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/no-unused-vars': ['error', {argsIgnorePattern: '^_'}],
'@typescript-eslint/consistent-type-imports': ['error', {prefer: 'type-imports'}],
'@typescript-eslint/consistent-type-exports': ['error', {fixMixedExportsWithInlineTypeSpecifier: false}],
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/array-type': ['error', {default: 'array-simple'}],
'@typescript-eslint/consistent-type-definitions': 'off',
'import/extensions': [
'error',
'ignorePackages',
{
js: 'never',
jsx: 'never',
ts: 'never',
tsx: 'never',
},
],
},
},
],
};
Binary file added .github/OSBotify-private-key.asc.gpg
Binary file not shown.
9 changes: 9 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,12 @@ jobs:
- run: npm run lint
env:
CI: true

- name: Verify there's no Prettier diff
run: |
npm run prettier -- --loglevel silent
if ! git diff --name-only --exit-code; then
# shellcheck disable=SC2016
echo 'Error: Prettier diff detected! Please run `npm run prettier` and commit the changes.'
exit 1
fi
77 changes: 77 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Publish package to npmjs

# This workflow runs when code is pushed to `main` (i.e: when a pull request is merged)
on:
push:
branches: [main]

# Ensure that only once instance of this workflow executes at a time.
# If multiple PRs are merged in quick succession, there will only ever be one publish workflow running and one pending.
concurrency: ${{ github.workflow }}

jobs:
version:
runs-on: ubuntu-latest

# OSBotify will update the version on `main`, so this check is important to prevent an infinite loop
if: ${{ github.actor != 'OSBotify' }}

steps:
- uses: actions/checkout@v4
with:
ref: main
# The OS_BOTIFY_COMMIT_TOKEN is a personal access token tied to osbotify, which allows him to push to protected branches
token: ${{ secrets.OS_BOTIFY_COMMIT_TOKEN }}

- name: Decrypt & Import OSBotify GPG key
run: |
cd .github
gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output OSBotify-private-key.asc OSBotify-private-key.asc.gpg
gpg --import OSBotify-private-key.asc
env:
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}

- name: Set up git for OSBotify
run: |
git config --global user.signingkey 367811D53E34168C
git config --global commit.gpgsign true
git config --global user.name OSBotify
git config --global user.email [email protected]
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'

- name: Install npm packages
run: npm ci

- name: Update npm version
run: npm version patch

- name: Set new version in GitHub ENV
run: echo "NEW_VERSION=$(jq '.version' package.json)" >> $GITHUB_ENV

- name: Push branch and publish tags
run: git push origin main && git push --tags

- name: Build package
run: npm run build

- name: Publish to npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Get merged pull request
id: getMergedPullRequest
run: |
read -r number < <(gh pr list --search ${{ github.sha }} --state merged --json 'number' | jq -r '.[0] | [.number] | join(" ")')
echo "number=$number" >> "$GITHUB_OUTPUT"
env:
GITHUB_TOKEN: ${{ github.token }}

- name: Comment on merged pull request
run: gh pr comment ${{ steps.getMergedPullRequest.outputs.number }} --body "🚀Published to npm in v${{ env.NEW_VERSION }}"
env:
GITHUB_TOKEN: ${{ github.token }}
24 changes: 24 additions & 0 deletions .github/workflows/typecheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: TypeScript Checks

on:
pull_request:
types: [opened, synchronize]

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
cache: npm
cache-dependency-path: package-lock.json

- run: npm ci

- name: Type check with TypeScript
run: npm run typecheck
env:
CI: true
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,10 @@ npm-debug.log
package.json-e
.DS_Store
*.swp
dist

# Decrypted private key we do not want to commit
.github/OSBotify-private-key.asc

# Published package
*.tgz
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
20.13.0
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
dist
package.json
package-lock.json
*.html
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
# `expensify-common`
This is a collection of JS libraries and components which are used across various Expensify projects. These libraries are provided as-is, and the repos which use them will need to do their own bundling, minifying, and uglifying.
This is a collection of JS/TS libraries and components which are used across various Expensify projects. These libraries are provided as-is, and the repos which use them will need to do their own bundling, minifying, and uglifying.

# Installation
1. Clone this repo to a directory of your choosing
2. Run `npm install` to install all the dependencies
`expensify-common` is published to [`npm`](https://www.npmjs.com/package/expensify-common)

```shell
npm install expensify-common
```

# Development
* Write all code as ES6.
* Always lint your code with `npm run grunt watch`
* Make sure you're using http://editorconfig.org/
* Always lint your code with `npm run lint`

## Testing your code while you are developing
The best way to test your code while you are developing changes is via `npm link`.
Expand All @@ -28,7 +30,7 @@ Alternatively, you can edit files directly in a project's `node_modules` then ap
1. They will review and accept your changes, merge them, then deploy a new version

# Deploying a Change (Expensify Only)
Once the PR has been merged, update the `package.json` commit hash in any repos with a dependency on the code being changed in expensify-common, don't forget to run a `npm install` so `package-lock.json` is also updated. Be sure to check the repos below to confirm whether or not they are affected by your changes!
Once the PR has been merged, install the new version of the package with `npm install [email protected]` command. Be sure to check the repos below to confirm whether or not they are affected by your changes!
- Expensify/Web-Expensify
- Expensify/Web-Secure
- Expensify/Mobile-Expensify
Expand Down
4 changes: 2 additions & 2 deletions __tests__/ExpensiMark-HTMLToText-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ test('Mention user html to text', () => {
expect(parser.htmlToText(testString)).toBe('@Hidden');

const extras = {
accountIdToName: {
accountIDToName: {
'1234': '[email protected]',
},
};
Expand Down Expand Up @@ -180,7 +180,7 @@ test('Mention report html to text', () => {
expect(parser.htmlToText(testString)).toBe('#Hidden');

const extras = {
reportIdToName: {
reportIDToName: {
'1234': '#room-name',
},
};
Expand Down
20 changes: 18 additions & 2 deletions __tests__/ExpensiMark-Markdown-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,18 @@ test('map div with quotes', () => {
expect(parser.htmlToMarkdown(testString)).toBe(resultString);
});

test('double quotes in same line', () => {
const testString = '<blockquote><blockquote>line 1</blockquote></blockquote>';
const resultString = '>> line 1';
expect(parser.htmlToMarkdown(testString)).toBe(resultString);
});

test('triple quotes in same line', () => {
const testString = '<blockquote><blockquote><blockquote>line 1</blockquote></blockquote></blockquote>';
const resultString = '>>> line 1';
expect(parser.htmlToMarkdown(testString)).toBe(resultString);
});

test('map table to newline', () => {
const testString = '<tbody><tr>line 1</tr><tr>line 2</tr></tbody>';
const resultString = 'line 1\nline 2';
Expand Down Expand Up @@ -756,12 +768,16 @@ test('Mention user html to markdown', () => {
testString = '<mention-user>@[email protected]</mention-user>';
expect(parser.htmlToMarkdown(testString)).toBe('@[email protected]');

// When there is a phone number mention the sms domain `@expensify.sms`should be removed from returned string
testString = '<mention-user>@[email protected]</mention-user>';
expect(parser.htmlToMarkdown(testString)).toBe('@+311231231');

// When there is `accountID` and no `extras`, `@Hidden` should be returned
testString = '<mention-user accountID="1234"/>';
expect(parser.htmlToMarkdown(testString)).toBe('@Hidden');

const extras = {
accountIdToName: {
accountIDToName: {
'1234': '[email protected]',
},
};
Expand Down Expand Up @@ -790,7 +806,7 @@ test('Mention report html to markdown', () => {
expect(parser.htmlToText(testString)).toBe('#Hidden');

const extras = {
reportIdToName: {
reportIDToName: {
'1234': '#room-name',
},
};
Expand Down
11 changes: 1 addition & 10 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,3 @@
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
presets: [['@babel/preset-env', {targets: {node: 'current'}}], '@babel/preset-typescript'],
};
8 changes: 5 additions & 3 deletions lib/API.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import _ from 'underscore';
// Use this deferred lib so we don't have a dependency on jQuery (so we can use this module in mobile)
import {Deferred} from 'simply-deferred';
import ExpensifyAPIDeferred from './APIDeferred';
import {isWindowAvailable} from './utils';

/**
* @param {Network} network
Expand Down Expand Up @@ -47,7 +48,7 @@ export default function API(network, args) {
network
.get('/revision.txt')
.done((codeRevision) => {
if (codeRevision.trim() === window.CODE_REVISION) {
if (isWindowAvailable() && codeRevision.trim() === window.CODE_REVISION) {
console.debug('Code revision is up to date');
promise.resolve();
} else {
Expand Down Expand Up @@ -150,6 +151,7 @@ export default function API(network, args) {
* @param {String} commandName The name of the API command
*/
function requireParameters(parameterNames, parameters, commandName) {
// eslint-disable-next-line rulesdir/prefer-early-return
parameterNames.forEach((parameterName) => {
if (!_(parameters).has(parameterName) || parameters[parameterName] === null || parameters[parameterName] === undefined) {
const parametersCopy = _.clone(parameters);
Expand Down Expand Up @@ -823,7 +825,7 @@ export default function API(network, args) {
*
* @returns {APIDeferred}
*/
createAdminIssuedVirtualCard: function (parameters) {
createAdminIssuedVirtualCard(parameters) {
const commandName = 'Card_CreateAdminIssuedVirtualCard';
requireParameters(['cardTitle', 'assigneeEmail', 'cardLimit', 'cardLimitType', 'domainName'], parameters, commandName);
return performPOSTRequest(commandName, parameters);
Expand All @@ -842,7 +844,7 @@ export default function API(network, args) {
*
* @returns {APIDeferred}
*/
editAdminIssuedVirtualCard: function (parameters) {
editAdminIssuedVirtualCard(parameters) {
const commandName = 'Card_EditAdminIssuedVirtualCard';
requireParameters(['domainName', 'cardID', 'cardTitle', 'assigneeEmail', 'cardLimit', 'cardLimitType'], parameters, commandName);
return performPOSTRequest(commandName, parameters);
Expand Down
Loading

0 comments on commit e333030

Please sign in to comment.