@researchdatabox/sails-ng-common 0.0.1-beta.10173 → 0.0.1-beta.10213

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.
@@ -20,7 +20,7 @@ function escapeHtmlText(value) {
20
20
  * @param value The encoded string.
21
21
  */
22
22
  function decodeBase64(value) {
23
- const binString = atob(value);
23
+ const binString = atob(String(value ?? ""));
24
24
  const bytes = Uint8Array.from(binString, (m) => {
25
25
  const cp = m.codePointAt(0);
26
26
  if (cp === undefined) {
@@ -35,8 +35,8 @@ function decodeBase64(value) {
35
35
  * @param value The text to convert to base64.
36
36
  */
37
37
  function encodeBase64(value) {
38
- const bytes = new TextEncoder().encode(value);
38
+ const bytes = new TextEncoder().encode(String(value ?? ""));
39
39
  const binString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
40
40
  return btoa(binString);
41
41
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2h0bWwtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLHdDQU9DO0FBTUQsb0NBVUM7QUFNRCxvQ0FNQztBQXZDRDs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYztJQUN6QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO1NBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1NBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1NBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO1NBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUFhO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEtBQWE7SUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUMzQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUMzQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMifQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2h0bWwtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLHdDQU9DO0FBTUQsb0NBVUM7QUFNRCxvQ0FNQztBQXZDRDs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYztJQUN6QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO1NBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1NBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO1NBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO1NBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUFhO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUM3QyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUFhO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQzNDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQzNCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekIsQ0FBQyJ9
@@ -13,6 +13,7 @@ exports.jsonataEvaluateFunc = jsonataEvaluateFunc;
13
13
  const jsonata_1 = __importDefault(require("jsonata"));
14
14
  const luxon_1 = require("luxon");
15
15
  const html_helpers_1 = require("./html-helpers");
16
+ const translation_helpers_1 = require("./translation-helpers");
16
17
  /**
17
18
  * Format a date using the luxon library.
18
19
  * @param value The value to format.
@@ -78,6 +79,10 @@ function jsonataDecodeCompile(expressionEncoded, options) {
78
79
  */
79
80
  function jsonataCompile(expression, options) {
80
81
  const compiled = (0, jsonata_1.default)(expression, options);
82
+ // Register jsonata functions.
83
+ // The function signatures are used on purpose to restrict the arguments,
84
+ // so invalid input types are clear instead of hidden.
85
+ // Callers of the jsonata helper functions must be prepared for possible parse errors and input type errors.
81
86
  // Disable JSONata's dynamic eval function so browser/server validators only run the configured expression.
82
87
  compiled.registerFunction('eval', () => { throw new Error('Attempted to invoke eval'); });
83
88
  // Register a function for formatting date time values.
@@ -86,6 +91,10 @@ function jsonataCompile(expression, options) {
86
91
  // Third param 'sourceFormat': string, null, optional
87
92
  // Return type: string
88
93
  compiled.registerFunction('luxonFormatDate', luxonFormatDate, '<(snlo)(sl)(sl)?:s>');
94
+ // Register a function for guessing name parts.
95
+ // First param 'value': string, null
96
+ // Return type: object
97
+ compiled.registerFunction('guessNameParts', translation_helpers_1.guessNameParts, '<(sl):o>');
89
98
  // TODO: consider registering a function for translations
90
99
  // TODO: consider replacing regex with google's re2?
91
100
  return compiled;
@@ -103,4 +112,4 @@ function jsonataEvaluateFunc(expression, bindings) {
103
112
  return await jsonataEvaluate(compiled, value, bindings);
104
113
  };
105
114
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmF0YS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25hdGEtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWVBLDBDQWdDQztBQU1ELDBEQUVDO0FBV0Qsb0RBRUM7QUFXRCx3Q0FpQkM7QUFFRCwwQ0FNQztBQUVELDhEQU9DO0FBRUQsa0RBS0M7QUF4SEQsc0RBQThCO0FBQzlCLGlDQUFpQztBQUNqQyxpREFBMEQ7QUFPMUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQzdCLEtBQWdELEVBQ2hELE1BQWlDLEVBQ2pDLFlBQTRCO0lBRTVCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMxRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNsRixNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksS0FBSyxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoRyxNQUFNLGFBQWEsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9FLElBQUksUUFBa0IsQ0FBQztJQUV2QixJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUMxQixRQUFRLEdBQUcsZ0JBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckMsUUFBUSxH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
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmF0YS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25hdGEtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWdCQSwwQ0FnQ0M7QUFNRCwwREFFQztBQVdELG9EQUVDO0FBV0Qsd0NBMkJDO0FBRUQsMENBTUM7QUFFRCw4REFPQztBQUVELGtEQUtDO0FBbklELHNEQUE4QjtBQUM5QixpQ0FBaUM7QUFDakMsaURBQTBEO0FBQzFELCtEQUFxRDtBQU9yRDs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsS0FBZ0QsRUFDaEQsTUFBaUMsRUFDakMsWUFBNEI7SUFFNUIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzFELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ2xGLE1BQU0sV0FBVyxHQUFHLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hHLE1BQU0sYUFBYSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0UsSUFBSSxRQUFrQixDQUFDO0lBRXZCLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzFCLFFBQVEsR0FBRyxnQkFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FB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
@@ -6,5 +6,21 @@
6
6
  * to remove the need for this method.
7
7
  *
8
8
  * @param key The string to guess as natual language or not.
9
+ * @return True if the key is likely natural language and not a translation key.
9
10
  */
10
11
  export declare function isLikelyNaturalLanguage(key: string | null | undefined): boolean;
12
+ /**
13
+ * Guess at the parts of a full name.
14
+ *
15
+ * TODO: This is best-effort only, and is likely to be incorrect.
16
+ * The long-term goal is to not have to guess at names.
17
+ * This is needed while some form fields prompt for full names and others need parts of names.
18
+ *
19
+ * @param value Guess at the parts of this full name.
20
+ * @return Object with guessed values for full, first, and last names.
21
+ */
22
+ export declare function guessNameParts(value: string): {
23
+ full: string;
24
+ first: string;
25
+ last: string;
26
+ };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isLikelyNaturalLanguage = isLikelyNaturalLanguage;
4
+ exports.guessNameParts = guessNameParts;
4
5
  /**
5
6
  * Guess at whether the key is a natural language string.
6
7
  * This is useful for translating only keys that are likely to be translation codes.
@@ -9,22 +10,62 @@ exports.isLikelyNaturalLanguage = isLikelyNaturalLanguage;
9
10
  * to remove the need for this method.
10
11
  *
11
12
  * @param key The string to guess as natual language or not.
13
+ * @return True if the key is likely natural language and not a translation key.
12
14
  */
13
15
  function isLikelyNaturalLanguage(key) {
14
- const value = (key ?? "").trim();
15
- // An empty string is not natural language or translation code.
16
- if (!value) {
16
+ const value = String(key ?? "").trim();
17
+ const containsSpace = value.includes(' ');
18
+ const startsCapitalLetter = value.length > 0 ? value[0].toLowerCase() !== value[0] : false;
19
+ // An empty string is not natural language.
20
+ // Treat default conversion of object to string as not natural language.
21
+ // Likely a translation code if contains '{{' or '}}'.
22
+ // Likely a translation code if starts with '@' and no spaces and does not start with a capital letter.
23
+ // Likely a translation code if contains '_' and no spaces and does not start with a capital letter.
24
+ if (!value ||
25
+ value.includes('[object Object]') ||
26
+ value.includes('{{') || value.includes('}}') ||
27
+ (value.startsWith('@') && !containsSpace && !startsCapitalLetter) ||
28
+ (value.includes('_') && !containsSpace && !startsCapitalLetter)) {
17
29
  return false;
18
30
  }
19
31
  // Likely natural language if contains a space or starts with a capital letter.
20
- if (value.includes(' ') || (value[0].toLowerCase() !== value[0])) {
32
+ if (containsSpace || startsCapitalLetter) {
21
33
  return true;
22
34
  }
23
- // Likely a translation code if starts with '@', or contains ':' or contains '_'.
24
- if (value.startsWith('@') || value.includes(':') || value.includes('_')) {
35
+ // Likely a translation code if contains any of ':', '{', '}'.
36
+ if (value.includes(':') ||
37
+ value.includes('{') ||
38
+ value.includes('}')) {
25
39
  return false;
26
40
  }
27
41
  // Otherwise, be conservative and say the translation key is not natural language.
28
42
  return false;
29
43
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24taGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2xhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0EsMERBb0JDO0FBN0JEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsR0FBOEI7SUFDcEUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFakMsK0RBQStEO0lBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==
44
+ /**
45
+ * Guess at the parts of a full name.
46
+ *
47
+ * TODO: This is best-effort only, and is likely to be incorrect.
48
+ * The long-term goal is to not have to guess at names.
49
+ * This is needed while some form fields prompt for full names and others need parts of names.
50
+ *
51
+ * @param value Guess at the parts of this full name.
52
+ * @return Object with guessed values for full, first, and last names.
53
+ */
54
+ function guessNameParts(value) {
55
+ let full = String(value ?? "").replace(/\s+/g, ' ').trim(), first = '', last = '';
56
+ if (!full) {
57
+ return { full, first, last };
58
+ }
59
+ // If there are no spaces, assume this is the last name.
60
+ if (!full.includes(' ')) {
61
+ last = full;
62
+ return { full, first, last };
63
+ }
64
+ // If there are spaces, assume the first 'word' is the first name, and the rest is the last name.
65
+ const words = full.split(' ').filter(w => !!w?.trim());
66
+ full = words.join(' ');
67
+ first = words[0];
68
+ last = words.slice(1).join(' ');
69
+ return { full, first, last };
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24taGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2xhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsMERBcUNDO0FBWUQsd0NBcUJDO0FBaEZEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEdBQThCO0lBQ3BFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFdkMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFFM0YsMkNBQTJDO0lBQzNDLHdFQUF3RTtJQUN4RSxzREFBc0Q7SUFDdEQsdUdBQXVHO0lBQ3ZHLG9HQUFvRztJQUNwRyxJQUNFLENBQUMsS0FBSztRQUNOLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7UUFDakMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUM1QyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNqRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUMvRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsK0VBQStFO0lBQy9FLElBQUksYUFBYSxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsOERBQThEO0lBQzlELElBQ0UsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFDbkIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYTtJQUMxQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQ3hELEtBQUssR0FBRyxFQUFFLEVBQ1YsSUFBSSxHQUFFLEVBQUUsQ0FBQztJQUVYLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQztRQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osT0FBTyxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGlHQUFpRztJQUNqRyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxPQUFPLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUM3QixDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@researchdatabox/sails-ng-common",
3
- "version": "0.0.1-beta.10173",
3
+ "version": "0.0.1-beta.10213",
4
4
  "description": "Common models shared between Sails API endpoints and client-side Angular code",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",