veloce-ts 1.0.1 → 1.2.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/CHANGELOG.md +85 -19
- package/README.md +7 -7
- package/dist/cjs/src/cli/index.js +257 -95
- package/dist/cjs/src/cli/index.js.map +4 -4
- package/dist/cjs/src/docs/index.js +3 -3
- package/dist/cjs/src/docs/index.js.map +4 -4
- package/dist/cjs/src/errors/index.js +24 -24
- package/dist/cjs/src/errors/index.js.map +6 -5
- package/dist/cjs/src/index.js +64 -62
- package/dist/cjs/src/index.js.map +15 -9
- package/dist/cjs/src/plugins/index.js +14 -14
- package/dist/cjs/src/plugins/index.js.map +4 -4
- package/dist/cjs/src/testing/index.js +34 -32
- package/dist/cjs/src/testing/index.js.map +10 -6
- package/dist/esm/src/cli/index.js +257 -95
- package/dist/esm/src/cli/index.js.map +4 -4
- package/dist/esm/src/docs/index.js +3 -3
- package/dist/esm/src/docs/index.js.map +4 -4
- package/dist/esm/src/errors/index.js +24 -24
- package/dist/esm/src/errors/index.js.map +6 -5
- package/dist/esm/src/index.js +64 -62
- package/dist/esm/src/index.js.map +15 -9
- package/dist/esm/src/plugins/index.js +14 -14
- package/dist/esm/src/plugins/index.js.map +4 -4
- package/dist/esm/src/testing/index.js +34 -32
- package/dist/esm/src/testing/index.js.map +10 -6
- package/dist/types/cli/commands/generate.d.ts.map +1 -1
- package/dist/types/core/application.d.ts +15 -0
- package/dist/types/core/application.d.ts.map +1 -1
- package/dist/types/core/interceptor-manager.d.ts +16 -0
- package/dist/types/core/interceptor-manager.d.ts.map +1 -0
- package/dist/types/core/router-compiler.d.ts +5 -1
- package/dist/types/core/router-compiler.d.ts.map +1 -1
- package/dist/types/decorators/extras.d.ts +20 -0
- package/dist/types/decorators/extras.d.ts.map +1 -0
- package/dist/types/decorators/stream.d.ts +5 -0
- package/dist/types/decorators/stream.d.ts.map +1 -0
- package/dist/types/docs/openapi-generator.d.ts +2 -2
- package/dist/types/docs/openapi-generator.d.ts.map +1 -1
- package/dist/types/docs/zod-to-json-schema.d.ts.map +1 -1
- package/dist/types/errors/exception-filter.d.ts +12 -0
- package/dist/types/errors/exception-filter.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +2 -0
- package/dist/types/errors/index.d.ts.map +1 -1
- package/dist/types/events/event-bus.d.ts +14 -0
- package/dist/types/events/event-bus.d.ts.map +1 -0
- package/dist/types/events/index.d.ts +2 -0
- package/dist/types/events/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/testing/index.d.ts +1 -0
- package/dist/types/testing/index.d.ts.map +1 -1
- package/dist/types/testing/isolate.d.ts +12 -0
- package/dist/types/testing/isolate.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
var
|
|
3
|
-
`)}displayWidth($){return
|
|
4
|
-
`+" ".repeat(
|
|
5
|
-
${
|
|
6
|
-
`)}}function
|
|
2
|
+
var x$=Object.create;var{getPrototypeOf:b$,defineProperty:F,getOwnPropertyNames:e,getOwnPropertyDescriptor:v$}=Object,$$=Object.prototype.hasOwnProperty;function q$($){return this[$]}var u$,h$,g$=($,q,B)=>{var X=$!=null&&typeof $==="object";if(X){var Y=q?u$??=new WeakMap:h$??=new WeakMap,Z=Y.get($);if(Z)return Z}B=$!=null?x$(b$($)):{};let z=q||!$||!$.__esModule?F(B,"default",{value:$,enumerable:!0}):B;for(let Q of e($))if(!$$.call(z,Q))F(z,Q,{get:q$.bind($,Q),enumerable:!0});if(X)Y.set($,z);return z},xq=($)=>{var q=(a??=new WeakMap).get($),B;if(q)return q;if(q=F({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function"){for(var X of e($))if(!$$.call(q,X))F(q,X,{get:q$.bind($,X),enumerable:!(B=v$($,X))||B.enumerable})}return a.set($,q),q},a,V=($,q)=>()=>(q||$((q={exports:{}}).exports,q),q.exports);var l$=($)=>$;function c$($,q){this[$]=l$.bind(null,q)}var f=($,q)=>{for(var B in q)F($,B,{get:q[B],enumerable:!0,configurable:!0,set:c$.bind(q,B)})};var A=($,q)=>()=>($&&(q=$($=0)),q);var j=V((b)=>{class x extends Error{constructor($,q,B){super(B);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=q,this.exitCode=$,this.nestedError=void 0}}class B$ extends x{constructor($){super(1,"commander.invalidArgument",$);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}b.CommanderError=x;b.InvalidArgumentError=B$});var k=V((v)=>{var{InvalidArgumentError:d$}=j();class X${constructor($,q){switch(this.description=q||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,$[0]){case"<":this.required=!0,this._name=$.slice(1,-1);break;case"[":this.required=!1,this._name=$.slice(1,-1);break;default:this.required=!0,this._name=$;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue($,q){if(q===this.defaultValue||!Array.isArray(q))return[$];return q.push($),q}default($,q){return this.defaultValue=$,this.defaultValueDescription=q,this}argParser($){return this.parseArg=$,this}choices($){return this.argChoices=$.slice(),this.parseArg=(q,B)=>{if(!this.argChoices.includes(q))throw new d$(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(q,B);return q},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function m$($){let q=$.name()+($.variadic===!0?"...":"");return $.required?"<"+q+">":"["+q+"]"}v.Argument=X$;v.humanReadableArgName=m$});var h=V((u)=>{var{humanReadableArgName:i$}=k();class Y${constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext($){this.helpWidth=this.helpWidth??$.helpWidth??80}visibleCommands($){let q=$.commands.filter((X)=>!X._hidden),B=$._getHelpCommand();if(B&&!B._hidden)q.push(B);if(this.sortSubcommands)q.sort((X,Y)=>{return X.name().localeCompare(Y.name())});return q}compareOptions($,q){let B=(X)=>{return X.short?X.short.replace(/^-/,""):X.long.replace(/^--/,"")};return B($).localeCompare(B(q))}visibleOptions($){let q=$.options.filter((X)=>!X.hidden),B=$._getHelpOption();if(B&&!B.hidden){let X=B.short&&$._findOption(B.short),Y=B.long&&$._findOption(B.long);if(!X&&!Y)q.push(B);else if(B.long&&!Y)q.push($.createOption(B.long,B.description));else if(B.short&&!X)q.push($.createOption(B.short,B.description))}if(this.sortOptions)q.sort(this.compareOptions);return q}visibleGlobalOptions($){if(!this.showGlobalOptions)return[];let q=[];for(let B=$.parent;B;B=B.parent){let X=B.options.filter((Y)=>!Y.hidden);q.push(...X)}if(this.sortOptions)q.sort(this.compareOptions);return q}visibleArguments($){if($._argsDescription)$.registeredArguments.forEach((q)=>{q.description=q.description||$._argsDescription[q.name()]||""});if($.registeredArguments.find((q)=>q.description))return $.registeredArguments;return[]}subcommandTerm($){let q=$.registeredArguments.map((B)=>i$(B)).join(" ");return $._name+($._aliases[0]?"|"+$._aliases[0]:"")+($.options.length?" [options]":"")+(q?" "+q:"")}optionTerm($){return $.flags}argumentTerm($){return $.name()}longestSubcommandTermLength($,q){return q.visibleCommands($).reduce((B,X)=>{return Math.max(B,this.displayWidth(q.styleSubcommandTerm(q.subcommandTerm(X))))},0)}longestOptionTermLength($,q){return q.visibleOptions($).reduce((B,X)=>{return Math.max(B,this.displayWidth(q.styleOptionTerm(q.optionTerm(X))))},0)}longestGlobalOptionTermLength($,q){return q.visibleGlobalOptions($).reduce((B,X)=>{return Math.max(B,this.displayWidth(q.styleOptionTerm(q.optionTerm(X))))},0)}longestArgumentTermLength($,q){return q.visibleArguments($).reduce((B,X)=>{return Math.max(B,this.displayWidth(q.styleArgumentTerm(q.argumentTerm(X))))},0)}commandUsage($){let q=$._name;if($._aliases[0])q=q+"|"+$._aliases[0];let B="";for(let X=$.parent;X;X=X.parent)B=X.name()+" "+B;return B+q+" "+$.usage()}commandDescription($){return $.description()}subcommandDescription($){return $.summary()||$.description()}optionDescription($){let q=[];if($.argChoices)q.push(`choices: ${$.argChoices.map((B)=>JSON.stringify(B)).join(", ")}`);if($.defaultValue!==void 0){if($.required||$.optional||$.isBoolean()&&typeof $.defaultValue==="boolean")q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`)}if($.presetArg!==void 0&&$.optional)q.push(`preset: ${JSON.stringify($.presetArg)}`);if($.envVar!==void 0)q.push(`env: ${$.envVar}`);if(q.length>0){let B=`(${q.join(", ")})`;if($.description)return`${$.description} ${B}`;return B}return $.description}argumentDescription($){let q=[];if($.argChoices)q.push(`choices: ${$.argChoices.map((B)=>JSON.stringify(B)).join(", ")}`);if($.defaultValue!==void 0)q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`);if(q.length>0){let B=`(${q.join(", ")})`;if($.description)return`${$.description} ${B}`;return B}return $.description}formatItemList($,q,B){if(q.length===0)return[];return[B.styleTitle($),...q,""]}groupItems($,q,B){let X=new Map;return $.forEach((Y)=>{let Z=B(Y);if(!X.has(Z))X.set(Z,[])}),q.forEach((Y)=>{let Z=B(Y);if(!X.has(Z))X.set(Z,[]);X.get(Z).push(Y)}),X}formatHelp($,q){let B=q.padWidth($,q),X=q.helpWidth??80;function Y(J,U){return q.formatItem(J,B,U,q)}let Z=[`${q.styleTitle("Usage:")} ${q.styleUsage(q.commandUsage($))}`,""],z=q.commandDescription($);if(z.length>0)Z=Z.concat([q.boxWrap(q.styleCommandDescription(z),X),""]);let Q=q.visibleArguments($).map((J)=>{return Y(q.styleArgumentTerm(q.argumentTerm(J)),q.styleArgumentDescription(q.argumentDescription(J)))});if(Z=Z.concat(this.formatItemList("Arguments:",Q,q)),this.groupItems($.options,q.visibleOptions($),(J)=>J.helpGroupHeading??"Options:").forEach((J,U)=>{let K=J.map((S)=>{return Y(q.styleOptionTerm(q.optionTerm(S)),q.styleOptionDescription(q.optionDescription(S)))});Z=Z.concat(this.formatItemList(U,K,q))}),q.showGlobalOptions){let J=q.visibleGlobalOptions($).map((U)=>{return Y(q.styleOptionTerm(q.optionTerm(U)),q.styleOptionDescription(q.optionDescription(U)))});Z=Z.concat(this.formatItemList("Global Options:",J,q))}return this.groupItems($.commands,q.visibleCommands($),(J)=>J.helpGroup()||"Commands:").forEach((J,U)=>{let K=J.map((S)=>{return Y(q.styleSubcommandTerm(q.subcommandTerm(S)),q.styleSubcommandDescription(q.subcommandDescription(S)))});Z=Z.concat(this.formatItemList(U,K,q))}),Z.join(`
|
|
3
|
+
`)}displayWidth($){return Z$($).length}styleTitle($){return $}styleUsage($){return $.split(" ").map((q)=>{if(q==="[options]")return this.styleOptionText(q);if(q==="[command]")return this.styleSubcommandText(q);if(q[0]==="["||q[0]==="<")return this.styleArgumentText(q);return this.styleCommandText(q)}).join(" ")}styleCommandDescription($){return this.styleDescriptionText($)}styleOptionDescription($){return this.styleDescriptionText($)}styleSubcommandDescription($){return this.styleDescriptionText($)}styleArgumentDescription($){return this.styleDescriptionText($)}styleDescriptionText($){return $}styleOptionTerm($){return this.styleOptionText($)}styleSubcommandTerm($){return $.split(" ").map((q)=>{if(q==="[options]")return this.styleOptionText(q);if(q[0]==="["||q[0]==="<")return this.styleArgumentText(q);return this.styleSubcommandText(q)}).join(" ")}styleArgumentTerm($){return this.styleArgumentText($)}styleOptionText($){return $}styleArgumentText($){return $}styleSubcommandText($){return $}styleCommandText($){return $}padWidth($,q){return Math.max(q.longestOptionTermLength($,q),q.longestGlobalOptionTermLength($,q),q.longestSubcommandTermLength($,q),q.longestArgumentTermLength($,q))}preformatted($){return/\n[^\S\r\n]/.test($)}formatItem($,q,B,X){let Z=" ".repeat(2);if(!B)return Z+$;let z=$.padEnd(q+$.length-X.displayWidth($)),Q=2,_=(this.helpWidth??80)-q-Q-2,J;if(_<this.minWidthToWrap||X.preformatted(B))J=B;else J=X.boxWrap(B,_).replace(/\n/g,`
|
|
4
|
+
`+" ".repeat(q+Q));return Z+z+" ".repeat(Q)+J.replace(/\n/g,`
|
|
5
|
+
${Z}`)}boxWrap($,q){if(q<this.minWidthToWrap)return $;let B=$.split(/\r\n|\n/),X=/[\s]*[^\s]+/g,Y=[];return B.forEach((Z)=>{let z=Z.match(X);if(z===null){Y.push("");return}let Q=[z.shift()],R=this.displayWidth(Q[0]);z.forEach((_)=>{let J=this.displayWidth(_);if(R+J<=q){Q.push(_),R+=J;return}Y.push(Q.join(""));let U=_.trimStart();Q=[U],R=this.displayWidth(U)}),Y.push(Q.join(""))}),Y.join(`
|
|
6
|
+
`)}}function Z$($){let q=/\x1b\[\d*(;\d*)*m/g;return $.replace(q,"")}u.Help=Y$;u.stripColor=Z$});var l=V((g)=>{var{InvalidArgumentError:p$}=j();class Q${constructor($,q){this.flags=$,this.description=q||"",this.required=$.includes("<"),this.optional=$.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test($),this.mandatory=!1;let B=s$($);if(this.short=B.shortFlag,this.long=B.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default($,q){return this.defaultValue=$,this.defaultValueDescription=q,this}preset($){return this.presetArg=$,this}conflicts($){return this.conflictsWith=this.conflictsWith.concat($),this}implies($){let q=$;if(typeof $==="string")q={[$]:!0};return this.implied=Object.assign(this.implied||{},q),this}env($){return this.envVar=$,this}argParser($){return this.parseArg=$,this}makeOptionMandatory($=!0){return this.mandatory=!!$,this}hideHelp($=!0){return this.hidden=!!$,this}_collectValue($,q){if(q===this.defaultValue||!Array.isArray(q))return[$];return q.push($),q}choices($){return this.argChoices=$.slice(),this.parseArg=(q,B)=>{if(!this.argChoices.includes(q))throw new p$(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(q,B);return q},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return z$(this.name().replace(/^no-/,""));return z$(this.name())}helpGroup($){return this.helpGroupHeading=$,this}is($){return this.short===$||this.long===$}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class _${constructor($){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,$.forEach((q)=>{if(q.negate)this.negativeOptions.set(q.attributeName(),q);else this.positiveOptions.set(q.attributeName(),q)}),this.negativeOptions.forEach((q,B)=>{if(this.positiveOptions.has(B))this.dualOptions.add(B)})}valueFromOption($,q){let B=q.attributeName();if(!this.dualOptions.has(B))return!0;let X=this.negativeOptions.get(B).presetArg,Y=X!==void 0?X:!1;return q.negate===(Y===$)}}function z$($){return $.split("-").reduce((q,B)=>{return q+B[0].toUpperCase()+B.slice(1)})}function s$($){let q,B,X=/^-[^-]$/,Y=/^--[^-]/,Z=$.split(/[ |,]+/).concat("guard");if(X.test(Z[0]))q=Z.shift();if(Y.test(Z[0]))B=Z.shift();if(!q&&X.test(Z[0]))q=Z.shift();if(!q&&Y.test(Z[0]))q=B,B=Z.shift();if(Z[0].startsWith("-")){let z=Z[0],Q=`option creation failed due to '${z}' in option flags '${$}'`;if(/^-[^-][^-]/.test(z))throw Error(`${Q}
|
|
7
7
|
- a short flag is a single dash and a single character
|
|
8
8
|
- either use a single dash and a single character (for a short flag)
|
|
9
|
-
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(
|
|
10
|
-
- too many short flags`);if(
|
|
9
|
+
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(X.test(z))throw Error(`${Q}
|
|
10
|
+
- too many short flags`);if(Y.test(z))throw Error(`${Q}
|
|
11
11
|
- too many long flags`);throw Error(`${Q}
|
|
12
|
-
- unrecognised flag format`)}if(
|
|
13
|
-
(Did you mean one of ${
|
|
14
|
-
(Did you mean ${
|
|
15
|
-
- specify the name in Command constructor or using .name()`);if(
|
|
16
|
-
Expecting one of '${
|
|
17
|
-
- already used by option '${
|
|
18
|
-
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable($,
|
|
19
|
-
- if '${
|
|
12
|
+
- unrecognised flag format`)}if(q===void 0&&B===void 0)throw Error(`option creation failed due to no flags found in '${$}'.`);return{shortFlag:q,longFlag:B}}g.Option=Q$;g.DualOptions=_$});var R$=V((J$)=>{function n$($,q){if(Math.abs($.length-q.length)>3)return Math.max($.length,q.length);let B=[];for(let X=0;X<=$.length;X++)B[X]=[X];for(let X=0;X<=q.length;X++)B[0][X]=X;for(let X=1;X<=q.length;X++)for(let Y=1;Y<=$.length;Y++){let Z=1;if($[Y-1]===q[X-1])Z=0;else Z=1;if(B[Y][X]=Math.min(B[Y-1][X]+1,B[Y][X-1]+1,B[Y-1][X-1]+Z),Y>1&&X>1&&$[Y-1]===q[X-2]&&$[Y-2]===q[X-1])B[Y][X]=Math.min(B[Y][X],B[Y-2][X-2]+1)}return B[$.length][q.length]}function r$($,q){if(!q||q.length===0)return"";q=Array.from(new Set(q));let B=$.startsWith("--");if(B)$=$.slice(2),q=q.map((z)=>z.slice(2));let X=[],Y=3,Z=0.4;if(q.forEach((z)=>{if(z.length<=1)return;let Q=n$($,z),R=Math.max($.length,z.length);if((R-Q)/R>Z){if(Q<Y)Y=Q,X=[z];else if(Q===Y)X.push(z)}}),X.sort((z,Q)=>z.localeCompare(Q)),B)X=X.map((z)=>`--${z}`);if(X.length>1)return`
|
|
13
|
+
(Did you mean one of ${X.join(", ")}?)`;if(X.length===1)return`
|
|
14
|
+
(Did you mean ${X[0]}?)`;return""}J$.suggestSimilar=r$});var M$=V((p)=>{var t$=require("node:events").EventEmitter,c=require("node:child_process"),E=require("node:path"),C=require("node:fs"),T=require("node:process"),{Argument:o$,humanReadableArgName:a$}=k(),{CommanderError:d}=j(),{Help:e$,stripColor:$q}=h(),{Option:U$,DualOptions:qq}=l(),{suggestSimilar:T$}=R$();class i extends t${constructor($){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=$||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:(q)=>T.stdout.write(q),writeErr:(q)=>T.stderr.write(q),outputError:(q,B)=>B(q),getOutHelpWidth:()=>T.stdout.isTTY?T.stdout.columns:void 0,getErrHelpWidth:()=>T.stderr.isTTY?T.stderr.columns:void 0,getOutHasColors:()=>m()??(T.stdout.isTTY&&T.stdout.hasColors?.()),getErrHasColors:()=>m()??(T.stderr.isTTY&&T.stderr.hasColors?.()),stripColor:(q)=>$q(q)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings($){return this._outputConfiguration=$._outputConfiguration,this._helpOption=$._helpOption,this._helpCommand=$._helpCommand,this._helpConfiguration=$._helpConfiguration,this._exitCallback=$._exitCallback,this._storeOptionsAsProperties=$._storeOptionsAsProperties,this._combineFlagAndOptionalValue=$._combineFlagAndOptionalValue,this._allowExcessArguments=$._allowExcessArguments,this._enablePositionalOptions=$._enablePositionalOptions,this._showHelpAfterError=$._showHelpAfterError,this._showSuggestionAfterError=$._showSuggestionAfterError,this}_getCommandAndAncestors(){let $=[];for(let q=this;q;q=q.parent)$.push(q);return $}command($,q,B){let X=q,Y=B;if(typeof X==="object"&&X!==null)Y=X,X=null;Y=Y||{};let[,Z,z]=$.match(/([^ ]+) *(.*)/),Q=this.createCommand(Z);if(X)Q.description(X),Q._executableHandler=!0;if(Y.isDefault)this._defaultCommandName=Q._name;if(Q._hidden=!!(Y.noHelp||Y.hidden),Q._executableFile=Y.executableFile||null,z)Q.arguments(z);if(this._registerCommand(Q),Q.parent=this,Q.copyInheritedSettings(this),X)return this;return Q}createCommand($){return new i($)}createHelp(){return Object.assign(new e$,this.configureHelp())}configureHelp($){if($===void 0)return this._helpConfiguration;return this._helpConfiguration=$,this}configureOutput($){if($===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...$},this}showHelpAfterError($=!0){if(typeof $!=="string")$=!!$;return this._showHelpAfterError=$,this}showSuggestionAfterError($=!0){return this._showSuggestionAfterError=!!$,this}addCommand($,q){if(!$._name)throw Error(`Command passed to .addCommand() must have a name
|
|
15
|
+
- specify the name in Command constructor or using .name()`);if(q=q||{},q.isDefault)this._defaultCommandName=$._name;if(q.noHelp||q.hidden)$._hidden=!0;return this._registerCommand($),$.parent=this,$._checkForBrokenPassThrough(),this}createArgument($,q){return new o$($,q)}argument($,q,B,X){let Y=this.createArgument($,q);if(typeof B==="function")Y.default(X).argParser(B);else Y.default(B);return this.addArgument(Y),this}arguments($){return $.trim().split(/ +/).forEach((q)=>{this.argument(q)}),this}addArgument($){let q=this.registeredArguments.slice(-1)[0];if(q?.variadic)throw Error(`only the last argument can be variadic '${q.name()}'`);if($.required&&$.defaultValue!==void 0&&$.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${$.name()}'`);return this.registeredArguments.push($),this}helpCommand($,q){if(typeof $==="boolean"){if(this._addImplicitHelpCommand=$,$&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let B=$??"help [command]",[,X,Y]=B.match(/([^ ]+) *(.*)/),Z=q??"display help for command",z=this.createCommand(X);if(z.helpOption(!1),Y)z.arguments(Y);if(Z)z.description(Z);if(this._addImplicitHelpCommand=!0,this._helpCommand=z,$||q)this._initCommandGroup(z);return this}addHelpCommand($,q){if(typeof $!=="object")return this.helpCommand($,q),this;return this._addImplicitHelpCommand=!0,this._helpCommand=$,this._initCommandGroup($),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook($,q){let B=["preSubcommand","preAction","postAction"];if(!B.includes($))throw Error(`Unexpected value for event passed to hook : '${$}'.
|
|
16
|
+
Expecting one of '${B.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycleHooks[$].push(q);else this._lifeCycleHooks[$]=[q];return this}exitOverride($){if($)this._exitCallback=$;else this._exitCallback=(q)=>{if(q.code!=="commander.executeSubCommandAsync")throw q};return this}_exit($,q,B){if(this._exitCallback)this._exitCallback(new d($,q,B));T.exit($)}action($){let q=(B)=>{let X=this.registeredArguments.length,Y=B.slice(0,X);if(this._storeOptionsAsProperties)Y[X]=this;else Y[X]=this.opts();return Y.push(this),$.apply(this,Y)};return this._actionHandler=q,this}createOption($,q){return new U$($,q)}_callParseArg($,q,B,X){try{return $.parseArg(q,B)}catch(Y){if(Y.code==="commander.invalidArgument"){let Z=`${X} ${Y.message}`;this.error(Z,{exitCode:Y.exitCode,code:Y.code})}throw Y}}_registerOption($){let q=$.short&&this._findOption($.short)||$.long&&this._findOption($.long);if(q){let B=$.long&&this._findOption($.long)?$.long:$.short;throw Error(`Cannot add option '${$.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${B}'
|
|
17
|
+
- already used by option '${q.flags}'`)}this._initOptionGroup($),this.options.push($)}_registerCommand($){let q=(X)=>{return[X.name()].concat(X.aliases())},B=q($).find((X)=>this._findCommand(X));if(B){let X=q(this._findCommand(B)).join("|"),Y=q($).join("|");throw Error(`cannot add command '${Y}' as already have command '${X}'`)}this._initCommandGroup($),this.commands.push($)}addOption($){this._registerOption($);let q=$.name(),B=$.attributeName();if($.negate){let Y=$.long.replace(/^--no-/,"--");if(!this._findOption(Y))this.setOptionValueWithSource(B,$.defaultValue===void 0?!0:$.defaultValue,"default")}else if($.defaultValue!==void 0)this.setOptionValueWithSource(B,$.defaultValue,"default");let X=(Y,Z,z)=>{if(Y==null&&$.presetArg!==void 0)Y=$.presetArg;let Q=this.getOptionValue(B);if(Y!==null&&$.parseArg)Y=this._callParseArg($,Y,Q,Z);else if(Y!==null&&$.variadic)Y=$._collectValue(Y,Q);if(Y==null)if($.negate)Y=!1;else if($.isBoolean()||$.optional)Y=!0;else Y="";this.setOptionValueWithSource(B,Y,z)};if(this.on("option:"+q,(Y)=>{let Z=`error: option '${$.flags}' argument '${Y}' is invalid.`;X(Y,Z,"cli")}),$.envVar)this.on("optionEnv:"+q,(Y)=>{let Z=`error: option '${$.flags}' value '${Y}' from env '${$.envVar}' is invalid.`;X(Y,Z,"env")});return this}_optionEx($,q,B,X,Y){if(typeof q==="object"&&q instanceof U$)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let Z=this.createOption(q,B);if(Z.makeOptionMandatory(!!$.mandatory),typeof X==="function")Z.default(Y).argParser(X);else if(X instanceof RegExp){let z=X;X=(Q,R)=>{let _=z.exec(Q);return _?_[0]:R},Z.default(Y).argParser(X)}else Z.default(X);return this.addOption(Z)}option($,q,B,X){return this._optionEx({},$,q,B,X)}requiredOption($,q,B,X){return this._optionEx({mandatory:!0},$,q,B,X)}combineFlagAndOptionalValue($=!0){return this._combineFlagAndOptionalValue=!!$,this}allowUnknownOption($=!0){return this._allowUnknownOption=!!$,this}allowExcessArguments($=!0){return this._allowExcessArguments=!!$,this}enablePositionalOptions($=!0){return this._enablePositionalOptions=!!$,this}passThroughOptions($=!0){return this._passThroughOptions=!!$,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties($=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!$,this}getOptionValue($){if(this._storeOptionsAsProperties)return this[$];return this._optionValues[$]}setOptionValue($,q){return this.setOptionValueWithSource($,q,void 0)}setOptionValueWithSource($,q,B){if(this._storeOptionsAsProperties)this[$]=q;else this._optionValues[$]=q;return this._optionValueSources[$]=B,this}getOptionValueSource($){return this._optionValueSources[$]}getOptionValueSourceWithGlobals($){let q;return this._getCommandAndAncestors().forEach((B)=>{if(B.getOptionValueSource($)!==void 0)q=B.getOptionValueSource($)}),q}_prepareUserArgs($,q){if($!==void 0&&!Array.isArray($))throw Error("first parameter to parse must be array or undefined");if(q=q||{},$===void 0&&q.from===void 0){if(T.versions?.electron)q.from="electron";let X=T.execArgv??[];if(X.includes("-e")||X.includes("--eval")||X.includes("-p")||X.includes("--print"))q.from="eval"}if($===void 0)$=T.argv;this.rawArgs=$.slice();let B;switch(q.from){case void 0:case"node":this._scriptPath=$[1],B=$.slice(2);break;case"electron":if(T.defaultApp)this._scriptPath=$[1],B=$.slice(2);else B=$.slice(1);break;case"user":B=$.slice(0);break;case"eval":B=$.slice(1);break;default:throw Error(`unexpected parse option { from: '${q.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",B}parse($,q){this._prepareForParse();let B=this._prepareUserArgs($,q);return this._parseCommand([],B),this}async parseAsync($,q){this._prepareForParse();let B=this._prepareUserArgs($,q);return await this._parseCommand([],B),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
|
|
18
|
+
- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable($,q,B){if(C.existsSync($))return;let X=q?`searched for local subcommand relative to directory '${q}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",Y=`'${$}' does not exist
|
|
19
|
+
- if '${B}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
20
20
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
21
|
-
- ${
|
|
21
|
+
- ${X}`;throw Error(Y)}_executeSubCommand($,q){q=q.slice();let B=!1,X=[".js",".ts",".tsx",".mjs",".cjs"];function Y(_,J){let U=E.resolve(_,J);if(C.existsSync(U))return U;if(X.includes(E.extname(J)))return;let K=X.find((S)=>C.existsSync(`${U}${S}`));if(K)return`${U}${K}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let Z=$._executableFile||`${this._name}-${$._name}`,z=this._executableDir||"";if(this._scriptPath){let _;try{_=C.realpathSync(this._scriptPath)}catch{_=this._scriptPath}z=E.resolve(E.dirname(_),z)}if(z){let _=Y(z,Z);if(!_&&!$._executableFile&&this._scriptPath){let J=E.basename(this._scriptPath,E.extname(this._scriptPath));if(J!==this._name)_=Y(z,`${J}-${$._name}`)}Z=_||Z}B=X.includes(E.extname(Z));let Q;if(T.platform!=="win32")if(B)q.unshift(Z),q=H$(T.execArgv).concat(q),Q=c.spawn(T.argv[0],q,{stdio:"inherit"});else Q=c.spawn(Z,q,{stdio:"inherit"});else this._checkForMissingExecutable(Z,z,$._name),q.unshift(Z),q=H$(T.execArgv).concat(q),Q=c.spawn(T.execPath,q,{stdio:"inherit"});if(!Q.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((J)=>{T.on(J,()=>{if(Q.killed===!1&&Q.exitCode===null)Q.kill(J)})});let R=this._exitCallback;Q.on("close",(_)=>{if(_=_??1,!R)T.exit(_);else R(new d(_,"commander.executeSubCommandAsync","(close)"))}),Q.on("error",(_)=>{if(_.code==="ENOENT")this._checkForMissingExecutable(Z,z,$._name);else if(_.code==="EACCES")throw Error(`'${Z}' not executable`);if(!R)T.exit(1);else{let J=new d(1,"commander.executeSubCommandAsync","(error)");J.nestedError=_,R(J)}}),this.runningCommand=Q}_dispatchSubcommand($,q,B){let X=this._findCommand($);if(!X)this.help({error:!0});X._prepareForParse();let Y;return Y=this._chainOrCallSubCommandHook(Y,X,"preSubcommand"),Y=this._chainOrCall(Y,()=>{if(X._executableHandler)this._executeSubCommand(X,q.concat(B));else return X._parseCommand(q,B)}),Y}_dispatchHelpCommand($){if(!$)this.help();let q=this._findCommand($);if(q&&!q._executableHandler)q.help();return this._dispatchSubcommand($,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach(($,q)=>{if($.required&&this.args[q]==null)this.missingArgument($.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let $=(B,X,Y)=>{let Z=X;if(X!==null&&B.parseArg){let z=`error: command-argument value '${X}' is invalid for argument '${B.name()}'.`;Z=this._callParseArg(B,X,Y,z)}return Z};this._checkNumberOfArguments();let q=[];this.registeredArguments.forEach((B,X)=>{let Y=B.defaultValue;if(B.variadic){if(X<this.args.length){if(Y=this.args.slice(X),B.parseArg)Y=Y.reduce((Z,z)=>{return $(B,z,Z)},B.defaultValue)}else if(Y===void 0)Y=[]}else if(X<this.args.length){if(Y=this.args[X],B.parseArg)Y=$(B,Y,B.defaultValue)}q[X]=Y}),this.processedArgs=q}_chainOrCall($,q){if($?.then&&typeof $.then==="function")return $.then(()=>q());return q()}_chainOrCallHooks($,q){let B=$,X=[];if(this._getCommandAndAncestors().reverse().filter((Y)=>Y._lifeCycleHooks[q]!==void 0).forEach((Y)=>{Y._lifeCycleHooks[q].forEach((Z)=>{X.push({hookedCommand:Y,callback:Z})})}),q==="postAction")X.reverse();return X.forEach((Y)=>{B=this._chainOrCall(B,()=>{return Y.callback(Y.hookedCommand,this)})}),B}_chainOrCallSubCommandHook($,q,B){let X=$;if(this._lifeCycleHooks[B]!==void 0)this._lifeCycleHooks[B].forEach((Y)=>{X=this._chainOrCall(X,()=>{return Y(this,q)})});return X}_parseCommand($,q){let B=this.parseOptions(q);if(this._parseOptionsEnv(),this._parseOptionsImplied(),$=$.concat(B.operands),q=B.unknown,this.args=$.concat(q),$&&this._findCommand($[0]))return this._dispatchSubcommand($[0],$.slice(1),q);if(this._getHelpCommand()&&$[0]===this._getHelpCommand().name())return this._dispatchHelpCommand($[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(q),this._dispatchSubcommand(this._defaultCommandName,$,q);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(B.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let X=()=>{if(B.unknown.length>0)this.unknownOption(B.unknown[0])},Y=`command:${this.name()}`;if(this._actionHandler){X(),this._processArguments();let Z;if(Z=this._chainOrCallHooks(Z,"preAction"),Z=this._chainOrCall(Z,()=>this._actionHandler(this.processedArgs)),this.parent)Z=this._chainOrCall(Z,()=>{this.parent.emit(Y,$,q)});return Z=this._chainOrCallHooks(Z,"postAction"),Z}if(this.parent?.listenerCount(Y))X(),this._processArguments(),this.parent.emit(Y,$,q);else if($.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",$,q);if(this.listenerCount("command:*"))this.emit("command:*",$,q);else if(this.commands.length)this.unknownCommand();else X(),this._processArguments()}else if(this.commands.length)X(),this.help({error:!0});else X(),this._processArguments()}_findCommand($){if(!$)return;return this.commands.find((q)=>q._name===$||q._aliases.includes($))}_findOption($){return this.options.find((q)=>q.is($))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(($)=>{$.options.forEach((q)=>{if(q.mandatory&&$.getOptionValue(q.attributeName())===void 0)$.missingMandatoryOptionValue(q)})})}_checkForConflictingLocalOptions(){let $=this.options.filter((B)=>{let X=B.attributeName();if(this.getOptionValue(X)===void 0)return!1;return this.getOptionValueSource(X)!=="default"});$.filter((B)=>B.conflictsWith.length>0).forEach((B)=>{let X=$.find((Y)=>B.conflictsWith.includes(Y.attributeName()));if(X)this._conflictingOption(B,X)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(($)=>{$._checkForConflictingLocalOptions()})}parseOptions($){let q=[],B=[],X=q;function Y(_){return _.length>1&&_[0]==="-"}let Z=(_)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(_))return!1;return!this._getCommandAndAncestors().some((J)=>J.options.map((U)=>U.short).some((U)=>/^-\d$/.test(U)))},z=null,Q=null,R=0;while(R<$.length||Q){let _=Q??$[R++];if(Q=null,_==="--"){if(X===B)X.push(_);X.push(...$.slice(R));break}if(z&&(!Y(_)||Z(_))){this.emit(`option:${z.name()}`,_);continue}if(z=null,Y(_)){let J=this._findOption(_);if(J){if(J.required){let U=$[R++];if(U===void 0)this.optionMissingArgument(J);this.emit(`option:${J.name()}`,U)}else if(J.optional){let U=null;if(R<$.length&&(!Y($[R])||Z($[R])))U=$[R++];this.emit(`option:${J.name()}`,U)}else this.emit(`option:${J.name()}`);z=J.variadic?J:null;continue}}if(_.length>2&&_[0]==="-"&&_[1]!=="-"){let J=this._findOption(`-${_[1]}`);if(J){if(J.required||J.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${J.name()}`,_.slice(2));else this.emit(`option:${J.name()}`),Q=`-${_.slice(2)}`;continue}}if(/^--[^=]+=/.test(_)){let J=_.indexOf("="),U=this._findOption(_.slice(0,J));if(U&&(U.required||U.optional)){this.emit(`option:${U.name()}`,_.slice(J+1));continue}}if(X===q&&Y(_)&&!(this.commands.length===0&&Z(_)))X=B;if((this._enablePositionalOptions||this._passThroughOptions)&&q.length===0&&B.length===0){if(this._findCommand(_)){q.push(_),B.push(...$.slice(R));break}else if(this._getHelpCommand()&&_===this._getHelpCommand().name()){q.push(_,...$.slice(R));break}else if(this._defaultCommandName){B.push(_,...$.slice(R));break}}if(this._passThroughOptions){X.push(_,...$.slice(R));break}X.push(_)}return{operands:q,unknown:B}}opts(){if(this._storeOptionsAsProperties){let $={},q=this.options.length;for(let B=0;B<q;B++){let X=this.options[B].attributeName();$[X]=X===this._versionOptionName?this._version:this[X]}return $}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce(($,q)=>Object.assign($,q.opts()),{})}error($,q){if(this._outputConfiguration.outputError(`${$}
|
|
22
22
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
23
23
|
`);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
|
|
24
|
-
`),this.outputHelp({error:!0});let q
|
|
25
|
-
`),this._exit(0,"commander.version",$)}),this}description($,
|
|
26
|
-
Expecting one of '${
|
|
27
|
-
`)}),this}_outputHelpIfRequested($){let
|
|
24
|
+
`),this.outputHelp({error:!0});let B=q||{},X=B.exitCode||1,Y=B.code||"commander.error";this._exit(X,Y,$)}_parseOptionsEnv(){this.options.forEach(($)=>{if($.envVar&&$.envVar in T.env){let q=$.attributeName();if(this.getOptionValue(q)===void 0||["default","config","env"].includes(this.getOptionValueSource(q)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,T.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new qq(this.options),q=(B)=>{return this.getOptionValue(B)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(B))};this.options.filter((B)=>B.implied!==void 0&&q(B.attributeName())&&$.valueFromOption(this.getOptionValue(B.attributeName()),B)).forEach((B)=>{Object.keys(B.implied).filter((X)=>!q(X)).forEach((X)=>{this.setOptionValueWithSource(X,B.implied[X],"implied")})})}missingArgument($){let q=`error: missing required argument '${$}'`;this.error(q,{code:"commander.missingArgument"})}optionMissingArgument($){let q=`error: option '${$.flags}' argument missing`;this.error(q,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue($){let q=`error: required option '${$.flags}' not specified`;this.error(q,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption($,q){let B=(Z)=>{let z=Z.attributeName(),Q=this.getOptionValue(z),R=this.options.find((J)=>J.negate&&z===J.attributeName()),_=this.options.find((J)=>!J.negate&&z===J.attributeName());if(R&&(R.presetArg===void 0&&Q===!1||R.presetArg!==void 0&&Q===R.presetArg))return R;return _||Z},X=(Z)=>{let z=B(Z),Q=z.attributeName();if(this.getOptionValueSource(Q)==="env")return`environment variable '${z.envVar}'`;return`option '${z.flags}'`},Y=`error: ${X($)} cannot be used with ${X(q)}`;this.error(Y,{code:"commander.conflictingOption"})}unknownOption($){if(this._allowUnknownOption)return;let q="";if($.startsWith("--")&&this._showSuggestionAfterError){let X=[],Y=this;do{let Z=Y.createHelp().visibleOptions(Y).filter((z)=>z.long).map((z)=>z.long);X=X.concat(Z),Y=Y.parent}while(Y&&!Y._enablePositionalOptions);q=T$($,X)}let B=`error: unknown option '${$}'${q}`;this.error(B,{code:"commander.unknownOption"})}_excessArguments($){if(this._allowExcessArguments)return;let q=this.registeredArguments.length,B=q===1?"":"s",Y=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${q} argument${B} but got ${$.length}.`;this.error(Y,{code:"commander.excessArguments"})}unknownCommand(){let $=this.args[0],q="";if(this._showSuggestionAfterError){let X=[];this.createHelp().visibleCommands(this).forEach((Y)=>{if(X.push(Y.name()),Y.alias())X.push(Y.alias())}),q=T$($,X)}let B=`error: unknown command '${$}'${q}`;this.error(B,{code:"commander.unknownCommand"})}version($,q,B){if($===void 0)return this._version;this._version=$,q=q||"-V, --version",B=B||"output the version number";let X=this.createOption(q,B);return this._versionOptionName=X.attributeName(),this._registerOption(X),this.on("option:"+X.name(),()=>{this._outputConfiguration.writeOut(`${$}
|
|
25
|
+
`),this._exit(0,"commander.version",$)}),this}description($,q){if($===void 0&&q===void 0)return this._description;if(this._description=$,q)this._argsDescription=q;return this}summary($){if($===void 0)return this._summary;return this._summary=$,this}alias($){if($===void 0)return this._aliases[0];let q=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)q=this.commands[this.commands.length-1];if($===q._name)throw Error("Command alias can't be the same as its name");let B=this.parent?._findCommand($);if(B){let X=[B.name()].concat(B.aliases()).join("|");throw Error(`cannot add alias '${$}' to command '${this.name()}' as already have command '${X}'`)}return q._aliases.push($),this}aliases($){if($===void 0)return this._aliases;return $.forEach((q)=>this.alias(q)),this}usage($){if($===void 0){if(this._usage)return this._usage;let q=this.registeredArguments.map((B)=>{return a$(B)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?q:[]).join(" ")}return this._usage=$,this}name($){if($===void 0)return this._name;return this._name=$,this}helpGroup($){if($===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=$,this}commandsGroup($){if($===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=$,this}optionsGroup($){if($===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=$,this}_initOptionGroup($){if(this._defaultOptionGroup&&!$.helpGroupHeading)$.helpGroup(this._defaultOptionGroup)}_initCommandGroup($){if(this._defaultCommandGroup&&!$.helpGroup())$.helpGroup(this._defaultCommandGroup)}nameFromFilename($){return this._name=E.basename($,E.extname($)),this}executableDir($){if($===void 0)return this._executableDir;return this._executableDir=$,this}helpInformation($){let q=this.createHelp(),B=this._getOutputContext($);q.prepareContext({error:B.error,helpWidth:B.helpWidth,outputHasColors:B.hasColors});let X=q.formatHelp(this,q);if(B.hasColors)return X;return this._outputConfiguration.stripColor(X)}_getOutputContext($){$=$||{};let q=!!$.error,B,X,Y;if(q)B=(z)=>this._outputConfiguration.writeErr(z),X=this._outputConfiguration.getErrHasColors(),Y=this._outputConfiguration.getErrHelpWidth();else B=(z)=>this._outputConfiguration.writeOut(z),X=this._outputConfiguration.getOutHasColors(),Y=this._outputConfiguration.getOutHelpWidth();return{error:q,write:(z)=>{if(!X)z=this._outputConfiguration.stripColor(z);return B(z)},hasColors:X,helpWidth:Y}}outputHelp($){let q;if(typeof $==="function")q=$,$=void 0;let B=this._getOutputContext($),X={error:B.error,write:B.write,command:this};this._getCommandAndAncestors().reverse().forEach((Z)=>Z.emit("beforeAllHelp",X)),this.emit("beforeHelp",X);let Y=this.helpInformation({error:B.error});if(q){if(Y=q(Y),typeof Y!=="string"&&!Buffer.isBuffer(Y))throw Error("outputHelp callback must return a string or a Buffer")}if(B.write(Y),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",X),this._getCommandAndAncestors().forEach((Z)=>Z.emit("afterAllHelp",X))}helpOption($,q){if(typeof $==="boolean"){if($){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption($??"-h, --help",q??"display help for command"),$||q)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption($){return this._helpOption=$,this._initOptionGroup($),this}help($){this.outputHelp($);let q=Number(T.exitCode??0);if(q===0&&$&&typeof $!=="function"&&$.error)q=1;this._exit(q,"commander.help","(outputHelp)")}addHelpText($,q){let B=["beforeAll","before","after","afterAll"];if(!B.includes($))throw Error(`Unexpected value for position to addHelpText.
|
|
26
|
+
Expecting one of '${B.join("', '")}'`);let X=`${$}Help`;return this.on(X,(Y)=>{let Z;if(typeof q==="function")Z=q({error:Y.error,command:Y.command});else Z=q;if(Z)Y.write(`${Z}
|
|
27
|
+
`)}),this}_outputHelpIfRequested($){let q=this._getHelpOption();if(q&&$.find((X)=>q.is(X)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function H$($){return $.map((q)=>{if(!q.startsWith("--inspect"))return q;let B,X="127.0.0.1",Y="9229",Z;if((Z=q.match(/^(--inspect(-brk)?)$/))!==null)B=Z[1];else if((Z=q.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(B=Z[1],/^\d+$/.test(Z[3]))Y=Z[3];else X=Z[3];else if((Z=q.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)B=Z[1],X=Z[3],Y=Z[4];if(B&&Y!=="0")return`${B}=${X}:${parseInt(Y)+1}`;return q})}function m(){if(T.env.NO_COLOR||T.env.FORCE_COLOR==="0"||T.env.FORCE_COLOR==="false")return!1;if(T.env.FORCE_COLOR||T.env.CLICOLOR_FORCE!==void 0)return!0;return}p.Command=i;p.useColor=m});var W$=V((G)=>{var{Argument:L$}=k(),{Command:s}=M$(),{CommanderError:Bq,InvalidArgumentError:K$}=j(),{Help:Xq}=h(),{Option:G$}=l();G.program=new s;G.createCommand=($)=>new s($);G.createOption=($,q)=>new G$($,q);G.createArgument=($,q)=>new L$($,q);G.Command=s;G.Option=G$;G.Argument=L$;G.Help=Xq;G.CommanderError=Bq;G.InvalidArgumentError=K$;G.InvalidOptionArgumentError=K$});var E$,mq,iq,pq,sq,nq,rq,tq,I$,oq,aq,eq;var S$=A(()=>{E$=g$(W$(),1),{program:mq,createCommand:iq,createArgument:pq,createOption:sq,CommanderError:nq,InvalidArgumentError:rq,InvalidOptionArgumentError:tq,Command:I$,Argument:oq,Option:aq,Help:eq}=E$.default});var V$={};f(V$,{registerNewCommand:()=>zq});async function Zq($){await L.writeFile(M.join($,"public","docs.html"),`<!DOCTYPE html>
|
|
28
28
|
<html lang="en">
|
|
29
29
|
<head>
|
|
30
30
|
<meta charset="utf-8" />
|
|
@@ -55,17 +55,17 @@ Expecting one of '${q.join("', '")}'`);let B=`${$}Help`;return this.on(B,(X)=>{l
|
|
|
55
55
|
};
|
|
56
56
|
</script>
|
|
57
57
|
</body>
|
|
58
|
-
</html>`)}function
|
|
58
|
+
</html>`)}function zq($){$.command("new").description("Create a new VeloceTS project").argument("<name>","Project name").option("-t, --template <template>","Project template (rest, graphql, websocket, fullstack)","rest").action(async(q,B)=>{await Qq(q,B)})}async function Qq($,q){let B=M.join(process.cwd(),$);if(!$||$.trim()==="")console.error("❌ Error: Project name cannot be empty"),process.exit(1);if(P.existsSync(B))console.error(`❌ Error: Directory "${$}" already exists`),process.exit(1);console.log(`\uD83D\uDE80 Creating new VeloceTS project: ${$}`),console.log(`\uD83D\uDCCB Template: ${q.template}`);try{switch(console.log("\uD83D\uDCC1 Creating project directories..."),await L.mkdir(B,{recursive:!0}),await L.mkdir(M.join(B,"src"),{recursive:!0}),await L.mkdir(M.join(B,"src","controllers"),{recursive:!0}),console.log("\uD83D\uDCC4 Generating configuration files..."),await _q(B,$),await Jq(B),await Rq(B),await Uq(B,$,q.template),console.log("\uD83D\uDD27 Generating template files..."),q.template){case"rest":await Tq(B);break;case"graphql":await Hq(B);break;case"websocket":await Mq(B);break;case"fullstack":await Lq(B);break;default:throw Error(`Unknown template: ${q.template}`)}console.log("\uD83D\uDCDA Setting up documentation..."),await L.mkdir(M.join(B,"public"),{recursive:!0}),await Zq(B),console.log(`
|
|
59
59
|
✅ Project created successfully!`),console.log(`
|
|
60
60
|
\uD83D\uDCCB Next steps:`),console.log(` cd ${$}`),console.log(" bun install"),console.log(" bun run dev"),console.log(`
|
|
61
|
-
\uD83C\uDF10 Your API will be available at:`),console.log(" http://localhost:3000"),console.log(" http://localhost:3000/docs (API Documentation)")}catch(
|
|
61
|
+
\uD83C\uDF10 Your API will be available at:`),console.log(" http://localhost:3000"),console.log(" http://localhost:3000/docs (API Documentation)")}catch(X){console.error("❌ Error creating project:",X);try{if(P.existsSync(B))console.log("\uD83E\uDDF9 Cleaning up partial project..."),console.warn(`⚠️ Please manually remove the directory: ${B}`)}catch(Y){console.warn("⚠️ Could not clean up partial project:",Y)}process.exit(1)}}async function _q($,q){console.log("\uD83D\uDCE6 Fetching latest VeloceTS version from npm...");let B=await Yq();console.log(`✅ Using VeloceTS version: ${B}`);let X={name:q,version:"0.1.0",description:"A Veloce-TS application",type:"module",main:"./dist/index.js",scripts:{dev:"bun --watch src/index.ts",build:"bun build src/index.ts --outdir dist --target bun",start:"bun run dist/index.js","generate:openapi":"bun run node_modules/veloce-ts/bin/veloce.ts generate openapi","generate:client":"bun run node_modules/veloce-ts/bin/veloce.ts generate client"},dependencies:{"veloce-ts":`^${B}`,hono:"^4.0.0","reflect-metadata":"^0.2.0",zod:"^3.22.0"},devDependencies:{"@types/bun":"latest",typescript:"^5.3.0"},engines:{node:">=18.0.0",bun:">=1.0.0"}};await L.writeFile(M.join($,"package.json"),JSON.stringify(X,null,2))}async function Jq($){let q={compilerOptions:{target:"ES2022",module:"ESNext",lib:["ES2022"],moduleResolution:"bundler",experimentalDecorators:!0,emitDecoratorMetadata:!0,strict:!0,esModuleInterop:!0,skipLibCheck:!0,forceConsistentCasingInFileNames:!0,resolveJsonModule:!0,outDir:"./dist",rootDir:"./src"},include:["src/**/*"],exclude:["node_modules","dist"]};await L.writeFile(M.join($,"tsconfig.json"),JSON.stringify(q,null,2))}async function Rq($){await L.writeFile(M.join($,".gitignore"),`node_modules/
|
|
62
62
|
dist/
|
|
63
63
|
*.log
|
|
64
64
|
.env
|
|
65
65
|
.DS_Store
|
|
66
|
-
`)}async function
|
|
66
|
+
`)}async function Uq($,q,B){let X=`# ${q}
|
|
67
67
|
|
|
68
|
-
A modern TypeScript API built with [Veloce-TS](https://github.com/
|
|
68
|
+
A modern TypeScript API built with [Veloce-TS](https://github.com/ExcessHawk/veloce-ts) using the **${B}** template.
|
|
69
69
|
|
|
70
70
|
## Getting Started
|
|
71
71
|
|
|
@@ -102,7 +102,7 @@ bun run start
|
|
|
102
102
|
## Project Structure
|
|
103
103
|
|
|
104
104
|
\`\`\`
|
|
105
|
-
${
|
|
105
|
+
${q}/
|
|
106
106
|
├── src/
|
|
107
107
|
│ └── index.ts # Application entry point
|
|
108
108
|
├── package.json
|
|
@@ -112,14 +112,14 @@ ${z}/
|
|
|
112
112
|
|
|
113
113
|
## Learn More
|
|
114
114
|
|
|
115
|
-
- [Veloce-TS GitHub](https://github.com/
|
|
115
|
+
- [Veloce-TS GitHub](https://github.com/ExcessHawk/veloce-ts)
|
|
116
116
|
- [TypeScript Documentation](https://www.typescriptlang.org/docs/)
|
|
117
117
|
- [Bun Documentation](https://bun.sh/docs)
|
|
118
118
|
|
|
119
119
|
---
|
|
120
120
|
|
|
121
121
|
Built with Veloce-TS
|
|
122
|
-
`;await
|
|
122
|
+
`;await L.writeFile(M.join($,"README.md"),X)}async function Tq($){await L.writeFile(M.join($,"src","index.ts"),`import 'reflect-metadata';
|
|
123
123
|
import { Veloce, OpenAPIPlugin } from 'veloce-ts';
|
|
124
124
|
import { UserController } from './controllers/user.controller';
|
|
125
125
|
|
|
@@ -162,7 +162,7 @@ async function startServer() {
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
startServer();
|
|
165
|
-
`);let
|
|
165
|
+
`);let B=`import { Controller, Get, Post, Body, Param } from 'veloce-ts';
|
|
166
166
|
import { z } from 'zod';
|
|
167
167
|
|
|
168
168
|
const UserSchema = z.object({
|
|
@@ -197,64 +197,51 @@ export class UserController {
|
|
|
197
197
|
return { message: 'User created', user };
|
|
198
198
|
}
|
|
199
199
|
}
|
|
200
|
-
`;await
|
|
201
|
-
import { Veloce } from 'veloce-ts';
|
|
202
|
-
import { GraphQLPlugin } from 'veloce-ts/plugins';
|
|
200
|
+
`;await L.writeFile(M.join($,"src","controllers","user.controller.ts"),B)}async function Hq($){await L.mkdir(M.join($,"src","resolvers"),{recursive:!0});let q=`import 'reflect-metadata';
|
|
201
|
+
import { Veloce, GraphQLPlugin } from 'veloce-ts';
|
|
203
202
|
import { UserResolver } from './resolvers/user.resolver';
|
|
204
203
|
|
|
205
|
-
const app = new Veloce({
|
|
206
|
-
title: 'My GraphQL API',
|
|
207
|
-
version: '1.0.0',
|
|
208
|
-
});
|
|
204
|
+
const app = new Veloce({ title: 'My GraphQL API', version: '1.0.0' });
|
|
209
205
|
|
|
210
|
-
// Enable GraphQL
|
|
211
206
|
app.usePlugin(new GraphQLPlugin({
|
|
212
207
|
resolvers: [UserResolver],
|
|
208
|
+
playground: true,
|
|
213
209
|
}));
|
|
214
210
|
|
|
215
|
-
// Compile routes
|
|
216
211
|
await app.compile();
|
|
217
212
|
|
|
218
213
|
app.listen(3000, () => {
|
|
219
214
|
console.log('Server running on http://localhost:3000');
|
|
220
215
|
console.log('GraphQL Playground at http://localhost:3000/graphql');
|
|
221
216
|
});
|
|
222
|
-
`;await
|
|
217
|
+
`;await L.writeFile(M.join($,"src","index.ts"),q);let B=`import { Resolver, GQLQuery, GQLMutation, Arg } from 'veloce-ts/graphql';
|
|
223
218
|
import { z } from 'zod';
|
|
224
219
|
|
|
225
|
-
|
|
226
|
-
id: z.string(),
|
|
227
|
-
name: z.string(),
|
|
228
|
-
email: z.string().email(),
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
type User = z.infer<typeof UserSchema>;
|
|
232
|
-
|
|
233
|
-
@Resolver()
|
|
220
|
+
@Resolver('user')
|
|
234
221
|
export class UserResolver {
|
|
235
|
-
private users:
|
|
222
|
+
private users: Array<{ id: string; name: string; email: string }> = [];
|
|
236
223
|
|
|
237
|
-
@
|
|
238
|
-
async
|
|
224
|
+
@GQLQuery('getUsers')
|
|
225
|
+
async getUsers() {
|
|
239
226
|
return this.users;
|
|
240
227
|
}
|
|
241
228
|
|
|
242
|
-
@
|
|
243
|
-
async
|
|
244
|
-
return this.users.find(u => u.id === id)
|
|
229
|
+
@GQLQuery('getUser')
|
|
230
|
+
async getUser(@Arg('id', z.string()) id: string) {
|
|
231
|
+
return this.users.find(u => u.id === id) ?? null;
|
|
245
232
|
}
|
|
246
233
|
|
|
247
|
-
@
|
|
234
|
+
@GQLMutation('createUser')
|
|
248
235
|
async createUser(
|
|
249
236
|
@Arg('name', z.string()) name: string,
|
|
250
237
|
@Arg('email', z.string().email()) email: string
|
|
251
|
-
)
|
|
238
|
+
) {
|
|
252
239
|
const user = { id: Date.now().toString(), name, email };
|
|
253
240
|
this.users.push(user);
|
|
254
241
|
return user;
|
|
255
242
|
}
|
|
256
243
|
}
|
|
257
|
-
`;await
|
|
244
|
+
`;await L.writeFile(M.join($,"src","resolvers","user.resolver.ts"),B)}async function Mq($){await L.mkdir(M.join($,"src","websockets"),{recursive:!0});let q=`import 'reflect-metadata';
|
|
258
245
|
import { Veloce } from 'veloce-ts';
|
|
259
246
|
import { WebSocketPlugin } from 'veloce-ts/plugins';
|
|
260
247
|
import { ChatWebSocket } from './websockets/chat.websocket';
|
|
@@ -276,7 +263,7 @@ app.listen(3000, () => {
|
|
|
276
263
|
console.log('Server running on http://localhost:3000');
|
|
277
264
|
console.log('WebSocket endpoint at ws://localhost:3000/ws/chat');
|
|
278
265
|
});
|
|
279
|
-
`;await
|
|
266
|
+
`;await L.writeFile(M.join($,"src","index.ts"),q);let B=`import { WebSocket, OnConnect, OnMessage, OnDisconnect } from 'veloce-ts/websocket';
|
|
280
267
|
import { z } from 'zod';
|
|
281
268
|
import type { WebSocketConnection } from 'veloce-ts/websocket';
|
|
282
269
|
|
|
@@ -312,7 +299,7 @@ export class ChatWebSocket {
|
|
|
312
299
|
console.log('Client disconnected:', connection.id);
|
|
313
300
|
}
|
|
314
301
|
}
|
|
315
|
-
`;await
|
|
302
|
+
`;await L.writeFile(M.join($,"src","websockets","chat.websocket.ts"),B)}async function Lq($){await L.mkdir(M.join($,"src","controllers"),{recursive:!0}),await L.mkdir(M.join($,"src","resolvers"),{recursive:!0}),await L.mkdir(M.join($,"src","websockets"),{recursive:!0});let q=`import 'reflect-metadata';
|
|
316
303
|
import { Veloce, OpenAPIPlugin } from 'veloce-ts';
|
|
317
304
|
import { GraphQLPlugin, WebSocketPlugin } from 'veloce-ts/plugins';
|
|
318
305
|
import { UserController } from './controllers/user.controller';
|
|
@@ -372,7 +359,7 @@ async function startServer() {
|
|
|
372
359
|
}
|
|
373
360
|
|
|
374
361
|
startServer();
|
|
375
|
-
`;await
|
|
362
|
+
`;await L.writeFile(M.join($,"src","index.ts"),q);let B=`import { Controller, Get, Post, Body, Param } from 'veloce-ts';
|
|
376
363
|
import { z } from 'zod';
|
|
377
364
|
|
|
378
365
|
const UserSchema = z.object({
|
|
@@ -407,42 +394,34 @@ export class UserController {
|
|
|
407
394
|
return { message: 'User created', user };
|
|
408
395
|
}
|
|
409
396
|
}
|
|
410
|
-
`;await
|
|
397
|
+
`;await L.writeFile(M.join($,"src","controllers","user.controller.ts"),B);let X=`import { Resolver, GQLQuery, GQLMutation, Arg } from 'veloce-ts/graphql';
|
|
411
398
|
import { z } from 'zod';
|
|
412
399
|
|
|
413
|
-
|
|
414
|
-
id: z.string(),
|
|
415
|
-
name: z.string(),
|
|
416
|
-
email: z.string().email(),
|
|
417
|
-
});
|
|
418
|
-
|
|
419
|
-
type User = z.infer<typeof UserSchema>;
|
|
420
|
-
|
|
421
|
-
@Resolver()
|
|
400
|
+
@Resolver('user')
|
|
422
401
|
export class UserResolver {
|
|
423
|
-
private users:
|
|
402
|
+
private users: Array<{ id: string; name: string; email: string }> = [];
|
|
424
403
|
|
|
425
|
-
@
|
|
426
|
-
async
|
|
404
|
+
@GQLQuery('getUsers')
|
|
405
|
+
async getUsers() {
|
|
427
406
|
return this.users;
|
|
428
407
|
}
|
|
429
408
|
|
|
430
|
-
@
|
|
431
|
-
async
|
|
432
|
-
return this.users.find(u => u.id === id)
|
|
409
|
+
@GQLQuery('getUser')
|
|
410
|
+
async getUser(@Arg('id', z.string()) id: string) {
|
|
411
|
+
return this.users.find(u => u.id === id) ?? null;
|
|
433
412
|
}
|
|
434
413
|
|
|
435
|
-
@
|
|
414
|
+
@GQLMutation('createUser')
|
|
436
415
|
async createUser(
|
|
437
416
|
@Arg('name', z.string()) name: string,
|
|
438
417
|
@Arg('email', z.string().email()) email: string
|
|
439
|
-
)
|
|
418
|
+
) {
|
|
440
419
|
const user = { id: Date.now().toString(), name, email };
|
|
441
420
|
this.users.push(user);
|
|
442
421
|
return user;
|
|
443
422
|
}
|
|
444
423
|
}
|
|
445
|
-
`;await
|
|
424
|
+
`;await L.writeFile(M.join($,"src","resolvers","user.resolver.ts"),X);let Y=`import { WebSocket, OnConnect, OnMessage, OnDisconnect } from 'veloce-ts/websocket';
|
|
446
425
|
import { z } from 'zod';
|
|
447
426
|
import type { WebSocketConnection } from 'veloce-ts/websocket';
|
|
448
427
|
|
|
@@ -478,19 +457,202 @@ export class ChatWebSocket {
|
|
|
478
457
|
console.log('Client disconnected:', connection.id);
|
|
479
458
|
}
|
|
480
459
|
}
|
|
481
|
-
`;await
|
|
460
|
+
`;await L.writeFile(M.join($,"src","websockets","chat.websocket.ts"),Y)}var L,P,M,Yq=async()=>{try{let $=await fetch("https://registry.npmjs.org/veloce-ts");if($.ok){let B=(await $.json())["dist-tags"]?.latest;if(B&&typeof B==="string")return B}}catch($){console.warn("Could not fetch latest version from npm, using fallback")}try{let $=M.join(process.cwd(),"package.json");return JSON.parse(P.readFileSync($,"utf-8")).version||"0.3.0"}catch{return"0.3.0"}};var D$=A(()=>{L=require("fs/promises"),P=require("fs"),M=require("path")});var A$={};f(A$,{registerDevCommand:()=>Kq});function Kq($){$.command("dev").description("Start development server with hot reload").option("-p, --port <port>","Port to run the server on","3000").option("-w, --watch <path>","Additional paths to watch","src").action(async(q)=>{await Gq(q)})}async function Gq($){let q=F$.join(process.cwd(),"src","index.ts");if(!y$.existsSync(q))console.error("Error: src/index.ts not found"),console.error("Make sure you are in a VeloceTS project directory"),process.exit(1);console.log("Starting development server..."),console.log(`Watching: ${$.watch||"src"}`),console.log(`Port: ${$.port||3000}`),console.log(`
|
|
482
461
|
Press Ctrl+C to stop
|
|
483
|
-
`);let
|
|
484
|
-
Shutting down development server...`),
|
|
485
|
-
Building ${
|
|
462
|
+
`);let B=["--watch","--hot",q],X={...process.env,NODE_ENV:"development",PORT:$.port?.toString()||"3000"},Y=N$.spawn("bun",B,{stdio:"inherit",env:X,shell:!0}),Z=()=>{console.log(`
|
|
463
|
+
Shutting down development server...`),Y.kill("SIGTERM"),process.exit(0)};process.on("SIGINT",Z),process.on("SIGTERM",Z),Y.on("error",(z)=>{console.error("Failed to start development server:",z),process.exit(1)}),Y.on("exit",(z)=>{if(z!==0&&z!==null)console.error(`Development server exited with code ${z}`),process.exit(z)})}var N$,y$,F$;var j$=A(()=>{N$=require("child_process"),y$=require("fs"),F$=require("path")});var P$={};f(P$,{registerBuildCommand:()=>Wq});function Wq($){$.command("build").description("Build project for production").option("-m, --minify","Minify output",!1).option("-s, --sourcemap","Generate sourcemaps",!0).option("-o, --outdir <dir>","Output directory","dist").option("-f, --format <format>","Output format (esm, cjs, both)","both").action(async(q)=>{await Eq(q)})}async function Eq($){let q=r.join(process.cwd(),"src","index.ts");if(!n.existsSync(q))console.error("Error: src/index.ts not found"),console.error("Make sure you are in a VeloceTS project directory"),process.exit(1);console.log("Building project for production..."),console.log(`Format: ${$.format||"both"}`),console.log(`Minify: ${$.minify?"yes":"no"}`),console.log(`Sourcemap: ${$.sourcemap?"yes":"no"}`);let B=$.outdir||"dist";try{if(n.existsSync(B))await w.rm(B,{recursive:!0,force:!0});await w.mkdir(B,{recursive:!0});let X=$.format||"both",Y=X==="both"?["esm","cjs"]:[X];for(let Z of Y)console.log(`
|
|
464
|
+
Building ${Z.toUpperCase()}...`),await Iq(q,B,Z,$);console.log(`
|
|
486
465
|
✓ Build completed successfully!`),console.log(`
|
|
487
|
-
Output directory: ${
|
|
466
|
+
Output directory: ${B}`)}catch(X){console.error("Build failed:",X),process.exit(1)}}async function Iq($,q,B,X){let Y=r.join(q,B);await w.mkdir(Y,{recursive:!0});let Z=await Bun.build({entrypoints:[$],outdir:Y,target:"bun",format:B==="esm"?"esm":"cjs",minify:X.minify||!1,sourcemap:X.sourcemap!==!1?"external":"none",splitting:B==="esm",external:["hono","zod","reflect-metadata","commander","zod-to-json-schema"]});if(!Z.success){console.error(`Failed to build ${B}:`);for(let Q of Z.logs)console.error(Q);throw Error(`Build failed for ${B}`)}console.log(` ✓ ${B.toUpperCase()} build complete`),console.log(` Files: ${Z.outputs.length}`);let z=Z.outputs.reduce((Q,R)=>Q+R.size,0);console.log(` Size: ${(z/1024).toFixed(2)} KB`)}var n,r,w;var w$=A(()=>{n=require("fs"),r=require("path"),w=require("fs/promises")});var k$={};f(k$,{registerGenerateCommand:()=>Dq});function Sq($){return $.replace(/[-_\s](.)/g,(q,B)=>B.toUpperCase()).replace(/^(.)/,(q,B)=>B.toUpperCase())}function Vq($){return $.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase().replace(/[_\s]+/g,"-")}function D($){let q=Vq($),B=Sq(q),X=B.charAt(0).toLowerCase()+B.slice(1);return{pascal:B,kebab:q,camel:X}}function N(){let $=H.join(process.cwd(),"src");return O.existsSync($)?$:process.cwd()}async function W($,q,B){if(B){console.log(`[dry-run] Would write: ${$}`),console.log(q);return}if(await I.mkdir(H.dirname($),{recursive:!0}),O.existsSync($))console.error(`File already exists: ${$}`),process.exit(1);await I.writeFile($,q),console.log(`Created: ${$}`)}function Dq($){let q=$.command("generate").description("Generate code and documentation").alias("g");q.command("openapi").description("Generate OpenAPI specification").option("-o, --output <file>","Output file path","openapi.json").action(async(B)=>{await Nq(B)}),q.command("client").description("Generate TypeScript client from OpenAPI spec").option("-i, --input <file>","OpenAPI spec file","openapi.json").option("-o, --output <dir>","Output directory","src/client").action(async(B)=>{await jq(B)}),q.command("controller <name>").description("Generate a REST controller").option("--flat","Place file in src/ instead of src/controllers/").option("--dry-run","Preview without writing files").action(async(B,X)=>{let{pascal:Y,kebab:Z}=D(B),z=N(),Q=X.flat?z:H.join(z,"controllers"),R=H.join(Q,`${Z}.controller.ts`),_=`import { Controller, Get, Post, Put, Delete, Body, Param } from 'veloce-ts';
|
|
467
|
+
import { z } from 'zod';
|
|
468
|
+
|
|
469
|
+
const Create${Y}Dto = z.object({
|
|
470
|
+
// TODO: define your fields
|
|
471
|
+
name: z.string(),
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
type Create${Y}Input = z.infer<typeof Create${Y}Dto>;
|
|
475
|
+
|
|
476
|
+
@Controller('/${Z}s')
|
|
477
|
+
export class ${Y}Controller {
|
|
478
|
+
@Get('/')
|
|
479
|
+
async findAll() {
|
|
480
|
+
return [];
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
@Get('/:id')
|
|
484
|
+
async findOne(@Param('id') id: string) {
|
|
485
|
+
return { id };
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
@Post('/')
|
|
489
|
+
async create(@Body(Create${Y}Dto) body: Create${Y}Input) {
|
|
490
|
+
return body;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
@Put('/:id')
|
|
494
|
+
async update(@Param('id') id: string, @Body(Create${Y}Dto.partial()) body: Partial<Create${Y}Input>) {
|
|
495
|
+
return { id, ...body };
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
@Delete('/:id')
|
|
499
|
+
async remove(@Param('id') id: string) {
|
|
500
|
+
return { id };
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
`;await W(R,_,X.dryRun??!1)}),q.command("service <name>").description("Generate a service class").option("--flat","Place file in src/ instead of src/services/").option("--dry-run","Preview without writing files").action(async(B,X)=>{let{pascal:Y,kebab:Z}=D(B),z=N(),Q=X.flat?z:H.join(z,"services"),R=H.join(Q,`${Z}.service.ts`),_=`export class ${Y}Service {
|
|
504
|
+
async findAll() {
|
|
505
|
+
return [];
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
async findOne(id: string) {
|
|
509
|
+
return { id };
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
async create(data: Record<string, unknown>) {
|
|
513
|
+
return data;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
async update(id: string, data: Record<string, unknown>) {
|
|
517
|
+
return { id, ...data };
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
async remove(id: string) {
|
|
521
|
+
return { id };
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
`;await W(R,_,X.dryRun??!1)}),q.command("module <name>").description("Generate a module (controller + service + dto + barrel)").option("--dry-run","Preview without writing files").action(async(B,X)=>{let{pascal:Y,kebab:Z}=D(B),z=N(),Q=H.join(z,"modules",Z),R=`import { Controller, Get, Post, Put, Delete, Body, Param } from 'veloce-ts';
|
|
525
|
+
import { Create${Y}Dto, type Create${Y}Input } from './${Z}.dto';
|
|
526
|
+
import { ${Y}Service } from './${Z}.service';
|
|
527
|
+
|
|
528
|
+
@Controller('/${Z}s')
|
|
529
|
+
export class ${Y}Controller {
|
|
530
|
+
private service = new ${Y}Service();
|
|
531
|
+
|
|
532
|
+
@Get('/')
|
|
533
|
+
async findAll() {
|
|
534
|
+
return this.service.findAll();
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
@Get('/:id')
|
|
538
|
+
async findOne(@Param('id') id: string) {
|
|
539
|
+
return this.service.findOne(id);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
@Post('/')
|
|
543
|
+
async create(@Body(Create${Y}Dto) body: Create${Y}Input) {
|
|
544
|
+
return this.service.create(body as Record<string, unknown>);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
@Put('/:id')
|
|
548
|
+
async update(@Param('id') id: string, @Body(Create${Y}Dto.partial()) body: Partial<Create${Y}Input>) {
|
|
549
|
+
return this.service.update(id, body as Record<string, unknown>);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
@Delete('/:id')
|
|
553
|
+
async remove(@Param('id') id: string) {
|
|
554
|
+
return this.service.remove(id);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
`,_=`export class ${Y}Service {
|
|
558
|
+
async findAll() {
|
|
559
|
+
return [];
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
async findOne(id: string) {
|
|
563
|
+
return { id };
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
async create(data: Record<string, unknown>) {
|
|
567
|
+
return data;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
async update(id: string, data: Record<string, unknown>) {
|
|
571
|
+
return { id, ...data };
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
async remove(id: string) {
|
|
575
|
+
return { id };
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
`,J=`import { z } from 'zod';
|
|
579
|
+
|
|
580
|
+
export const Create${Y}Dto = z.object({
|
|
581
|
+
// TODO: define your fields
|
|
582
|
+
name: z.string(),
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
export const Update${Y}Dto = Create${Y}Dto.partial();
|
|
586
|
+
|
|
587
|
+
export type Create${Y}Input = z.infer<typeof Create${Y}Dto>;
|
|
588
|
+
export type Update${Y}Input = z.infer<typeof Update${Y}Dto>;
|
|
589
|
+
`,U=`export { ${Y}Controller } from './${Z}.controller';
|
|
590
|
+
export { ${Y}Service } from './${Z}.service';
|
|
591
|
+
export * from './${Z}.dto';
|
|
592
|
+
`;if(await W(H.join(Q,`${Z}.controller.ts`),R,X.dryRun??!1),await W(H.join(Q,`${Z}.service.ts`),_,X.dryRun??!1),await W(H.join(Q,`${Z}.dto.ts`),J,X.dryRun??!1),await W(H.join(Q,`${Z}.module.ts`),U,X.dryRun??!1),!X.dryRun)console.log(`
|
|
593
|
+
Module created at src/modules/${Z}/`),console.log(`Register in your app:
|
|
594
|
+
import { ${Y}Controller } from './modules/${Z}/${Z}.module';
|
|
595
|
+
app.include(${Y}Controller);`)}),q.command("resolver <name>").description("Generate a GraphQL resolver").option("--flat","Place file in src/ instead of src/resolvers/").option("--dry-run","Preview without writing files").action(async(B,X)=>{let{pascal:Y,kebab:Z,camel:z}=D(B),Q=N(),R=X.flat?Q:H.join(Q,"resolvers"),_=H.join(R,`${Z}.resolver.ts`),J=`import { Resolver, GQLQuery, GQLMutation, Arg } from 'veloce-ts/graphql';
|
|
596
|
+
import { z } from 'zod';
|
|
597
|
+
|
|
598
|
+
@Resolver('${z}')
|
|
599
|
+
export class ${Y}Resolver {
|
|
600
|
+
private items: Array<{ id: string; name: string }> = [];
|
|
601
|
+
|
|
602
|
+
@GQLQuery('get${Y}s')
|
|
603
|
+
async getAll() {
|
|
604
|
+
return this.items;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
@GQLQuery('get${Y}')
|
|
608
|
+
async getOne(@Arg('id', z.string()) id: string) {
|
|
609
|
+
return this.items.find(i => i.id === id) ?? null;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
@GQLMutation('create${Y}')
|
|
613
|
+
async create(@Arg('name', z.string()) name: string) {
|
|
614
|
+
const item = { id: Date.now().toString(), name };
|
|
615
|
+
this.items.push(item);
|
|
616
|
+
return item;
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
`;await W(_,J,X.dryRun??!1)}),q.command("dto <name>").description("Generate a Zod DTO schema").option("--flat","Place file in src/ instead of src/dto/").option("--dry-run","Preview without writing files").action(async(B,X)=>{let{pascal:Y,kebab:Z}=D(B),z=N(),Q=X.flat?z:H.join(z,"dto"),R=H.join(Q,`${Z}.dto.ts`),_=`import { z } from 'zod';
|
|
620
|
+
|
|
621
|
+
export const Create${Y}Dto = z.object({
|
|
622
|
+
// TODO: define your fields
|
|
623
|
+
name: z.string(),
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
export const Update${Y}Dto = Create${Y}Dto.partial();
|
|
627
|
+
|
|
628
|
+
export type Create${Y}Input = z.infer<typeof Create${Y}Dto>;
|
|
629
|
+
export type Update${Y}Input = z.infer<typeof Update${Y}Dto>;
|
|
630
|
+
`;await W(R,_,X.dryRun??!1)}),q.command("middleware <name>").description("Generate a Hono middleware function").option("--flat","Place file in src/ instead of src/middleware/").option("--dry-run","Preview without writing files").action(async(B,X)=>{let{pascal:Y,kebab:Z,camel:z}=D(B),Q=N(),R=X.flat?Q:H.join(Q,"middleware"),_=H.join(R,`${Z}.middleware.ts`),J=`import type { Context, Next } from 'hono';
|
|
631
|
+
|
|
632
|
+
export async function ${z}Middleware(c: Context, next: Next): Promise<void> {
|
|
633
|
+
// TODO: implement middleware logic
|
|
634
|
+
await next();
|
|
635
|
+
}
|
|
636
|
+
`;await W(_,J,X.dryRun??!1)}),q.command("plugin <name>").description("Generate a veloce-ts plugin class").option("--flat","Place file in src/ instead of src/plugins/").option("--dry-run","Preview without writing files").action(async(B,X)=>{let{pascal:Y,kebab:Z,camel:z}=D(B),Q=N(),R=X.flat?Q:H.join(Q,"plugins"),_=H.join(R,`${Z}.plugin.ts`),J=`import type { Plugin } from 'veloce-ts';
|
|
637
|
+
import type { VeloceTS } from 'veloce-ts';
|
|
638
|
+
|
|
639
|
+
export class ${Y}Plugin implements Plugin {
|
|
640
|
+
name = '${z}';
|
|
641
|
+
version = '1.0.0';
|
|
642
|
+
|
|
643
|
+
async install(app: VeloceTS): Promise<void> {
|
|
644
|
+
// TODO: implement plugin logic
|
|
645
|
+
// app.getContainer().register(...)
|
|
646
|
+
// app.getHono().use(...)
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
`;await W(_,J,X.dryRun??!1)})}async function Nq($){console.log("Generating OpenAPI specification...");try{let q=H.join(process.cwd(),"src","index.ts");if(!O.existsSync(q))console.error("Error: src/index.ts not found"),console.error("Make sure you are in a VeloceTS project directory"),process.exit(1);let B=await import(q),X=B.default||B.app;if(!X||typeof X.getMetadata!=="function")console.error("Error: Could not find VeloceTS app instance"),console.error("Make sure your src/index.ts exports the app or sets it as default"),process.exit(1);let Y=X.getMetadata(),Z=yq(Y,X),z=H.join(process.cwd(),$.output);await I.writeFile(z,JSON.stringify(Z,null,2)),console.log(`✓ OpenAPI spec generated: ${$.output}`)}catch(q){console.error("Failed to generate OpenAPI spec:",q),process.exit(1)}}function yq($,q){let B=$.getRoutes(),X={openapi:"3.0.0",info:{title:q.config?.title||"Veloce API",version:q.config?.version||"1.0.0",description:q.config?.description||"API built with Veloce"},paths:{},components:{schemas:{}}};for(let Y of B){let Z=Y.path,z=Y.method.toLowerCase();if(!X.paths[Z])X.paths[Z]={};X.paths[Z][z]={summary:Y.docs?.summary||`${z.toUpperCase()} ${Z}`,description:Y.docs?.description,tags:Y.docs?.tags||[],parameters:Fq(Y),requestBody:Aq(Y),responses:{"200":{description:"Successful response",content:{"application/json":{schema:{type:"object"}}}}}}}return X}function Fq($){let q=[];for(let B of $.parameters||[])if(B.type==="query"||B.type==="param"||B.type==="header")q.push({name:B.name||"unknown",in:B.type==="param"?"path":B.type,required:B.required||!1,schema:{type:"string"}});return q}function Aq($){if(!$.parameters?.find((B)=>B.type==="body"))return;return{required:!0,content:{"application/json":{schema:{type:"object"}}}}}async function jq($){console.log("Generating TypeScript client...");try{let q=H.join(process.cwd(),$.input);if(!O.existsSync(q))console.error(`Error: OpenAPI spec not found at ${$.input}`),console.error('Run "veloce generate openapi" first'),process.exit(1);let B=await Bun.file(q).text(),X=JSON.parse(B),Y=H.join(process.cwd(),$.output);await I.mkdir(Y,{recursive:!0});let Z=Pq(X),z=H.join(Y,"client.ts");await I.writeFile(z,Z);let Q=Oq(X),R=H.join(Y,"types.ts");await I.writeFile(R,Q),console.log(`✓ TypeScript client generated in ${$.output}`),console.log(` - ${$.output}/client.ts`),console.log(` - ${$.output}/types.ts`)}catch(q){console.error("Failed to generate client:",q),process.exit(1)}}function Pq($){let q=$.servers?.[0]?.url||"http://localhost:3000",B=`// Generated TypeScript client for ${$.info.title}
|
|
488
650
|
// Version: ${$.info.version}
|
|
489
651
|
|
|
490
652
|
import type * as Types from './types';
|
|
491
653
|
|
|
492
654
|
export class APIClient {
|
|
493
|
-
constructor(private baseUrl: string = '${
|
|
655
|
+
constructor(private baseUrl: string = '${q}') {}
|
|
494
656
|
|
|
495
657
|
private async request<T>(
|
|
496
658
|
method: string,
|
|
@@ -525,21 +687,21 @@ export class APIClient {
|
|
|
525
687
|
return response.json();
|
|
526
688
|
}
|
|
527
689
|
|
|
528
|
-
`;for(let[
|
|
529
|
-
`}return
|
|
530
|
-
`,
|
|
690
|
+
`;for(let[X,Y]of Object.entries($.paths||{}))for(let[Z,z]of Object.entries(Y)){let Q=O$(Z,X,z),R=wq(Z,X,z);B+=R+`
|
|
691
|
+
`}return B+=`}
|
|
692
|
+
`,B}function O$($,q,B){if(B.operationId)return B.operationId;let X=q.replace(/\{|\}/g,"").replace(/\//g,"_").replace(/^_/,"").replace(/_([a-z])/g,(Y,Z)=>Z.toUpperCase());return`${$}${X.charAt(0).toUpperCase()+X.slice(1)}`}function wq($,q,B){let X=O$($,q,B),Y=$==="post"||$==="put"||$==="patch",Z=B.parameters?.some((U)=>U.in==="query"),z=B.parameters?.some((U)=>U.in==="path"),Q=[],R=[];if(z){let U=B.parameters.filter((K)=>K.in==="path");R=U.map((K)=>K.name),Q.push(...U.map((K)=>`${K.name}: string`))}if(Y)Q.push("body: any");if(Z)Q.push("params?: Record<string, any>");let _=Q.length>0?Q.join(", "):"",J=q;for(let U of R)J=J.replace(`{${U}}`,`\${${U}}`);return` async ${X}(${_}): Promise<any> {
|
|
531
693
|
return this.request('${$.toUpperCase()}', \`${J}\`, {
|
|
532
|
-
${
|
|
533
|
-
${
|
|
694
|
+
${Y?"body,":""}
|
|
695
|
+
${Z?"params,":""}
|
|
534
696
|
});
|
|
535
697
|
}
|
|
536
|
-
`}function
|
|
698
|
+
`}function Oq($){let q=`// Generated types for ${$.info.title}
|
|
537
699
|
// Version: ${$.info.version}
|
|
538
700
|
|
|
539
|
-
`;if($.components?.schemas)for(let[
|
|
540
|
-
`,
|
|
701
|
+
`;if($.components?.schemas)for(let[B,X]of Object.entries($.components.schemas))q+=`export interface ${B} {
|
|
702
|
+
`,q+=fq(X),q+=`}
|
|
541
703
|
|
|
542
|
-
`;return
|
|
543
|
-
`}return
|
|
704
|
+
`;return q}function fq($,q=" "){let B="";if($.properties)for(let[X,Y]of Object.entries($.properties)){let Z=Y,z=!$.required?.includes(X),Q=f$(Z);B+=`${q}${X}${z?"?":""}: ${Q};
|
|
705
|
+
`}return B}function f$($){if($.type==="string")return"string";if($.type==="number"||$.type==="integer")return"number";if($.type==="boolean")return"boolean";if($.type==="array")return`${$.items?f$($.items):"any"}[]`;if($.type==="object")return"Record<string, any>";return"any"}var I,H,O;var C$=A(()=>{I=require("fs/promises"),H=require("path"),O=require("fs")});S$();var t=require("fs"),o=require("path"),__dirname="C:\\Users\\alfredo\\Desktop\\veloce-ts-proyecto\\Veloce-TS\\src\\cli",kq=()=>{try{let $=o.join(__dirname,"..","..","package.json");return JSON.parse(t.readFileSync($,"utf-8")).version||"0.3.0"}catch{try{let $=o.join(process.cwd(),"package.json");return JSON.parse(t.readFileSync($,"utf-8")).version||"0.3.0"}catch{return"0.3.0"}}},y=new I$;y.name("veloce").description("A modern, fast web framework for TypeScript inspired by FastAPI").version(kq(),"-v, --version","Display version number").helpOption("-h, --help","Display help for command");async function Cq(){let{registerNewCommand:$}=await Promise.resolve().then(() => (D$(),V$)),{registerDevCommand:q}=await Promise.resolve().then(() => (j$(),A$)),{registerBuildCommand:B}=await Promise.resolve().then(() => (w$(),P$)),{registerGenerateCommand:X}=await Promise.resolve().then(() => (C$(),k$));$(y),q(y),B(y),X(y),y.parse(process.argv)}Cq().catch(($)=>{console.error("CLI error:",$),process.exit(1)});
|
|
544
706
|
|
|
545
|
-
//# debugId=
|
|
707
|
+
//# debugId=77DFFA1BF26F48E564756E2164756E21
|