npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@linden.dev/vue-unclassify

v0.2.6

Published

Create Vue 3 script setup SFC from Vue2/3 class based TypeScript SFCs

Downloads

17

Readme

vue-unclassify

Generate Vue3 TypeScript <script setup> SFCs directly from Vue2/3 class-based single file TypeScript components. Can also be used to convert vue-facing-decorator classes to <script setup>.

This is very much an opinionated alpha version that only attempts to transform the <script> element of an SFC. There are surely heaps of bugs.

The resulting script is always reordered as

<template>
    ... (minor replacements only as of now)
</template>
<script setup>
  // Static/non-class/non reactive code
  // Props
  // Emits
  // State (ref:s)
  // Computeds
  // Watches
  // Initialization (onMounted et al)
  // Functions (former member methods)
  // Exports (other than default Vue class)
</script>
<style>
   ... (as-is)
</style>

Usage

vue-unclassify [-r/--replace] [file patterns...] ...or run front end with interactive transpilation (WIP)

Features

  • AST-based transpilation (90%) using acorn - a lot less fragile than existing RegEx tools
  • Direct conversion to <script setup>
  • Attempts to attach comments to original code

Useful links

Interactive online version AST explorer, many languages etc

TODOs

[ ] Bug: Don't generate invalid uninitialized consts from static members; do static -> let, static readonly -> const

[ ] Shadowing locals need renaming (i.e. const ba = this.ba;)

[ ] Create defineEmits for $emit only present in <template>

[ ] Propagate errors to stdout instead of dumping them in the script tag

[ ] Transpile writable computeds (set methods)

[ ] Transpile $router

[ ] Improve method body extraction for created() (.substring hack)

Lower priority TODOs

[ ] this.$refs.xyz.focus -> const xyz = ref(); ... xyz.value.focus();

[ ] computed(..., () => { \n* return y.value; \n* }); -> computed(..., () => y.value);

[ ] For readonly members (public readonly CUT: LengthType = 'Custom';) -> skip the ref()

[ ] Handle multiple script/style sections (passthrough)

[ ] Refactor to allow custom section ordering/templates instead of hardcoded tag/script order

[ ] Resolve import name clashes (rename all locals if an imported name matched)

    import gridMapperService from "@/services/gridMapperService";
    const gridMapperService = computed((): any => gridMapperService);

Project setup

pnpm install

Run frontend for development

pnpm run build-web
pnpm run dev

Compile and minify CLI

pnpm run build

Run unit tests

pnpm run test