@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.
- package/LICENSE +101 -0
- package/README.md +196 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/accessInformation/isValidAccessInformation.d.ts +10 -0
- package/dist/lib/accessInformation/isValidAccessInformation.js +48 -0
- package/dist/lib/accessInformation/isValidAccessInformation.js.map +1 -0
- package/dist/lib/accessInformation/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/accessInformation/scoringRulesConfig.js +37 -0
- package/dist/lib/accessInformation/scoringRulesConfig.js.map +1 -0
- package/dist/lib/config.d.ts +6 -0
- package/dist/lib/config.js +61 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/description/isValidDescription.d.ts +18 -0
- package/dist/lib/description/isValidDescription.js +95 -0
- package/dist/lib/description/isValidDescription.js.map +1 -0
- package/dist/lib/description/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/description/scoringRulesConfig.js +49 -0
- package/dist/lib/description/scoringRulesConfig.js.map +1 -0
- package/dist/lib/layers/isValidLayerCount.d.ts +12 -0
- package/dist/lib/layers/isValidLayerCount.js +148 -0
- package/dist/lib/layers/isValidLayerCount.js.map +1 -0
- package/dist/lib/layers/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/layers/scoringRulesConfig.js +49 -0
- package/dist/lib/layers/scoringRulesConfig.js.map +1 -0
- package/dist/lib/licenseInfo/isValidLicenseInfo.d.ts +36 -0
- package/dist/lib/licenseInfo/isValidLicenseInfo.js +108 -0
- package/dist/lib/licenseInfo/isValidLicenseInfo.js.map +1 -0
- package/dist/lib/licenseInfo/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/licenseInfo/scoringRulesConfig.js +49 -0
- package/dist/lib/licenseInfo/scoringRulesConfig.js.map +1 -0
- package/dist/lib/sharing/isValidAccess.d.ts +22 -0
- package/dist/lib/sharing/isValidAccess.js +79 -0
- package/dist/lib/sharing/isValidAccess.js.map +1 -0
- package/dist/lib/sharing/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/sharing/scoringRulesConfig.js +49 -0
- package/dist/lib/sharing/scoringRulesConfig.js.map +1 -0
- package/dist/lib/ssl/isValidSSL.d.ts +14 -0
- package/dist/lib/ssl/isValidSSL.js +62 -0
- package/dist/lib/ssl/isValidSSL.js.map +1 -0
- package/dist/lib/ssl/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/ssl/scoringRulesConfig.js +43 -0
- package/dist/lib/ssl/scoringRulesConfig.js.map +1 -0
- package/dist/lib/summary/isValidSummary.d.ts +17 -0
- package/dist/lib/summary/isValidSummary.js +114 -0
- package/dist/lib/summary/isValidSummary.js.map +1 -0
- package/dist/lib/summary/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/summary/scoringRulesConfig.js +55 -0
- package/dist/lib/summary/scoringRulesConfig.js.map +1 -0
- package/dist/lib/tags/isValidTags.d.ts +14 -0
- package/dist/lib/tags/isValidTags.js +82 -0
- package/dist/lib/tags/isValidTags.js.map +1 -0
- package/dist/lib/tags/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/tags/scoringRulesConfig.js +43 -0
- package/dist/lib/tags/scoringRulesConfig.js.map +1 -0
- package/dist/lib/thumbnail/isValidThumbnail.d.ts +10 -0
- package/dist/lib/thumbnail/isValidThumbnail.js +90 -0
- package/dist/lib/thumbnail/isValidThumbnail.js.map +1 -0
- package/dist/lib/thumbnail/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/thumbnail/scoringRulesConfig.js +43 -0
- package/dist/lib/thumbnail/scoringRulesConfig.js.map +1 -0
- package/dist/lib/title/isValidTitle.d.ts +23 -0
- package/dist/lib/title/isValidTitle.js +128 -0
- package/dist/lib/title/isValidTitle.js.map +1 -0
- package/dist/lib/title/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/title/scoringRulesConfig.js +54 -0
- package/dist/lib/title/scoringRulesConfig.js.map +1 -0
- package/dist/lib/userProfileDescription/isValidUserProfileDescription.d.ts +23 -0
- package/dist/lib/userProfileDescription/isValidUserProfileDescription.js +138 -0
- package/dist/lib/userProfileDescription/isValidUserProfileDescription.js.map +1 -0
- package/dist/lib/userProfileDescription/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/userProfileDescription/scoringRulesConfig.js +61 -0
- package/dist/lib/userProfileDescription/scoringRulesConfig.js.map +1 -0
- package/dist/lib/userProfileName/isValidUserProfileName.d.ts +10 -0
- package/dist/lib/userProfileName/isValidUserProfileName.js +60 -0
- package/dist/lib/userProfileName/isValidUserProfileName.js.map +1 -0
- package/dist/lib/userProfileName/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/userProfileName/scoringRulesConfig.js +43 -0
- package/dist/lib/userProfileName/scoringRulesConfig.js.map +1 -0
- package/dist/lib/userProfileThumbnail/isValidUserProfileThumbnail.d.ts +22 -0
- package/dist/lib/userProfileThumbnail/isValidUserProfileThumbnail.js +62 -0
- package/dist/lib/userProfileThumbnail/isValidUserProfileThumbnail.js.map +1 -0
- package/dist/lib/userProfileThumbnail/scoringRulesConfig.d.ts +3 -0
- package/dist/lib/userProfileThumbnail/scoringRulesConfig.js +37 -0
- package/dist/lib/userProfileThumbnail/scoringRulesConfig.js.map +1 -0
- package/dist/lib/util/assertString.d.ts +11 -0
- package/dist/lib/util/assertString.js +20 -0
- package/dist/lib/util/assertString.js.map +1 -0
- package/dist/lib/util/contains.d.ts +7 -0
- package/dist/lib/util/contains.js +17 -0
- package/dist/lib/util/contains.js.map +1 -0
- package/dist/lib/util/getNumberOfStrings.d.ts +6 -0
- package/dist/lib/util/getNumberOfStrings.js +25 -0
- package/dist/lib/util/getNumberOfStrings.js.map +1 -0
- package/dist/lib/util/getScoringRules.d.ts +21 -0
- package/dist/lib/util/getScoringRules.js +99 -0
- package/dist/lib/util/getScoringRules.js.map +1 -0
- package/dist/lib/util/getThumbnailFileName.d.ts +15 -0
- package/dist/lib/util/getThumbnailFileName.js +26 -0
- package/dist/lib/util/getThumbnailFileName.js.map +1 -0
- package/dist/lib/util/isArcGISDomain.d.ts +6 -0
- package/dist/lib/util/isArcGISDomain.js +16 -0
- package/dist/lib/util/isArcGISDomain.js.map +1 -0
- package/dist/lib/util/isArcGISOnlineReservedThumbnailName.d.ts +6 -0
- package/dist/lib/util/isArcGISOnlineReservedThumbnailName.js +19 -0
- package/dist/lib/util/isArcGISOnlineReservedThumbnailName.js.map +1 -0
- package/dist/lib/util/isDefined.d.ts +8 -0
- package/dist/lib/util/isDefined.js +15 -0
- package/dist/lib/util/isDefined.js.map +1 -0
- package/dist/lib/util/isEmail.d.ts +6 -0
- package/dist/lib/util/isEmail.js +14 -0
- package/dist/lib/util/isEmail.js.map +1 -0
- package/dist/lib/util/isEmpty.d.ts +6 -0
- package/dist/lib/util/isEmpty.js +17 -0
- package/dist/lib/util/isEmpty.js.map +1 -0
- package/dist/lib/util/isFeatureCollection.d.ts +7 -0
- package/dist/lib/util/isFeatureCollection.js +13 -0
- package/dist/lib/util/isFeatureCollection.js.map +1 -0
- package/dist/lib/util/isHosted.d.ts +7 -0
- package/dist/lib/util/isHosted.js +17 -0
- package/dist/lib/util/isHosted.js.map +1 -0
- package/dist/lib/util/isSecureProtocol.d.ts +6 -0
- package/dist/lib/util/isSecureProtocol.js +16 -0
- package/dist/lib/util/isSecureProtocol.js.map +1 -0
- package/dist/lib/util/isUppercase.d.ts +4 -0
- package/dist/lib/util/isUppercase.js +14 -0
- package/dist/lib/util/isUppercase.js.map +1 -0
- package/dist/lib/util/isUrl.d.ts +4 -0
- package/dist/lib/util/isUrl.js +12 -0
- package/dist/lib/util/isUrl.js.map +1 -0
- package/dist/lib/util/matches.d.ts +12 -0
- package/dist/lib/util/matches.js +22 -0
- package/dist/lib/util/matches.js.map +1 -0
- package/dist/lib/util/stringsConfig.d.ts +17 -0
- package/dist/lib/util/stringsConfig.js +42 -0
- package/dist/lib/util/stringsConfig.js.map +1 -0
- package/dist/lib/util/toString.d.ts +11 -0
- package/dist/lib/util/toString.js +31 -0
- package/dist/lib/util/toString.js.map +1 -0
- package/dist/lib/validate/validate.d.ts +11 -0
- package/dist/lib/validate/validate.js +62 -0
- package/dist/lib/validate/validate.js.map +1 -0
- package/dist/locale/de.json +195 -0
- package/dist/locale/en.json +195 -0
- package/dist/locale/es.json +195 -0
- package/dist/locale/fr.json +195 -0
- package/dist/locale/ja.json +195 -0
- package/dist/locale/pt-br.json +195 -0
- package/dist/types/index.d.ts +114 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- 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,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,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,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;
|