vue-to-reactive 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ <p align="center">
2
+ <img src="logo.svg" alt="vue-to-reactive" width="180" />
3
+ </p>
4
+
5
+ <h1 align="center">vue-to-reactive</h1>
6
+
7
+ <p align="center">A Vue 3 composition API utility that converts a ref into a reactive proxy object, enabling direct property access without .value while maintaining full reactivity.</p>
8
+
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/vue-to-reactive"><img src="https://img.shields.io/npm/v/vue-to-reactive.svg" alt="npm version" /></a>
11
+ <a href="https://www.npmjs.com/package/vue-to-reactive"><img src="https://img.shields.io/npm/dm/vue-to-reactive.svg" alt="npm downloads" /></a>
12
+ <a href="https://github.com/vuefrag/vue-to-reactive/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/vue-to-reactive.svg" alt="license" /></a>
13
+ </p>
14
+
15
+ > Extracted from [VueUse](https://vueuse.org/) for standalone use.
16
+
17
+ ## Installation
18
+
19
+ ```bash
20
+ npm install vue-to-reactive
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ ```ts
26
+ import { toReactive } from 'vue-to-reactive';
27
+ ```
28
+
29
+ Converts ref to reactive. Also made possible to create a "swapable" reactive object.
30
+
31
+ ```ts
32
+ import { toReactive } from 'vue-to-reactive'
33
+ import { ref } from 'vue'
34
+
35
+ const refState = ref({ foo: 'bar' })
36
+
37
+ console.log(refState.value.foo) // => 'bar'
38
+
39
+ const state = toReactive(refState) // <--
40
+
41
+ console.log(state.foo) // => 'bar'
42
+
43
+ refState.value = { bar: 'foo' }
44
+
45
+ console.log(state.foo) // => undefined
46
+ console.log(state.bar) // => 'foo'
47
+ ```
48
+
49
+ ## License
50
+
51
+ MIT
package/banner.svg ADDED
@@ -0,0 +1,52 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 640" width="1280" height="640">
2
+ <defs>
3
+ <linearGradient id="banner-bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#35495e;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#1a252f;stop-opacity:1" />
6
+ </linearGradient>
7
+ </defs>
8
+
9
+ <!-- Background -->
10
+ <rect width="1280" height="640" fill="url(#banner-bg)"/>
11
+
12
+ <!-- Decorative elements -->
13
+ <circle cx="1200" cy="100" r="300" fill="#42b883" opacity="0.05"/>
14
+ <circle cx="80" cy="540" r="200" fill="#42b883" opacity="0.05"/>
15
+
16
+ <!-- Top accent bar -->
17
+ <rect x="0" y="0" width="1280" height="8" fill="#42b883"/>
18
+
19
+ <!-- VueFrag badge -->
20
+ <g transform="translate(80, 80)">
21
+ <rect width="140" height="50" rx="8" fill="#42b883"/>
22
+ <text x="70" y="33" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="22" font-weight="700" fill="white">VueFrag</text>
23
+ </g>
24
+
25
+ <!-- Package name -->
26
+ <text x="80" y="280" font-family="system-ui, -apple-system, sans-serif" font-size="72" font-weight="700" fill="white">vue-to-reactive</text>
27
+
28
+ <!-- Description -->
29
+ <text x="80" y="360" font-family="system-ui, -apple-system, sans-serif" font-size="32" fill="#94a3b8">Vue 3 utility converting ref to reactive proxy object</text>
30
+
31
+ <!-- Install command -->
32
+ <g transform="translate(80, 420)">
33
+ <rect width="500" height="60" rx="8" fill="#0f172a"/>
34
+ <text x="20" y="40" font-family="ui-monospace, monospace" font-size="24" fill="#94a3b8">npm install</text>
35
+ <text x="200" y="40" font-family="ui-monospace, monospace" font-size="24" fill="#42b883">vue-to-reactive</text>
36
+ </g>
37
+
38
+ <!-- Category badge -->
39
+ <g transform="translate(80, 520)">
40
+ <rect width="172" height="40" rx="20" fill="#42b883" opacity="0.2"/>
41
+ <text x="86" y="27" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="18" fill="#42b883">Reactivity</text>
42
+ </g>
43
+
44
+ <!-- Vue logo hint -->
45
+ <g transform="translate(1080, 480)">
46
+ <polygon points="100,20 140,100 60,100" fill="#42b883" opacity="0.3"/>
47
+ <polygon points="100,40 125,90 75,90" fill="#42b883" opacity="0.5"/>
48
+ </g>
49
+
50
+ <!-- Bottom text -->
51
+ <text x="1200" y="600" text-anchor="end" font-family="system-ui, -apple-system, sans-serif" font-size="18" fill="#64748b">Standalone VueUse function</text>
52
+ </svg>
package/dist/index.cjs ADDED
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ const vue = require('vue');
4
+
5
+ function toReactive(objectRef) {
6
+ if (!vue.isRef(objectRef))
7
+ return vue.reactive(objectRef);
8
+ const proxy = new Proxy({}, {
9
+ get(_, p, receiver) {
10
+ return vue.unref(Reflect.get(objectRef.value, p, receiver));
11
+ },
12
+ set(_, p, value) {
13
+ if (vue.isRef(objectRef.value[p]) && !vue.isRef(value))
14
+ objectRef.value[p].value = value;
15
+ else
16
+ objectRef.value[p] = value;
17
+ return true;
18
+ },
19
+ deleteProperty(_, p) {
20
+ return Reflect.deleteProperty(objectRef.value, p);
21
+ },
22
+ has(_, p) {
23
+ return Reflect.has(objectRef.value, p);
24
+ },
25
+ ownKeys() {
26
+ return Object.keys(objectRef.value);
27
+ },
28
+ getOwnPropertyDescriptor() {
29
+ return {
30
+ enumerable: true,
31
+ configurable: true
32
+ };
33
+ }
34
+ });
35
+ return vue.reactive(proxy);
36
+ }
37
+
38
+ exports.toReactive = toReactive;
@@ -0,0 +1,11 @@
1
+ import { MaybeRef, UnwrapNestedRefs } from 'vue';
2
+
3
+ /**
4
+ * Converts ref to reactive.
5
+ *
6
+ * @see https://vueuse.org/toReactive
7
+ * @param objectRef A ref of object
8
+ */
9
+ declare function toReactive<T extends object>(objectRef: MaybeRef<T>): UnwrapNestedRefs<T>;
10
+
11
+ export { toReactive };
@@ -0,0 +1,11 @@
1
+ import { MaybeRef, UnwrapNestedRefs } from 'vue';
2
+
3
+ /**
4
+ * Converts ref to reactive.
5
+ *
6
+ * @see https://vueuse.org/toReactive
7
+ * @param objectRef A ref of object
8
+ */
9
+ declare function toReactive<T extends object>(objectRef: MaybeRef<T>): UnwrapNestedRefs<T>;
10
+
11
+ export { toReactive };
@@ -0,0 +1,11 @@
1
+ import { MaybeRef, UnwrapNestedRefs } from 'vue';
2
+
3
+ /**
4
+ * Converts ref to reactive.
5
+ *
6
+ * @see https://vueuse.org/toReactive
7
+ * @param objectRef A ref of object
8
+ */
9
+ declare function toReactive<T extends object>(objectRef: MaybeRef<T>): UnwrapNestedRefs<T>;
10
+
11
+ export { toReactive };
package/dist/index.mjs ADDED
@@ -0,0 +1,36 @@
1
+ import { isRef, reactive, unref } from 'vue';
2
+
3
+ function toReactive(objectRef) {
4
+ if (!isRef(objectRef))
5
+ return reactive(objectRef);
6
+ const proxy = new Proxy({}, {
7
+ get(_, p, receiver) {
8
+ return unref(Reflect.get(objectRef.value, p, receiver));
9
+ },
10
+ set(_, p, value) {
11
+ if (isRef(objectRef.value[p]) && !isRef(value))
12
+ objectRef.value[p].value = value;
13
+ else
14
+ objectRef.value[p] = value;
15
+ return true;
16
+ },
17
+ deleteProperty(_, p) {
18
+ return Reflect.deleteProperty(objectRef.value, p);
19
+ },
20
+ has(_, p) {
21
+ return Reflect.has(objectRef.value, p);
22
+ },
23
+ ownKeys() {
24
+ return Object.keys(objectRef.value);
25
+ },
26
+ getOwnPropertyDescriptor() {
27
+ return {
28
+ enumerable: true,
29
+ configurable: true
30
+ };
31
+ }
32
+ });
33
+ return reactive(proxy);
34
+ }
35
+
36
+ export { toReactive };
package/logo.svg ADDED
@@ -0,0 +1,34 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" width="256" height="256">
2
+ <defs>
3
+ <linearGradient id="bg-grad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#35495e;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#1a252f;stop-opacity:1" />
6
+ </linearGradient>
7
+ </defs>
8
+
9
+ <!-- Background -->
10
+ <rect width="96" height="96" rx="16" fill="url(#bg-grad)"/>
11
+
12
+ <!-- Decorative corner accent -->
13
+ <path d="M96 0v20c0-11.046-8.954-20-20-20H96z" fill="#42b883" opacity="0.12"/>
14
+
15
+ <!-- Vue badge -->
16
+ <g transform="translate(8, 8)">
17
+ <rect width="18" height="9" rx="2" fill="#42b883"/>
18
+ <text x="9" y="6.8" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="4.5" font-weight="700" fill="white">VUE</text>
19
+ </g>
20
+
21
+ <!-- Category icon -->
22
+ <g>
23
+ <circle cx="48" cy="28" r="12" fill="none" stroke="#42b883" stroke-width="3"/><circle cx="48" cy="28" r="5" fill="#42b883"/><path d="M36 28h-4M60 28h4M48 16v-4M48 40v4" stroke="#42b883" stroke-width="2" stroke-linecap="round"/>
24
+ </g>
25
+
26
+ <!-- Function name - textLength ensures it fits within bounds -->
27
+ <text x="48" y="57" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="10" font-weight="600" fill="white" textLength="66" lengthAdjust="spacingAndGlyphs">To Reactive</text>
28
+
29
+ <!-- Category label -->
30
+ <text x="48" y="72" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="7" fill="#42b883" opacity="0.85">Reactivity</text>
31
+
32
+ <!-- Bottom accent line -->
33
+ <rect x="28" y="82" width="40" height="2" rx="1" fill="#42b883" opacity="0.5"/>
34
+ </svg>
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "vue-to-reactive",
3
+ "version": "1.0.0",
4
+ "description": "Vue 3 utility converting ref to reactive proxy object",
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.cjs",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "logo.svg",
18
+ "banner.svg"
19
+ ],
20
+ "scripts": {
21
+ "build": "unbuild",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "keywords": [
25
+ "vue",
26
+ "vue3",
27
+ "vue-3",
28
+ "composable",
29
+ "composition-api",
30
+ "vueuse",
31
+ "reactive",
32
+ "reactivity",
33
+ "computed",
34
+ "ref",
35
+ "state",
36
+ "convert",
37
+ "unwrap",
38
+ "proxy",
39
+ "object",
40
+ "no-value",
41
+ "toReactive"
42
+ ],
43
+ "author": "VueFrag",
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/vuefrag/vue-to-reactive.git"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/vuefrag/vue-to-reactive/issues"
51
+ },
52
+ "homepage": "https://github.com/vuefrag/vue-to-reactive#readme",
53
+ "peerDependencies": {
54
+ "vue": ">=3.0.0"
55
+ },
56
+ "devDependencies": {
57
+ "unbuild": "^2.0.0",
58
+ "typescript": "^5.0.0",
59
+ "vue": "^3.4.0"
60
+ }
61
+ }