@dereekb/model 9.0.0 → 9.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ # [9.1.0](https://github.com/dereekb/dbx-components/compare/v9.0.0-dev...v9.1.0) (2022-08-15)
6
+
7
+
8
+ ### Features
9
+
10
+ * added WebsiteFileLink ([dc58b5c](https://github.com/dereekb/dbx-components/commit/dc58b5c3a78c1e6fbf3ee065b02b270f15f4dc79))
11
+
12
+
13
+
5
14
  # [9.0.0](https://github.com/dereekb/dbx-components/compare/v8.15.2-dev...v9.0.0) (2022-08-13)
6
15
 
7
16
 
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dereekb/model",
3
- "version": "9.0.0",
3
+ "version": "9.1.0",
4
4
  "type": "commonjs",
5
5
  "main": "./src/index.js",
6
6
  "typings": "./src/index.d.ts",
7
7
  "dependencies": {},
8
8
  "peerDependencies": {
9
- "@dereekb/util": "9.0.0",
9
+ "@dereekb/util": "9.1.0",
10
10
  "lodash.isequal": "^4.5.0",
11
11
  "make-error": "^1.3.0",
12
12
  "ts-essentials": "^9.1.2",
@@ -1,2 +1,3 @@
1
1
  export * from './link';
2
+ export * from './link.file';
2
3
  export * from './link.website';
@@ -2,5 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./link"), exports);
5
+ tslib_1.__exportStar(require("./link.file"), exports);
5
6
  tslib_1.__exportStar(require("./link.website"), exports);
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/model/src/lib/data/website/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,yDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/model/src/lib/data/website/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,sDAA4B;AAC5B,yDAA+B"}
@@ -1,6 +1,15 @@
1
1
  import { ModelTypeString } from '@dereekb/util';
2
2
  export declare type WebsiteLinkType = ModelTypeString;
3
3
  export declare const UNKNOWN_WEBSITE_LINK_TYPE: WebsiteLinkType;
4
+ /**
5
+ * Max length of WebsiteLink's data type.
6
+ */
7
+ export declare const WEBSITE_LINK_TYPE_MAX_LENGTH = 32;
8
+ /**
9
+ * Alpha-numeric type between 1 and 32 characters only allowed.
10
+ */
11
+ export declare const WEBSITE_LINK_TYPE_REGEX: RegExp;
12
+ export declare function isValidWebsiteLinkType(input: string): input is WebsiteLinkType;
4
13
  export declare type WebsiteLinkEncodedData = string;
5
14
  export interface WebsiteLink {
6
15
  /**
@@ -12,3 +21,12 @@ export interface WebsiteLink {
12
21
  */
13
22
  d: WebsiteLinkEncodedData;
14
23
  }
24
+ /**
25
+ * Default max length of WebsiteLink's data string.
26
+ */
27
+ export declare const WEBSITE_LINK_ENCODED_DATA_MAX_LENGTH = 1000;
28
+ export declare class WebsiteLink {
29
+ t: WebsiteLinkType;
30
+ d: WebsiteLinkEncodedData;
31
+ constructor(template: WebsiteLink);
32
+ }
@@ -0,0 +1,78 @@
1
+ import { ModelTypeString } from '@dereekb/util';
2
+ import { WebsiteLink, WebsiteLinkEncodedData } from './link';
3
+ /**
4
+ * Arbitrary file link type.
5
+ */
6
+ export declare type WebsiteFileLinkType = ModelTypeString;
7
+ /**
8
+ * Max length of WebsiteLink's data type.
9
+ */
10
+ export declare const WEBSITE_FILE_LINK_TYPE_MAX_LENGTH = 32;
11
+ /**
12
+ * Has the same regex as WebsiteLinkType
13
+ */
14
+ export declare const WEBSITE_FILE_LINK_TYPE_REGEX: RegExp;
15
+ /**
16
+ * WebsiteFileLink's mime type.
17
+ */
18
+ export declare type WebsiteFileLinkMimeType = string;
19
+ /**
20
+ * Max length of WebsiteLink's data type.
21
+ */
22
+ export declare const WEBSITE_FILE_LINK_MIME_TYPE_MAX_LENGTH = 128;
23
+ /**
24
+ * Default max length of WebsiteLink's data string.
25
+ */
26
+ export declare const WEBSITE_FILE_LINK_MIME_TYPE_REGEX: RegExp;
27
+ /**
28
+ * Arbitrary name. Has no pattern restriction, but must be 128 characters or less.
29
+ */
30
+ export declare type WebsiteFileLinkName = string;
31
+ /**
32
+ * Max length of WebsiteLink's data type.
33
+ */
34
+ export declare const WEBSITE_FILE_LINK_NAME_MAX_LENGTH = 128;
35
+ /**
36
+ * WebsiteFileLink data. Typically a URL.
37
+ */
38
+ export declare type WebsiteFileLinkData = string;
39
+ /**
40
+ * Max length of WebsiteLink's data type.
41
+ */
42
+ export declare const WEBSITE_FILE_LINK_DATA_MAX_LENGTH: number;
43
+ export declare const WEBSITE_FILE_LINK_DATA_REGEX: RegExp;
44
+ /**
45
+ * A decoded WebsiteLink that points to a file somewhere.
46
+ */
47
+ export interface WebsiteFileLink {
48
+ /**
49
+ * Arbitrary file type that can be used for identification.
50
+ */
51
+ type?: WebsiteFileLinkType;
52
+ /**
53
+ * File Type, if applicable
54
+ */
55
+ mime?: WebsiteFileLinkMimeType;
56
+ /**
57
+ * Display name, if applicable.
58
+ */
59
+ name?: WebsiteFileLinkName;
60
+ /**
61
+ * Arbitrary data.
62
+ */
63
+ data: WebsiteFileLinkData;
64
+ }
65
+ export declare type EncodedWebsiteFileLink = WebsiteLinkEncodedData;
66
+ export declare class WebsiteFileLink {
67
+ type?: WebsiteFileLinkType;
68
+ mime?: WebsiteFileLinkType;
69
+ name?: WebsiteFileLinkName;
70
+ data: WebsiteFileLinkData;
71
+ constructor(template?: WebsiteFileLink);
72
+ }
73
+ export declare const WEBSITE_FILE_LINK_WEBSITE_LINK_TYPE = "f";
74
+ export declare function websiteFileLinkToWebsiteLink(input: WebsiteFileLink): WebsiteLink;
75
+ export declare function websiteLinkToWebsiteLinkFile(input: WebsiteLink): WebsiteFileLink;
76
+ export declare const WEBSITE_FILE_LINK_ENCODE_SEPARATOR = "|";
77
+ export declare function encodeWebsiteFileLinkToWebsiteLinkEncodedData(input: WebsiteFileLink): EncodedWebsiteFileLink;
78
+ export declare function decodeWebsiteLinkEncodedDataToWebsiteFileLink(input: EncodedWebsiteFileLink): WebsiteFileLink;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodeWebsiteLinkEncodedDataToWebsiteFileLink = exports.encodeWebsiteFileLinkToWebsiteLinkEncodedData = exports.WEBSITE_FILE_LINK_ENCODE_SEPARATOR = exports.websiteLinkToWebsiteLinkFile = exports.websiteFileLinkToWebsiteLink = exports.WEBSITE_FILE_LINK_WEBSITE_LINK_TYPE = exports.WebsiteFileLink = exports.WEBSITE_FILE_LINK_DATA_REGEX = exports.WEBSITE_FILE_LINK_DATA_MAX_LENGTH = exports.WEBSITE_FILE_LINK_NAME_MAX_LENGTH = exports.WEBSITE_FILE_LINK_MIME_TYPE_REGEX = exports.WEBSITE_FILE_LINK_MIME_TYPE_MAX_LENGTH = exports.WEBSITE_FILE_LINK_TYPE_REGEX = exports.WEBSITE_FILE_LINK_TYPE_MAX_LENGTH = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const util_1 = require("@dereekb/util");
6
+ const class_transformer_1 = require("class-transformer");
7
+ const class_validator_1 = require("class-validator");
8
+ const link_1 = require("./link");
9
+ /**
10
+ * Max length of WebsiteLink's data type.
11
+ */
12
+ exports.WEBSITE_FILE_LINK_TYPE_MAX_LENGTH = link_1.WEBSITE_LINK_TYPE_MAX_LENGTH;
13
+ /**
14
+ * Has the same regex as WebsiteLinkType
15
+ */
16
+ exports.WEBSITE_FILE_LINK_TYPE_REGEX = link_1.WEBSITE_LINK_TYPE_REGEX;
17
+ /**
18
+ * Max length of WebsiteLink's data type.
19
+ */
20
+ exports.WEBSITE_FILE_LINK_MIME_TYPE_MAX_LENGTH = 128;
21
+ /**
22
+ * Default max length of WebsiteLink's data string.
23
+ */
24
+ exports.WEBSITE_FILE_LINK_MIME_TYPE_REGEX = /^\w+\/[-+.\w]+$/;
25
+ /**
26
+ * Max length of WebsiteLink's data type.
27
+ */
28
+ exports.WEBSITE_FILE_LINK_NAME_MAX_LENGTH = 128;
29
+ /**
30
+ * Max length of WebsiteLink's data type.
31
+ */
32
+ exports.WEBSITE_FILE_LINK_DATA_MAX_LENGTH = link_1.WEBSITE_LINK_ENCODED_DATA_MAX_LENGTH - 3 - exports.WEBSITE_FILE_LINK_TYPE_MAX_LENGTH - exports.WEBSITE_FILE_LINK_MIME_TYPE_MAX_LENGTH - exports.WEBSITE_FILE_LINK_NAME_MAX_LENGTH;
33
+ exports.WEBSITE_FILE_LINK_DATA_REGEX = /^[^|]+$/;
34
+ class WebsiteFileLink {
35
+ constructor(template) {
36
+ if (template) {
37
+ this.type = template.type;
38
+ this.mime = template.mime;
39
+ this.name = template.name;
40
+ this.data = template.data;
41
+ }
42
+ }
43
+ }
44
+ tslib_1.__decorate([
45
+ (0, class_transformer_1.Expose)(),
46
+ (0, class_validator_1.IsOptional)(),
47
+ (0, class_validator_1.IsString)(),
48
+ (0, class_validator_1.Matches)(exports.WEBSITE_FILE_LINK_TYPE_REGEX),
49
+ (0, class_validator_1.MaxLength)(link_1.WEBSITE_LINK_TYPE_MAX_LENGTH),
50
+ tslib_1.__metadata("design:type", String)
51
+ ], WebsiteFileLink.prototype, "type", void 0);
52
+ tslib_1.__decorate([
53
+ (0, class_transformer_1.Expose)(),
54
+ (0, class_validator_1.IsOptional)(),
55
+ (0, class_validator_1.IsString)(),
56
+ (0, class_validator_1.Matches)(exports.WEBSITE_FILE_LINK_MIME_TYPE_REGEX),
57
+ (0, class_validator_1.MaxLength)(exports.WEBSITE_FILE_LINK_MIME_TYPE_MAX_LENGTH),
58
+ tslib_1.__metadata("design:type", String)
59
+ ], WebsiteFileLink.prototype, "mime", void 0);
60
+ tslib_1.__decorate([
61
+ (0, class_transformer_1.Expose)(),
62
+ (0, class_validator_1.IsOptional)(),
63
+ (0, class_validator_1.IsString)(),
64
+ (0, class_validator_1.MaxLength)(exports.WEBSITE_FILE_LINK_NAME_MAX_LENGTH),
65
+ tslib_1.__metadata("design:type", String)
66
+ ], WebsiteFileLink.prototype, "name", void 0);
67
+ tslib_1.__decorate([
68
+ (0, class_validator_1.IsString)(),
69
+ (0, class_validator_1.IsNotEmpty)(),
70
+ (0, class_validator_1.Matches)(exports.WEBSITE_FILE_LINK_DATA_REGEX),
71
+ (0, class_validator_1.MaxLength)(exports.WEBSITE_FILE_LINK_DATA_MAX_LENGTH),
72
+ tslib_1.__metadata("design:type", String)
73
+ ], WebsiteFileLink.prototype, "data", void 0);
74
+ exports.WebsiteFileLink = WebsiteFileLink;
75
+ exports.WEBSITE_FILE_LINK_WEBSITE_LINK_TYPE = 'f';
76
+ function websiteFileLinkToWebsiteLink(input) {
77
+ return {
78
+ t: exports.WEBSITE_FILE_LINK_WEBSITE_LINK_TYPE,
79
+ d: encodeWebsiteFileLinkToWebsiteLinkEncodedData(input)
80
+ };
81
+ }
82
+ exports.websiteFileLinkToWebsiteLink = websiteFileLinkToWebsiteLink;
83
+ function websiteLinkToWebsiteLinkFile(input) {
84
+ const encodedData = input.d;
85
+ return decodeWebsiteLinkEncodedDataToWebsiteFileLink(encodedData);
86
+ }
87
+ exports.websiteLinkToWebsiteLinkFile = websiteLinkToWebsiteLinkFile;
88
+ exports.WEBSITE_FILE_LINK_ENCODE_SEPARATOR = '|';
89
+ function encodeWebsiteFileLinkToWebsiteLinkEncodedData(input) {
90
+ const encoded = [input.type, input.mime, input.data, input.name].map((x) => x || '').join(exports.WEBSITE_FILE_LINK_ENCODE_SEPARATOR);
91
+ return encoded;
92
+ }
93
+ exports.encodeWebsiteFileLinkToWebsiteLinkEncodedData = encodeWebsiteFileLinkToWebsiteLinkEncodedData;
94
+ function decodeWebsiteLinkEncodedDataToWebsiteFileLink(input) {
95
+ const [type, mime, data, name] = (0, util_1.splitJoinRemainder)(input, exports.WEBSITE_FILE_LINK_ENCODE_SEPARATOR, 4);
96
+ return (0, util_1.filterFalsyAndEmptyValues)({
97
+ type,
98
+ mime,
99
+ name,
100
+ data
101
+ });
102
+ }
103
+ exports.decodeWebsiteLinkEncodedDataToWebsiteFileLink = decodeWebsiteLinkEncodedDataToWebsiteFileLink;
104
+ //# sourceMappingURL=link.file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.file.js","sourceRoot":"","sources":["../../../../../../../packages/model/src/lib/data/website/link.file.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UNKNOWN_WEBSITE_LINK_TYPE = void 0;
3
+ exports.WebsiteLink = exports.WEBSITE_LINK_ENCODED_DATA_MAX_LENGTH = exports.isValidWebsiteLinkType = exports.WEBSITE_LINK_TYPE_REGEX = exports.WEBSITE_LINK_TYPE_MAX_LENGTH = exports.UNKNOWN_WEBSITE_LINK_TYPE = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const class_validator_1 = require("class-validator");
4
7
  exports.UNKNOWN_WEBSITE_LINK_TYPE = 'u';
8
+ /**
9
+ * Max length of WebsiteLink's data type.
10
+ */
11
+ exports.WEBSITE_LINK_TYPE_MAX_LENGTH = 32;
12
+ /**
13
+ * Alpha-numeric type between 1 and 32 characters only allowed.
14
+ */
15
+ exports.WEBSITE_LINK_TYPE_REGEX = /^[a-zA-Z0-9]{1,32}$/;
16
+ function isValidWebsiteLinkType(input) {
17
+ return exports.WEBSITE_LINK_TYPE_REGEX.test(input);
18
+ }
19
+ exports.isValidWebsiteLinkType = isValidWebsiteLinkType;
20
+ /**
21
+ * Default max length of WebsiteLink's data string.
22
+ */
23
+ exports.WEBSITE_LINK_ENCODED_DATA_MAX_LENGTH = 1000;
24
+ class WebsiteLink {
25
+ constructor(template) {
26
+ if (template) {
27
+ this.t = template.t;
28
+ this.d = template.d;
29
+ }
30
+ }
31
+ }
32
+ tslib_1.__decorate([
33
+ (0, class_transformer_1.Expose)(),
34
+ (0, class_validator_1.IsString)(),
35
+ (0, class_validator_1.IsNotEmpty)(),
36
+ (0, class_validator_1.Matches)(exports.WEBSITE_LINK_TYPE_REGEX),
37
+ (0, class_validator_1.MaxLength)(exports.WEBSITE_LINK_TYPE_MAX_LENGTH),
38
+ tslib_1.__metadata("design:type", String)
39
+ ], WebsiteLink.prototype, "t", void 0);
40
+ tslib_1.__decorate([
41
+ (0, class_transformer_1.Expose)(),
42
+ (0, class_validator_1.IsString)(),
43
+ (0, class_validator_1.IsNotEmpty)(),
44
+ (0, class_validator_1.MaxLength)(exports.WEBSITE_LINK_ENCODED_DATA_MAX_LENGTH),
45
+ tslib_1.__metadata("design:type", String)
46
+ ], WebsiteLink.prototype, "d", void 0);
47
+ exports.WebsiteLink = WebsiteLink;
5
48
  //# sourceMappingURL=link.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../../../../packages/model/src/lib/data/website/link.ts"],"names":[],"mappings":";;;AAIa,QAAA,yBAAyB,GAAoB,GAAG,CAAC"}
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../../../../packages/model/src/lib/data/website/link.ts"],"names":[],"mappings":";;;;AACA,yDAA2C;AAC3C,qDAA2E;AAI9D,QAAA,yBAAyB,GAAoB,GAAG,CAAC;AAE9D;;GAEG;AACU,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C;;GAEG;AACU,QAAA,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D,SAAgB,sBAAsB,CAAC,KAAa;IAClD,OAAO,+BAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC;AAFD,wDAEC;AAeD;;GAEG;AACU,QAAA,oCAAoC,GAAG,IAAI,CAAC;AAEzD,MAAa,WAAW;IActB,YAAY,QAAqB;QAC/B,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;SACrB;IACH,CAAC;CACF;AAdC;IALC,IAAA,0BAAM,GAAE;IACR,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,EAAC,+BAAuB,CAAC;IAChC,IAAA,2BAAS,EAAC,oCAA4B,CAAC;;sCACpB;AAMpB;IAJC,IAAA,0BAAM,GAAE;IACR,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,4CAAoC,CAAC;;sCACrB;AAZ7B,kCAoBC"}