task-pipeliner 0.3.12 → 0.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ko.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 조건 기반 실행과 아름다운 CLI 출력을 제공하는 강력한 워크플로우 오케스트레이션 도구
4
4
 
5
- **버전:** 0.3.12
5
+ **버전:** 0.3.14
6
6
 
7
7
  ![fox2](https://github.com/user-attachments/assets/fdf8d786-6a91-4d2d-9dc1-72be6f3ccd98)
8
8
 
@@ -179,8 +179,9 @@ task-pipeliner --version
179
179
  tp --version
180
180
  ```
181
181
 
182
- **업데이트:**
182
+ **업데이트:** 버킷을 먼저 갱신한 뒤 앱을 업데이트하세요.
183
183
  ```bash
184
+ scoop update
184
185
  scoop update task-pipeliner
185
186
  ```
186
187
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > A powerful workflow orchestration tool with condition-based execution and beautiful CLI output
4
4
 
5
- **Version:** 0.3.12
5
+ **Version:** 0.3.14
6
6
 
7
7
  ![fox2](https://github.com/user-attachments/assets/fdf8d786-6a91-4d2d-9dc1-72be6f3ccd98)
8
8
 
@@ -180,8 +180,9 @@ task-pipeliner --version
180
180
  tp --version
181
181
  ```
182
182
 
183
- **Updating:**
183
+ **Updating:** Refresh the bucket so Scoop sees the latest manifest, then update the app:
184
184
  ```bash
185
+ scoop update
185
186
  scoop update task-pipeliner
186
187
  ```
187
188
 
package/dist/index.cjs CHANGED
@@ -62,7 +62,7 @@ ${s}`)}throw r}}extractStepLineNumbers(e){let t=new Map,r=e.split(`
62
62
  `);console.log(v.default.red(" Errors:")),console.log(e)}}var Qo=require("commander");var Fo=require("child_process"),Ke=require("fs"),Wo=require("fs/promises"),j=require("path"),Vo=x(require("boxen"),1),D=x(require("chalk"),1),Qe=x(require("inquirer"),1),Ho=x(require("node-cron"),1);ge();var Co=require("fs/promises"),Do=require("path"),To=require("yaml"),Io=require("zod");var L=require("zod"),xn=L.z.object({name:L.z.string().min(1,"Schedule name must be non-empty"),cron:L.z.string().min(1,"Cron expression is required"),workflow:L.z.string().min(1,"Workflow path is required"),baseDir:L.z.string().optional(),timezone:L.z.union([L.z.string(),L.z.number()]).transform(String).optional(),silent:L.z.boolean().optional(),profile:L.z.string().optional()}),vn=L.z.object({schedules:L.z.array(xn).min(1,"Schedule file must have at least one schedule")});function Po(o){return vn.parse(o)}async function Mo(o){let e=await(0,Co.readFile)(o,"utf-8"),t=(0,Do.extname)(o).toLowerCase(),r;try{if(t===".yaml"||t===".yml")r=(0,To.parse)(e);else if(t===".json")r=JSON.parse(e);else throw new Error(`Unsupported file format: ${t}. Use .yaml, .yml, or .json`)}catch(s){if(s instanceof Error&&s.message.startsWith("Unsupported"))throw s;let i=t===".json"?"JSON":"YAML";throw new Error(`Invalid ${i} format: ${s instanceof Error?s.message:String(s)}`)}try{return Po(r)}catch(s){if(s instanceof Io.ZodError){let i=s.issues.map(n=>` - ${n.message} (${n.path.join(".")})`).join(`
63
63
  `);throw new Error(`Invalid schedule file structure:
64
64
  ${i}`)}throw s}}var No=x(require("boxen"),1),E=x(require("chalk"),1),jo=x(require("cronstrue"),1),Tt=x(require("dayjs"),1),It=x(require("node-cron"),1);function Mt(o){try{return jo.default.toString(o)}catch{return null}}function kn(o){if(!It.default.validate(o.cron))return null;try{let e={},t=Ge(o.timezone);t&&(e.timezone=t);let r=It.default.createTask(o.cron,()=>{},e),s=r.getNextRun();return r.destroy(),s}catch{return null}}function ee(o,e){let t=o,{daemonRunning:r,emphasizeState:s}=e,i=t.enabled?s?E.default.bold.green("ENABLED"):E.default.green("enabled"):s?E.default.bold.gray("DISABLED"):E.default.gray("disabled"),n=r&&t.enabled,a=n?E.default.green("\u25CF active"):E.default.gray("\u25CB inactive"),l=s?t.enabled?E.default.bold.green(" [ENABLED]"):E.default.bold.gray(" [DISABLED]"):"",c=E.default.bold(t.name??t.workflowPath),d=kn(t),f=d?(0,Tt.default)(d).format("YYYY-MM-DD HH:mm:ss"):E.default.dim("\u2014"),m=t.lastRun?(0,Tt.default)(t.lastRun).format("YYYY-MM-DD HH:mm:ss"):E.default.dim("never"),p=Mt(t.cron),h=t.timezone?t.timezone.startsWith("+")||t.timezone.startsWith("-")?`UTC${t.timezone}`:`UTC+${t.timezone}`:null,g=h??"local",b=p?`${t.cron} ${E.default.dim(`\u2192 ${p} (${g})`)}`:t.cron,k=[[E.default.gray("Enabled"),i],[E.default.gray("Cron"),b],[E.default.gray("Timezone"),h??E.default.dim("local")],[E.default.gray("Workflow"),t.workflowPath],...t.profile?[[E.default.gray("Profile"),E.default.cyan(t.profile)]]:[],...t.silent?[[E.default.gray("Silent"),E.default.yellow("yes")]]:[],[E.default.gray("Last run"),m],[E.default.gray("Next run"),f]],y=[`${c} ${a}${l}`,...k.map(([T,V])=>` ${T.padEnd(10)} ${V}`)].join(`
65
- `);return(0,No.default)(y,{borderStyle:"round",padding:{top:0,bottom:0,left:1,right:1},margin:{top:0,bottom:0,left:0,right:0},borderColor:n?"green":"gray"})}var q=require("fs"),O=require("path"),Nt=require("url"),Ao={};function Bo(){console.log=()=>{},console.error=()=>{},console.warn=()=>{},console.info=()=>{},process.stdout.write=()=>!0,process.stderr.write=()=>!0}function Oo(){return"0.3.12"}function Xe(o){let e=o?(0,O.resolve)(o):process.cwd(),t=50,r=0;for(;r<t;){let s=(0,O.resolve)(e,"tp");try{if((0,q.existsSync)(s)&&(0,q.statSync)(s).isDirectory())return s}catch{}let i=(0,O.dirname)(e);if(i===e)break;e=i,r++}return null}function Lo(o){let e={};for(let t of o){let r=t.indexOf("=");if(r===-1)throw new Error(`Invalid -v/--var format: "${t}". Use key=value (e.g. -v version=1.0.0).`);let s=t.slice(0,r).trim(),i=t.slice(r+1).trim();if(!s)throw new Error(`Invalid -v/--var format: key is empty in "${t}". Use key=value.`);e[s]=i}return e}function jt(o,e){let t=e.workflow;if((0,j.isAbsolute)(t))return t;let r=e.baseDir?(0,j.resolve)(e.baseDir):(0,j.dirname)(o);return(0,j.resolve)(r,t)}function _o(o,e="plain"){let t=o.name??"(no alias)",r=(0,j.basename)(o.workflowPath),s=Mt(o.cron)??o.cron,i=e==="color"?o.enabled?D.default.green("Enabled"):D.default.dim("Disabled"):o.enabled?"\u2713":"\u2717";return`${t} \xB7 ${r} \xB7 ${o.cron} \xB7 ${s} \xB7 ${i}`}async function Uo(o){let e=new W;if(!o){let l=Xe();l||(console.error(D.default.red(`
65
+ `);return(0,No.default)(y,{borderStyle:"round",padding:{top:0,bottom:0,left:1,right:1},margin:{top:0,bottom:0,left:0,right:0},borderColor:n?"green":"gray"})}var q=require("fs"),O=require("path"),Nt=require("url"),Ao={};function Bo(){console.log=()=>{},console.error=()=>{},console.warn=()=>{},console.info=()=>{},process.stdout.write=()=>!0,process.stderr.write=()=>!0}function Oo(){return"0.3.14"}function Xe(o){let e=o?(0,O.resolve)(o):process.cwd(),t=50,r=0;for(;r<t;){let s=(0,O.resolve)(e,"tp");try{if((0,q.existsSync)(s)&&(0,q.statSync)(s).isDirectory())return s}catch{}let i=(0,O.dirname)(e);if(i===e)break;e=i,r++}return null}function Lo(o){let e={};for(let t of o){let r=t.indexOf("=");if(r===-1)throw new Error(`Invalid -v/--var format: "${t}". Use key=value (e.g. -v version=1.0.0).`);let s=t.slice(0,r).trim(),i=t.slice(r+1).trim();if(!s)throw new Error(`Invalid -v/--var format: key is empty in "${t}". Use key=value.`);e[s]=i}return e}function jt(o,e){let t=e.workflow;if((0,j.isAbsolute)(t))return t;let r=e.baseDir?(0,j.resolve)(e.baseDir):(0,j.dirname)(o);return(0,j.resolve)(r,t)}function _o(o,e="plain"){let t=o.name??"(no alias)",r=(0,j.basename)(o.workflowPath),s=Mt(o.cron)??o.cron,i=e==="color"?o.enabled?D.default.green("Enabled"):D.default.dim("Disabled"):o.enabled?"\u2713":"\u2717";return`${t} \xB7 ${r} \xB7 ${o.cron} \xB7 ${s} \xB7 ${i}`}async function Uo(o){let e=new W;if(!o){let l=Xe();l||(console.error(D.default.red(`
66
66
  \u2717 No tp directory found`)),process.exit(1));let c=(0,j.join)(l,"schedules");(0,Ke.existsSync)(c)||(console.error(D.default.red(`
67
67
  \u2717 No schedules directory found at ${c}`)),process.exit(1));let f=(await(0,Wo.readdir)(c)).filter(g=>{let b=(0,j.extname)(g).toLowerCase();return[".yaml",".yml",".json"].includes(b)});f.length===0&&(console.error(D.default.red(`
68
68
  \u2717 No schedule files found in ${c}`)),process.exit(1));let m=f.map(g=>({id:(0,j.join)(c,g),label:g}));o=(await new B(!0).prompt("Select a schedule file to add",m)).id}let t=(0,j.resolve)(o);(0,Ke.existsSync)(t)||(console.error(`\u2717 File not found: ${t}`),process.exit(1));let r;try{r=await Mo(t)}catch(l){console.error(`\u2717 Failed to parse schedule file: ${l instanceof Error?l.message:String(l)}`),process.exit(1)}let s=r.schedules.filter(l=>!Ho.default.validate(l.cron));if(s.length>0){console.error("\u2717 Invalid cron expression(s):");for(let l of s)console.error(` - ${l.name}: "${l.cron}"`);process.exit(1)}let i=r.schedules.filter(l=>{let c=jt(t,l);return!(0,Ke.existsSync)(c)});if(i.length>0){console.error("\u2717 Workflow file(s) not found:");for(let l of i){let c=jt(t,l);console.error(` - ${l.name}: ${l.workflow} (resolved: ${c})`)}process.exit(1)}console.log(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "task-pipeliner",
3
- "version": "0.3.12",
3
+ "version": "0.3.14",
4
4
  "description": "A task pipeline runner with condition-based workflow execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -60,7 +60,6 @@
60
60
  "zod": "^4.3.5"
61
61
  },
62
62
  "devDependencies": {
63
- "@napi-rs/cli": "^2.16.0",
64
63
  "@types/cli-truncate": "^2.0.3",
65
64
  "@types/inquirer": "^9.0.7",
66
65
  "@types/node": "^20.10.0",
@@ -77,16 +76,8 @@
77
76
  "tsup": "^8.5.1",
78
77
  "typescript": "^5.3.3",
79
78
  "typescript-eslint": "^8.53.1",
80
- "vitest": "^1.1.0"
81
- },
82
- "napi": {
83
- "name": "task-pipeliner-rs",
84
- "packageName": "task-pipeliner-rs",
85
- "outputDir": "./dist",
86
- "triples": {
87
- "defaults": true,
88
- "additional": []
89
- }
79
+ "vitest": "^1.1.0",
80
+ "@vitest/coverage-v8": "^1.1.0"
90
81
  },
91
82
  "files": [
92
83
  "dist"
@@ -94,7 +85,6 @@
94
85
  "pkg": {
95
86
  "noBytecode": true,
96
87
  "assets": [
97
- "dist/**/*.node",
98
88
  "package.json",
99
89
  "node_modules/chalk/**/*",
100
90
  "node_modules/boxen/**/*",
@@ -113,16 +103,15 @@
113
103
  ]
114
104
  },
115
105
  "scripts": {
116
- "build": "pnpm build:napi && pnpm build:ts && pnpm build:cleanup",
117
- "build:napi": "napi build dist --cargo-cwd rust --release",
106
+ "build": "pnpm build:ts",
118
107
  "build:ts": "tsup",
119
- "build:cleanup": "rm -f ./task-pipeliner*.node ./index.d.ts",
120
108
  "dev": "tsc --watch",
121
109
  "lint": "eslint .",
122
110
  "lint:fix": "eslint . --fix",
123
111
  "format": "prettier --write \"src/**/*.{ts,tsx}\" \"scripts/**/*.{ts,js}\" \"*.{ts,js,json}\"",
124
112
  "format:check": "prettier --check \"src/**/*.{ts,tsx}\" \"scripts/**/*.{ts,js}\" \"*.{ts,js,json}\"",
125
113
  "test": "vitest run",
126
- "test:watch": "vitest"
114
+ "test:watch": "vitest",
115
+ "test:coverage": "vitest run --coverage"
127
116
  }
128
117
  }
package/dist/index.d.ts DELETED
@@ -1,7 +0,0 @@
1
- /* tslint:disable */
2
- /* eslint-disable */
3
-
4
- /* auto-generated by NAPI-RS */
5
-
6
- export declare function runTask(command: string, shell?: Array<string> | undefined | null): Promise<boolean>
7
- export declare function runTaskSync(command: string, shell?: Array<string> | undefined | null): boolean
Binary file