feat(once): add once method