@vannizhang/living-atlas-content-validator 1.0.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.
Files changed (153) hide show
  1. package/LICENSE +101 -0
  2. package/README.md +196 -0
  3. package/dist/index.d.ts +17 -0
  4. package/dist/index.js +35 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/accessInformation/isValidAccessInformation.d.ts +10 -0
  7. package/dist/lib/accessInformation/isValidAccessInformation.js +48 -0
  8. package/dist/lib/accessInformation/isValidAccessInformation.js.map +1 -0
  9. package/dist/lib/accessInformation/scoringRulesConfig.d.ts +3 -0
  10. package/dist/lib/accessInformation/scoringRulesConfig.js +37 -0
  11. package/dist/lib/accessInformation/scoringRulesConfig.js.map +1 -0
  12. package/dist/lib/config.d.ts +6 -0
  13. package/dist/lib/config.js +61 -0
  14. package/dist/lib/config.js.map +1 -0
  15. package/dist/lib/description/isValidDescription.d.ts +18 -0
  16. package/dist/lib/description/isValidDescription.js +95 -0
  17. package/dist/lib/description/isValidDescription.js.map +1 -0
  18. package/dist/lib/description/scoringRulesConfig.d.ts +3 -0
  19. package/dist/lib/description/scoringRulesConfig.js +49 -0
  20. package/dist/lib/description/scoringRulesConfig.js.map +1 -0
  21. package/dist/lib/layers/isValidLayerCount.d.ts +12 -0
  22. package/dist/lib/layers/isValidLayerCount.js +148 -0
  23. package/dist/lib/layers/isValidLayerCount.js.map +1 -0
  24. package/dist/lib/layers/scoringRulesConfig.d.ts +3 -0
  25. package/dist/lib/layers/scoringRulesConfig.js +49 -0
  26. package/dist/lib/layers/scoringRulesConfig.js.map +1 -0
  27. package/dist/lib/licenseInfo/isValidLicenseInfo.d.ts +36 -0
  28. package/dist/lib/licenseInfo/isValidLicenseInfo.js +108 -0
  29. package/dist/lib/licenseInfo/isValidLicenseInfo.js.map +1 -0
  30. package/dist/lib/licenseInfo/scoringRulesConfig.d.ts +3 -0
  31. package/dist/lib/licenseInfo/scoringRulesConfig.js +49 -0
  32. package/dist/lib/licenseInfo/scoringRulesConfig.js.map +1 -0
  33. package/dist/lib/sharing/isValidAccess.d.ts +22 -0
  34. package/dist/lib/sharing/isValidAccess.js +79 -0
  35. package/dist/lib/sharing/isValidAccess.js.map +1 -0
  36. package/dist/lib/sharing/scoringRulesConfig.d.ts +3 -0
  37. package/dist/lib/sharing/scoringRulesConfig.js +49 -0
  38. package/dist/lib/sharing/scoringRulesConfig.js.map +1 -0
  39. package/dist/lib/ssl/isValidSSL.d.ts +14 -0
  40. package/dist/lib/ssl/isValidSSL.js +62 -0
  41. package/dist/lib/ssl/isValidSSL.js.map +1 -0
  42. package/dist/lib/ssl/scoringRulesConfig.d.ts +3 -0
  43. package/dist/lib/ssl/scoringRulesConfig.js +43 -0
  44. package/dist/lib/ssl/scoringRulesConfig.js.map +1 -0
  45. package/dist/lib/summary/isValidSummary.d.ts +17 -0
  46. package/dist/lib/summary/isValidSummary.js +114 -0
  47. package/dist/lib/summary/isValidSummary.js.map +1 -0
  48. package/dist/lib/summary/scoringRulesConfig.d.ts +3 -0
  49. package/dist/lib/summary/scoringRulesConfig.js +55 -0
  50. package/dist/lib/summary/scoringRulesConfig.js.map +1 -0
  51. package/dist/lib/tags/isValidTags.d.ts +14 -0
  52. package/dist/lib/tags/isValidTags.js +82 -0
  53. package/dist/lib/tags/isValidTags.js.map +1 -0
  54. package/dist/lib/tags/scoringRulesConfig.d.ts +3 -0
  55. package/dist/lib/tags/scoringRulesConfig.js +43 -0
  56. package/dist/lib/tags/scoringRulesConfig.js.map +1 -0
  57. package/dist/lib/thumbnail/isValidThumbnail.d.ts +10 -0
  58. package/dist/lib/thumbnail/isValidThumbnail.js +90 -0
  59. package/dist/lib/thumbnail/isValidThumbnail.js.map +1 -0
  60. package/dist/lib/thumbnail/scoringRulesConfig.d.ts +3 -0
  61. package/dist/lib/thumbnail/scoringRulesConfig.js +43 -0
  62. package/dist/lib/thumbnail/scoringRulesConfig.js.map +1 -0
  63. package/dist/lib/title/isValidTitle.d.ts +23 -0
  64. package/dist/lib/title/isValidTitle.js +128 -0
  65. package/dist/lib/title/isValidTitle.js.map +1 -0
  66. package/dist/lib/title/scoringRulesConfig.d.ts +3 -0
  67. package/dist/lib/title/scoringRulesConfig.js +54 -0
  68. package/dist/lib/title/scoringRulesConfig.js.map +1 -0
  69. package/dist/lib/userProfileDescription/isValidUserProfileDescription.d.ts +23 -0
  70. package/dist/lib/userProfileDescription/isValidUserProfileDescription.js +138 -0
  71. package/dist/lib/userProfileDescription/isValidUserProfileDescription.js.map +1 -0
  72. package/dist/lib/userProfileDescription/scoringRulesConfig.d.ts +3 -0
  73. package/dist/lib/userProfileDescription/scoringRulesConfig.js +61 -0
  74. package/dist/lib/userProfileDescription/scoringRulesConfig.js.map +1 -0
  75. package/dist/lib/userProfileName/isValidUserProfileName.d.ts +10 -0
  76. package/dist/lib/userProfileName/isValidUserProfileName.js +60 -0
  77. package/dist/lib/userProfileName/isValidUserProfileName.js.map +1 -0
  78. package/dist/lib/userProfileName/scoringRulesConfig.d.ts +3 -0
  79. package/dist/lib/userProfileName/scoringRulesConfig.js +43 -0
  80. package/dist/lib/userProfileName/scoringRulesConfig.js.map +1 -0
  81. package/dist/lib/userProfileThumbnail/isValidUserProfileThumbnail.d.ts +22 -0
  82. package/dist/lib/userProfileThumbnail/isValidUserProfileThumbnail.js +62 -0
  83. package/dist/lib/userProfileThumbnail/isValidUserProfileThumbnail.js.map +1 -0
  84. package/dist/lib/userProfileThumbnail/scoringRulesConfig.d.ts +3 -0
  85. package/dist/lib/userProfileThumbnail/scoringRulesConfig.js +37 -0
  86. package/dist/lib/userProfileThumbnail/scoringRulesConfig.js.map +1 -0
  87. package/dist/lib/util/assertString.d.ts +11 -0
  88. package/dist/lib/util/assertString.js +20 -0
  89. package/dist/lib/util/assertString.js.map +1 -0
  90. package/dist/lib/util/contains.d.ts +7 -0
  91. package/dist/lib/util/contains.js +17 -0
  92. package/dist/lib/util/contains.js.map +1 -0
  93. package/dist/lib/util/getNumberOfStrings.d.ts +6 -0
  94. package/dist/lib/util/getNumberOfStrings.js +25 -0
  95. package/dist/lib/util/getNumberOfStrings.js.map +1 -0
  96. package/dist/lib/util/getScoringRules.d.ts +21 -0
  97. package/dist/lib/util/getScoringRules.js +99 -0
  98. package/dist/lib/util/getScoringRules.js.map +1 -0
  99. package/dist/lib/util/getThumbnailFileName.d.ts +15 -0
  100. package/dist/lib/util/getThumbnailFileName.js +26 -0
  101. package/dist/lib/util/getThumbnailFileName.js.map +1 -0
  102. package/dist/lib/util/isArcGISDomain.d.ts +6 -0
  103. package/dist/lib/util/isArcGISDomain.js +16 -0
  104. package/dist/lib/util/isArcGISDomain.js.map +1 -0
  105. package/dist/lib/util/isArcGISOnlineReservedThumbnailName.d.ts +6 -0
  106. package/dist/lib/util/isArcGISOnlineReservedThumbnailName.js +19 -0
  107. package/dist/lib/util/isArcGISOnlineReservedThumbnailName.js.map +1 -0
  108. package/dist/lib/util/isDefined.d.ts +8 -0
  109. package/dist/lib/util/isDefined.js +15 -0
  110. package/dist/lib/util/isDefined.js.map +1 -0
  111. package/dist/lib/util/isEmail.d.ts +6 -0
  112. package/dist/lib/util/isEmail.js +14 -0
  113. package/dist/lib/util/isEmail.js.map +1 -0
  114. package/dist/lib/util/isEmpty.d.ts +6 -0
  115. package/dist/lib/util/isEmpty.js +17 -0
  116. package/dist/lib/util/isEmpty.js.map +1 -0
  117. package/dist/lib/util/isFeatureCollection.d.ts +7 -0
  118. package/dist/lib/util/isFeatureCollection.js +13 -0
  119. package/dist/lib/util/isFeatureCollection.js.map +1 -0
  120. package/dist/lib/util/isHosted.d.ts +7 -0
  121. package/dist/lib/util/isHosted.js +17 -0
  122. package/dist/lib/util/isHosted.js.map +1 -0
  123. package/dist/lib/util/isSecureProtocol.d.ts +6 -0
  124. package/dist/lib/util/isSecureProtocol.js +16 -0
  125. package/dist/lib/util/isSecureProtocol.js.map +1 -0
  126. package/dist/lib/util/isUppercase.d.ts +4 -0
  127. package/dist/lib/util/isUppercase.js +14 -0
  128. package/dist/lib/util/isUppercase.js.map +1 -0
  129. package/dist/lib/util/isUrl.d.ts +4 -0
  130. package/dist/lib/util/isUrl.js +12 -0
  131. package/dist/lib/util/isUrl.js.map +1 -0
  132. package/dist/lib/util/matches.d.ts +12 -0
  133. package/dist/lib/util/matches.js +22 -0
  134. package/dist/lib/util/matches.js.map +1 -0
  135. package/dist/lib/util/stringsConfig.d.ts +17 -0
  136. package/dist/lib/util/stringsConfig.js +42 -0
  137. package/dist/lib/util/stringsConfig.js.map +1 -0
  138. package/dist/lib/util/toString.d.ts +11 -0
  139. package/dist/lib/util/toString.js +31 -0
  140. package/dist/lib/util/toString.js.map +1 -0
  141. package/dist/lib/validate/validate.d.ts +11 -0
  142. package/dist/lib/validate/validate.js +62 -0
  143. package/dist/lib/validate/validate.js.map +1 -0
  144. package/dist/locale/de.json +195 -0
  145. package/dist/locale/en.json +195 -0
  146. package/dist/locale/es.json +195 -0
  147. package/dist/locale/fr.json +195 -0
  148. package/dist/locale/ja.json +195 -0
  149. package/dist/locale/pt-br.json +195 -0
  150. package/dist/types/index.d.ts +114 -0
  151. package/dist/types/index.js +16 -0
  152. package/dist/types/index.js.map +1 -0
  153. package/package.json +55 -0
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isValidAccess = void 0;
7
+ const scoringRulesConfig_1 = __importDefault(require("./scoringRulesConfig"));
8
+ const getScoringRules_1 = require("../util/getScoringRules");
9
+ const stringsConfig_1 = require("../util/stringsConfig");
10
+ const isEmpty_1 = require("../util/isEmpty");
11
+ /**
12
+ * Validate an item's sharing. An item is required to be shared with the public before it can be nominated for inclusion in the Living Atlas.
13
+ *
14
+ * When adding a item to ArcGIS Online, you have the option of leaving it unshared or,
15
+ * depending on your sharing privileges and the security settings of your organization, sharing items with groups, your
16
+ * organization, or everyone.
17
+ *
18
+ * You can also share an item with a combination of your organization, groups, and everyone.
19
+ *
20
+ * If you choose not to share the item, only you (and organization members with privileges to view content owned by
21
+ * other members) can access the item until you share it. Until they are shared, your maps, apps, and other items are
22
+ * not available to others—for example, they do not appear in search results and aren't part of any group.
23
+ *
24
+ * Living Atlas specific:
25
+ * - Must be public
26
+ *
27
+ * Living Atlas specific (international)
28
+ * - Must be public
29
+ *
30
+ */
31
+ const isValidAccess = (item) => {
32
+ const { access } = item;
33
+ // scoring rules
34
+ const SCORING = (0, getScoringRules_1.getScoringRules)(item, scoringRulesConfig_1.default);
35
+ const stringsConfig = (0, stringsConfig_1.getStringsConfig)();
36
+ const issues = {
37
+ property: 'access',
38
+ label: stringsConfig.sharing.LABEL,
39
+ maxScore: SCORING.EMPTY_STRING_SCORE + SCORING.PUBLIC_SCORE,
40
+ score: SCORING.EMPTY_STRING_SCORE,
41
+ messages: [],
42
+ weight: stringsConfig.sharing.WEIGHT,
43
+ critical: true,
44
+ };
45
+ if ((0, isEmpty_1.isEmpty)(access)) {
46
+ issues.messages.push({
47
+ code: stringsConfig.sharing.EMPTY_STRING_CODE,
48
+ message: stringsConfig.sharing.EMPTY_STRING_MESSAGE,
49
+ });
50
+ return issues;
51
+ }
52
+ if (access === 'private') {
53
+ issues.score = SCORING.PRIVATE_SCORE;
54
+ issues.messages.push({
55
+ code: stringsConfig.sharing.PRIVATE_CODE,
56
+ message: stringsConfig.sharing.PRIVATE_MESSAGE,
57
+ });
58
+ }
59
+ if (access === 'org') {
60
+ issues.score = SCORING.ORG_SCORE;
61
+ issues.messages.push({
62
+ code: stringsConfig.sharing.ORG_CODE,
63
+ message: stringsConfig.sharing.ORG_MESSAGE,
64
+ });
65
+ }
66
+ if (access === 'shared') {
67
+ issues.score = SCORING.ORG_SCORE;
68
+ issues.messages.push({
69
+ code: stringsConfig.sharing.ORG_CODE,
70
+ message: stringsConfig.sharing.ORG_MESSAGE,
71
+ });
72
+ }
73
+ if (access === 'public') {
74
+ issues.score = SCORING.PUBLIC_SCORE;
75
+ }
76
+ return issues;
77
+ };
78
+ exports.isValidAccess = isValidAccess;
79
+ //# sourceMappingURL=isValidAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidAccess.js","sourceRoot":"","sources":["../../../src/lib/sharing/isValidAccess.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAsD;AACtD,6DAA0D;AAE1D,yDAAyD;AACzD,6CAA0C;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACI,MAAM,aAAa,GAAG,CAAC,IAAW,EAAkB,EAAE;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,gBAAgB;IAChB,MAAM,OAAO,GAAG,IAAA,iCAAe,EAAC,IAAI,EAAE,4BAAkB,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAEzC,MAAM,MAAM,GAAG;QACX,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK;QAClC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,YAAY;QAC3D,KAAK,EAAE,OAAO,CAAC,kBAAkB;QACjC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM;QACpC,QAAQ,EAAE,IAAI;KACjB,CAAC;IAEF,IAAI,IAAA,iBAAO,EAAC,MAAM,CAAC,EAAE;QACjB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,iBAAiB;YAC7C,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,oBAAoB;SACtD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACjB;IAED,IAAI,MAAM,KAAK,SAAS,EAAE;QACtB,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,YAAY;YACxC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,eAAe;SACjD,CAAC,CAAC;KACN;IAED,IAAI,MAAM,KAAK,KAAK,EAAE;QAClB,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ;YACpC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,WAAW;SAC7C,CAAC,CAAC;KACN;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE;QACrB,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ;YACpC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,WAAW;SAC7C,CAAC,CAAC;KACN;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE;QACrB,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;KACvC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAxDW,QAAA,aAAa,iBAwDxB"}
@@ -0,0 +1,3 @@
1
+ import { ScoringRulesConfig } from '../../types';
2
+ declare const config: ScoringRulesConfig;
3
+ export default config;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config = {
4
+ // Scoring
5
+ SCORING: {
6
+ DEFAULT: {
7
+ WEB_MAP: {
8
+ EMPTY_STRING_SCORE: 0,
9
+ PRIVATE_SCORE: 0,
10
+ ORG_SCORE: 2,
11
+ PUBLIC_SCORE: 9,
12
+ },
13
+ WEB_SCENE: {
14
+ EMPTY_STRING_SCORE: 0,
15
+ PRIVATE_SCORE: 0,
16
+ ORG_SCORE: 2,
17
+ PUBLIC_SCORE: 10,
18
+ },
19
+ APPLICATION: {
20
+ EMPTY_STRING_SCORE: 0,
21
+ PRIVATE_SCORE: 0,
22
+ ORG_SCORE: 2,
23
+ PUBLIC_SCORE: 10,
24
+ },
25
+ },
26
+ INTERNATIONAL: {
27
+ WEB_MAP: {
28
+ EMPTY_STRING_SCORE: 0,
29
+ PRIVATE_SCORE: 0,
30
+ ORG_SCORE: 2,
31
+ PUBLIC_SCORE: 9,
32
+ },
33
+ WEB_SCENE: {
34
+ EMPTY_STRING_SCORE: 0,
35
+ PRIVATE_SCORE: 0,
36
+ ORG_SCORE: 2,
37
+ PUBLIC_SCORE: 10,
38
+ },
39
+ APPLICATION: {
40
+ EMPTY_STRING_SCORE: 0,
41
+ PRIVATE_SCORE: 0,
42
+ ORG_SCORE: 2,
43
+ PUBLIC_SCORE: 10,
44
+ },
45
+ },
46
+ },
47
+ };
48
+ exports.default = config;
49
+ //# sourceMappingURL=scoringRulesConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoringRulesConfig.js","sourceRoot":"","sources":["../../../src/lib/sharing/scoringRulesConfig.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAuB;IAC/B,UAAU;IACV,OAAO,EAAE;QACL,OAAO,EAAE;YACL,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,CAAC;gBACZ,YAAY,EAAE,CAAC;aAClB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,CAAC;gBACZ,YAAY,EAAE,EAAE;aACnB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,CAAC;gBACZ,YAAY,EAAE,EAAE;aACnB;SACJ;QAED,aAAa,EAAE;YACX,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,CAAC;gBACZ,YAAY,EAAE,CAAC;aAClB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,CAAC;gBACZ,YAAY,EAAE,EAAE;aACnB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,CAAC;gBACZ,YAAY,EAAE,EAAE;aACnB;SACJ;KACJ;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { IItem, ValidationInfo } from '../../types';
2
+ /**
3
+ * Validate an item's SSL.
4
+ *
5
+ * The URL for the resource represented by the item. Applies only to items that represent web-accessible resources such as map services.
6
+ *
7
+ * ArcGIS Online specific rules:
8
+ * - Must be SSL
9
+ *
10
+ * Living Atlas specific
11
+ * - Must be hosted over SSL
12
+ *
13
+ */
14
+ export declare const isValidSSL: (item: IItem) => ValidationInfo;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isValidSSL = void 0;
7
+ const scoringRulesConfig_1 = __importDefault(require("./scoringRulesConfig"));
8
+ const getScoringRules_1 = require("../util/getScoringRules");
9
+ const stringsConfig_1 = require("../util/stringsConfig");
10
+ const isHosted_1 = require("../util/isHosted");
11
+ const isSecureProtocol_1 = require("../util/isSecureProtocol");
12
+ const isArcGISDomain_1 = require("../util/isArcGISDomain");
13
+ /**
14
+ * Validate an item's SSL.
15
+ *
16
+ * The URL for the resource represented by the item. Applies only to items that represent web-accessible resources such as map services.
17
+ *
18
+ * ArcGIS Online specific rules:
19
+ * - Must be SSL
20
+ *
21
+ * Living Atlas specific
22
+ * - Must be hosted over SSL
23
+ *
24
+ */
25
+ const isValidSSL = (item) => {
26
+ const { url } = item;
27
+ // scoring rules
28
+ const SCORING = (0, getScoringRules_1.getScoringRules)(item, scoringRulesConfig_1.default);
29
+ const stringsConfig = (0, stringsConfig_1.getStringsConfig)();
30
+ let isSSL = url ? (0, isSecureProtocol_1.isSecureProtocol)(url) || (0, isArcGISDomain_1.isArcGISDomain)(url) : true;
31
+ if (!isSSL) {
32
+ isSSL = (0, isHosted_1.isHosted)(item);
33
+ }
34
+ // console.log(isSSL)
35
+ if (!isSSL) {
36
+ return {
37
+ property: 'ssl',
38
+ label: stringsConfig.ssl.LABEL,
39
+ maxScore: SCORING.EMPTY_STRING_SCORE + SCORING.IS_SSL_ENABLED_SCORE,
40
+ score: SCORING.IS_SSL_DISABLED_SCORE,
41
+ messages: [
42
+ {
43
+ code: stringsConfig.ssl.IS_SSL_DISABLED_CODE,
44
+ message: stringsConfig.ssl.IS_SSL_DISABLED_MESSAGE,
45
+ },
46
+ ],
47
+ weight: stringsConfig.ssl.WEIGHT,
48
+ critical: true,
49
+ };
50
+ }
51
+ return {
52
+ property: 'ssl',
53
+ label: stringsConfig.ssl.LABEL,
54
+ maxScore: SCORING.EMPTY_STRING_SCORE + SCORING.IS_SSL_ENABLED_SCORE,
55
+ score: SCORING.IS_SSL_ENABLED_SCORE,
56
+ messages: [],
57
+ weight: stringsConfig.ssl.WEIGHT,
58
+ critical: true,
59
+ };
60
+ };
61
+ exports.isValidSSL = isValidSSL;
62
+ //# sourceMappingURL=isValidSSL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidSSL.js","sourceRoot":"","sources":["../../../src/lib/ssl/isValidSSL.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAsD;AACtD,6DAGiC;AAEjC,yDAAyD;AAEzD,+CAA4C;AAC5C,+DAA4D;AAE5D,2DAAwD;AAExD;;;;;;;;;;;GAWG;AACI,MAAM,UAAU,GAAG,CAAC,IAAW,EAAkB,EAAE;IACtD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAErB,gBAAgB;IAChB,MAAM,OAAO,GAAG,IAAA,iCAAe,EAAC,IAAI,EAAE,4BAAkB,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAEzC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,mCAAgB,EAAC,GAAG,CAAC,IAAI,IAAA,+BAAc,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtE,IAAI,CAAC,KAAK,EAAE;QACR,KAAK,GAAG,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAC;KAC1B;IAED,qBAAqB;IAErB,IAAI,CAAC,KAAK,EAAE;QACR,OAAO;YACH,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK;YAC9B,QAAQ,EAAE,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,oBAAoB;YACnE,KAAK,EAAE,OAAO,CAAC,qBAAqB;YACpC,QAAQ,EAAE;gBACN;oBACI,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,oBAAoB;oBAC5C,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,uBAAuB;iBACrD;aACJ;YACD,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI;SACjB,CAAC;KACL;IAED,OAAO;QACH,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK;QAC9B,QAAQ,EAAE,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,oBAAoB;QACnE,KAAK,EAAE,OAAO,CAAC,oBAAoB;QACnC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM;QAChC,QAAQ,EAAE,IAAI;KACjB,CAAC;AACN,CAAC,CAAC;AA1CW,QAAA,UAAU,cA0CrB"}
@@ -0,0 +1,3 @@
1
+ import { ScoringRulesConfig } from '../../types';
2
+ declare const config: ScoringRulesConfig;
3
+ export default config;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config = {
4
+ // Scoring
5
+ SCORING: {
6
+ DEFAULT: {
7
+ WEB_MAP: {
8
+ EMPTY_STRING_SCORE: 0,
9
+ IS_SSL_DISABLED_SCORE: 0,
10
+ IS_SSL_ENABLED_SCORE: 3,
11
+ },
12
+ WEB_SCENE: {
13
+ EMPTY_STRING_SCORE: 0,
14
+ IS_SSL_DISABLED_SCORE: 0,
15
+ IS_SSL_ENABLED_SCORE: 0,
16
+ },
17
+ APPLICATION: {
18
+ EMPTY_STRING_SCORE: 0,
19
+ IS_SSL_DISABLED_SCORE: 0,
20
+ IS_SSL_ENABLED_SCORE: 4,
21
+ },
22
+ },
23
+ INTERNATIONAL: {
24
+ WEB_MAP: {
25
+ EMPTY_STRING_SCORE: 0,
26
+ IS_SSL_DISABLED_SCORE: 0,
27
+ IS_SSL_ENABLED_SCORE: 3,
28
+ },
29
+ WEB_SCENE: {
30
+ EMPTY_STRING_SCORE: 0,
31
+ IS_SSL_DISABLED_SCORE: 0,
32
+ IS_SSL_ENABLED_SCORE: 0,
33
+ },
34
+ APPLICATION: {
35
+ EMPTY_STRING_SCORE: 0,
36
+ IS_SSL_DISABLED_SCORE: 0,
37
+ IS_SSL_ENABLED_SCORE: 4,
38
+ },
39
+ },
40
+ },
41
+ };
42
+ exports.default = config;
43
+ //# sourceMappingURL=scoringRulesConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoringRulesConfig.js","sourceRoot":"","sources":["../../../src/lib/ssl/scoringRulesConfig.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAuB;IAC/B,UAAU;IACV,OAAO,EAAE;QACL,OAAO,EAAE;YACL,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;aAC1B;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;aAC1B;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;aAC1B;SACJ;QAED,aAAa,EAAE;YACX,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;aAC1B;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;aAC1B;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,qBAAqB,EAAE,CAAC;gBACxB,oBAAoB,EAAE,CAAC;aAC1B;SACJ;KACJ;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { IItem, ValidationInfo } from '../../types';
2
+ /**
3
+ * Validate an item's summary
4
+ *
5
+ * ArcGIS Online specific rules:
6
+ * - Cannot contain `<code>&#60</code>` or `<code>&#62</code>` (ArcGIS Online defined)
7
+ *
8
+ * Living Atlas specific rules:
9
+ * - Cannot be empty
10
+ * - Cannot contain blacklisted characters or strings ("_", "copy", "demo", "test", "eval")
11
+ * - Must have 10 or more words
12
+ *
13
+ * Living Atlas specific (international) rules:
14
+ * - Must contain a string of any length
15
+ *
16
+ */
17
+ export declare const isValidSummary: (item: IItem, blacklist?: RegExp[]) => ValidationInfo;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isValidSummary = void 0;
7
+ const scoringRulesConfig_1 = __importDefault(require("./scoringRulesConfig"));
8
+ const getScoringRules_1 = require("../util/getScoringRules");
9
+ const stringsConfig_1 = require("../util/stringsConfig");
10
+ const config_1 = require("../config");
11
+ const assertString_1 = require("../util/assertString");
12
+ const isEmpty_1 = require("../util/isEmpty");
13
+ const contains_1 = require("../util/contains");
14
+ const getNumberOfStrings_1 = require("../util/getNumberOfStrings");
15
+ const matches_1 = require("../util/matches");
16
+ /**
17
+ * Validate an item's summary
18
+ *
19
+ * ArcGIS Online specific rules:
20
+ * - Cannot contain `<code>&#60</code>` or `<code>&#62</code>` (ArcGIS Online defined)
21
+ *
22
+ * Living Atlas specific rules:
23
+ * - Cannot be empty
24
+ * - Cannot contain blacklisted characters or strings ("_", "copy", "demo", "test", "eval")
25
+ * - Must have 10 or more words
26
+ *
27
+ * Living Atlas specific (international) rules:
28
+ * - Must contain a string of any length
29
+ *
30
+ */
31
+ const isValidSummary = (item, blacklist = config_1.BLACKLIST) => {
32
+ // property
33
+ const { snippet } = item;
34
+ // scoring rules locale
35
+ const culture = (0, getScoringRules_1.getScoringRulesLocale)(item);
36
+ // scoring rules
37
+ const SCORING = (0, getScoringRules_1.getScoringRules)(item, scoringRulesConfig_1.default);
38
+ const stringsConfig = (0, stringsConfig_1.getStringsConfig)();
39
+ // issues
40
+ const issues = {
41
+ property: 'snippet',
42
+ label: stringsConfig.summary.LABEL,
43
+ maxScore: SCORING.EMPTY_STRING_SCORE +
44
+ SCORING.MIN_LENGTH_SCORE +
45
+ SCORING.NO_BLACK_LISTED_WORDS_SCORE +
46
+ SCORING.NO_BLACK_LISTED_CHARS_SCORE +
47
+ SCORING.MUST_EXIST_SCORE,
48
+ score: SCORING.EMPTY_STRING_SCORE,
49
+ messages: [],
50
+ weight: stringsConfig.summary.WEIGHT,
51
+ critical: false,
52
+ };
53
+ if ((0, assertString_1.assertString)(item.snippet) === false || (0, isEmpty_1.isEmpty)(snippet)) {
54
+ issues.label = stringsConfig.summary.EMPTY_STRING_MESSAGE;
55
+ issues.messages.push({
56
+ code: stringsConfig.summary.EMPTY_STRING_CODE,
57
+ message: stringsConfig.summary.EMPTY_STRING_MESSAGE,
58
+ });
59
+ issues.critical = true;
60
+ return issues;
61
+ }
62
+ // all international items get the maximum score as long as the snippet is not empty
63
+ if (culture === 'international') {
64
+ issues.score =
65
+ SCORING.MIN_LENGTH_SCORE +
66
+ SCORING.NO_BLACK_LISTED_WORDS_SCORE +
67
+ SCORING.NO_BLACK_LISTED_CHARS_SCORE +
68
+ SCORING.MUST_EXIST_SCORE;
69
+ return issues;
70
+ }
71
+ issues.score += SCORING.MUST_EXIST_SCORE;
72
+ // check if the snippet contains any of these special characters: `>`, `<`, `_`
73
+ if ((0, contains_1.contains)(snippet, '>') ||
74
+ (0, contains_1.contains)(snippet, '<') ||
75
+ (0, contains_1.contains)(snippet, '_')) {
76
+ issues.messages.push({
77
+ code: stringsConfig.summary.BLACKLISTED_CHARS_CODE,
78
+ message: stringsConfig.summary.BLACKLISTED_CHARS_MESSAGE,
79
+ });
80
+ }
81
+ else {
82
+ issues.score += SCORING.NO_BLACK_LISTED_CHARS_SCORE;
83
+ }
84
+ // check number of words in the snippet
85
+ if ((0, getNumberOfStrings_1.getNumberOfStrings)(snippet) < 10) {
86
+ issues.messages.push({
87
+ code: stringsConfig.summary.MINIMUM_WORD_COUNT_CODE,
88
+ message: stringsConfig.summary.MINIMUM_WORD_COUNT_MESSAGE,
89
+ });
90
+ }
91
+ else {
92
+ issues.score += SCORING.MIN_LENGTH_SCORE;
93
+ }
94
+ // check if title contains any words in the blacklist
95
+ let containsBlacklistedWords = false;
96
+ for (let i = 0; i < blacklist.length; i += 1) {
97
+ if ((0, matches_1.matches)(snippet, blacklist[i])) {
98
+ containsBlacklistedWords = true;
99
+ break;
100
+ }
101
+ }
102
+ if (!containsBlacklistedWords) {
103
+ issues.score += SCORING.NO_BLACK_LISTED_WORDS_SCORE;
104
+ }
105
+ else {
106
+ issues.messages.push({
107
+ code: stringsConfig.summary.BLACKLISTED_WORDS_CODE,
108
+ message: stringsConfig.summary.BLACKLISTED_WORDS_MESSAGE,
109
+ });
110
+ }
111
+ return issues;
112
+ };
113
+ exports.isValidSummary = isValidSummary;
114
+ //# sourceMappingURL=isValidSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidSummary.js","sourceRoot":"","sources":["../../../src/lib/summary/isValidSummary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ScoringRulesConfig } from '../../types';
2
+ declare const config: ScoringRulesConfig;
3
+ export default config;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config = {
4
+ // Scoring
5
+ SCORING: {
6
+ DEFAULT: {
7
+ WEB_MAP: {
8
+ EMPTY_STRING_SCORE: 0,
9
+ MIN_LENGTH_SCORE: 4,
10
+ NO_BLACK_LISTED_WORDS_SCORE: 2,
11
+ NO_BLACK_LISTED_CHARS_SCORE: 1,
12
+ MUST_EXIST_SCORE: 1,
13
+ },
14
+ WEB_SCENE: {
15
+ EMPTY_STRING_SCORE: 0,
16
+ MIN_LENGTH_SCORE: 4,
17
+ NO_BLACK_LISTED_WORDS_SCORE: 3,
18
+ NO_BLACK_LISTED_CHARS_SCORE: 1,
19
+ MUST_EXIST_SCORE: 1,
20
+ },
21
+ APPLICATION: {
22
+ EMPTY_STRING_SCORE: 0,
23
+ MIN_LENGTH_SCORE: 4,
24
+ NO_BLACK_LISTED_WORDS_SCORE: 3,
25
+ NO_BLACK_LISTED_CHARS_SCORE: 1,
26
+ MUST_EXIST_SCORE: 1,
27
+ },
28
+ },
29
+ INTERNATIONAL: {
30
+ WEB_MAP: {
31
+ EMPTY_STRING_SCORE: 0,
32
+ MIN_LENGTH_SCORE: 8,
33
+ NO_BLACK_LISTED_WORDS_SCORE: 0,
34
+ NO_BLACK_LISTED_CHARS_SCORE: 0,
35
+ MUST_EXIST_SCORE: 0,
36
+ },
37
+ WEB_SCENE: {
38
+ EMPTY_STRING_SCORE: 0,
39
+ MIN_LENGTH_SCORE: 0,
40
+ NO_BLACK_LISTED_WORDS_SCORE: 0,
41
+ NO_BLACK_LISTED_CHARS_SCORE: 0,
42
+ MUST_EXIST_SCORE: 9,
43
+ },
44
+ APPLICATION: {
45
+ EMPTY_STRING_SCORE: 0,
46
+ MIN_LENGTH_SCORE: 0,
47
+ NO_BLACK_LISTED_WORDS_SCORE: 0,
48
+ NO_BLACK_LISTED_CHARS_SCORE: 0,
49
+ MUST_EXIST_SCORE: 9,
50
+ },
51
+ },
52
+ },
53
+ };
54
+ exports.default = config;
55
+ //# sourceMappingURL=scoringRulesConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoringRulesConfig.js","sourceRoot":"","sources":["../../../src/lib/summary/scoringRulesConfig.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAuB;IAC/B,UAAU;IACV,OAAO,EAAE;QACL,OAAO,EAAE;YACL,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,2BAA2B,EAAE,CAAC;gBAC9B,2BAA2B,EAAE,CAAC;gBAC9B,gBAAgB,EAAE,CAAC;aACtB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,2BAA2B,EAAE,CAAC;gBAC9B,2BAA2B,EAAE,CAAC;gBAC9B,gBAAgB,EAAE,CAAC;aACtB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,2BAA2B,EAAE,CAAC;gBAC9B,2BAA2B,EAAE,CAAC;gBAC9B,gBAAgB,EAAE,CAAC;aACtB;SACJ;QAED,aAAa,EAAE;YACX,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,2BAA2B,EAAE,CAAC;gBAC9B,2BAA2B,EAAE,CAAC;gBAC9B,gBAAgB,EAAE,CAAC;aACtB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,2BAA2B,EAAE,CAAC;gBAC9B,2BAA2B,EAAE,CAAC;gBAC9B,gBAAgB,EAAE,CAAC;aACtB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,2BAA2B,EAAE,CAAC;gBAC9B,2BAA2B,EAAE,CAAC;gBAC9B,gBAAgB,EAAE,CAAC;aACtB;SACJ;KACJ;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { IItem, ValidationInfo } from '../../types';
2
+ /**
3
+ * Validate an item's tags
4
+ *
5
+ * ArcGIS Online specific rules
6
+ * - Maximum number of tags: 50
7
+ *
8
+ * Living Atlas specific rules:
9
+ * - Cannot be empty
10
+ * - Must have 3 or more tags
11
+ * - Cannot contain the tags "copy", "demo", "test", "eval"
12
+ *
13
+ */
14
+ export declare const isValidTags: (item: IItem, blacklist?: RegExp[]) => ValidationInfo;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isValidTags = void 0;
7
+ const scoringRulesConfig_1 = __importDefault(require("./scoringRulesConfig"));
8
+ const getScoringRules_1 = require("../util/getScoringRules");
9
+ const stringsConfig_1 = require("../util/stringsConfig");
10
+ const config_1 = require("../config");
11
+ const matches_1 = require("../util/matches");
12
+ /**
13
+ * Validate an item's tags
14
+ *
15
+ * ArcGIS Online specific rules
16
+ * - Maximum number of tags: 50
17
+ *
18
+ * Living Atlas specific rules:
19
+ * - Cannot be empty
20
+ * - Must have 3 or more tags
21
+ * - Cannot contain the tags "copy", "demo", "test", "eval"
22
+ *
23
+ */
24
+ const isValidTags = (item, blacklist = config_1.BLACKLIST) => {
25
+ const { tags } = item;
26
+ // scoring rules
27
+ const SCORING = (0, getScoringRules_1.getScoringRules)(item, scoringRulesConfig_1.default);
28
+ const stringsConfig = (0, stringsConfig_1.getStringsConfig)();
29
+ // issues
30
+ const issues = {
31
+ property: 'tags',
32
+ label: stringsConfig.tags.LABEL,
33
+ maxScore: SCORING.EMPTY_STRING_SCORE +
34
+ SCORING.MIN_LENGTH_SCORE +
35
+ SCORING.NO_BLACKLISTED_TAGS_SCORE,
36
+ score: SCORING.EMPTY_STRING_SCORE,
37
+ messages: [],
38
+ weight: stringsConfig.tags.WEIGHT,
39
+ critical: false,
40
+ };
41
+ if (!tags.length) {
42
+ issues.score = SCORING.EMPTY_STRING_SCORE;
43
+ issues.messages.push({
44
+ code: stringsConfig.tags.EMPTY_STRING_CODE,
45
+ message: stringsConfig.tags.EMPTY_STRING_MESSAGE,
46
+ });
47
+ return issues;
48
+ }
49
+ if (tags.length < 3) {
50
+ issues.messages.push({
51
+ code: '',
52
+ message: stringsConfig.tags.MINIMUM_NUM_TAGS_MESSAGE,
53
+ });
54
+ }
55
+ else {
56
+ issues.score += SCORING.MIN_LENGTH_SCORE;
57
+ }
58
+ let containsBlackListedWords = false;
59
+ for (const tag of tags) {
60
+ if (!tag) {
61
+ continue;
62
+ }
63
+ for (let j = 0; j < blacklist.length; j += 1) {
64
+ if ((0, matches_1.matches)(tag, blacklist[j])) {
65
+ containsBlackListedWords = true;
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ if (!containsBlackListedWords) {
71
+ issues.score += SCORING.NO_BLACKLISTED_TAGS_SCORE;
72
+ }
73
+ else {
74
+ issues.messages.push({
75
+ code: '',
76
+ message: stringsConfig.tags.BLACKLISTED_WORDS_MESSAGE,
77
+ });
78
+ }
79
+ return issues;
80
+ };
81
+ exports.isValidTags = isValidTags;
82
+ //# sourceMappingURL=isValidTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidTags.js","sourceRoot":"","sources":["../../../src/lib/tags/isValidTags.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAsD;AACtD,6DAGiC;AAEjC,yDAAyD;AACzD,sCAAsC;AACtC,6CAA0C;AAE1C;;;;;;;;;;;GAWG;AACI,MAAM,WAAW,GAAG,CACvB,IAAW,EACX,SAAS,GAAG,kBAAS,EACP,EAAE;IAChB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEtB,gBAAgB;IAChB,MAAM,OAAO,GAAG,IAAA,iCAAe,EAAC,IAAI,EAAE,4BAAkB,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAEzC,SAAS;IACT,MAAM,MAAM,GAAG;QACX,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK;QAC/B,QAAQ,EACJ,OAAO,CAAC,kBAAkB;YAC1B,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,yBAAyB;QACrC,KAAK,EAAE,OAAO,CAAC,kBAAkB;QACjC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM;QACjC,QAAQ,EAAE,KAAK;KAClB,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QACd,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB;YAC1C,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,oBAAoB;SACnD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACjB;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACjB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,wBAAwB;SACvD,CAAC,CAAC;KACN;SAAM;QACH,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC5C;IAED,IAAI,wBAAwB,GAAG,KAAK,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACpB,IAAI,CAAC,GAAG,EAAE;YACN,SAAS;SACZ;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC1C,IAAI,IAAA,iBAAO,EAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC5B,wBAAwB,GAAG,IAAI,CAAC;gBAChC,MAAM;aACT;SACJ;KACJ;IAED,IAAI,CAAC,wBAAwB,EAAE;QAC3B,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,yBAAyB,CAAC;KACrD;SAAM;QACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,yBAAyB;SACxD,CAAC,CAAC;KACN;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AArEW,QAAA,WAAW,eAqEtB"}
@@ -0,0 +1,3 @@
1
+ import { ScoringRulesConfig } from '../../types';
2
+ declare const config: ScoringRulesConfig;
3
+ export default config;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config = {
4
+ // Scoring
5
+ SCORING: {
6
+ DEFAULT: {
7
+ WEB_MAP: {
8
+ EMPTY_STRING_SCORE: 0,
9
+ MIN_LENGTH_SCORE: 8,
10
+ NO_BLACKLISTED_TAGS_SCORE: 2,
11
+ },
12
+ WEB_SCENE: {
13
+ EMPTY_STRING_SCORE: 0,
14
+ MIN_LENGTH_SCORE: 8,
15
+ NO_BLACKLISTED_TAGS_SCORE: 2,
16
+ },
17
+ APPLICATION: {
18
+ EMPTY_STRING_SCORE: 0,
19
+ MIN_LENGTH_SCORE: 8,
20
+ NO_BLACKLISTED_TAGS_SCORE: 2,
21
+ },
22
+ },
23
+ INTERNATIONAL: {
24
+ WEB_MAP: {
25
+ EMPTY_STRING_SCORE: 0,
26
+ MIN_LENGTH_SCORE: 8,
27
+ NO_BLACKLISTED_TAGS_SCORE: 2,
28
+ },
29
+ WEB_SCENE: {
30
+ EMPTY_STRING_SCORE: 0,
31
+ MIN_LENGTH_SCORE: 8,
32
+ NO_BLACKLISTED_TAGS_SCORE: 2,
33
+ },
34
+ APPLICATION: {
35
+ EMPTY_STRING_SCORE: 0,
36
+ MIN_LENGTH_SCORE: 8,
37
+ NO_BLACKLISTED_TAGS_SCORE: 2,
38
+ },
39
+ },
40
+ },
41
+ };
42
+ exports.default = config;
43
+ //# sourceMappingURL=scoringRulesConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoringRulesConfig.js","sourceRoot":"","sources":["../../../src/lib/tags/scoringRulesConfig.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAuB;IAC/B,UAAU;IACV,OAAO,EAAE;QACL,OAAO,EAAE;YACL,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,yBAAyB,EAAE,CAAC;aAC/B;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,yBAAyB,EAAE,CAAC;aAC/B;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,yBAAyB,EAAE,CAAC;aAC/B;SACJ;QAED,aAAa,EAAE;YACX,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,yBAAyB,EAAE,CAAC;aAC/B;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,yBAAyB,EAAE,CAAC;aAC/B;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,yBAAyB,EAAE,CAAC;aAC/B;SACJ;KACJ;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { IItem, ValidationInfo } from '../../types';
2
+ /**
3
+ * Validate an item's thumbnail
4
+ *
5
+ * Living Atlas specific rules:
6
+ * - thumbnail cannot be empty
7
+ * - Must have a custom thumbnail.
8
+ * - The thumbnail must be at least `286 x 190`
9
+ */
10
+ export declare const isValidThumbnail: (item: IItem) => ValidationInfo;