* object.
*/
export class LazyLoader extends null {
- /** Constructs a new LazyLoader object. */
+ /**
+ * Constructs a new LazyLoader object.
+ *
+ * ☡ This function throws if the provided value is not an object.
+ */
constructor(loadMethods) {
- const result = objectCreate(getPrototype(loadMethods));
- const methodKeys = getOwnPropertyKeys(loadMethods);
- for (let index = 0; index < methodKeys.length; ++index) {
- const methodKey = methodKeys[index];
- const { configurable, enumerable, writable } =
- getOwnPropertyDescriptor(loadMethods, methodKey);
- defineOwnProperty(result, methodKey, {
- configurable: true,
- enumerable,
- get: () => {
- const value = call(loadMethods[methodKey], result, []);
- defineOwnProperty(result, methodKey, {
- configurable,
- enumerable,
- value,
- writable,
- });
- return value;
- },
- set: writable
- ? ($) =>
+ if (type(loadMethods) !== "object") {
+ throw new TypeError(
+ `Piscēs: Cannot construct LazyLoader: Provided argument is not an object: ${loadMethods}.`,
+ );
+ } else {
+ const result = objectCreate(getPrototype(loadMethods));
+ const methodKeys = getOwnPropertyKeys(loadMethods);
+ for (let index = 0; index < methodKeys.length; ++index) {
+ const methodKey = methodKeys[index];
+ const { configurable, enumerable, writable } =
+ getOwnPropertyDescriptor(loadMethods, methodKey);
+ defineOwnProperty(result, methodKey, {
+ configurable: true,
+ enumerable,
+ get: () => {
+ const value = call(loadMethods[methodKey], result, []);
defineOwnProperty(result, methodKey, {
configurable,
enumerable,
- value: $,
+ value,
writable,
- })
- : void {},
- });
+ });
+ return value;
+ },
+ set: writable
+ ? ($) =>
+ defineOwnProperty(result, methodKey, {
+ configurable,
+ enumerable,
+ value: $,
+ writable,
+ })
+ : void {},
+ });
+ }
+ return result;
}
- return result;
}
}
* its `enumerable` property, if defined, will always be a
* boolean).
*/
- //deno-lint-ignore constructor-super
constructor(O) {
if (type(O) !== "object") {
// The provided value is not an object.
throw new TypeError(
- "Piscēs: Cannot convert primitive to property descriptor.",
+ `Piscēs: Cannot convert primitive to property descriptor: ${O}.`,
);
} else {
// The provided value is an object.
* `delete` operator in that it throws if the deletion is
* unsuccessful.
*
- * ※ This function throws if the first argument is not an object.
+ * ☡ This function throws if the first argument is not an object.
*/
deleteOwnProperty,
* ※ This function differs from Reflect.set in that it throws if the
* setting is unsuccessful.
*
- * ※ This function throws if the first argument is not an object.
+ * ☡ This function throws if the first argument is not an object.
*/
setPropertyValue,
} = (() => {
export const {
/**
* Returns a new frozen shallow copy of the enumerable own properties
- * of the provided object, according to the following rules :—
+ * of the provided object, according to the following rules :—
*
* - For data properties, create a nonconfigurable, nonwritable
* property with the same value.
* nonnullish `Symbol.species`, that will be used instead. If the
* used constructor or species is nullish or does not have a
* `prototype` property, the prototype is set to null.
+ *
+ * ※ The prototype of the provided object itself is ignored.
*/
frozenCopy,
} = (() => {
};
})();
+/**
+ * Returns the function on the provided value at the provided property
+ * key.
+ *
+ * ☡ This function throws if the provided property key does not have an
+ * associated value which is callable.
+ */
export const getMethod = (V, P) => {
const func = getPropertyValue(V, P);
if (func == null) {
*
* Existing objects are returned with no modification.
*
- * ☡ This function throws a TypeError if its argument is null or
- * undefined.
+ * ☡ This function throws if its argument is null or undefined.
*/
export const { toObject } = (() => {
const makeObject = Object;