@beabee/beabee-common 0.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PaymentMethod = exports.NewsletterStatus = exports.MembershipStatus = exports.ContributionType = exports.ContributionPeriod = void 0;
4
+ var ContributionPeriod;
5
+ (function (ContributionPeriod) {
6
+ ContributionPeriod["Monthly"] = "monthly";
7
+ ContributionPeriod["Annually"] = "annually";
8
+ })(ContributionPeriod = exports.ContributionPeriod || (exports.ContributionPeriod = {}));
9
+ var ContributionType;
10
+ (function (ContributionType) {
11
+ ContributionType["Automatic"] = "Automatic";
12
+ ContributionType["Manual"] = "Manual";
13
+ ContributionType["Gift"] = "Gift";
14
+ ContributionType["None"] = "None";
15
+ })(ContributionType = exports.ContributionType || (exports.ContributionType = {}));
16
+ var MembershipStatus;
17
+ (function (MembershipStatus) {
18
+ MembershipStatus["Active"] = "active";
19
+ MembershipStatus["Expiring"] = "expiring";
20
+ MembershipStatus["Expired"] = "expired";
21
+ MembershipStatus["None"] = "none";
22
+ })(MembershipStatus = exports.MembershipStatus || (exports.MembershipStatus = {}));
23
+ var NewsletterStatus;
24
+ (function (NewsletterStatus) {
25
+ NewsletterStatus["Subscribed"] = "subscribed";
26
+ NewsletterStatus["Unsubscribed"] = "unsubscribed";
27
+ NewsletterStatus["Cleaned"] = "cleaned";
28
+ NewsletterStatus["None"] = "none";
29
+ })(NewsletterStatus = exports.NewsletterStatus || (exports.NewsletterStatus = {}));
30
+ var PaymentMethod;
31
+ (function (PaymentMethod) {
32
+ PaymentMethod["StripeCard"] = "s_card";
33
+ PaymentMethod["StripeSEPA"] = "s_sepa";
34
+ PaymentMethod["StripeBACS"] = "s_bacs";
35
+ PaymentMethod["GoCardlessDirectDebit"] = "gc_direct-debit";
36
+ })(PaymentMethod = exports.PaymentMethod || (exports.PaymentMethod = {}));
package/dist/cjs/index.js CHANGED
@@ -1,7 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.add = void 0;
4
- function add(a, b) {
5
- return a + b;
6
- }
7
- exports.add = add;
17
+ __exportStar(require("./search"), exports);
18
+ __exportStar(require("./data"), exports);
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contactFilters = exports.contactFilterNames = void 0;
4
+ const data_1 = require("../data");
5
+ exports.contactFilterNames = [
6
+ "firstname",
7
+ "lastname",
8
+ "email",
9
+ "joined",
10
+ "contributionType",
11
+ "contributionMonthlyAmount",
12
+ "contributionPeriod",
13
+ "deliveryOptIn",
14
+ "newsletterStatus",
15
+ "activePermission",
16
+ "activeMembership",
17
+ "membershipStarts",
18
+ "membershipExpires",
19
+ "manualPaymentSource",
20
+ "tags",
21
+ ];
22
+ exports.contactFilters = {
23
+ firstname: {
24
+ type: "text",
25
+ },
26
+ lastname: {
27
+ type: "text",
28
+ },
29
+ email: {
30
+ type: "text",
31
+ },
32
+ joined: {
33
+ type: "date",
34
+ },
35
+ contributionType: {
36
+ type: "enum",
37
+ options: [
38
+ data_1.ContributionType.Automatic,
39
+ data_1.ContributionType.Gift,
40
+ data_1.ContributionType.Manual,
41
+ data_1.ContributionType.None,
42
+ ],
43
+ },
44
+ contributionMonthlyAmount: {
45
+ type: "number",
46
+ },
47
+ contributionPeriod: {
48
+ type: "enum",
49
+ options: [data_1.ContributionPeriod.Monthly, data_1.ContributionPeriod.Annually],
50
+ },
51
+ deliveryOptIn: {
52
+ type: "boolean",
53
+ },
54
+ newsletterStatus: {
55
+ type: "enum",
56
+ options: [
57
+ data_1.NewsletterStatus.Subscribed,
58
+ data_1.NewsletterStatus.Unsubscribed,
59
+ data_1.NewsletterStatus.Cleaned,
60
+ data_1.NewsletterStatus.None,
61
+ ],
62
+ },
63
+ activePermission: {
64
+ type: "enum",
65
+ options: ["member", "admin", "superadmin"],
66
+ },
67
+ activeMembership: {
68
+ type: "boolean",
69
+ },
70
+ membershipStarts: {
71
+ type: "date",
72
+ },
73
+ membershipExpires: {
74
+ type: "date",
75
+ },
76
+ manualPaymentSource: {
77
+ type: "text",
78
+ nullable: true,
79
+ },
80
+ tags: {
81
+ type: "array",
82
+ nullable: true,
83
+ },
84
+ };
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.convertFiltersToRules = exports.convertRulesToFilters = exports.operators = exports.nullableOperators = void 0;
18
+ const equal = { args: 1 };
19
+ const equalityOperators = { equal, not_equal: { args: 1 } };
20
+ const numericOperators = {
21
+ ...equalityOperators,
22
+ between: { args: 2 },
23
+ not_between: { args: 2 },
24
+ less: { args: 1 },
25
+ greater: { args: 1 },
26
+ less_or_equal: { args: 1 },
27
+ greater_or_equal: { args: 1 },
28
+ };
29
+ const arrayOperators = {
30
+ contains: { args: 1 },
31
+ not_contains: { args: 1 },
32
+ };
33
+ exports.nullableOperators = {
34
+ is_empty: { args: 0 },
35
+ is_not_empty: { args: 0 },
36
+ };
37
+ exports.operators = {
38
+ text: {
39
+ ...equalityOperators,
40
+ ...arrayOperators,
41
+ begins_with: { args: 1 },
42
+ ends_with: { args: 1 },
43
+ not_begins_with: { args: 1 },
44
+ not_ends_with: { args: 1 },
45
+ },
46
+ date: numericOperators,
47
+ number: numericOperators,
48
+ boolean: { equal },
49
+ array: arrayOperators,
50
+ enum: equalityOperators,
51
+ };
52
+ function convertRulesToFilters(rules) {
53
+ if (!rules) {
54
+ return null;
55
+ }
56
+ // TODO: how to handle groups?
57
+ const rulesWithoutGroups = rules.rules.filter((rule) => "operator" in rule);
58
+ return rulesWithoutGroups.map((rule) => ({
59
+ id: rule.field,
60
+ operator: rule.operator,
61
+ values: Array.isArray(rule.value) ? [...rule.value] : [rule.value],
62
+ }));
63
+ }
64
+ exports.convertRulesToFilters = convertRulesToFilters;
65
+ function convertFiltersToRules(matchType, filters) {
66
+ return {
67
+ condition: matchType === "all" ? "AND" : "OR",
68
+ rules: filters.map((filter) => ({
69
+ field: filter.id,
70
+ operator: filter.operator,
71
+ value: filter.values,
72
+ })),
73
+ };
74
+ }
75
+ exports.convertFiltersToRules = convertFiltersToRules;
76
+ __exportStar(require("./contacts"), exports);
@@ -0,0 +1,33 @@
1
+ export var ContributionPeriod;
2
+ (function (ContributionPeriod) {
3
+ ContributionPeriod["Monthly"] = "monthly";
4
+ ContributionPeriod["Annually"] = "annually";
5
+ })(ContributionPeriod || (ContributionPeriod = {}));
6
+ export var ContributionType;
7
+ (function (ContributionType) {
8
+ ContributionType["Automatic"] = "Automatic";
9
+ ContributionType["Manual"] = "Manual";
10
+ ContributionType["Gift"] = "Gift";
11
+ ContributionType["None"] = "None";
12
+ })(ContributionType || (ContributionType = {}));
13
+ export var MembershipStatus;
14
+ (function (MembershipStatus) {
15
+ MembershipStatus["Active"] = "active";
16
+ MembershipStatus["Expiring"] = "expiring";
17
+ MembershipStatus["Expired"] = "expired";
18
+ MembershipStatus["None"] = "none";
19
+ })(MembershipStatus || (MembershipStatus = {}));
20
+ export var NewsletterStatus;
21
+ (function (NewsletterStatus) {
22
+ NewsletterStatus["Subscribed"] = "subscribed";
23
+ NewsletterStatus["Unsubscribed"] = "unsubscribed";
24
+ NewsletterStatus["Cleaned"] = "cleaned";
25
+ NewsletterStatus["None"] = "none";
26
+ })(NewsletterStatus || (NewsletterStatus = {}));
27
+ export var PaymentMethod;
28
+ (function (PaymentMethod) {
29
+ PaymentMethod["StripeCard"] = "s_card";
30
+ PaymentMethod["StripeSEPA"] = "s_sepa";
31
+ PaymentMethod["StripeBACS"] = "s_bacs";
32
+ PaymentMethod["GoCardlessDirectDebit"] = "gc_direct-debit";
33
+ })(PaymentMethod || (PaymentMethod = {}));
package/dist/esm/index.js CHANGED
@@ -1,3 +1,2 @@
1
- export function add(a, b) {
2
- return a + b;
3
- }
1
+ export * from "./search";
2
+ export * from "./data";
@@ -0,0 +1,81 @@
1
+ import { ContributionPeriod, ContributionType, NewsletterStatus, } from "../data";
2
+ export const contactFilterNames = [
3
+ "firstname",
4
+ "lastname",
5
+ "email",
6
+ "joined",
7
+ "contributionType",
8
+ "contributionMonthlyAmount",
9
+ "contributionPeriod",
10
+ "deliveryOptIn",
11
+ "newsletterStatus",
12
+ "activePermission",
13
+ "activeMembership",
14
+ "membershipStarts",
15
+ "membershipExpires",
16
+ "manualPaymentSource",
17
+ "tags",
18
+ ];
19
+ export const contactFilters = {
20
+ firstname: {
21
+ type: "text",
22
+ },
23
+ lastname: {
24
+ type: "text",
25
+ },
26
+ email: {
27
+ type: "text",
28
+ },
29
+ joined: {
30
+ type: "date",
31
+ },
32
+ contributionType: {
33
+ type: "enum",
34
+ options: [
35
+ ContributionType.Automatic,
36
+ ContributionType.Gift,
37
+ ContributionType.Manual,
38
+ ContributionType.None,
39
+ ],
40
+ },
41
+ contributionMonthlyAmount: {
42
+ type: "number",
43
+ },
44
+ contributionPeriod: {
45
+ type: "enum",
46
+ options: [ContributionPeriod.Monthly, ContributionPeriod.Annually],
47
+ },
48
+ deliveryOptIn: {
49
+ type: "boolean",
50
+ },
51
+ newsletterStatus: {
52
+ type: "enum",
53
+ options: [
54
+ NewsletterStatus.Subscribed,
55
+ NewsletterStatus.Unsubscribed,
56
+ NewsletterStatus.Cleaned,
57
+ NewsletterStatus.None,
58
+ ],
59
+ },
60
+ activePermission: {
61
+ type: "enum",
62
+ options: ["member", "admin", "superadmin"],
63
+ },
64
+ activeMembership: {
65
+ type: "boolean",
66
+ },
67
+ membershipStarts: {
68
+ type: "date",
69
+ },
70
+ membershipExpires: {
71
+ type: "date",
72
+ },
73
+ manualPaymentSource: {
74
+ type: "text",
75
+ nullable: true,
76
+ },
77
+ tags: {
78
+ type: "array",
79
+ nullable: true,
80
+ },
81
+ };
@@ -0,0 +1,57 @@
1
+ const equal = { args: 1 };
2
+ const equalityOperators = { equal, not_equal: { args: 1 } };
3
+ const numericOperators = {
4
+ ...equalityOperators,
5
+ between: { args: 2 },
6
+ not_between: { args: 2 },
7
+ less: { args: 1 },
8
+ greater: { args: 1 },
9
+ less_or_equal: { args: 1 },
10
+ greater_or_equal: { args: 1 },
11
+ };
12
+ const arrayOperators = {
13
+ contains: { args: 1 },
14
+ not_contains: { args: 1 },
15
+ };
16
+ export const nullableOperators = {
17
+ is_empty: { args: 0 },
18
+ is_not_empty: { args: 0 },
19
+ };
20
+ export const operators = {
21
+ text: {
22
+ ...equalityOperators,
23
+ ...arrayOperators,
24
+ begins_with: { args: 1 },
25
+ ends_with: { args: 1 },
26
+ not_begins_with: { args: 1 },
27
+ not_ends_with: { args: 1 },
28
+ },
29
+ date: numericOperators,
30
+ number: numericOperators,
31
+ boolean: { equal },
32
+ array: arrayOperators,
33
+ enum: equalityOperators,
34
+ };
35
+ export function convertRulesToFilters(rules) {
36
+ if (!rules) {
37
+ return null;
38
+ }
39
+ // TODO: how to handle groups?
40
+ const rulesWithoutGroups = rules.rules.filter((rule) => "operator" in rule);
41
+ return rulesWithoutGroups.map((rule) => ({
42
+ id: rule.field,
43
+ operator: rule.operator,
44
+ values: Array.isArray(rule.value) ? [...rule.value] : [rule.value],
45
+ }));
46
+ }
47
+ export function convertFiltersToRules(matchType, filters) {
48
+ return {
49
+ condition: matchType === "all" ? "AND" : "OR",
50
+ rules: filters.map((filter) => ({
51
+ field: filter.id,
52
+ operator: filter.operator,
53
+ value: filter.values,
54
+ })),
55
+ };
56
+ }
57
+ export * from "./contacts";
@@ -0,0 +1,28 @@
1
+ export declare enum ContributionPeriod {
2
+ Monthly = "monthly",
3
+ Annually = "annually"
4
+ }
5
+ export declare enum ContributionType {
6
+ Automatic = "Automatic",
7
+ Manual = "Manual",
8
+ Gift = "Gift",
9
+ None = "None"
10
+ }
11
+ export declare enum MembershipStatus {
12
+ Active = "active",
13
+ Expiring = "expiring",
14
+ Expired = "expired",
15
+ None = "none"
16
+ }
17
+ export declare enum NewsletterStatus {
18
+ Subscribed = "subscribed",
19
+ Unsubscribed = "unsubscribed",
20
+ Cleaned = "cleaned",
21
+ None = "none"
22
+ }
23
+ export declare enum PaymentMethod {
24
+ StripeCard = "s_card",
25
+ StripeSEPA = "s_sepa",
26
+ StripeBACS = "s_bacs",
27
+ GoCardlessDirectDebit = "gc_direct-debit"
28
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./search";
2
+ export * from "./data";
@@ -0,0 +1,56 @@
1
+ import { ContributionPeriod, ContributionType, NewsletterStatus } from "../data";
2
+ export declare const contactFilterNames: readonly ["firstname", "lastname", "email", "joined", "contributionType", "contributionMonthlyAmount", "contributionPeriod", "deliveryOptIn", "newsletterStatus", "activePermission", "activeMembership", "membershipStarts", "membershipExpires", "manualPaymentSource", "tags"];
3
+ export declare type ContactFilterName = typeof contactFilterNames[number];
4
+ export declare const contactFilters: {
5
+ readonly firstname: {
6
+ readonly type: "text";
7
+ };
8
+ readonly lastname: {
9
+ readonly type: "text";
10
+ };
11
+ readonly email: {
12
+ readonly type: "text";
13
+ };
14
+ readonly joined: {
15
+ readonly type: "date";
16
+ };
17
+ readonly contributionType: {
18
+ readonly type: "enum";
19
+ readonly options: readonly [ContributionType.Automatic, ContributionType.Gift, ContributionType.Manual, ContributionType.None];
20
+ };
21
+ readonly contributionMonthlyAmount: {
22
+ readonly type: "number";
23
+ };
24
+ readonly contributionPeriod: {
25
+ readonly type: "enum";
26
+ readonly options: readonly [ContributionPeriod.Monthly, ContributionPeriod.Annually];
27
+ };
28
+ readonly deliveryOptIn: {
29
+ readonly type: "boolean";
30
+ };
31
+ readonly newsletterStatus: {
32
+ readonly type: "enum";
33
+ readonly options: readonly [NewsletterStatus.Subscribed, NewsletterStatus.Unsubscribed, NewsletterStatus.Cleaned, NewsletterStatus.None];
34
+ };
35
+ readonly activePermission: {
36
+ readonly type: "enum";
37
+ readonly options: readonly ["member", "admin", "superadmin"];
38
+ };
39
+ readonly activeMembership: {
40
+ readonly type: "boolean";
41
+ };
42
+ readonly membershipStarts: {
43
+ readonly type: "date";
44
+ };
45
+ readonly membershipExpires: {
46
+ readonly type: "date";
47
+ };
48
+ readonly manualPaymentSource: {
49
+ readonly type: "text";
50
+ readonly nullable: true;
51
+ };
52
+ readonly tags: {
53
+ readonly type: "array";
54
+ readonly nullable: true;
55
+ };
56
+ };
@@ -0,0 +1,54 @@
1
+ export declare type GetPaginatedQueryRuleOperator = "equal" | "not_equal" | "less" | "less_or_equal" | "greater" | "greater_or_equal" | "between" | "not_between" | "begins_with" | "not_begins_with" | "contains" | "not_contains" | "ends_with" | "not_ends_with" | "is_empty" | "is_not_empty";
2
+ export declare type GetPaginatedQueryRuleValue = string | number | boolean;
3
+ export interface GetPaginatedQueryRule<T> {
4
+ field: T;
5
+ operator: GetPaginatedQueryRuleOperator;
6
+ value: GetPaginatedQueryRuleValue | GetPaginatedQueryRuleValue[];
7
+ }
8
+ export interface GetPaginatedQueryRuleGroup<T> {
9
+ condition: "AND" | "OR";
10
+ rules: (GetPaginatedQueryRuleGroup<T> | GetPaginatedQueryRule<T>)[];
11
+ }
12
+ export interface GetPaginatedQuery<T> {
13
+ limit?: number;
14
+ offset?: number;
15
+ sort?: string;
16
+ order?: "ASC" | "DESC";
17
+ rules?: GetPaginatedQueryRuleGroup<T>;
18
+ }
19
+ export declare type FilterType = "text" | "date" | "number" | "boolean" | "array" | "enum";
20
+ export declare type FilterValue = GetPaginatedQueryRuleValue;
21
+ export declare type FilterOperator = GetPaginatedQueryRuleOperator;
22
+ export interface FilterOperatorParams {
23
+ args: number;
24
+ }
25
+ export declare const nullableOperators: {
26
+ is_empty: {
27
+ args: number;
28
+ };
29
+ is_not_empty: {
30
+ args: number;
31
+ };
32
+ };
33
+ export declare const operators: Record<FilterType, Partial<Record<FilterOperator, FilterOperatorParams>>>;
34
+ interface BaseFilterArgs {
35
+ type: FilterType;
36
+ nullable?: boolean;
37
+ }
38
+ export interface EnumFilterArgs<T extends readonly string[] = string[]> extends BaseFilterArgs {
39
+ type: "enum";
40
+ options: T;
41
+ }
42
+ export interface OtherFilterArgs extends BaseFilterArgs {
43
+ type: Exclude<FilterType, "enum">;
44
+ }
45
+ export declare type FilterArgs = EnumFilterArgs | OtherFilterArgs;
46
+ export declare type Filters<T extends string = string> = Record<T, FilterArgs>;
47
+ export interface Filter {
48
+ id: string;
49
+ operator: FilterOperator;
50
+ values: FilterValue[];
51
+ }
52
+ export declare function convertRulesToFilters(rules: GetPaginatedQuery<string>["rules"]): Filter[] | null;
53
+ export declare function convertFiltersToRules(matchType: "all" | "any", filters: Filter[]): GetPaginatedQuery<string>["rules"];
54
+ export * from "./contacts";
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@beabee/beabee-common",
3
- "version": "0.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
7
- "types": "./dist/cjs/index.d.ts",
7
+ "types": "./dist/types/index.d.ts",
8
8
  "files": [
9
9
  "dist/"
10
10
  ],
11
11
  "scripts": {
12
12
  "test": "echo \"Error: no test specified\" && exit 1",
13
- "build": "rimraf ./dist/ && tsc && tsc -p tsconfig-cjs.json",
13
+ "build": "rimraf ./dist/ && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && tsc -p tsconfig.types.json",
14
14
  "prepublishOnly": "npm run build"
15
15
  },
16
16
  "repository": {
@@ -25,6 +25,7 @@
25
25
  "homepage": "https://github.com/beabee-communityrm/beabee-common#readme",
26
26
  "devDependencies": {
27
27
  "@tsconfig/recommended": "^1.0.1",
28
+ "prettier": "^2.7.1",
28
29
  "rimraf": "^3.0.2",
29
30
  "typescript": "^4.8.4"
30
31
  }
@@ -1 +0,0 @@
1
- export declare function add(a: number, b: number): number;
@@ -1 +0,0 @@
1
- export declare function add(a: number, b: number): number;