diff --git a/packages/backend/package.json b/packages/backend/package.json index 4dd70d32..a0cf65ed 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -69,6 +69,7 @@ "passport": "^0.6.0", "pg": "^8.7.1", "php-serialize": "^4.0.2", + "pluralize": "^8.0.0", "showdown": "^2.1.0", "stripe": "^11.13.0", "winston": "^3.7.1", @@ -126,6 +127,7 @@ "@types/nodemailer": "^6.4.4", "@types/pg": "^8.6.1", "@types/pino": "^7.0.5", + "@types/pluralize": "^0.0.30", "@types/showdown": "^2.0.1", "ava": "^3.15.0", "nodemon": "^2.0.13", diff --git a/packages/backend/src/apps/formatter/actions/text/index.ts b/packages/backend/src/apps/formatter/actions/text/index.ts index 444b5b33..fe1d053f 100644 --- a/packages/backend/src/apps/formatter/actions/text/index.ts +++ b/packages/backend/src/apps/formatter/actions/text/index.ts @@ -6,6 +6,7 @@ import useDefaultValue from './transformers/use-default-value'; import extractEmailAddress from './transformers/extract-email-address'; import extractNumber from './transformers/extract-number'; import lowercase from './transformers/lowercase'; +import pluralize from './transformers/pluralize'; const transformers = { capitalize, @@ -15,6 +16,7 @@ const transformers = { extractEmailAddress, extractNumber, lowercase, + pluralize, }; export default defineAction({ @@ -38,6 +40,7 @@ export default defineAction({ { label: 'Extract Email Address', value: 'extractEmailAddress' }, { label: 'Extract Number', value: 'extractNumber' }, { label: 'Lowercase', value: 'lowercase' }, + { label: 'Pluralize', value: 'pluralize' }, ], additionalFields: { type: 'query', diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.ts b/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.ts new file mode 100644 index 00000000..f5b3dc9a --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.ts @@ -0,0 +1,9 @@ +import { IGlobalVariable } from '@automatisch/types'; +import pluralizeLibrary from 'pluralize'; + +const pluralize = ($: IGlobalVariable) => { + const input = $.step.parameters.input as string; + return pluralizeLibrary(input); +}; + +export default pluralize; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts index cd52a266..b4f22751 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts @@ -6,6 +6,7 @@ import useDefaultValue from './options/use-default-value'; import extractEmailAddress from './options/extract-email-address'; import extractNumber from './options/extract-number'; import lowercase from './options/lowercase'; +import pluralize from './options/pluralize'; const options: IJSONObject = { capitalize, @@ -15,6 +16,7 @@ const options: IJSONObject = { extractEmailAddress, extractNumber, lowercase, + pluralize, }; export default { diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/options/pluralize.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/options/pluralize.ts new file mode 100644 index 00000000..d5949462 --- /dev/null +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/options/pluralize.ts @@ -0,0 +1,12 @@ +const pluralize = [ + { + label: 'Input', + key: 'input', + type: 'string' as const, + required: true, + description: 'Text that will be pluralized.', + variables: true, + }, +]; + +export default pluralize; diff --git a/yarn.lock b/yarn.lock index 3d7bb7b1..5112ff5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4205,6 +4205,11 @@ dependencies: pino "*" +"@types/pluralize@^0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/pluralize/-/pluralize-0.0.30.tgz#cddb9923240c20d15e6d5f98fd576ec856b9b3db" + integrity sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA== + "@types/prettier@^2.1.5": version "2.4.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf"