ipfs storage for images and other nontext items. for use with etica - runs on etica network and currencys
https://collect.etica-stats.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
/** |
|
* Property helper functions. |
|
* |
|
* @_subsection api/utils:Properties [about-properties] |
|
*/ |
|
function checkType(value, type, name) { |
|
const types = type.split("|").map(t => t.trim()); |
|
for (let i = 0; i < types.length; i++) { |
|
switch (type) { |
|
case "any": |
|
return; |
|
case "bigint": |
|
case "boolean": |
|
case "number": |
|
case "string": |
|
if (typeof (value) === type) { |
|
return; |
|
} |
|
} |
|
} |
|
const error = new Error(`invalid value for type ${type}`); |
|
error.code = "INVALID_ARGUMENT"; |
|
error.argument = `value.${name}`; |
|
error.value = value; |
|
throw error; |
|
} |
|
/** |
|
* Resolves to a new object that is a copy of %%value%%, but with all |
|
* values resolved. |
|
*/ |
|
export async function resolveProperties(value) { |
|
const keys = Object.keys(value); |
|
const results = await Promise.all(keys.map((k) => Promise.resolve(value[k]))); |
|
return results.reduce((accum, v, index) => { |
|
accum[keys[index]] = v; |
|
return accum; |
|
}, {}); |
|
} |
|
/** |
|
* Assigns the %%values%% to %%target%% as read-only values. |
|
* |
|
* It %%types%% is specified, the values are checked. |
|
*/ |
|
export function defineProperties(target, values, types) { |
|
for (let key in values) { |
|
let value = values[key]; |
|
const type = (types ? types[key] : null); |
|
if (type) { |
|
checkType(value, type, key); |
|
} |
|
Object.defineProperty(target, key, { enumerable: true, value, writable: false }); |
|
} |
|
} |
|
//# sourceMappingURL=properties.js.map
|