@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,95 @@
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.isValidDescription = void 0;
7
+ const sanitize_html_1 = __importDefault(require("sanitize-html"));
8
+ const scoringRulesConfig_1 = __importDefault(require("./scoringRulesConfig"));
9
+ const assertString_1 = require("../util/assertString");
10
+ const getNumberOfStrings_1 = require("../util/getNumberOfStrings");
11
+ const isEmpty_1 = require("../util/isEmpty");
12
+ const getScoringRules_1 = require("../util/getScoringRules");
13
+ const stringsConfig_1 = require("../util/stringsConfig");
14
+ /**
15
+ * Validate an item's description. A valid description must meet these rules below:
16
+ *
17
+ * ArcGIS Online specific rules:
18
+ * - ArcGIS Online permits this field to be left emtpy. This field supprts markup.
19
+ *
20
+ * Living Atlas specific rule:
21
+ * - Cannot be empty
22
+ * - Must contain at least one link
23
+ * - Must have 48 or more words
24
+ *
25
+ * Living Atlas specific rules (international):
26
+ * - Cannot be empty
27
+ * - Must contain at least one link
28
+ *
29
+ */
30
+ const isValidDescription = (item) => {
31
+ const { description } = item;
32
+ // scoring rules locale
33
+ const culture = (0, getScoringRules_1.getScoringRulesLocale)(item);
34
+ // scoring rules
35
+ const SCORING = (0, getScoringRules_1.getScoringRules)(item, scoringRulesConfig_1.default);
36
+ const stringsConfig = (0, stringsConfig_1.getStringsConfig)();
37
+ const issues = {
38
+ property: 'description',
39
+ label: stringsConfig.description.LABEL,
40
+ maxScore: SCORING.EMPTY_STRING_SCORE +
41
+ SCORING.MUST_EXIST_SCORE +
42
+ SCORING.MIN_LENGTH_SCORE +
43
+ SCORING.HAS_LINK_SCORE,
44
+ score: SCORING.EMPTY_STRING_SCORE,
45
+ messages: [],
46
+ weight: stringsConfig.description.WEIGHT,
47
+ critical: true,
48
+ };
49
+ // remove html tags
50
+ const sanitizedStr = (0, sanitize_html_1.default)(description, {
51
+ allowedTags: [],
52
+ });
53
+ // check if the item's property is the right type (String)
54
+ // check if the item's property is null or undefined
55
+ if (!(0, assertString_1.assertString)(description) ||
56
+ (0, isEmpty_1.isEmpty)(description) ||
57
+ (0, isEmpty_1.isEmpty)(sanitizedStr)) {
58
+ issues.label = stringsConfig.description.EMPTY_STRING_MESSAGE;
59
+ issues.score = SCORING.EMPTY_STRING_SCORE;
60
+ issues.messages.push({
61
+ code: stringsConfig.description.EMPTY_STRING_CODE,
62
+ message: stringsConfig.description.EMPTY_STRING_MESSAGE,
63
+ });
64
+ return issues;
65
+ }
66
+ issues.score = SCORING.MUST_EXIST_SCORE;
67
+ // The search() method searches a string for a specified value, and returns the position of the match.
68
+ // The search value can be string or a regular expression.
69
+ // This method returns -1 if no match is found.
70
+ if (description.search('href') < 0) {
71
+ issues.messages.push({
72
+ code: stringsConfig.description.CONTAINS_LINKS_CODE,
73
+ message: stringsConfig.description.CONTAINS_LINKS_MESSAGE,
74
+ });
75
+ }
76
+ else {
77
+ issues.score += SCORING.HAS_LINK_SCORE;
78
+ }
79
+ // For non-international items, check if description contains 48 or more words
80
+ if (culture === 'en' && (0, getNumberOfStrings_1.getNumberOfStrings)(description) <= 48) {
81
+ issues.messages.push({
82
+ code: stringsConfig.description.MINIMUM_WORD_COUNT_CODE,
83
+ message: stringsConfig.description.MINIMUM_WORD_COUNT_MESSAGE,
84
+ });
85
+ }
86
+ else {
87
+ issues.score += SCORING.MIN_LENGTH_SCORE;
88
+ }
89
+ if (culture === 'international') {
90
+ issues.critical = false;
91
+ }
92
+ return issues;
93
+ };
94
+ exports.isValidDescription = isValidDescription;
95
+ //# sourceMappingURL=isValidDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidDescription.js","sourceRoot":"","sources":["../../../src/lib/description/isValidDescription.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyC;AACzC,8EAAsD;AACtD,uDAAoD;AACpD,mEAAgE;AAChE,6CAA0C;AAC1C,6DAGiC;AAEjC,yDAAyD;AAEzD;;;;;;;;;;;;;;;GAeG;AACI,MAAM,kBAAkB,GAAG,CAAC,IAAW,EAAkB,EAAE;IAC9D,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,IAAI,CAAC,CAAC;IAE5C,gBAAgB;IAChB,MAAM,OAAO,GAAG,IAAA,iCAAe,EAAC,IAAI,EAAE,4BAAkB,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,IAAA,gCAAgB,GAAE,CAAC;IAEzC,MAAM,MAAM,GAAmB;QAC3B,QAAQ,EAAE,aAAa;QACvB,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK;QACtC,QAAQ,EACJ,OAAO,CAAC,kBAAkB;YAC1B,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,cAAc;QAC1B,KAAK,EAAE,OAAO,CAAC,kBAAkB;QACjC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,MAAM;QACxC,QAAQ,EAAE,IAAI;KACjB,CAAC;IAEF,mBAAmB;IACnB,MAAM,YAAY,GAAG,IAAA,uBAAY,EAAC,WAAW,EAAE;QAC3C,WAAW,EAAE,EAAE;KAClB,CAAC,CAAC;IAEH,0DAA0D;IAC1D,oDAAoD;IACpD,IACI,CAAC,IAAA,2BAAY,EAAC,WAAW,CAAC;QAC1B,IAAA,iBAAO,EAAC,WAAW,CAAC;QACpB,IAAA,iBAAO,EAAC,YAAY,CAAC,EACvB;QACE,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,oBAAoB,CAAC;QAC9D,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,iBAAiB;YACjD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,oBAAoB;SAC1D,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACjB;IAED,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAExC,sGAAsG;IACtG,0DAA0D;IAC1D,+CAA+C;IAC/C,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,mBAAmB;YACnD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,sBAAsB;SAC5D,CAAC,CAAC;KACN;SAAM;QACH,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;KAC1C;IAED,8EAA8E;IAC9E,IAAI,OAAO,KAAK,IAAI,IAAI,IAAA,uCAAkB,EAAC,WAAW,CAAC,IAAI,EAAE,EAAE;QAC3D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,uBAAuB;YACvD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,0BAA0B;SAChE,CAAC,CAAC;KACN;SAAM;QACH,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC5C;IAED,IAAI,OAAO,KAAK,eAAe,EAAE;QAC7B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;KAC3B;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AA5EW,QAAA,kBAAkB,sBA4E7B"}
@@ -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
+ MUST_EXIST_SCORE: 1,
10
+ MIN_LENGTH_SCORE: 5,
11
+ HAS_LINK_SCORE: 2,
12
+ },
13
+ WEB_SCENE: {
14
+ EMPTY_STRING_SCORE: 0,
15
+ MUST_EXIST_SCORE: 1,
16
+ MIN_LENGTH_SCORE: 6,
17
+ HAS_LINK_SCORE: 2,
18
+ },
19
+ APPLICATION: {
20
+ EMPTY_STRING_SCORE: 0,
21
+ MUST_EXIST_SCORE: 1,
22
+ MIN_LENGTH_SCORE: 6,
23
+ HAS_LINK_SCORE: 2,
24
+ },
25
+ },
26
+ INTERNATIONAL: {
27
+ WEB_MAP: {
28
+ EMPTY_STRING_SCORE: 0,
29
+ MUST_EXIST_SCORE: 6,
30
+ MIN_LENGTH_SCORE: 0,
31
+ HAS_LINK_SCORE: 2,
32
+ },
33
+ WEB_SCENE: {
34
+ EMPTY_STRING_SCORE: 0,
35
+ MUST_EXIST_SCORE: 7,
36
+ MIN_LENGTH_SCORE: 0,
37
+ HAS_LINK_SCORE: 2,
38
+ },
39
+ APPLICATION: {
40
+ EMPTY_STRING_SCORE: 0,
41
+ MUST_EXIST_SCORE: 7,
42
+ MIN_LENGTH_SCORE: 0,
43
+ HAS_LINK_SCORE: 2,
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/description/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,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;SACJ;QAED,aAAa,EAAE;YACX,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;SACJ;KACJ;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { IItem, ValidationInfo } from '../../types';
2
+ /**
3
+ * Validates the number of layers of an item.
4
+ *
5
+ * **IMPORTANT**: The `data` object is no longer included in the item JSON. It has to be fetched via a separate request
6
+ * (e.g., `https://www.arcgis.com/sharing/rest/content/items/ITEM_ID/data?f=json`).
7
+ *
8
+ * Currently, all items are assigned the score `LAYER_COUNT_BEST_SCORE` because `numLayers` is always 0, which is less than 3.
9
+ * This module will need to be updated in a future release to score items using the actual `data` object.
10
+ *
11
+ */
12
+ export declare const isValidLayerCount: (item: IItem) => ValidationInfo;
@@ -0,0 +1,148 @@
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.isValidLayerCount = 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 isDefined_1 = require("../util/isDefined");
11
+ /**
12
+ * Validates the number of layers of an item.
13
+ *
14
+ * **IMPORTANT**: The `data` object is no longer included in the item JSON. It has to be fetched via a separate request
15
+ * (e.g., `https://www.arcgis.com/sharing/rest/content/items/ITEM_ID/data?f=json`).
16
+ *
17
+ * Currently, all items are assigned the score `LAYER_COUNT_BEST_SCORE` because `numLayers` is always 0, which is less than 3.
18
+ * This module will need to be updated in a future release to score items using the actual `data` object.
19
+ *
20
+ */
21
+ const isValidLayerCount = (item) => {
22
+ let baseMaps = [];
23
+ let operationalLayers = [];
24
+ let layers = [];
25
+ let numLayers = 0;
26
+ const itemType = item.type;
27
+ // scoring rules
28
+ const SCORING = (0, getScoringRules_1.getScoringRules)(item, scoringRulesConfig_1.default);
29
+ const stringsConfig = (0, stringsConfig_1.getStringsConfig)();
30
+ const issues = {
31
+ property: 'layers',
32
+ label: stringsConfig.layers.LABEL,
33
+ maxScore: SCORING.EMPTY_STRING_SCORE + SCORING.LAYER_COUNT_BEST_SCORE,
34
+ score: SCORING.EMPTY_STRING_SCORE,
35
+ messages: [],
36
+ weight: stringsConfig.layers.WEIGHT,
37
+ critical: false,
38
+ };
39
+ switch (itemType) {
40
+ case 'Feature Collection':
41
+ if ((0, isDefined_1.isDefined)(item === null || item === void 0 ? void 0 : item.data)) {
42
+ if ((0, isDefined_1.isDefined)(item.data.layers)) {
43
+ item.data.layers.forEach((layer) => {
44
+ numLayers += layer.featureSet.features.length;
45
+ });
46
+ }
47
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
48
+ }
49
+ else {
50
+ numLayers = 1;
51
+ }
52
+ break;
53
+ case 'Feature Service':
54
+ if ((0, isDefined_1.isDefined)(item.data)) {
55
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
56
+ numLayers = layers.length;
57
+ }
58
+ else {
59
+ numLayers = 1;
60
+ }
61
+ break;
62
+ case 'Image Service':
63
+ if ((0, isDefined_1.isDefined)(item.data)) {
64
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
65
+ numLayers = layers.length;
66
+ }
67
+ else {
68
+ numLayers = 1;
69
+ }
70
+ break;
71
+ case 'Map Service':
72
+ if ((0, isDefined_1.isDefined)(item.data)) {
73
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
74
+ numLayers = layers.length;
75
+ }
76
+ else {
77
+ numLayers = 1;
78
+ }
79
+ break;
80
+ case 'Scene Service':
81
+ if ((0, isDefined_1.isDefined)(item.data)) {
82
+ // operationalLayers = isDefined(item.data.operationalLayers) ? item.data.operationalLayers : [];
83
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
84
+ numLayers = layers.length;
85
+ }
86
+ break;
87
+ case 'Vector Tile Service':
88
+ if ((0, isDefined_1.isDefined)(item.data)) {
89
+ operationalLayers = (0, isDefined_1.isDefined)(item.data.operationalLayers)
90
+ ? item.data.operationalLayers
91
+ : [];
92
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
93
+ }
94
+ numLayers = 0;
95
+ break;
96
+ case 'Web Map':
97
+ if ((0, isDefined_1.isDefined)(item.data)) {
98
+ baseMaps = (0, isDefined_1.isDefined)(item.data.baseMap)
99
+ ? item.data.baseMap.baseMapLayers
100
+ : [];
101
+ operationalLayers = (0, isDefined_1.isDefined)(item.data.operationalLayers)
102
+ ? item.data.operationalLayers
103
+ : [];
104
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
105
+ // sometimes operational layers returns false
106
+ numLayers =
107
+ baseMaps.length +
108
+ (operationalLayers.length ? operationalLayers.length : 0) +
109
+ layers.length;
110
+ }
111
+ else {
112
+ numLayers = 1;
113
+ }
114
+ break;
115
+ case 'Web Scene':
116
+ if ((0, isDefined_1.isDefined)(item.data)) {
117
+ layers = (0, isDefined_1.isDefined)(item.data.layers) ? item.data.layers : [];
118
+ numLayers = layers.length;
119
+ }
120
+ break;
121
+ default:
122
+ break;
123
+ }
124
+ if (numLayers <= 3) {
125
+ issues.score = SCORING.LAYER_COUNT_BEST_SCORE;
126
+ issues.messages.push({
127
+ code: stringsConfig.layers.BEST_CODE,
128
+ message: stringsConfig.layers.BEST_MESSAGE,
129
+ });
130
+ }
131
+ if (numLayers > 3 && numLayers <= 7) {
132
+ issues.score = SCORING.LAYER_COUNT_BETTER_SCORE;
133
+ issues.messages.push({
134
+ code: stringsConfig.layers.BETTER_CODE,
135
+ message: stringsConfig.layers.BETTER_MESSAGE,
136
+ });
137
+ }
138
+ if (numLayers > 7) {
139
+ issues.score = SCORING.LAYER_COUNT_GOOD_SCORE;
140
+ issues.messages.push({
141
+ code: stringsConfig.layers.GOOD_CODE,
142
+ message: stringsConfig.layers.GOOD_MESSAGE,
143
+ });
144
+ }
145
+ return issues;
146
+ };
147
+ exports.isValidLayerCount = isValidLayerCount;
148
+ //# sourceMappingURL=isValidLayerCount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidLayerCount.js","sourceRoot":"","sources":["../../../src/lib/layers/isValidLayerCount.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,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
+ LAYER_COUNT_BEST_SCORE: 8,
10
+ LAYER_COUNT_BETTER_SCORE: 4,
11
+ LAYER_COUNT_GOOD_SCORE: 1,
12
+ },
13
+ WEB_SCENE: {
14
+ EMPTY_STRING_SCORE: 0,
15
+ LAYER_COUNT_BEST_SCORE: 0,
16
+ LAYER_COUNT_BETTER_SCORE: 0,
17
+ LAYER_COUNT_GOOD_SCORE: 0,
18
+ },
19
+ APPLICATION: {
20
+ EMPTY_STRING_SCORE: 0,
21
+ LAYER_COUNT_BEST_SCORE: 0,
22
+ LAYER_COUNT_BETTER_SCORE: 0,
23
+ LAYER_COUNT_GOOD_SCORE: 0,
24
+ },
25
+ },
26
+ INTERNATIONAL: {
27
+ WEB_MAP: {
28
+ EMPTY_STRING_SCORE: 0,
29
+ LAYER_COUNT_BEST_SCORE: 8,
30
+ LAYER_COUNT_BETTER_SCORE: 4,
31
+ LAYER_COUNT_GOOD_SCORE: 1,
32
+ },
33
+ WEB_SCENE: {
34
+ EMPTY_STRING_SCORE: 0,
35
+ LAYER_COUNT_BEST_SCORE: 0,
36
+ LAYER_COUNT_BETTER_SCORE: 0,
37
+ LAYER_COUNT_GOOD_SCORE: 0,
38
+ },
39
+ APPLICATION: {
40
+ EMPTY_STRING_SCORE: 0,
41
+ LAYER_COUNT_BEST_SCORE: 0,
42
+ LAYER_COUNT_BETTER_SCORE: 0,
43
+ LAYER_COUNT_GOOD_SCORE: 0,
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/layers/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,sBAAsB,EAAE,CAAC;gBACzB,wBAAwB,EAAE,CAAC;gBAC3B,sBAAsB,EAAE,CAAC;aAC5B;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,sBAAsB,EAAE,CAAC;gBACzB,wBAAwB,EAAE,CAAC;gBAC3B,sBAAsB,EAAE,CAAC;aAC5B;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,sBAAsB,EAAE,CAAC;gBACzB,wBAAwB,EAAE,CAAC;gBAC3B,sBAAsB,EAAE,CAAC;aAC5B;SACJ;QAED,aAAa,EAAE;YACX,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,sBAAsB,EAAE,CAAC;gBACzB,wBAAwB,EAAE,CAAC;gBAC3B,sBAAsB,EAAE,CAAC;aAC5B;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,sBAAsB,EAAE,CAAC;gBACzB,wBAAwB,EAAE,CAAC;gBAC3B,sBAAsB,EAAE,CAAC;aAC5B;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,sBAAsB,EAAE,CAAC;gBACzB,wBAAwB,EAAE,CAAC;gBAC3B,sBAAsB,EAAE,CAAC;aAC5B;SACJ;KACJ;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { IItem, ValidationInfo } from '../../types';
2
+ /**
3
+ * @function isValidLicenseInfo
4
+ *
5
+ * @summary Validate an item's "Terms of Use (license info)"
6
+ *
7
+ * @description
8
+ * Validate an item's "Terms of Use (license info)"
9
+ * <br />
10
+ * <b>item property:</b> <code>licenseInfo</code>
11
+ * <br />
12
+ *
13
+ * <b>Description</b><br />
14
+ * Any license information or restrictions.
15
+ * <br />
16
+ *
17
+ * <b>ArcGIS Online specific rules</b><br />
18
+ * Not available
19
+ * <br />
20
+ *
21
+ * <b>Living Atlas specific</b>
22
+ * <li>Cannot be empty</li>
23
+ * <li>Must have 2 or more words</li>
24
+ * <li>Must contain at least one link</li>
25
+ * <br />
26
+ *
27
+ * <b>Living Atlas specific (international)</b>
28
+ * <li>Must contain at least one link</li>
29
+ *
30
+ * @param {JSON} item - ArcGIS Online item
31
+ * @return {JSON} JSON object containing the results
32
+ *
33
+ * @version 1.2.2
34
+ * @copyright Esri, 2022
35
+ */
36
+ export declare const isValidLicenseInfo: (item: IItem) => ValidationInfo;
@@ -0,0 +1,108 @@
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.isValidLicenseInfo = void 0;
7
+ const sanitize_html_1 = __importDefault(require("sanitize-html"));
8
+ const scoringRulesConfig_1 = __importDefault(require("./scoringRulesConfig"));
9
+ const getScoringRules_1 = require("../util/getScoringRules");
10
+ const stringsConfig_1 = require("../util/stringsConfig");
11
+ const assertString_1 = require("../util/assertString");
12
+ const isEmpty_1 = require("../util/isEmpty");
13
+ const getNumberOfStrings_1 = require("../util/getNumberOfStrings");
14
+ /**
15
+ * @function isValidLicenseInfo
16
+ *
17
+ * @summary Validate an item's "Terms of Use (license info)"
18
+ *
19
+ * @description
20
+ * Validate an item's "Terms of Use (license info)"
21
+ * <br />
22
+ * <b>item property:</b> <code>licenseInfo</code>
23
+ * <br />
24
+ *
25
+ * <b>Description</b><br />
26
+ * Any license information or restrictions.
27
+ * <br />
28
+ *
29
+ * <b>ArcGIS Online specific rules</b><br />
30
+ * Not available
31
+ * <br />
32
+ *
33
+ * <b>Living Atlas specific</b>
34
+ * <li>Cannot be empty</li>
35
+ * <li>Must have 2 or more words</li>
36
+ * <li>Must contain at least one link</li>
37
+ * <br />
38
+ *
39
+ * <b>Living Atlas specific (international)</b>
40
+ * <li>Must contain at least one link</li>
41
+ *
42
+ * @param {JSON} item - ArcGIS Online item
43
+ * @return {JSON} JSON object containing the results
44
+ *
45
+ * @version 1.2.2
46
+ * @copyright Esri, 2022
47
+ */
48
+ const isValidLicenseInfo = (item) => {
49
+ const { licenseInfo } = item;
50
+ // scoring rules locale
51
+ const culture = (0, getScoringRules_1.getScoringRulesLocale)(item);
52
+ // scoring rules
53
+ const SCORING = (0, getScoringRules_1.getScoringRules)(item, scoringRulesConfig_1.default);
54
+ const stringsConfig = (0, stringsConfig_1.getStringsConfig)();
55
+ const issues = {
56
+ property: 'licenseInfo',
57
+ label: stringsConfig.licenseInfo.LABEL,
58
+ maxScore: SCORING.EMPTY_STRING_SCORE +
59
+ SCORING.MUST_EXIST_SCORE +
60
+ SCORING.MIN_LENGTH_SCORE +
61
+ SCORING.HAS_LINK_SCORE,
62
+ score: SCORING.EMPTY_STRING_SCORE,
63
+ messages: [],
64
+ weight: stringsConfig.licenseInfo.WEIGHT,
65
+ critical: false,
66
+ };
67
+ // remove html tags
68
+ const sanitizedStr = (0, sanitize_html_1.default)(licenseInfo, {
69
+ allowedTags: [],
70
+ });
71
+ // check if the item's property is the right type (String)
72
+ // check if the item's property is null or undefined
73
+ if (!(0, assertString_1.assertString)(licenseInfo) ||
74
+ (0, isEmpty_1.isEmpty)(licenseInfo) ||
75
+ (0, isEmpty_1.isEmpty)(sanitizedStr)) {
76
+ issues.score = SCORING.EMPTY_STRING_SCORE;
77
+ issues.messages.push({
78
+ code: stringsConfig.licenseInfo.EMPTY_STRING_CODE,
79
+ message: stringsConfig.licenseInfo.EMPTY_STRING_MESSAGE,
80
+ });
81
+ return issues;
82
+ }
83
+ issues.score = SCORING.MUST_EXIST_SCORE;
84
+ // The search() method searches a string for a specified value, and returns the position of the match.
85
+ // The search value can be string or a regular expression.
86
+ // This method returns -1 if no match is found.
87
+ if (licenseInfo.search('href') < 0) {
88
+ issues.messages.push({
89
+ code: stringsConfig.licenseInfo.CONTAINS_NO_LINKS_CODE,
90
+ message: stringsConfig.licenseInfo.CONTAINS_NO_LINKS_MESSAGE,
91
+ });
92
+ }
93
+ else {
94
+ issues.score += SCORING.HAS_LINK_SCORE;
95
+ }
96
+ if (culture === 'en' && (0, getNumberOfStrings_1.getNumberOfStrings)(sanitizedStr) < 2) {
97
+ issues.messages.push({
98
+ code: stringsConfig.licenseInfo.MINIMUM_WORD_COUNT_CODE,
99
+ message: stringsConfig.licenseInfo.MINIMUM_WORD_COUNT_MESSAGE,
100
+ });
101
+ }
102
+ else {
103
+ issues.score += SCORING.MIN_LENGTH_SCORE;
104
+ }
105
+ return issues;
106
+ };
107
+ exports.isValidLicenseInfo = isValidLicenseInfo;
108
+ //# sourceMappingURL=isValidLicenseInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidLicenseInfo.js","sourceRoot":"","sources":["../../../src/lib/licenseInfo/isValidLicenseInfo.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAyC;AACzC,8EAAsD;AACtD,6DAGiC;AAEjC,yDAAyD;AACzD,uDAAoD;AACpD,6CAA0C;AAC1C,mEAAgE;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACI,MAAM,kBAAkB,GAAG,CAAC,IAAW,EAAkB,EAAE;IAC9D,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,IAAI,CAAC,CAAC;IAE5C,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,aAAa;QACvB,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK;QACtC,QAAQ,EACJ,OAAO,CAAC,kBAAkB;YAC1B,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,cAAc;QAC1B,KAAK,EAAE,OAAO,CAAC,kBAAkB;QACjC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,MAAM;QACxC,QAAQ,EAAE,KAAK;KAClB,CAAC;IAEF,mBAAmB;IACnB,MAAM,YAAY,GAAG,IAAA,uBAAY,EAAC,WAAW,EAAE;QAC3C,WAAW,EAAE,EAAE;KAClB,CAAC,CAAC;IAEH,0DAA0D;IAC1D,oDAAoD;IACpD,IACI,CAAC,IAAA,2BAAY,EAAC,WAAW,CAAC;QAC1B,IAAA,iBAAO,EAAC,WAAW,CAAC;QACpB,IAAA,iBAAO,EAAC,YAAY,CAAC,EACvB;QACE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,iBAAiB;YACjD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,oBAAoB;SAC1D,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;KACjB;IAED,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAExC,sGAAsG;IACtG,0DAA0D;IAC1D,+CAA+C;IAC/C,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,sBAAsB;YACtD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,yBAAyB;SAC/D,CAAC,CAAC;KACN;SAAM;QACH,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;KAC1C;IAED,IAAI,OAAO,KAAK,IAAI,IAAI,IAAA,uCAAkB,EAAC,YAAY,CAAC,GAAG,CAAC,EAAE;QAC1D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,uBAAuB;YACvD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,0BAA0B;SAChE,CAAC,CAAC;KACN;SAAM;QACH,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC5C;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAtEW,QAAA,kBAAkB,sBAsE7B"}
@@ -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
+ MUST_EXIST_SCORE: 2,
10
+ MIN_LENGTH_SCORE: 4,
11
+ HAS_LINK_SCORE: 2,
12
+ },
13
+ WEB_SCENE: {
14
+ EMPTY_STRING_SCORE: 0,
15
+ MUST_EXIST_SCORE: 1,
16
+ MIN_LENGTH_SCORE: 6,
17
+ HAS_LINK_SCORE: 2,
18
+ },
19
+ APPLICATION: {
20
+ EMPTY_STRING_SCORE: 0,
21
+ MUST_EXIST_SCORE: 1,
22
+ MIN_LENGTH_SCORE: 6,
23
+ HAS_LINK_SCORE: 2,
24
+ },
25
+ },
26
+ INTERNATIONAL: {
27
+ WEB_MAP: {
28
+ EMPTY_STRING_SCORE: 0,
29
+ MUST_EXIST_SCORE: 6,
30
+ MIN_LENGTH_SCORE: 0,
31
+ HAS_LINK_SCORE: 2,
32
+ },
33
+ WEB_SCENE: {
34
+ EMPTY_STRING_SCORE: 0,
35
+ MUST_EXIST_SCORE: 7,
36
+ MIN_LENGTH_SCORE: 0,
37
+ HAS_LINK_SCORE: 2,
38
+ },
39
+ APPLICATION: {
40
+ EMPTY_STRING_SCORE: 0,
41
+ MUST_EXIST_SCORE: 7,
42
+ MIN_LENGTH_SCORE: 0,
43
+ HAS_LINK_SCORE: 2,
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/licenseInfo/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,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;SACJ;QAED,aAAa,EAAE;YACX,OAAO,EAAE;gBACL,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,SAAS,EAAE;gBACP,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;YACD,WAAW,EAAE;gBACT,kBAAkB,EAAE,CAAC;gBACrB,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,EAAE,CAAC;aACpB;SACJ;KACJ;CACJ,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { IItem, ValidationInfo } from '../../types';
2
+ /**
3
+ * 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.
4
+ *
5
+ * When adding a item to ArcGIS Online, you have the option of leaving it unshared or,
6
+ * depending on your sharing privileges and the security settings of your organization, sharing items with groups, your
7
+ * organization, or everyone.
8
+ *
9
+ * You can also share an item with a combination of your organization, groups, and everyone.
10
+ *
11
+ * If you choose not to share the item, only you (and organization members with privileges to view content owned by
12
+ * other members) can access the item until you share it. Until they are shared, your maps, apps, and other items are
13
+ * not available to others—for example, they do not appear in search results and aren't part of any group.
14
+ *
15
+ * Living Atlas specific:
16
+ * - Must be public
17
+ *
18
+ * Living Atlas specific (international)
19
+ * - Must be public
20
+ *
21
+ */
22
+ export declare const isValidAccess: (item: IItem) => ValidationInfo;