@tanstack/angular-table
Version:
Headless UI for building powerful tables & datagrids for Angular.
43 lines • 4.76 kB
JavaScript
import { untracked } from '@angular/core';
/**
* Implementation from @tanstack/angular-query
* {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}
*/
export function lazyInit(initializer) {
let object = null;
const initializeObject = () => {
if (!object) {
object = untracked(() => initializer());
}
};
queueMicrotask(() => initializeObject());
const table = () => { };
return new Proxy(table, {
apply(target, thisArg, argArray) {
initializeObject();
if (typeof object === 'function') {
return Reflect.apply(object, thisArg, argArray);
}
return Reflect.apply(target, thisArg, argArray);
},
get(_, prop, receiver) {
initializeObject();
return Reflect.get(object, prop, receiver);
},
has(_, prop) {
initializeObject();
return Reflect.has(object, prop);
},
ownKeys() {
initializeObject();
return Reflect.ownKeys(object);
},
getOwnPropertyDescriptor() {
return {
enumerable: true,
configurable: true,
};
},
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1zaWduYWwtaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF6eS1zaWduYWwtaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFtQixXQUFvQjtJQUM3RCxJQUFJLE1BQU0sR0FBYSxJQUFJLENBQUE7SUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ3pDLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO0lBRXhDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtJQUV0QixPQUFPLElBQUksS0FBSyxDQUFJLEtBQVUsRUFBRTtRQUM5QixLQUFLLENBQUMsTUFBUyxFQUFFLE9BQVksRUFBRSxRQUFlO1lBQzVDLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDakQsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRO1lBQ25CLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDakQsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSTtZQUNULGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBQ0QsT0FBTztZQUNMLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQVcsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFDRCx3QkFBd0I7WUFDdEIsT0FBTztnQkFDTCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBmcm9tIEB0YW5zdGFjay9hbmd1bGFyLXF1ZXJ5XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1RhblN0YWNrL3F1ZXJ5L2Jsb2IvbWFpbi9wYWNrYWdlcy9hbmd1bGFyLXF1ZXJ5LWV4cGVyaW1lbnRhbC9zcmMvdXRpbC9sYXp5LWluaXQvbGF6eS1pbml0LnRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eUluaXQ8VCBleHRlbmRzIG9iamVjdD4oaW5pdGlhbGl6ZXI6ICgpID0+IFQpOiBUIHtcbiAgbGV0IG9iamVjdDogVCB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgaW5pdGlhbGl6ZU9iamVjdCA9ICgpID0+IHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgb2JqZWN0ID0gdW50cmFja2VkKCgpID0+IGluaXRpYWxpemVyKCkpXG4gICAgfVxuICB9XG5cbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4gaW5pdGlhbGl6ZU9iamVjdCgpKVxuXG4gIGNvbnN0IHRhYmxlID0gKCkgPT4ge31cblxuICByZXR1cm4gbmV3IFByb3h5PFQ+KHRhYmxlIGFzIFQsIHtcbiAgICBhcHBseSh0YXJnZXQ6IFQsIHRoaXNBcmc6IGFueSwgYXJnQXJyYXk6IGFueVtdKTogYW55IHtcbiAgICAgIGluaXRpYWxpemVPYmplY3QoKVxuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob2JqZWN0LCB0aGlzQXJnLCBhcmdBcnJheSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRhcmdldCBhcyBhbnksIHRoaXNBcmcsIGFyZ0FycmF5KVxuICAgIH0sXG4gICAgZ2V0KF8sIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICBpbml0aWFsaXplT2JqZWN0KClcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldChvYmplY3QgYXMgVCwgcHJvcCwgcmVjZWl2ZXIpXG4gICAgfSxcbiAgICBoYXMoXywgcHJvcCkge1xuICAgICAgaW5pdGlhbGl6ZU9iamVjdCgpXG4gICAgICByZXR1cm4gUmVmbGVjdC5oYXMob2JqZWN0IGFzIFQsIHByb3ApXG4gICAgfSxcbiAgICBvd25LZXlzKCkge1xuICAgICAgaW5pdGlhbGl6ZU9iamVjdCgpXG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKG9iamVjdCBhcyBUKVxuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG4iXX0=