@sakana-y/vue-grab-cli 0.1.0 → 0.1.2
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/CHANGELOG.md +34 -0
- package/README.md +60 -0
- package/dist/bin.cjs +3 -3
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.mjs +61 -57
- package/dist/commands/init.d.ts +35 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +1 -1
- package/dist/init-BNCDwtX-.cjs +15 -0
- package/dist/init-BuQE50ix.js +397 -0
- package/package.json +27 -2
- package/dist/init-BY4F7nfe.cjs +0 -1
- package/dist/init-TuWkkzkd.js +0 -64
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @sakana-y/vue-grab-cli
|
|
2
|
+
|
|
3
|
+
## 0.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#38](https://github.com/SaKaNa-Y/vue-grab/pull/38) [`a90677f`](https://github.com/SaKaNa-Y/vue-grab/commit/a90677f19389bb7875ca54164e4554830f80a2d7) Thanks [@SaKaNa-Y](https://github.com/SaKaNa-Y)! - Hide beta toolbar entries by default and label Magnifier, Logs, and Network as Beta in Dock settings.
|
|
8
|
+
|
|
9
|
+
- [#38](https://github.com/SaKaNa-Y/vue-grab/pull/38) [`a90677f`](https://github.com/SaKaNa-Y/vue-grab/commit/a90677f19389bb7875ca54164e4554830f80a2d7) Thanks [@SaKaNa-Y](https://github.com/SaKaNa-Y)! - Add package README, license, and npm metadata so published package pages show documentation and project links.
|
|
10
|
+
|
|
11
|
+
## 0.1.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#30](https://github.com/SaKaNa-Y/vue-grab/pull/30) [`33772ce`](https://github.com/SaKaNa-Y/vue-grab/commit/33772ce81dc425d3f9a93d43faf1f809ff45c2a4) Thanks [@SaKaNa-Y](https://github.com/SaKaNa-Y)! - Implement `vue-grab init` for Vite + Vue projects with safe setup edits, dependency installation, dry-run support, and Vite plugin wiring.
|
|
16
|
+
|
|
17
|
+
## 0.1.0
|
|
18
|
+
|
|
19
|
+
### Minor Changes
|
|
20
|
+
|
|
21
|
+
- [#21](https://github.com/SaKaNa-Y/vue-grab/pull/21) [`6df5750`](https://github.com/SaKaNa-Y/vue-grab/commit/6df5750f22dc975340180c22a656294a4d85291d) Thanks [@SaKaNa-Y](https://github.com/SaKaNa-Y)! - Rename `errorCapture` → `consoleCapture` and broaden capture from `console.error` only to all five console levels (`log`, `info`, `warn`, `error`, `debug`). The FloatingButton panel now surfaces every captured entry with per-level filter pills and a message search input; the badge counts only `warn` + `error` entries to keep it actionable.
|
|
22
|
+
|
|
23
|
+
Breaking changes — no backwards-compatible aliases:
|
|
24
|
+
- Config key `errorCapture` → `consoleCapture`.
|
|
25
|
+
- Type `ErrorCaptureConfig` → `ConsoleCaptureConfig`:
|
|
26
|
+
- `maxErrors` (default 50) → `maxEntries` (default 200).
|
|
27
|
+
- `captureConsoleError: boolean` replaced by `levels: LogLevel[]` (default is all five levels enabled). The levels array is replaced wholesale by `mergeConfig`, not element-merged.
|
|
28
|
+
- `captureUnhandled` and `captureVueErrors` retained with identical semantics.
|
|
29
|
+
- Type `CapturedError` → `CapturedLog`. The single `type` field is replaced with two axes: `level: "log" | "info" | "warn" | "error" | "debug"` and `source: "console" | "runtime" | "promise" | "vue"`. Runtime/promise/Vue entries always carry `level: "error"`.
|
|
30
|
+
- Constant `VUE_ERROR_EVENT` retained (the underlying window-event string `"vue-grab:vue-error"` is unchanged).
|
|
31
|
+
- Standalone `init()` API: `onError` / `clearErrors` → `onLog` / `clearLogs`.
|
|
32
|
+
- FloatingButton methods: `setErrors` / `onErrorsClear` → `setLogs` / `onLogsClear` (internal, only affects code that imports `FloatingButton` directly).
|
|
33
|
+
- Dedup fingerprint now includes `source` and `level`, so the same message at different levels or from different sources produces distinct entries.
|
|
34
|
+
- Arguments passed to `console.*` are now stringified at capture time via a safe stringifier that handles circular references, Error instances (preserving `.stack`), and truncates very long values.
|
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Vue Grab CLI
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@sakana-y/vue-grab-cli)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
|
|
6
|
+
CLI setup tool for adding Vue Grab to Vite and Vue projects.
|
|
7
|
+
|
|
8
|
+
`vue-grab init` installs `@sakana-y/vue-grab`, wires the Vue runtime plugin into your app entry, and adds the Vite editor companion plugin when it can safely update your project.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx @sakana-y/vue-grab-cli init
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Preview the planned changes without editing files:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx @sakana-y/vue-grab-cli init --dry-run
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Run non-interactively:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx @sakana-y/vue-grab-cli init --yes
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Skip dependency installation when you want to manage dependencies yourself:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx @sakana-y/vue-grab-cli init --skip-install
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## What It Does
|
|
35
|
+
|
|
36
|
+
- Detects the package manager from lockfiles.
|
|
37
|
+
- Adds `@sakana-y/vue-grab` as a development dependency.
|
|
38
|
+
- Updates the Vue app entry to install `createVueGrab()`.
|
|
39
|
+
- Updates Vite config to use `vueGrabPlugin()` from `@sakana-y/vue-grab/vite`.
|
|
40
|
+
- Avoids duplicate setup when Vue Grab is already configured.
|
|
41
|
+
- Supports dry-run output before any file edits.
|
|
42
|
+
|
|
43
|
+
## Supported Package Managers
|
|
44
|
+
|
|
45
|
+
- pnpm
|
|
46
|
+
- npm
|
|
47
|
+
- yarn
|
|
48
|
+
- bun
|
|
49
|
+
|
|
50
|
+
## Related Packages
|
|
51
|
+
|
|
52
|
+
- `@sakana-y/vue-grab`: Vue plugin, runtime APIs, and Vite integration.
|
|
53
|
+
- `@sakana-y/vue-grab-shared`: Shared types, defaults, config merging, and protocol constants.
|
|
54
|
+
|
|
55
|
+
## Links
|
|
56
|
+
|
|
57
|
+
- Repository: https://github.com/SaKaNa-Y/vue-grab
|
|
58
|
+
- Issues: https://github.com/SaKaNa-Y/vue-grab/issues
|
|
59
|
+
- Changelog: ./CHANGELOG.md
|
|
60
|
+
- License: ./LICENSE
|
package/dist/bin.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
require(`./init-BNCDwtX-.cjs`);let e=require(`events`);function t(e){return e==null?[]:Array.isArray(e)?e:[e]}function n(e,t,n,r){var i,a=e[t],o=~r.string.indexOf(t)?n==null||n===!0?``:String(n):typeof n==`boolean`?n:~r.boolean.indexOf(t)?n===`false`?!1:n===`true`||(e._.push((i=+n,i*0==0?i:n)),!!n):(i=+n,i*0==0?i:n);e[t]=a==null?o:Array.isArray(a)?a.concat(o):[a,o]}function r(e,r){e||=[],r||={};var i,a,o,s,c,l={_:[]},u=0,d=0,f=0,p=e.length;let m=r.alias!==void 0,h=r.unknown!==void 0,g=r.default!==void 0;if(r.alias=r.alias||{},r.string=t(r.string),r.boolean=t(r.boolean),m)for(i in r.alias)for(a=r.alias[i]=t(r.alias[i]),u=0;u<a.length;u++)(r.alias[a[u]]=a.concat(i)).splice(u,1);for(u=r.boolean.length;u-- >0;)for(a=r.alias[r.boolean[u]]||[],d=a.length;d-- >0;)r.boolean.push(a[d]);for(u=r.string.length;u-- >0;)for(a=r.alias[r.string[u]]||[],d=a.length;d-- >0;)r.string.push(a[d]);if(g){for(i in r.default)if(s=typeof r.default[i],a=r.alias[i]=r.alias[i]||[],r[s]!==void 0)for(r[s].push(i),u=0;u<a.length;u++)r[s].push(a[u])}let _=h?Object.keys(r.alias):[];for(u=0;u<p;u++){if(o=e[u],o===`--`){l._=l._.concat(e.slice(++u));break}for(d=0;d<o.length&&o.charCodeAt(d)===45;d++);if(d===0)l._.push(o);else if(o.substring(d,d+3)===`no-`){if(s=o.substring(d+3),h&&!~_.indexOf(s))return r.unknown(o);l[s]=!1}else{for(f=d+1;f<o.length&&o.charCodeAt(f)!==61;f++);for(s=o.substring(d,f),c=o.substring(++f)||u+1===p||(``+e[u+1]).charCodeAt(0)===45||e[++u],a=d===2?[s]:s,f=0;f<a.length;f++){if(s=a[f],h&&!~_.indexOf(s))return r.unknown(`-`.repeat(d)+s);n(l,s,f+1<a.length||c,r)}}}if(g)for(i in r.default)l[i]===void 0&&(l[i]=r.default[i]);if(m)for(i in l)for(a=r.alias[i]||[];a.length>0;)l[a.shift()]=l[i];return l}var i=e=>e.replace(/[<[].+/,``).trim(),a=e=>{let t=/<([^>]+)>/g,n=/\[([^\]]+)\]/g,r=[],i=e=>{let t=!1,n=e[1];return n.startsWith(`...`)&&(n=n.slice(3),t=!0),{required:e[0].startsWith(`<`),value:n,variadic:t}},a;for(;a=t.exec(e);)r.push(i(a));let o;for(;o=n.exec(e);)r.push(i(o));return r},o=e=>{let t={alias:{},boolean:[]};for(let[n,r]of e.entries())r.names.length>1&&(t.alias[r.names[0]]=r.names.slice(1)),r.isBoolean&&(r.negated&&e.some((e,t)=>t!==n&&e.names.some(e=>r.names.includes(e))&&typeof e.required==`boolean`)||t.boolean.push(r.names[0]));return t},s=e=>e.sort((e,t)=>e.length>t.length?-1:1)[0],c=(e,t)=>e.length>=t?e:`${e}${` `.repeat(t-e.length)}`,l=e=>e.replace(/([a-z])-([a-z])/g,(e,t,n)=>t+n.toUpperCase()),u=(e,t,n)=>{let r=0,i=t.length,a=e,o;for(;r<i;++r)o=a[t[r]],a=a[t[r]]=r===i-1?n:o??(~t[r+1].indexOf(`.`)||!(+t[r+1]>-1)?{}:[])},d=(e,t)=>{for(let n of Object.keys(t)){let r=t[n];r.shouldTransform&&(e[n]=Array.prototype.concat.call([],e[n]),typeof r.transformFunction==`function`&&(e[n]=e[n].map(r.transformFunction)))}},f=e=>{let t=/([^\\\/]+)$/.exec(e);return t?t[1]:``},p=e=>e.split(`.`).map((e,t)=>t===0?l(e):e).join(`.`),m=class extends Error{constructor(e){super(e),this.name=this.constructor.name,typeof Error.captureStackTrace==`function`?Error.captureStackTrace(this,this.constructor):this.stack=Error(e).stack}},h=class{constructor(e,t,n){this.rawName=e,this.description=t,this.config=Object.assign({},n),e=e.replace(/\.\*/g,``),this.negated=!1,this.names=i(e).split(`,`).map(e=>{let t=e.trim().replace(/^-{1,2}/,``);return t.startsWith(`no-`)&&(this.negated=!0,t=t.replace(/^no-/,``)),p(t)}).sort((e,t)=>e.length>t.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null&&(this.config.default=!0),e.includes(`<`)?this.required=!0:e.includes(`[`)?this.required=!1:this.isBoolean=!0}},g=process.argv,_=`${process.platform}-${process.arch} node-${process.version}`,v=class{constructor(e,t,n={},r){this.rawName=e,this.description=t,this.config=n,this.cli=r,this.options=[],this.aliasNames=[],this.name=i(e),this.args=a(e),this.examples=[]}usage(e){return this.usageText=e,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version(e,t=`-v, --version`){return this.versionNumber=e,this.option(t,`Display version number`),this}example(e){return this.examples.push(e),this}option(e,t,n){let r=new h(e,t,n);return this.options.push(r),this}alias(e){return this.aliasNames.push(e),this}action(e){return this.commandAction=e,this}isMatched(e){return this.name===e||this.aliasNames.includes(e)}get isDefaultCommand(){return this.name===``||this.aliasNames.includes(`!`)}get isGlobalCommand(){return this instanceof y}hasOption(e){return e=e.split(`.`)[0],this.options.find(t=>t.names.includes(e))}outputHelp(){let{name:e,commands:t}=this.cli,{versionNumber:n,options:r,helpCallback:i}=this.cli.globalCommand,a=[{body:`${e}${n?`/${n}`:``}`}];if(a.push({title:`Usage`,body:` $ ${e} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&t.length>0){let n=s(t.map(e=>e.rawName));a.push({title:`Commands`,body:t.map(e=>` ${c(e.rawName,n.length)} ${e.description}`).join(`
|
|
3
3
|
`)}),a.push({title:"For more info, run any command with the `--help` flag",body:t.map(t=>` $ ${e}${t.name===``?``:` ${t.name}`} --help`).join(`
|
|
4
|
-
`)})}let o=this.isGlobalCommand?r:[...this.options,...r||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand&&(o=o.filter(e=>e.name!==`version`)),o.length>0){let e=
|
|
4
|
+
`)})}let o=this.isGlobalCommand?r:[...this.options,...r||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand&&(o=o.filter(e=>e.name!==`version`)),o.length>0){let e=s(o.map(e=>e.rawName));a.push({title:`Options`,body:o.map(t=>` ${c(t.rawName,e.length)} ${t.description} ${t.config.default===void 0?``:`(default: ${t.config.default})`}`).join(`
|
|
5
5
|
`)})}this.examples.length>0&&a.push({title:`Examples`,body:this.examples.map(t=>typeof t==`function`?t(e):t).join(`
|
|
6
6
|
`)}),i&&(a=i(a)||a),console.log(a.map(e=>e.title?`${e.title}:
|
|
7
7
|
${e.body}`:e.body).join(`
|
|
8
8
|
|
|
9
|
-
`))}outputVersion(){let{name:e}=this.cli,{versionNumber:t}=this.cli.globalCommand;t&&console.log(`${e}/${t} ${
|
|
9
|
+
`))}outputVersion(){let{name:e}=this.cli,{versionNumber:t}=this.cli.globalCommand;t&&console.log(`${e}/${t} ${_}`)}checkRequiredArgs(){let e=this.args.filter(e=>e.required).length;if(this.cli.args.length<e)throw new m(`missing required args for command \`${this.rawName}\``)}checkUnknownOptions(){let{options:e,globalCommand:t}=this.cli;if(!this.config.allowUnknownOptions){for(let n of Object.keys(e))if(n!==`--`&&!this.hasOption(n)&&!t.hasOption(n))throw new m(`Unknown option \`${n.length>1?`--${n}`:`-${n}`}\``)}}checkOptionValue(){let{options:e,globalCommand:t}=this.cli,n=[...t.options,...this.options];for(let t of n){let r=e[t.name.split(`.`)[0]];if(t.required){let e=n.some(e=>e.negated&&e.names.includes(t.name));if(r===!0||r===!1&&!e)throw new m(`option \`${t.rawName}\` value is missing`)}}}},y=class extends v{constructor(e){super(`@@global@@`,``,{},e)}},b=Object.assign,x=class extends e.EventEmitter{constructor(e=``){super(),this.name=e,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new y(this),this.globalCommand.usage(`<command> [options]`)}usage(e){return this.globalCommand.usage(e),this}command(e,t,n){let r=new v(e,t||``,n,this);return r.globalCommand=this.globalCommand,this.commands.push(r),r}option(e,t,n){return this.globalCommand.option(e,t,n),this}help(e){return this.globalCommand.option(`-h, --help`,`Display this message`),this.globalCommand.helpCallback=e,this.showHelpOnExit=!0,this}version(e,t=`-v, --version`){return this.globalCommand.version(e,t),this.showVersionOnExit=!0,this}example(e){return this.globalCommand.example(e),this}outputHelp(){this.matchedCommand?this.matchedCommand.outputHelp():this.globalCommand.outputHelp()}outputVersion(){this.globalCommand.outputVersion()}setParsedInfo({args:e,options:t},n,r){return this.args=e,this.options=t,n&&(this.matchedCommand=n),r&&(this.matchedCommandName=r),this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}parse(e=g,{run:t=!0}={}){this.rawArgs=e,this.name||=e[1]?f(e[1]):`cli`;let n=!0;for(let t of this.commands){let r=this.mri(e.slice(2),t),i=r.args[0];if(t.isMatched(i)){n=!1;let e=b(b({},r),{args:r.args.slice(1)});this.setParsedInfo(e,t,i),this.emit(`command:${i}`,t)}}if(n){for(let t of this.commands)if(t.name===``){n=!1;let r=this.mri(e.slice(2),t);this.setParsedInfo(r,t),this.emit(`command:!`,t)}}if(n){let t=this.mri(e.slice(2));this.setParsedInfo(t)}this.options.help&&this.showHelpOnExit&&(this.outputHelp(),t=!1,this.unsetMatchedCommand()),this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null&&(this.outputVersion(),t=!1,this.unsetMatchedCommand());let r={args:this.args,options:this.options};return t&&this.runMatchedCommand(),!this.matchedCommand&&this.args[0]&&this.emit(`command:*`),r}mri(e,t){let n=[...this.globalCommand.options,...t?t.options:[]],i=o(n),a=[],s=e.indexOf(`--`);s>-1&&(a=e.slice(s+1),e=e.slice(0,s));let c=r(e,i);c=Object.keys(c).reduce((e,t)=>b(b({},e),{[p(t)]:c[t]}),{_:[]});let l=c._,f={"--":a},m=t&&t.config.ignoreOptionDefaultValue?t.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,h=Object.create(null);for(let e of n){if(!m&&e.config.default!==void 0)for(let t of e.names)f[t]=e.config.default;Array.isArray(e.config.type)&&h[e.name]===void 0&&(h[e.name]=Object.create(null),h[e.name].shouldTransform=!0,h[e.name].transformFunction=e.config.type[0])}for(let e of Object.keys(c))e!==`_`&&(u(f,e.split(`.`),c[e]),d(f,h));return{args:l,options:f}}runMatchedCommand(){let{args:e,options:t,matchedCommand:n}=this;if(!n||!n.commandAction)return;n.checkUnknownOptions(),n.checkOptionValue(),n.checkRequiredArgs();let r=[];return n.args.forEach((t,n)=>{t.variadic?r.push(e.slice(n)):r.push(e[n])}),r.push(t),n.commandAction.apply(this,r)}},S=(e=``)=>new x(e),C=`0.1.2`,w=S(`vue-grab`);w.command(`init`,`Initialize vue-grab in your project`).option(`-y, --yes`,`Skip prompts and use defaults`).option(`--dry-run`,`Show the planned changes without writing files or installing packages`).option(`--skip-install`,`Do not install @sakana-y/vue-grab`).action(async e=>{try{let{initProject:t}=await Promise.resolve().then(()=>require(`./init-BNCDwtX-.cjs`)).then(e=>e.n),n=await t(e),r=n.main.status===`changed`||n.vite.status===`changed`||n.install.needed&&!n.install.skipped;n.cancelReason===`non-interactive`&&r&&(process.exitCode=1)}catch(e){console.error(e instanceof Error?e.message:String(e)),process.exitCode=1}}),w.help(),w.version(C),w.parse();
|
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
|
package/dist/bin.mjs
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { EventEmitter as t } from "events";
|
|
2
|
+
import { EventEmitter as e } from "events";
|
|
4
3
|
//#region ../../node_modules/.pnpm/cac@6.7.14/node_modules/cac/dist/index.mjs
|
|
5
|
-
function
|
|
4
|
+
function t(e) {
|
|
6
5
|
return e == null ? [] : Array.isArray(e) ? e : [e];
|
|
7
6
|
}
|
|
8
|
-
function
|
|
7
|
+
function n(e, t, n, r) {
|
|
9
8
|
var i, a = e[t], o = ~r.string.indexOf(t) ? n == null || n === !0 ? "" : String(n) : typeof n == "boolean" ? n : ~r.boolean.indexOf(t) ? n === "false" ? !1 : n === "true" || (e._.push((i = +n, i * 0 == 0 ? i : n)), !!n) : (i = +n, i * 0 == 0 ? i : n);
|
|
10
9
|
e[t] = a == null ? o : Array.isArray(a) ? a.concat(o) : [a, o];
|
|
11
10
|
}
|
|
12
|
-
function
|
|
13
|
-
e ||= [],
|
|
11
|
+
function r(e, r) {
|
|
12
|
+
e ||= [], r ||= {};
|
|
14
13
|
var i, a, o, s, c, l = { _: [] }, u = 0, d = 0, f = 0, p = e.length;
|
|
15
|
-
let m =
|
|
16
|
-
if (
|
|
17
|
-
for (u =
|
|
18
|
-
for (u =
|
|
14
|
+
let m = r.alias !== void 0, h = r.unknown !== void 0, g = r.default !== void 0;
|
|
15
|
+
if (r.alias = r.alias || {}, r.string = t(r.string), r.boolean = t(r.boolean), m) for (i in r.alias) for (a = r.alias[i] = t(r.alias[i]), u = 0; u < a.length; u++) (r.alias[a[u]] = a.concat(i)).splice(u, 1);
|
|
16
|
+
for (u = r.boolean.length; u-- > 0;) for (a = r.alias[r.boolean[u]] || [], d = a.length; d-- > 0;) r.boolean.push(a[d]);
|
|
17
|
+
for (u = r.string.length; u-- > 0;) for (a = r.alias[r.string[u]] || [], d = a.length; d-- > 0;) r.string.push(a[d]);
|
|
19
18
|
if (g) {
|
|
20
|
-
for (i in
|
|
19
|
+
for (i in r.default) if (s = typeof r.default[i], a = r.alias[i] = r.alias[i] || [], r[s] !== void 0) for (r[s].push(i), u = 0; u < a.length; u++) r[s].push(a[u]);
|
|
21
20
|
}
|
|
22
|
-
let _ = h ? Object.keys(
|
|
21
|
+
let _ = h ? Object.keys(r.alias) : [];
|
|
23
22
|
for (u = 0; u < p; u++) {
|
|
24
23
|
if (o = e[u], o === "--") {
|
|
25
24
|
l._ = l._.concat(e.slice(++u));
|
|
@@ -28,21 +27,21 @@ function i(e, t) {
|
|
|
28
27
|
for (d = 0; d < o.length && o.charCodeAt(d) === 45; d++);
|
|
29
28
|
if (d === 0) l._.push(o);
|
|
30
29
|
else if (o.substring(d, d + 3) === "no-") {
|
|
31
|
-
if (s = o.substring(d + 3), h && !~_.indexOf(s)) return
|
|
30
|
+
if (s = o.substring(d + 3), h && !~_.indexOf(s)) return r.unknown(o);
|
|
32
31
|
l[s] = !1;
|
|
33
32
|
} else {
|
|
34
33
|
for (f = d + 1; f < o.length && o.charCodeAt(f) !== 61; f++);
|
|
35
34
|
for (s = o.substring(d, f), c = o.substring(++f) || u + 1 === p || ("" + e[u + 1]).charCodeAt(0) === 45 || e[++u], a = d === 2 ? [s] : s, f = 0; f < a.length; f++) {
|
|
36
|
-
if (s = a[f], h && !~_.indexOf(s)) return
|
|
37
|
-
|
|
35
|
+
if (s = a[f], h && !~_.indexOf(s)) return r.unknown("-".repeat(d) + s);
|
|
36
|
+
n(l, s, f + 1 < a.length || c, r);
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
|
-
if (g) for (i in
|
|
42
|
-
if (m) for (i in l) for (a =
|
|
40
|
+
if (g) for (i in r.default) l[i] === void 0 && (l[i] = r.default[i]);
|
|
41
|
+
if (m) for (i in l) for (a = r.alias[i] || []; a.length > 0;) l[a.shift()] = l[i];
|
|
43
42
|
return l;
|
|
44
43
|
}
|
|
45
|
-
var
|
|
44
|
+
var i = (e) => e.replace(/[<[].+/, "").trim(), a = (e) => {
|
|
46
45
|
let t = /<([^>]+)>/g, n = /\[([^\]]+)\]/g, r = [], i = (e) => {
|
|
47
46
|
let t = !1, n = e[1];
|
|
48
47
|
return n.startsWith("...") && (n = n.slice(3), t = !0), {
|
|
@@ -55,38 +54,38 @@ var a = (e) => e.replace(/[<[].+/, "").trim(), o = (e) => {
|
|
|
55
54
|
let o;
|
|
56
55
|
for (; o = n.exec(e);) r.push(i(o));
|
|
57
56
|
return r;
|
|
58
|
-
},
|
|
57
|
+
}, o = (e) => {
|
|
59
58
|
let t = {
|
|
60
59
|
alias: {},
|
|
61
60
|
boolean: []
|
|
62
61
|
};
|
|
63
62
|
for (let [n, r] of e.entries()) r.names.length > 1 && (t.alias[r.names[0]] = r.names.slice(1)), r.isBoolean && (r.negated && e.some((e, t) => t !== n && e.names.some((e) => r.names.includes(e)) && typeof e.required == "boolean") || t.boolean.push(r.names[0]));
|
|
64
63
|
return t;
|
|
65
|
-
},
|
|
64
|
+
}, s = (e) => e.sort((e, t) => e.length > t.length ? -1 : 1)[0], c = (e, t) => e.length >= t ? e : `${e}${" ".repeat(t - e.length)}`, l = (e) => e.replace(/([a-z])-([a-z])/g, (e, t, n) => t + n.toUpperCase()), u = (e, t, n) => {
|
|
66
65
|
let r = 0, i = t.length, a = e, o;
|
|
67
66
|
for (; r < i; ++r) o = a[t[r]], a = a[t[r]] = r === i - 1 ? n : o ?? (~t[r + 1].indexOf(".") || !(+t[r + 1] > -1) ? {} : []);
|
|
68
|
-
},
|
|
67
|
+
}, d = (e, t) => {
|
|
69
68
|
for (let n of Object.keys(t)) {
|
|
70
69
|
let r = t[n];
|
|
71
70
|
r.shouldTransform && (e[n] = Array.prototype.concat.call([], e[n]), typeof r.transformFunction == "function" && (e[n] = e[n].map(r.transformFunction)));
|
|
72
71
|
}
|
|
73
|
-
},
|
|
72
|
+
}, f = (e) => {
|
|
74
73
|
let t = /([^\\\/]+)$/.exec(e);
|
|
75
74
|
return t ? t[1] : "";
|
|
76
|
-
},
|
|
75
|
+
}, p = (e) => e.split(".").map((e, t) => t === 0 ? l(e) : e).join("."), m = class extends Error {
|
|
77
76
|
constructor(e) {
|
|
78
77
|
super(e), this.name = this.constructor.name, typeof Error.captureStackTrace == "function" ? Error.captureStackTrace(this, this.constructor) : this.stack = Error(e).stack;
|
|
79
78
|
}
|
|
80
|
-
},
|
|
79
|
+
}, h = class {
|
|
81
80
|
constructor(e, t, n) {
|
|
82
|
-
this.rawName = e, this.description = t, this.config = Object.assign({}, n), e = e.replace(/\.\*/g, ""), this.negated = !1, this.names =
|
|
81
|
+
this.rawName = e, this.description = t, this.config = Object.assign({}, n), e = e.replace(/\.\*/g, ""), this.negated = !1, this.names = i(e).split(",").map((e) => {
|
|
83
82
|
let t = e.trim().replace(/^-{1,2}/, "");
|
|
84
|
-
return t.startsWith("no-") && (this.negated = !0, t = t.replace(/^no-/, "")),
|
|
83
|
+
return t.startsWith("no-") && (this.negated = !0, t = t.replace(/^no-/, "")), p(t);
|
|
85
84
|
}).sort((e, t) => e.length > t.length ? 1 : -1), this.name = this.names[this.names.length - 1], this.negated && this.config.default == null && (this.config.default = !0), e.includes("<") ? this.required = !0 : e.includes("[") ? this.required = !1 : this.isBoolean = !0;
|
|
86
85
|
}
|
|
87
|
-
},
|
|
86
|
+
}, g = process.argv, _ = `${process.platform}-${process.arch} node-${process.version}`, v = class {
|
|
88
87
|
constructor(e, t, n = {}, r) {
|
|
89
|
-
this.rawName = e, this.description = t, this.config = n, this.cli = r, this.options = [], this.aliasNames = [], this.name =
|
|
88
|
+
this.rawName = e, this.description = t, this.config = n, this.cli = r, this.options = [], this.aliasNames = [], this.name = i(e), this.args = a(e), this.examples = [];
|
|
90
89
|
}
|
|
91
90
|
usage(e) {
|
|
92
91
|
return this.usageText = e, this;
|
|
@@ -104,7 +103,7 @@ var a = (e) => e.replace(/[<[].+/, "").trim(), o = (e) => {
|
|
|
104
103
|
return this.examples.push(e), this;
|
|
105
104
|
}
|
|
106
105
|
option(e, t, n) {
|
|
107
|
-
let r = new
|
|
106
|
+
let r = new h(e, t, n);
|
|
108
107
|
return this.options.push(r), this;
|
|
109
108
|
}
|
|
110
109
|
alias(e) {
|
|
@@ -120,7 +119,7 @@ var a = (e) => e.replace(/[<[].+/, "").trim(), o = (e) => {
|
|
|
120
119
|
return this.name === "" || this.aliasNames.includes("!");
|
|
121
120
|
}
|
|
122
121
|
get isGlobalCommand() {
|
|
123
|
-
return this instanceof
|
|
122
|
+
return this instanceof y;
|
|
124
123
|
}
|
|
125
124
|
hasOption(e) {
|
|
126
125
|
return e = e.split(".")[0], this.options.find((t) => t.names.includes(e));
|
|
@@ -131,10 +130,10 @@ var a = (e) => e.replace(/[<[].+/, "").trim(), o = (e) => {
|
|
|
131
130
|
title: "Usage",
|
|
132
131
|
body: ` $ ${e} ${this.usageText || this.rawName}`
|
|
133
132
|
}), (this.isGlobalCommand || this.isDefaultCommand) && t.length > 0) {
|
|
134
|
-
let n =
|
|
133
|
+
let n = s(t.map((e) => e.rawName));
|
|
135
134
|
a.push({
|
|
136
135
|
title: "Commands",
|
|
137
|
-
body: t.map((e) => ` ${
|
|
136
|
+
body: t.map((e) => ` ${c(e.rawName, n.length)} ${e.description}`).join("\n")
|
|
138
137
|
}), a.push({
|
|
139
138
|
title: "For more info, run any command with the `--help` flag",
|
|
140
139
|
body: t.map((t) => ` $ ${e}${t.name === "" ? "" : ` ${t.name}`} --help`).join("\n")
|
|
@@ -142,10 +141,10 @@ var a = (e) => e.replace(/[<[].+/, "").trim(), o = (e) => {
|
|
|
142
141
|
}
|
|
143
142
|
let o = this.isGlobalCommand ? r : [...this.options, ...r || []];
|
|
144
143
|
if (!this.isGlobalCommand && !this.isDefaultCommand && (o = o.filter((e) => e.name !== "version")), o.length > 0) {
|
|
145
|
-
let e =
|
|
144
|
+
let e = s(o.map((e) => e.rawName));
|
|
146
145
|
a.push({
|
|
147
146
|
title: "Options",
|
|
148
|
-
body: o.map((t) => ` ${
|
|
147
|
+
body: o.map((t) => ` ${c(t.rawName, e.length)} ${t.description} ${t.config.default === void 0 ? "" : `(default: ${t.config.default})`}`).join("\n")
|
|
149
148
|
});
|
|
150
149
|
}
|
|
151
150
|
this.examples.length > 0 && a.push({
|
|
@@ -156,16 +155,16 @@ ${e.body}` : e.body).join("\n\n"));
|
|
|
156
155
|
}
|
|
157
156
|
outputVersion() {
|
|
158
157
|
let { name: e } = this.cli, { versionNumber: t } = this.cli.globalCommand;
|
|
159
|
-
t && console.log(`${e}/${t} ${
|
|
158
|
+
t && console.log(`${e}/${t} ${_}`);
|
|
160
159
|
}
|
|
161
160
|
checkRequiredArgs() {
|
|
162
161
|
let e = this.args.filter((e) => e.required).length;
|
|
163
|
-
if (this.cli.args.length < e) throw new
|
|
162
|
+
if (this.cli.args.length < e) throw new m(`missing required args for command \`${this.rawName}\``);
|
|
164
163
|
}
|
|
165
164
|
checkUnknownOptions() {
|
|
166
165
|
let { options: e, globalCommand: t } = this.cli;
|
|
167
166
|
if (!this.config.allowUnknownOptions) {
|
|
168
|
-
for (let n of Object.keys(e)) if (n !== "--" && !this.hasOption(n) && !t.hasOption(n)) throw new
|
|
167
|
+
for (let n of Object.keys(e)) if (n !== "--" && !this.hasOption(n) && !t.hasOption(n)) throw new m(`Unknown option \`${n.length > 1 ? `--${n}` : `-${n}`}\``);
|
|
169
168
|
}
|
|
170
169
|
}
|
|
171
170
|
checkOptionValue() {
|
|
@@ -174,23 +173,23 @@ ${e.body}` : e.body).join("\n\n"));
|
|
|
174
173
|
let r = e[t.name.split(".")[0]];
|
|
175
174
|
if (t.required) {
|
|
176
175
|
let e = n.some((e) => e.negated && e.names.includes(t.name));
|
|
177
|
-
if (r === !0 || r === !1 && !e) throw new
|
|
176
|
+
if (r === !0 || r === !1 && !e) throw new m(`option \`${t.rawName}\` value is missing`);
|
|
178
177
|
}
|
|
179
178
|
}
|
|
180
179
|
}
|
|
181
|
-
},
|
|
180
|
+
}, y = class extends v {
|
|
182
181
|
constructor(e) {
|
|
183
182
|
super("@@global@@", "", {}, e);
|
|
184
183
|
}
|
|
185
|
-
},
|
|
184
|
+
}, b = Object.assign, x = class extends e {
|
|
186
185
|
constructor(e = "") {
|
|
187
|
-
super(), this.name = e, this.commands = [], this.rawArgs = [], this.args = [], this.options = {}, this.globalCommand = new
|
|
186
|
+
super(), this.name = e, this.commands = [], this.rawArgs = [], this.args = [], this.options = {}, this.globalCommand = new y(this), this.globalCommand.usage("<command> [options]");
|
|
188
187
|
}
|
|
189
188
|
usage(e) {
|
|
190
189
|
return this.globalCommand.usage(e), this;
|
|
191
190
|
}
|
|
192
191
|
command(e, t, n) {
|
|
193
|
-
let r = new
|
|
192
|
+
let r = new v(e, t || "", n, this);
|
|
194
193
|
return r.globalCommand = this.globalCommand, this.commands.push(r), r;
|
|
195
194
|
}
|
|
196
195
|
option(e, t, n) {
|
|
@@ -217,14 +216,14 @@ ${e.body}` : e.body).join("\n\n"));
|
|
|
217
216
|
unsetMatchedCommand() {
|
|
218
217
|
this.matchedCommand = void 0, this.matchedCommandName = void 0;
|
|
219
218
|
}
|
|
220
|
-
parse(e =
|
|
221
|
-
this.rawArgs = e, this.name ||= e[1] ?
|
|
219
|
+
parse(e = g, { run: t = !0 } = {}) {
|
|
220
|
+
this.rawArgs = e, this.name ||= e[1] ? f(e[1]) : "cli";
|
|
222
221
|
let n = !0;
|
|
223
222
|
for (let t of this.commands) {
|
|
224
223
|
let r = this.mri(e.slice(2), t), i = r.args[0];
|
|
225
224
|
if (t.isMatched(i)) {
|
|
226
225
|
n = !1;
|
|
227
|
-
let e =
|
|
226
|
+
let e = b(b({}, r), { args: r.args.slice(1) });
|
|
228
227
|
this.setParsedInfo(e, t, i), this.emit(`command:${i}`, t);
|
|
229
228
|
}
|
|
230
229
|
}
|
|
@@ -247,19 +246,19 @@ ${e.body}` : e.body).join("\n\n"));
|
|
|
247
246
|
return t && this.runMatchedCommand(), !this.matchedCommand && this.args[0] && this.emit("command:*"), r;
|
|
248
247
|
}
|
|
249
248
|
mri(e, t) {
|
|
250
|
-
let n = [...this.globalCommand.options, ...t ? t.options : []],
|
|
251
|
-
|
|
252
|
-
let c =
|
|
253
|
-
c = Object.keys(c).reduce((e, t) =>
|
|
254
|
-
let l = c._,
|
|
249
|
+
let n = [...this.globalCommand.options, ...t ? t.options : []], i = o(n), a = [], s = e.indexOf("--");
|
|
250
|
+
s > -1 && (a = e.slice(s + 1), e = e.slice(0, s));
|
|
251
|
+
let c = r(e, i);
|
|
252
|
+
c = Object.keys(c).reduce((e, t) => b(b({}, e), { [p(t)]: c[t] }), { _: [] });
|
|
253
|
+
let l = c._, f = { "--": a }, m = t && t.config.ignoreOptionDefaultValue ? t.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue, h = Object.create(null);
|
|
255
254
|
for (let e of n) {
|
|
256
|
-
if (!
|
|
255
|
+
if (!m && e.config.default !== void 0) for (let t of e.names) f[t] = e.config.default;
|
|
257
256
|
Array.isArray(e.config.type) && h[e.name] === void 0 && (h[e.name] = Object.create(null), h[e.name].shouldTransform = !0, h[e.name].transformFunction = e.config.type[0]);
|
|
258
257
|
}
|
|
259
|
-
for (let e of Object.keys(c)) e !== "_" && (
|
|
258
|
+
for (let e of Object.keys(c)) e !== "_" && (u(f, e.split("."), c[e]), d(f, h));
|
|
260
259
|
return {
|
|
261
260
|
args: l,
|
|
262
|
-
options:
|
|
261
|
+
options: f
|
|
263
262
|
};
|
|
264
263
|
}
|
|
265
264
|
runMatchedCommand() {
|
|
@@ -271,8 +270,13 @@ ${e.body}` : e.body).join("\n\n"));
|
|
|
271
270
|
t.variadic ? r.push(e.slice(n)) : r.push(e[n]);
|
|
272
271
|
}), r.push(t), n.commandAction.apply(this, r);
|
|
273
272
|
}
|
|
274
|
-
},
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
273
|
+
}, S = (e = "") => new x(e), C = "0.1.2", w = S("vue-grab");
|
|
274
|
+
w.command("init", "Initialize vue-grab in your project").option("-y, --yes", "Skip prompts and use defaults").option("--dry-run", "Show the planned changes without writing files or installing packages").option("--skip-install", "Do not install @sakana-y/vue-grab").action(async (e) => {
|
|
275
|
+
try {
|
|
276
|
+
let { initProject: t } = await import("./init-BuQE50ix.js").then((e) => e.n), n = await t(e), r = n.main.status === "changed" || n.vite.status === "changed" || n.install.needed && !n.install.skipped;
|
|
277
|
+
n.cancelReason === "non-interactive" && r && (process.exitCode = 1);
|
|
278
|
+
} catch (e) {
|
|
279
|
+
console.error(e instanceof Error ? e.message : String(e)), process.exitCode = 1;
|
|
280
|
+
}
|
|
281
|
+
}), w.help(), w.version(C), w.parse();
|
|
278
282
|
//#endregion
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface InitOptions {
|
|
2
|
+
yes?: boolean;
|
|
3
|
+
dryRun?: boolean;
|
|
4
|
+
skipInstall?: boolean;
|
|
5
|
+
/** Test-only override. Defaults to process.cwd(). */
|
|
6
|
+
cwd?: string;
|
|
7
|
+
}
|
|
8
|
+
export type InitStepStatus = "changed" | "unchanged" | "manual" | "missing";
|
|
9
|
+
export type InitCancelReason = "non-interactive" | "prompt-declined";
|
|
10
|
+
export interface InitFileStep {
|
|
11
|
+
path?: string;
|
|
12
|
+
status: InitStepStatus;
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
export interface InitInstallStep {
|
|
16
|
+
needed: boolean;
|
|
17
|
+
skipped: boolean;
|
|
18
|
+
packageManager: PackageManager;
|
|
19
|
+
command: string;
|
|
20
|
+
}
|
|
21
|
+
export interface InitResult {
|
|
22
|
+
cwd: string;
|
|
23
|
+
supported: boolean;
|
|
24
|
+
packageManager: PackageManager;
|
|
25
|
+
install: InitInstallStep;
|
|
26
|
+
main: InitFileStep;
|
|
27
|
+
vite: InitFileStep;
|
|
28
|
+
applied: boolean;
|
|
29
|
+
dryRun: boolean;
|
|
30
|
+
cancelReason?: InitCancelReason;
|
|
31
|
+
}
|
|
32
|
+
type PackageManager = "pnpm" | "npm" | "yarn" | "bun";
|
|
33
|
+
export declare function initProject(options?: InitOptions): Promise<InitResult>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC5E,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,KAAK,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAmbtD,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwHhF"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./init-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./init-BNCDwtX-.cjs`);exports.initProject=e.t;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,iBAAiB,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "./init-
|
|
1
|
+
import { t as e } from "./init-BuQE50ix.js";
|
|
2
2
|
export { e as initProject };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let u=require(`node:child_process`),d=require(`node:fs/promises`),f=require(`node:path`);f=l(f);let p=require(`node:readline/promises`);var m=o(((e,t)=>{var n=String,r=function(){return{isColorSupported:!1,reset:n,bold:n,dim:n,italic:n,underline:n,inverse:n,hidden:n,strikethrough:n,black:n,red:n,green:n,yellow:n,blue:n,magenta:n,cyan:n,white:n,gray:n,bgBlack:n,bgRed:n,bgGreen:n,bgYellow:n,bgBlue:n,bgMagenta:n,bgCyan:n,bgWhite:n,blackBright:n,redBright:n,greenBright:n,yellowBright:n,blueBright:n,magentaBright:n,cyanBright:n,whiteBright:n,bgBlackBright:n,bgRedBright:n,bgGreenBright:n,bgYellowBright:n,bgBlueBright:n,bgMagentaBright:n,bgCyanBright:n,bgWhiteBright:n}};t.exports=r(),t.exports.createColors=r})),h=s({initProject:()=>V}),g=l(m(),1),_=`@sakana-y/vue-grab`,v=[`src/main.ts`,`src/main.js`],y=[`vite.config.ts`,`vite.config.mts`,`vite.config.js`,`vite.config.mjs`];function b(e,t){return!!(e.dependencies?.[t]??e.devDependencies?.[t]??e.peerDependencies?.[t])}async function x(e){let t=[[`pnpm-lock.yaml`,`pnpm`],[`package-lock.json`,`npm`],[`npm-shrinkwrap.json`,`npm`],[`yarn.lock`,`yarn`],[`bun.lockb`,`bun`],[`bun.lock`,`bun`]],n=await Promise.all(t.map(([t])=>(0,d.access)(f.default.join(e,t)).then(()=>!0,()=>!1)));return t.find((e,t)=>n[t])?.[1]??`npm`}function S(e){switch(e){case`pnpm`:return{command:`pnpm`,args:[`add`,`-D`,_]};case`yarn`:return{command:`yarn`,args:[`add`,`-D`,_]};case`bun`:return{command:`bun`,args:[`add`,`-d`,_]};case`npm`:return{command:`npm`,args:[`install`,`-D`,_]}}}function C(e,t){return[e,...t].join(` `)}async function w(e,t){async function n(r){let i=t[r];if(i!==void 0)try{return{relativePath:i,content:await(0,d.readFile)(f.default.join(e,i),`utf8`)}}catch(e){if(e.code!==`ENOENT`)throw e;return n(r+1)}}return n(0)}function T(e){return e.includes(`\r
|
|
2
|
+
`)?`\r
|
|
3
|
+
`:`
|
|
4
|
+
`}function E(e,t){return t.replace(/\n/g,T(e))}function D(e,t){let n=T(e),r=e.split(/\r?\n/),i=0;for(let e=0;e<r.length;e+=1)/^\s*import\s/.test(r[e])&&(i=e+1);return r.splice(i,0,t),r.join(n)}function O(e){if(/createVueGrab\s*\(/.test(e))return{status:`unchanged`,message:`Vue Grab runtime setup already exists in the app entrypoint.`};let t=e.match(/\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*createApp\s*\(/);if(!t)return{status:`manual`,message:`Could not find a simple createApp() assignment.`};let n=t[1],r=n.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),i=RegExp(`(^[ \\t]*)${r}\\.mount\\s*\\(`,`m`),a=e.match(i);if(!a||a.index==null)return{status:`manual`,message:`Could not find ${n}.mount(...) in the app entrypoint.`};let o=D(e,`import { createVueGrab } from "${_}";`),s=o.match(i);if(!s||s.index==null)return{status:`manual`,message:`Could not find ${n}.mount(...) after import insertion.`};let c=s[1]??``,l=E(o,`${c}if (import.meta.env.DEV) {
|
|
5
|
+
${c} ${n}.use(
|
|
6
|
+
${c} createVueGrab({
|
|
7
|
+
${c} floatingButton: { enabled: true },
|
|
8
|
+
${c} }),
|
|
9
|
+
${c} );
|
|
10
|
+
${c}}
|
|
11
|
+
|
|
12
|
+
`);return o=o.slice(0,s.index)+l+o.slice(s.index),{status:`changed`,content:o,message:`Added dev-only createVueGrab() setup.`}}function k(e,t){let n=0,r,i=!1,a=!1;for(let o=t;o<e.length;o+=1){let t=e[o],s=e[o+1],c=e[o-1];if(i){t===`
|
|
13
|
+
`&&(i=!1);continue}if(a){t===`*`&&s===`/`&&(a=!1,o+=1);continue}if(r){t===r&&c!==`\\`&&(r=void 0);continue}if(t===`/`&&s===`/`){i=!0,o+=1;continue}if(t===`/`&&s===`*`){a=!0,o+=1;continue}if(t===`'`||t===`"`||t==="`"){r=t;continue}if(t===`[`&&(n+=1),t===`]`&&(--n,n===0))return o}}function A(e,t){let n=e.lastIndexOf(`
|
|
14
|
+
`,t)+1;return e.slice(n,t).match(/^[ \t]*/)?.[0]??``}function j(e,t,n){let r=T(e),i=e.slice(t+1,n);if(!i.includes(`
|
|
15
|
+
`)&&!i.includes(`\r`)){let r=i.trim().replace(/,\s*$/,``),a=r?`${r}, vueGrabPlugin()`:`vueGrabPlugin()`;return e.slice(0,t+1)+a+e.slice(n)}let a=e.slice(0,n).replace(/\s*$/,``),o=e.slice(a.length,n),s=a.endsWith(`[`)||a.endsWith(`,`)?``:`,`,c=`${A(e,n)} `;return a+s+r+c+`vueGrabPlugin(),`+o+e.slice(n)}function M(e){if(/vueGrabPlugin\s*\(/.test(e)||e.includes(`${_}/vite`))return{status:`unchanged`,message:`Vue Grab Vite plugin already exists.`};let t=e.match(/\bplugins\s*:\s*\[/);if(!t||t.index==null)return{status:`manual`,message:`Could not find a simple Vite plugins array.`};let n=e.indexOf(`[`,t.index),r=k(e,n);return r==null?{status:`manual`,message:`Could not find the end of the Vite plugins array.`}:{status:`changed`,content:D(j(e,n,r),`import { vueGrabPlugin } from "${_}/vite";`),message:`Added vueGrabPlugin() to Vite dev server config.`}}function N(e,t){let n=[{needed:e.status===`manual`||e.status===`missing`,label:`Manual app setup needed:`,lines:[` import { createVueGrab } from "${_}";`,` if (import.meta.env.DEV) app.use(createVueGrab({ floatingButton: { enabled: true } }));`]},{needed:t.status===`manual`||t.status===`missing`,label:`Manual Vite setup needed:`,lines:[` import { vueGrabPlugin } from "${_}/vite";`,` plugins: [vue(), vueGrabPlugin()]`]}];for(let e of n)if(e.needed){console.log(g.default.yellow(e.label));for(let t of e.lines)console.log(t)}}async function P(){if(!process.stdin.isTTY)return console.log(g.default.yellow(`Non-interactive terminal detected. Re-run with --yes to apply changes.`)),`non-interactive`;let e=(0,p.createInterface)({input:process.stdin,output:process.stdout});try{let t=await e.question(`Apply these changes? (Y/n) `);return/^n(o)?$/i.test(t.trim())?`prompt-declined`:void 0}finally{e.close()}}async function F(e,t,n){await new Promise((r,i)=>{let a=(0,u.spawn)(t,n,{cwd:e,stdio:`inherit`,shell:process.platform===`win32`});a.on(`error`,i),a.on(`close`,e=>{if(e===0){r();return}i(Error(`${C(t,n)} exited with code ${e}`))})})}async function I(e){try{return JSON.parse(await(0,d.readFile)(f.default.join(e,`package.json`),`utf8`))}catch{return}}function L(e,t,n){return!e||!t?{status:`missing`,message:n}:{path:e,status:t.status,message:t.message}}function R(e,t,n,r){return t?e?{path:e,status:`manual`,message:r}:{status:`missing`,message:n}:{path:e,status:e?`manual`:`missing`,message:`Could not read package.json.`}}var z={changed:g.default.green,unchanged:g.default.cyan,manual:g.default.yellow,missing:g.default.yellow};function B(e,t){let n=t.path?` ${g.default.dim(t.path)}`:``,r=z[t.status];console.log(`${r(t.status.padEnd(9))} ${e}${n} - ${t.message}`)}async function V(e={}){let t=f.default.resolve(e.cwd??process.cwd()),[n,r,i,a]=await Promise.all([x(t),I(t),w(t,v),w(t,y)]),o=S(n),s=r?b(r,`vue`):!1,c=r?b(r,`vite`):!1,l=r?b(r,_):!1,u=i?.relativePath,p=a?.relativePath,m=!!(r&&s&&c&&u&&p);console.log(g.default.cyan(`vue-grab`)+` - Initializing...`);let h=!l,T={needed:h,skipped:h&&(!!e.skipInstall||!!e.dryRun),packageManager:n,command:C(o.command,o.args)};if(!m){let i={cwd:t,supported:!1,packageManager:n,install:T,main:R(u,r,`Could not find src/main.ts or src/main.js.`,`This does not look like a supported Vite + Vue app entrypoint.`),vite:R(p,r,`Could not find a Vite config.`,`This does not look like a supported Vite + Vue config.`),applied:!1,dryRun:!!e.dryRun};return console.log(g.default.yellow(`Unsupported project shape. Vue Grab init currently supports Vite + Vue apps.`)),N(i.main,i.vite),i}if(!u||!p||!i||!a)throw Error(`Internal: supported project missing entrypoint paths.`);let E=[],D=O(i.content),k=M(a.content),A=L(u,D,`Could not find src/main.ts or src/main.js.`),j=L(p,k,`Could not find a Vite config.`);if(D.status===`changed`&&D.content!=null&&E.push({path:u,content:D.content}),k.status===`changed`&&k.content!=null&&E.push({path:p,content:k.content}),T.needed){let e=T.skipped?`planned`:`will run`;console.log(`${g.default.green(`install `)} ${T.command} (${e})`)}else console.log(`${g.default.cyan(`unchanged`)} ${_} already installed.`);B(`entry`,A),B(`vite`,j),N(A,j);let z={cwd:t,supported:!0,packageManager:n,install:T,main:A,vite:j,applied:!1,dryRun:!!e.dryRun};if(e.dryRun)return console.log(g.default.yellow(`Dry run only. No files were changed and no packages were installed.`)),z;if(!e.yes){let e=await P();if(e)return z.cancelReason=e,console.log(g.default.yellow(`Canceled.`)),z}return await Promise.all(E.map(e=>(0,d.writeFile)(f.default.join(t,e.path),e.content,`utf8`))),T.needed&&!e.skipInstall?await F(t,o.command,o.args):T.needed&&e.skipInstall&&console.log(g.default.yellow(`Skipped install. Run ${T.command} when you are ready.`)),z.applied=!0,console.log(g.default.green(`Done!`)),z}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return V}});
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { spawn as e } from "node:child_process";
|
|
2
|
+
import { access as t, readFile as n, writeFile as r } from "node:fs/promises";
|
|
3
|
+
import i from "node:path";
|
|
4
|
+
import { createInterface as a } from "node:readline/promises";
|
|
5
|
+
//#region \0rolldown/runtime.js
|
|
6
|
+
var o = Object.create, s = Object.defineProperty, c = Object.getOwnPropertyDescriptor, l = Object.getOwnPropertyNames, u = Object.getPrototypeOf, d = Object.prototype.hasOwnProperty, f = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), p = (e, t) => {
|
|
7
|
+
let n = {};
|
|
8
|
+
for (var r in e) s(n, r, {
|
|
9
|
+
get: e[r],
|
|
10
|
+
enumerable: !0
|
|
11
|
+
});
|
|
12
|
+
return t || s(n, Symbol.toStringTag, { value: "Module" }), n;
|
|
13
|
+
}, m = (e, t, n, r) => {
|
|
14
|
+
if (t && typeof t == "object" || typeof t == "function") for (var i = l(t), a = 0, o = i.length, u; a < o; a++) u = i[a], !d.call(e, u) && u !== n && s(e, u, {
|
|
15
|
+
get: ((e) => t[e]).bind(null, u),
|
|
16
|
+
enumerable: !(r = c(t, u)) || r.enumerable
|
|
17
|
+
});
|
|
18
|
+
return e;
|
|
19
|
+
}, h = (e, t, n) => (n = e == null ? {} : o(u(e)), m(t || !e || !e.__esModule ? s(n, "default", {
|
|
20
|
+
value: e,
|
|
21
|
+
enumerable: !0
|
|
22
|
+
}) : n, e)), g = /* @__PURE__ */ f(((e, t) => {
|
|
23
|
+
var n = String, r = function() {
|
|
24
|
+
return {
|
|
25
|
+
isColorSupported: !1,
|
|
26
|
+
reset: n,
|
|
27
|
+
bold: n,
|
|
28
|
+
dim: n,
|
|
29
|
+
italic: n,
|
|
30
|
+
underline: n,
|
|
31
|
+
inverse: n,
|
|
32
|
+
hidden: n,
|
|
33
|
+
strikethrough: n,
|
|
34
|
+
black: n,
|
|
35
|
+
red: n,
|
|
36
|
+
green: n,
|
|
37
|
+
yellow: n,
|
|
38
|
+
blue: n,
|
|
39
|
+
magenta: n,
|
|
40
|
+
cyan: n,
|
|
41
|
+
white: n,
|
|
42
|
+
gray: n,
|
|
43
|
+
bgBlack: n,
|
|
44
|
+
bgRed: n,
|
|
45
|
+
bgGreen: n,
|
|
46
|
+
bgYellow: n,
|
|
47
|
+
bgBlue: n,
|
|
48
|
+
bgMagenta: n,
|
|
49
|
+
bgCyan: n,
|
|
50
|
+
bgWhite: n,
|
|
51
|
+
blackBright: n,
|
|
52
|
+
redBright: n,
|
|
53
|
+
greenBright: n,
|
|
54
|
+
yellowBright: n,
|
|
55
|
+
blueBright: n,
|
|
56
|
+
magentaBright: n,
|
|
57
|
+
cyanBright: n,
|
|
58
|
+
whiteBright: n,
|
|
59
|
+
bgBlackBright: n,
|
|
60
|
+
bgRedBright: n,
|
|
61
|
+
bgGreenBright: n,
|
|
62
|
+
bgYellowBright: n,
|
|
63
|
+
bgBlueBright: n,
|
|
64
|
+
bgMagentaBright: n,
|
|
65
|
+
bgCyanBright: n,
|
|
66
|
+
bgWhiteBright: n
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
t.exports = r(), t.exports.createColors = r;
|
|
70
|
+
})), _ = /* @__PURE__ */ p({ initProject: () => U }), v = /* @__PURE__ */ h(g(), 1), y = "@sakana-y/vue-grab", b = ["src/main.ts", "src/main.js"], x = [
|
|
71
|
+
"vite.config.ts",
|
|
72
|
+
"vite.config.mts",
|
|
73
|
+
"vite.config.js",
|
|
74
|
+
"vite.config.mjs"
|
|
75
|
+
];
|
|
76
|
+
function S(e, t) {
|
|
77
|
+
return !!(e.dependencies?.[t] ?? e.devDependencies?.[t] ?? e.peerDependencies?.[t]);
|
|
78
|
+
}
|
|
79
|
+
async function C(e) {
|
|
80
|
+
let n = [
|
|
81
|
+
["pnpm-lock.yaml", "pnpm"],
|
|
82
|
+
["package-lock.json", "npm"],
|
|
83
|
+
["npm-shrinkwrap.json", "npm"],
|
|
84
|
+
["yarn.lock", "yarn"],
|
|
85
|
+
["bun.lockb", "bun"],
|
|
86
|
+
["bun.lock", "bun"]
|
|
87
|
+
], r = await Promise.all(n.map(([n]) => t(i.join(e, n)).then(() => !0, () => !1)));
|
|
88
|
+
return n.find((e, t) => r[t])?.[1] ?? "npm";
|
|
89
|
+
}
|
|
90
|
+
function w(e) {
|
|
91
|
+
switch (e) {
|
|
92
|
+
case "pnpm": return {
|
|
93
|
+
command: "pnpm",
|
|
94
|
+
args: [
|
|
95
|
+
"add",
|
|
96
|
+
"-D",
|
|
97
|
+
y
|
|
98
|
+
]
|
|
99
|
+
};
|
|
100
|
+
case "yarn": return {
|
|
101
|
+
command: "yarn",
|
|
102
|
+
args: [
|
|
103
|
+
"add",
|
|
104
|
+
"-D",
|
|
105
|
+
y
|
|
106
|
+
]
|
|
107
|
+
};
|
|
108
|
+
case "bun": return {
|
|
109
|
+
command: "bun",
|
|
110
|
+
args: [
|
|
111
|
+
"add",
|
|
112
|
+
"-d",
|
|
113
|
+
y
|
|
114
|
+
]
|
|
115
|
+
};
|
|
116
|
+
case "npm": return {
|
|
117
|
+
command: "npm",
|
|
118
|
+
args: [
|
|
119
|
+
"install",
|
|
120
|
+
"-D",
|
|
121
|
+
y
|
|
122
|
+
]
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function T(e, t) {
|
|
127
|
+
return [e, ...t].join(" ");
|
|
128
|
+
}
|
|
129
|
+
async function E(e, t) {
|
|
130
|
+
async function r(a) {
|
|
131
|
+
let o = t[a];
|
|
132
|
+
if (o !== void 0) try {
|
|
133
|
+
return {
|
|
134
|
+
relativePath: o,
|
|
135
|
+
content: await n(i.join(e, o), "utf8")
|
|
136
|
+
};
|
|
137
|
+
} catch (e) {
|
|
138
|
+
if (e.code !== "ENOENT") throw e;
|
|
139
|
+
return r(a + 1);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return r(0);
|
|
143
|
+
}
|
|
144
|
+
function D(e) {
|
|
145
|
+
return e.includes("\r\n") ? "\r\n" : "\n";
|
|
146
|
+
}
|
|
147
|
+
function O(e, t) {
|
|
148
|
+
return t.replace(/\n/g, D(e));
|
|
149
|
+
}
|
|
150
|
+
function k(e, t) {
|
|
151
|
+
let n = D(e), r = e.split(/\r?\n/), i = 0;
|
|
152
|
+
for (let e = 0; e < r.length; e += 1) /^\s*import\s/.test(r[e]) && (i = e + 1);
|
|
153
|
+
return r.splice(i, 0, t), r.join(n);
|
|
154
|
+
}
|
|
155
|
+
function A(e) {
|
|
156
|
+
if (/createVueGrab\s*\(/.test(e)) return {
|
|
157
|
+
status: "unchanged",
|
|
158
|
+
message: "Vue Grab runtime setup already exists in the app entrypoint."
|
|
159
|
+
};
|
|
160
|
+
let t = e.match(/\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*createApp\s*\(/);
|
|
161
|
+
if (!t) return {
|
|
162
|
+
status: "manual",
|
|
163
|
+
message: "Could not find a simple createApp() assignment."
|
|
164
|
+
};
|
|
165
|
+
let n = t[1], r = n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), i = RegExp(`(^[ \\t]*)${r}\\.mount\\s*\\(`, "m"), a = e.match(i);
|
|
166
|
+
if (!a || a.index == null) return {
|
|
167
|
+
status: "manual",
|
|
168
|
+
message: `Could not find ${n}.mount(...) in the app entrypoint.`
|
|
169
|
+
};
|
|
170
|
+
let o = k(e, `import { createVueGrab } from "${y}";`), s = o.match(i);
|
|
171
|
+
if (!s || s.index == null) return {
|
|
172
|
+
status: "manual",
|
|
173
|
+
message: `Could not find ${n}.mount(...) after import insertion.`
|
|
174
|
+
};
|
|
175
|
+
let c = s[1] ?? "", l = O(o, `${c}if (import.meta.env.DEV) {
|
|
176
|
+
${c} ${n}.use(
|
|
177
|
+
${c} createVueGrab({
|
|
178
|
+
${c} floatingButton: { enabled: true },
|
|
179
|
+
${c} }),
|
|
180
|
+
${c} );
|
|
181
|
+
${c}}
|
|
182
|
+
|
|
183
|
+
`);
|
|
184
|
+
return o = o.slice(0, s.index) + l + o.slice(s.index), {
|
|
185
|
+
status: "changed",
|
|
186
|
+
content: o,
|
|
187
|
+
message: "Added dev-only createVueGrab() setup."
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function j(e, t) {
|
|
191
|
+
let n = 0, r, i = !1, a = !1;
|
|
192
|
+
for (let o = t; o < e.length; o += 1) {
|
|
193
|
+
let t = e[o], s = e[o + 1], c = e[o - 1];
|
|
194
|
+
if (i) {
|
|
195
|
+
t === "\n" && (i = !1);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (a) {
|
|
199
|
+
t === "*" && s === "/" && (a = !1, o += 1);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (r) {
|
|
203
|
+
t === r && c !== "\\" && (r = void 0);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (t === "/" && s === "/") {
|
|
207
|
+
i = !0, o += 1;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
if (t === "/" && s === "*") {
|
|
211
|
+
a = !0, o += 1;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (t === "'" || t === "\"" || t === "`") {
|
|
215
|
+
r = t;
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (t === "[" && (n += 1), t === "]" && (--n, n === 0)) return o;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function M(e, t) {
|
|
222
|
+
let n = e.lastIndexOf("\n", t) + 1;
|
|
223
|
+
return e.slice(n, t).match(/^[ \t]*/)?.[0] ?? "";
|
|
224
|
+
}
|
|
225
|
+
function N(e, t, n) {
|
|
226
|
+
let r = D(e), i = e.slice(t + 1, n);
|
|
227
|
+
if (!i.includes("\n") && !i.includes("\r")) {
|
|
228
|
+
let r = i.trim().replace(/,\s*$/, ""), a = r ? `${r}, vueGrabPlugin()` : "vueGrabPlugin()";
|
|
229
|
+
return e.slice(0, t + 1) + a + e.slice(n);
|
|
230
|
+
}
|
|
231
|
+
let a = e.slice(0, n).replace(/\s*$/, ""), o = e.slice(a.length, n), s = a.endsWith("[") || a.endsWith(",") ? "" : ",", c = `${M(e, n)} `;
|
|
232
|
+
return a + s + r + c + "vueGrabPlugin()," + o + e.slice(n);
|
|
233
|
+
}
|
|
234
|
+
function P(e) {
|
|
235
|
+
if (/vueGrabPlugin\s*\(/.test(e) || e.includes(`${y}/vite`)) return {
|
|
236
|
+
status: "unchanged",
|
|
237
|
+
message: "Vue Grab Vite plugin already exists."
|
|
238
|
+
};
|
|
239
|
+
let t = e.match(/\bplugins\s*:\s*\[/);
|
|
240
|
+
if (!t || t.index == null) return {
|
|
241
|
+
status: "manual",
|
|
242
|
+
message: "Could not find a simple Vite plugins array."
|
|
243
|
+
};
|
|
244
|
+
let n = e.indexOf("[", t.index), r = j(e, n);
|
|
245
|
+
return r == null ? {
|
|
246
|
+
status: "manual",
|
|
247
|
+
message: "Could not find the end of the Vite plugins array."
|
|
248
|
+
} : {
|
|
249
|
+
status: "changed",
|
|
250
|
+
content: k(N(e, n, r), `import { vueGrabPlugin } from "${y}/vite";`),
|
|
251
|
+
message: "Added vueGrabPlugin() to Vite dev server config."
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
function F(e, t) {
|
|
255
|
+
let n = [{
|
|
256
|
+
needed: e.status === "manual" || e.status === "missing",
|
|
257
|
+
label: "Manual app setup needed:",
|
|
258
|
+
lines: [` import { createVueGrab } from "${y}";`, " if (import.meta.env.DEV) app.use(createVueGrab({ floatingButton: { enabled: true } }));"]
|
|
259
|
+
}, {
|
|
260
|
+
needed: t.status === "manual" || t.status === "missing",
|
|
261
|
+
label: "Manual Vite setup needed:",
|
|
262
|
+
lines: [` import { vueGrabPlugin } from "${y}/vite";`, " plugins: [vue(), vueGrabPlugin()]"]
|
|
263
|
+
}];
|
|
264
|
+
for (let e of n) if (e.needed) {
|
|
265
|
+
console.log(v.default.yellow(e.label));
|
|
266
|
+
for (let t of e.lines) console.log(t);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async function I() {
|
|
270
|
+
if (!process.stdin.isTTY) return console.log(v.default.yellow("Non-interactive terminal detected. Re-run with --yes to apply changes.")), "non-interactive";
|
|
271
|
+
let e = a({
|
|
272
|
+
input: process.stdin,
|
|
273
|
+
output: process.stdout
|
|
274
|
+
});
|
|
275
|
+
try {
|
|
276
|
+
let t = await e.question("Apply these changes? (Y/n) ");
|
|
277
|
+
return /^n(o)?$/i.test(t.trim()) ? "prompt-declined" : void 0;
|
|
278
|
+
} finally {
|
|
279
|
+
e.close();
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
async function L(t, n, r) {
|
|
283
|
+
await new Promise((i, a) => {
|
|
284
|
+
let o = e(n, r, {
|
|
285
|
+
cwd: t,
|
|
286
|
+
stdio: "inherit",
|
|
287
|
+
shell: process.platform === "win32"
|
|
288
|
+
});
|
|
289
|
+
o.on("error", a), o.on("close", (e) => {
|
|
290
|
+
if (e === 0) {
|
|
291
|
+
i();
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
a(/* @__PURE__ */ Error(`${T(n, r)} exited with code ${e}`));
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
async function R(e) {
|
|
299
|
+
try {
|
|
300
|
+
return JSON.parse(await n(i.join(e, "package.json"), "utf8"));
|
|
301
|
+
} catch {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function z(e, t, n) {
|
|
306
|
+
return !e || !t ? {
|
|
307
|
+
status: "missing",
|
|
308
|
+
message: n
|
|
309
|
+
} : {
|
|
310
|
+
path: e,
|
|
311
|
+
status: t.status,
|
|
312
|
+
message: t.message
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
function B(e, t, n, r) {
|
|
316
|
+
return t ? e ? {
|
|
317
|
+
path: e,
|
|
318
|
+
status: "manual",
|
|
319
|
+
message: r
|
|
320
|
+
} : {
|
|
321
|
+
status: "missing",
|
|
322
|
+
message: n
|
|
323
|
+
} : {
|
|
324
|
+
path: e,
|
|
325
|
+
status: e ? "manual" : "missing",
|
|
326
|
+
message: "Could not read package.json."
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
var V = {
|
|
330
|
+
changed: v.default.green,
|
|
331
|
+
unchanged: v.default.cyan,
|
|
332
|
+
manual: v.default.yellow,
|
|
333
|
+
missing: v.default.yellow
|
|
334
|
+
};
|
|
335
|
+
function H(e, t) {
|
|
336
|
+
let n = t.path ? ` ${v.default.dim(t.path)}` : "", r = V[t.status];
|
|
337
|
+
console.log(`${r(t.status.padEnd(9))} ${e}${n} - ${t.message}`);
|
|
338
|
+
}
|
|
339
|
+
async function U(e = {}) {
|
|
340
|
+
let t = i.resolve(e.cwd ?? process.cwd()), [n, a, o, s] = await Promise.all([
|
|
341
|
+
C(t),
|
|
342
|
+
R(t),
|
|
343
|
+
E(t, b),
|
|
344
|
+
E(t, x)
|
|
345
|
+
]), c = w(n), l = a ? S(a, "vue") : !1, u = a ? S(a, "vite") : !1, d = a ? S(a, y) : !1, f = o?.relativePath, p = s?.relativePath, m = !!(a && l && u && f && p);
|
|
346
|
+
console.log(v.default.cyan("vue-grab") + " - Initializing...");
|
|
347
|
+
let h = !d, g = {
|
|
348
|
+
needed: h,
|
|
349
|
+
skipped: h && (!!e.skipInstall || !!e.dryRun),
|
|
350
|
+
packageManager: n,
|
|
351
|
+
command: T(c.command, c.args)
|
|
352
|
+
};
|
|
353
|
+
if (!m) {
|
|
354
|
+
let r = {
|
|
355
|
+
cwd: t,
|
|
356
|
+
supported: !1,
|
|
357
|
+
packageManager: n,
|
|
358
|
+
install: g,
|
|
359
|
+
main: B(f, a, "Could not find src/main.ts or src/main.js.", "This does not look like a supported Vite + Vue app entrypoint."),
|
|
360
|
+
vite: B(p, a, "Could not find a Vite config.", "This does not look like a supported Vite + Vue config."),
|
|
361
|
+
applied: !1,
|
|
362
|
+
dryRun: !!e.dryRun
|
|
363
|
+
};
|
|
364
|
+
return console.log(v.default.yellow("Unsupported project shape. Vue Grab init currently supports Vite + Vue apps.")), F(r.main, r.vite), r;
|
|
365
|
+
}
|
|
366
|
+
if (!f || !p || !o || !s) throw Error("Internal: supported project missing entrypoint paths.");
|
|
367
|
+
let _ = [], D = A(o.content), O = P(s.content), k = z(f, D, "Could not find src/main.ts or src/main.js."), j = z(p, O, "Could not find a Vite config.");
|
|
368
|
+
if (D.status === "changed" && D.content != null && _.push({
|
|
369
|
+
path: f,
|
|
370
|
+
content: D.content
|
|
371
|
+
}), O.status === "changed" && O.content != null && _.push({
|
|
372
|
+
path: p,
|
|
373
|
+
content: O.content
|
|
374
|
+
}), g.needed) {
|
|
375
|
+
let e = g.skipped ? "planned" : "will run";
|
|
376
|
+
console.log(`${v.default.green("install ")} ${g.command} (${e})`);
|
|
377
|
+
} else console.log(`${v.default.cyan("unchanged")} ${y} already installed.`);
|
|
378
|
+
H("entry", k), H("vite", j), F(k, j);
|
|
379
|
+
let M = {
|
|
380
|
+
cwd: t,
|
|
381
|
+
supported: !0,
|
|
382
|
+
packageManager: n,
|
|
383
|
+
install: g,
|
|
384
|
+
main: k,
|
|
385
|
+
vite: j,
|
|
386
|
+
applied: !1,
|
|
387
|
+
dryRun: !!e.dryRun
|
|
388
|
+
};
|
|
389
|
+
if (e.dryRun) return console.log(v.default.yellow("Dry run only. No files were changed and no packages were installed.")), M;
|
|
390
|
+
if (!e.yes) {
|
|
391
|
+
let e = await I();
|
|
392
|
+
if (e) return M.cancelReason = e, console.log(v.default.yellow("Canceled.")), M;
|
|
393
|
+
}
|
|
394
|
+
return await Promise.all(_.map((e) => r(i.join(t, e.path), e.content, "utf8"))), g.needed && !e.skipInstall ? await L(t, c.command, c.args) : g.needed && e.skipInstall && console.log(v.default.yellow(`Skipped install. Run ${g.command} when you are ready.`)), M.applied = !0, console.log(v.default.green("Done!")), M;
|
|
395
|
+
}
|
|
396
|
+
//#endregion
|
|
397
|
+
export { _ as n, U as t };
|
package/package.json
CHANGED
|
@@ -1,12 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sakana-y/vue-grab-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"private": false,
|
|
5
|
+
"description": "CLI setup tool for adding Vue Grab to Vite and Vue projects.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"ai",
|
|
8
|
+
"cli",
|
|
9
|
+
"debugging",
|
|
10
|
+
"devtools",
|
|
11
|
+
"scaffold",
|
|
12
|
+
"vite",
|
|
13
|
+
"vue"
|
|
14
|
+
],
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/SaKaNa-Y/vue-grab/issues"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"author": "SaKaNa-Y",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/SaKaNa-Y/vue-grab.git",
|
|
23
|
+
"directory": "packages/cli"
|
|
24
|
+
},
|
|
5
25
|
"bin": {
|
|
6
26
|
"vue-grab": "./dist/bin.mjs"
|
|
7
27
|
},
|
|
8
28
|
"files": [
|
|
9
|
-
"dist"
|
|
29
|
+
"dist",
|
|
30
|
+
"README.md",
|
|
31
|
+
"LICENSE",
|
|
32
|
+
"CHANGELOG.md"
|
|
10
33
|
],
|
|
11
34
|
"type": "module",
|
|
12
35
|
"main": "./dist/index.cjs",
|
|
@@ -27,8 +50,10 @@
|
|
|
27
50
|
"picocolors": "^1.1.0"
|
|
28
51
|
},
|
|
29
52
|
"devDependencies": {
|
|
53
|
+
"@types/node": "^22.0.0",
|
|
30
54
|
"typescript": "~5.9.3",
|
|
31
55
|
"vite": "^8.0.0",
|
|
56
|
+
"vite-plugin-dts": "^4.5.0",
|
|
32
57
|
"vitest": "^4.1.0"
|
|
33
58
|
},
|
|
34
59
|
"scripts": {
|
package/dist/init-BY4F7nfe.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),l=c(o(((e,t)=>{var n=String,r=function(){return{isColorSupported:!1,reset:n,bold:n,dim:n,italic:n,underline:n,inverse:n,hidden:n,strikethrough:n,black:n,red:n,green:n,yellow:n,blue:n,magenta:n,cyan:n,white:n,gray:n,bgBlack:n,bgRed:n,bgGreen:n,bgYellow:n,bgBlue:n,bgMagenta:n,bgCyan:n,bgWhite:n,blackBright:n,redBright:n,greenBright:n,yellowBright:n,blueBright:n,magentaBright:n,cyanBright:n,whiteBright:n,bgBlackBright:n,bgRedBright:n,bgGreenBright:n,bgYellowBright:n,bgBlueBright:n,bgMagentaBright:n,bgCyanBright:n,bgWhiteBright:n}};t.exports=r(),t.exports.createColors=r}))(),1);async function u(e={}){console.log(l.default.cyan(`vue-grab`)+` — Initializing...`),console.log(l.default.green(`Done!`))}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
|
package/dist/init-TuWkkzkd.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
//#region \0rolldown/runtime.js
|
|
2
|
-
var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), s = (e, i, o, s) => {
|
|
3
|
-
if (i && typeof i == "object" || typeof i == "function") for (var c = r(i), l = 0, u = c.length, d; l < u; l++) d = c[l], !a.call(e, d) && d !== o && t(e, d, {
|
|
4
|
-
get: ((e) => i[e]).bind(null, d),
|
|
5
|
-
enumerable: !(s = n(i, d)) || s.enumerable
|
|
6
|
-
});
|
|
7
|
-
return e;
|
|
8
|
-
}, c = /* @__PURE__ */ ((n, r, a) => (a = n == null ? {} : e(i(n)), s(r || !n || !n.__esModule ? t(a, "default", {
|
|
9
|
-
value: n,
|
|
10
|
-
enumerable: !0
|
|
11
|
-
}) : a, n)))((/* @__PURE__ */ o(((e, t) => {
|
|
12
|
-
var n = String, r = function() {
|
|
13
|
-
return {
|
|
14
|
-
isColorSupported: !1,
|
|
15
|
-
reset: n,
|
|
16
|
-
bold: n,
|
|
17
|
-
dim: n,
|
|
18
|
-
italic: n,
|
|
19
|
-
underline: n,
|
|
20
|
-
inverse: n,
|
|
21
|
-
hidden: n,
|
|
22
|
-
strikethrough: n,
|
|
23
|
-
black: n,
|
|
24
|
-
red: n,
|
|
25
|
-
green: n,
|
|
26
|
-
yellow: n,
|
|
27
|
-
blue: n,
|
|
28
|
-
magenta: n,
|
|
29
|
-
cyan: n,
|
|
30
|
-
white: n,
|
|
31
|
-
gray: n,
|
|
32
|
-
bgBlack: n,
|
|
33
|
-
bgRed: n,
|
|
34
|
-
bgGreen: n,
|
|
35
|
-
bgYellow: n,
|
|
36
|
-
bgBlue: n,
|
|
37
|
-
bgMagenta: n,
|
|
38
|
-
bgCyan: n,
|
|
39
|
-
bgWhite: n,
|
|
40
|
-
blackBright: n,
|
|
41
|
-
redBright: n,
|
|
42
|
-
greenBright: n,
|
|
43
|
-
yellowBright: n,
|
|
44
|
-
blueBright: n,
|
|
45
|
-
magentaBright: n,
|
|
46
|
-
cyanBright: n,
|
|
47
|
-
whiteBright: n,
|
|
48
|
-
bgBlackBright: n,
|
|
49
|
-
bgRedBright: n,
|
|
50
|
-
bgGreenBright: n,
|
|
51
|
-
bgYellowBright: n,
|
|
52
|
-
bgBlueBright: n,
|
|
53
|
-
bgMagentaBright: n,
|
|
54
|
-
bgCyanBright: n,
|
|
55
|
-
bgWhiteBright: n
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
t.exports = r(), t.exports.createColors = r;
|
|
59
|
-
})))(), 1);
|
|
60
|
-
async function l(e = {}) {
|
|
61
|
-
console.log(c.default.cyan("vue-grab") + " — Initializing..."), console.log(c.default.green("Done!"));
|
|
62
|
-
}
|
|
63
|
-
//#endregion
|
|
64
|
-
export { l as t };
|