task-pipeliner 0.3.13 → 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 +1 -1
- package/README.md +1 -1
- package/dist/index.cjs +1 -1
- package/package.json +6 -17
- package/dist/index.d.ts +0 -7
- package/dist/task-pipeliner-rs.node +0 -0
package/README.ko.md
CHANGED
package/README.md
CHANGED
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.
|
|
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.
|
|
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:
|
|
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
|