as-soon 0.0.11 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -0,0 +1,139 @@
1
+ # as-soon
2
+
3
+ A lightweight file watcher that executes commands as soon as files change.
4
+
5
+ ## What is as-soon?
6
+
7
+ `as-soon` is a command-line tool that watches specified files or directories and automatically executes a command whenever changes are detected. It's perfect for development workflows where you need to rebuild, test, or restart processes whenever your code changes.
8
+
9
+ ## Features
10
+
11
+ - **Simple and fast** - Watch files and execute commands with minimal configuration
12
+ - **Flexible watching** - Watch specific directories or the current working directory
13
+ - **Debounced execution** - Commands are debounced (200ms) to avoid excessive runs during rapid file changes
14
+ - **File creation support** - Can watch for files that don't exist yet and automatically start watching them once created
15
+ - **Environment variables** - Loads environment variables from `.env` files automatically
16
+ - **Directory recreation handling** - Automatically re-subscribes when watched directories are deleted and recreated
17
+
18
+ ## Installation
19
+
20
+ ```bash
21
+ npm install -g as-soon
22
+ # or
23
+ pnpm add -g as-soon
24
+ ```
25
+
26
+ Or use it locally in your project:
27
+
28
+ ```bash
29
+ npm install -D as-soon
30
+ # or
31
+ pnpm add -D as-soon
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ### Basic Usage
37
+
38
+ Watch the current directory and execute a command on any file change:
39
+
40
+ ```bash
41
+ as-soon command
42
+ ```
43
+
44
+ ### Watch Specific Directories
45
+
46
+ Use the `-w` flag to watch specific directories:
47
+
48
+ ```bash
49
+ as-soon -w src -w public pnpm build
50
+ ```
51
+
52
+ ### Watch Specific Files
53
+
54
+ You can also watch specific files:
55
+
56
+ ```bash
57
+ as-soon -w package.json -w tsconfig.json pnpm build
58
+ ```
59
+
60
+ ### Pass Arguments to Commands
61
+
62
+ Any arguments after the command are passed through:
63
+
64
+ ```bash
65
+ as-soon pnpm test -- --watch
66
+ ```
67
+
68
+ ### Multiple Watch Paths
69
+
70
+ Watch multiple directories:
71
+
72
+ ```bash
73
+ as-soon -w src -w test pnpm build
74
+ ```
75
+
76
+ ## How It Works
77
+
78
+ 1. **Initial Execution**: The command runs immediately when you start as-soon
79
+ 2. **File Watching**: It watches the specified directories (or current directory by default)
80
+ 3. **Change Detection**: When files are added, modified, or deleted, it detects the changes
81
+ 4. **Debounced Execution**: After a 200ms debounce period, the command executes again
82
+ 5. **Continuous Watching**: The process continues until you stop it (Ctrl+C)
83
+
84
+ ## Examples
85
+
86
+ ### Development Workflow
87
+
88
+ Watch your source files and rebuild on changes:
89
+
90
+ ```bash
91
+ as-soon -w src pnpm build
92
+ ```
93
+
94
+ ### Test Runner
95
+
96
+ Run tests whenever test files change:
97
+
98
+ ```bash
99
+ as-soon -w test pnpm test
100
+ ```
101
+
102
+ ### Type Checking
103
+
104
+ Run TypeScript type checking on file changes:
105
+
106
+ ```bash
107
+ as-soon -w src tsc --noEmit
108
+ ```
109
+
110
+ ### Multiple Workspaces
111
+
112
+ Watch multiple directories in a monorepo:
113
+
114
+ ```bash
115
+ as-soon -w packages/app/src -w packages/lib/src pnpm build
116
+ ```
117
+
118
+ ### Watch Non-Existent Files
119
+
120
+ You can even watch for files that don't exist yet:
121
+
122
+ ```bash
123
+ as-soon -w ./config/dev.ts pnpm build
124
+ ```
125
+
126
+ This is useful for configuration files that might be created later.
127
+
128
+ ## Command-Line Options
129
+
130
+ - `-w <path>` - Specify a directory or file to watch (can be used multiple times)
131
+ - All other arguments are treated as the command to execute
132
+
133
+ ## Environment Variables
134
+
135
+ as-soon automatically loads environment variables from `.env` files using `ldenv`.
136
+
137
+ ## License
138
+
139
+ MIT
package/dist/cli.d.ts CHANGED
@@ -1 +1,3 @@
1
1
  #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js CHANGED
@@ -1,136 +1,147 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- __async
4
- } from "./chunk-AVQVENQ2.js";
5
-
6
- // src/cli.ts
7
- import { execFileSync } from "child_process";
8
- import watcher from "@parcel/watcher";
9
- import path from "path";
10
- import fs from "fs";
11
- import { debounce } from "lodash";
12
- import { loadEnv } from "ldenv";
13
- var args = process.argv.slice(2);
2
+ import { execFileSync } from 'child_process';
3
+ import watcher from '@parcel/watcher';
4
+ import path from 'node:path';
5
+ import fs from 'node:fs';
6
+ import { debounce } from 'lodash';
7
+ import { loadEnv } from 'ldenv';
8
+ const args = process.argv.slice(2);
14
9
  function error(msg) {
15
- console.error(msg);
16
- process.exit(1);
10
+ console.error(msg);
11
+ process.exit(1);
17
12
  }
18
- var deploymentContext = "localhost";
19
- var argToConsume;
20
- var command;
21
- var commandArgs;
22
- var options = {};
13
+ let argToConsume;
14
+ let command;
15
+ let commandArgs;
16
+ const options = {};
23
17
  for (let i = 0; i < args.length; i++) {
24
- const arg = args[i];
25
- if (arg.startsWith("--")) {
26
- argToConsume = arg.substring(2);
27
- } else if (arg.startsWith("-")) {
28
- argToConsume = arg.substring(1);
29
- } else {
30
- if (argToConsume) {
31
- if (options[argToConsume]) {
32
- options[argToConsume].push(arg);
33
- } else {
34
- options[argToConsume] = [arg];
35
- }
36
- argToConsume = void 0;
37
- } else {
38
- command = arg;
39
- commandArgs = args.slice(i + 1);
40
- break;
18
+ const arg = args[i];
19
+ if (arg.startsWith('--')) {
20
+ argToConsume = arg.substring(2);
21
+ }
22
+ else if (arg.startsWith('-')) {
23
+ argToConsume = arg.substring(1);
24
+ }
25
+ else {
26
+ if (argToConsume) {
27
+ if (options[argToConsume]) {
28
+ options[argToConsume].push(arg);
29
+ }
30
+ else {
31
+ options[argToConsume] = [arg];
32
+ }
33
+ argToConsume = undefined;
34
+ }
35
+ else {
36
+ command = arg;
37
+ commandArgs = args.slice(i + 1);
38
+ break;
39
+ }
41
40
  }
42
- }
43
41
  }
44
42
  if (!command) {
45
- error(`please specify a command`);
43
+ error(`please specify a command`);
44
+ }
45
+ const commandToUse = command;
46
+ console.log(`"${commandToUse} ${commandArgs?.join(' ') || ''}"`);
47
+ if (options['mode'] || options['m']) {
48
+ loadEnv({ mode: options['mode'][0] || options['m'][0] });
49
+ }
50
+ else {
51
+ loadEnv();
46
52
  }
47
- var commandToUse = command;
48
- console.log(`"${commandToUse} ${(commandArgs == null ? void 0 : commandArgs.join(" ")) || ""}"`);
49
- loadEnv({ mode: deploymentContext });
50
53
  function _execute() {
51
- try {
52
- execFileSync(commandToUse, commandArgs, { stdio: ["inherit", "inherit", "inherit"] });
53
- } catch (err) {
54
- console.error("failed to execue", err);
55
- }
56
- console.log(`-------------------------------------`);
54
+ try {
55
+ execFileSync(commandToUse, commandArgs, { stdio: ['inherit', 'inherit', 'inherit'] });
56
+ }
57
+ catch (err) {
58
+ console.error('failed to execue', err);
59
+ }
60
+ console.log(`-------------------------------------`);
57
61
  }
58
- function subscribe_folder(absolute_path, execute, filename) {
59
- return __async(this, null, function* () {
60
- const p = path.relative(process.cwd(), absolute_path) || ".";
61
- const subscription = yield watcher.subscribe(absolute_path, (err, events) => {
62
- if (filename) {
63
- for (const event of events) {
64
- if (path.normalize(event.path) === filename) {
65
- console.log(`"${path.basename(filename)}" changed under ${p}`);
66
- execute();
67
- } else if (event.type === "delete" && event.path === absolute_path) {
68
- subscription.unsubscribe();
69
- listen(filename, execute);
70
- return;
71
- }
62
+ // let counter = 0;
63
+ async function subscribe_folder(absolute_path, execute, filename) {
64
+ // const c = ++counter;
65
+ const p = path.relative(process.cwd(), absolute_path) || '.';
66
+ const subscription = await watcher.subscribe(absolute_path, (err, events) => {
67
+ // console.log(`Files changed under ${p} (${c})`);
68
+ if (filename) {
69
+ for (const event of events) {
70
+ if (path.normalize(event.path) === filename) {
71
+ console.log(`"${path.basename(filename)}" changed under ${p}`);
72
+ execute();
73
+ }
74
+ else if (event.type === 'delete' && event.path === absolute_path) {
75
+ subscription.unsubscribe();
76
+ listen(filename, execute);
77
+ return;
78
+ }
79
+ }
72
80
  }
73
- } else {
74
- console.log(`Files changed under ${p}`);
75
- for (const event of events) {
76
- if (event.type === "delete" && event.path === absolute_path) {
77
- subscription.unsubscribe();
78
- listen(absolute_path, execute);
79
- return;
80
- }
81
+ else {
82
+ console.log(`Files changed under ${p}`);
83
+ for (const event of events) {
84
+ if (event.type === 'delete' && event.path === absolute_path) {
85
+ subscription.unsubscribe();
86
+ listen(absolute_path, execute);
87
+ return;
88
+ }
89
+ }
90
+ execute();
81
91
  }
82
- execute();
83
- }
84
92
  });
85
- });
86
93
  }
87
- function listen(absolute_path, execute) {
88
- return __async(this, null, function* () {
94
+ async function listen(absolute_path, execute) {
89
95
  const exists = fs.existsSync(absolute_path);
90
96
  if (exists) {
91
- const isDirectory = fs.statSync(absolute_path).isDirectory();
92
- if (isDirectory) {
93
- subscribe_folder(absolute_path, execute);
94
- } else {
95
- subscribe_folder(path.dirname(absolute_path), execute, absolute_path);
96
- }
97
- } else {
98
- const parent = path.dirname(absolute_path);
99
- if (!fs.existsSync(parent)) {
100
- console.error(`cannot listen on folder who have no parent yet: ${absolute_path}`);
101
- process.exit(1);
102
- }
103
- let tmp_subscription = yield watcher.subscribe(parent, (err, events) => {
104
- for (const event of events) {
105
- if (event.type === "create" && path.normalize(event.path) === absolute_path) {
106
- tmp_subscription == null ? void 0 : tmp_subscription.unsubscribe();
107
- tmp_subscription = void 0;
108
- setTimeout((v) => {
109
- listen(absolute_path, execute);
110
- }, 500);
111
- }
97
+ const isDirectory = fs.statSync(absolute_path).isDirectory();
98
+ if (isDirectory) {
99
+ // console.log(`listen for folder changes...`);
100
+ subscribe_folder(absolute_path, execute);
101
+ }
102
+ else {
103
+ // console.log(`listen for file changes...`);
104
+ subscribe_folder(path.dirname(absolute_path), execute, absolute_path);
112
105
  }
113
- });
114
106
  }
115
- });
107
+ else {
108
+ const parent = path.dirname(absolute_path);
109
+ if (!fs.existsSync(parent)) {
110
+ console.error(`cannot listen on folder who have no parent yet: ${absolute_path}`);
111
+ process.exit(1);
112
+ }
113
+ // console.log(`${absolute_path} do not exist yet, listening on parent : ${parent}`);
114
+ let tmp_subscription = await watcher.subscribe(parent, (err, events) => {
115
+ for (const event of events) {
116
+ if (event.type === 'create' && path.normalize(event.path) === absolute_path) {
117
+ // console.log(`${absolute_path} just got created, listening for it...`);
118
+ tmp_subscription?.unsubscribe();
119
+ tmp_subscription = undefined;
120
+ // wrap in a timeout to ensure @parcel/watcher hook on the correct inode?
121
+ setTimeout(() => {
122
+ listen(absolute_path, execute);
123
+ }, 500);
124
+ }
125
+ }
126
+ });
127
+ }
116
128
  }
117
- function main() {
118
- return __async(this, null, function* () {
129
+ async function main() {
119
130
  const execute = debounce(_execute, 200);
120
131
  execute();
121
- if (options["w"]) {
122
- const folders = options["w"].map((p) => path.normalize(path.join(process.cwd(), p)));
123
- for (const folder of folders) {
132
+ if (options['w']) {
133
+ const folders = options['w'].map((p) => path.normalize(path.join(process.cwd(), p)));
134
+ for (const folder of folders) {
135
+ listen(folder, execute);
136
+ console.log(`Now listening on ${folder}`);
137
+ console.log(`-------------------------------------`);
138
+ }
139
+ }
140
+ else {
141
+ const folder = path.normalize(process.cwd());
142
+ console.log(`listening on current folder: ${folder}`);
124
143
  listen(folder, execute);
125
- console.log(`Now listening on ${folder}`);
126
- console.log(`-------------------------------------`);
127
- }
128
- } else {
129
- const folder = path.normalize(process.cwd());
130
- console.log(`listening on current folder: ${folder}`);
131
- listen(folder, execute);
132
144
  }
133
- });
134
145
  }
135
146
  main();
136
147
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport {execFileSync} from 'child_process';\nimport watcher, {AsyncSubscription} from '@parcel/watcher';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport {debounce} from 'lodash';\nimport {loadEnv} from 'ldenv';\n\nconst args = process.argv.slice(2);\n\nfunction error(msg: string) {\n\tconsole.error(msg);\n\tprocess.exit(1);\n}\n\nlet deploymentContext = 'localhost';\nlet argToConsume;\nlet command: string | undefined;\nlet commandArgs: string[] | undefined;\nconst options: {[key: string]: string[]} = {};\nfor (let i = 0; i < args.length; i++) {\n\tconst arg = args[i];\n\tif (arg.startsWith('--')) {\n\t\targToConsume = arg.substring(2);\n\t} else if (arg.startsWith('-')) {\n\t\targToConsume = arg.substring(1);\n\t} else {\n\t\tif (argToConsume) {\n\t\t\tif (options[argToConsume]) {\n\t\t\t\toptions[argToConsume].push(arg);\n\t\t\t} else {\n\t\t\t\toptions[argToConsume] = [arg];\n\t\t\t}\n\t\t\targToConsume = undefined;\n\t\t} else {\n\t\t\tcommand = arg;\n\t\t\tcommandArgs = args.slice(i + 1);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nif (!command) {\n\terror(`please specify a command`);\n}\nconst commandToUse = command!;\n\nconsole.log(`\"${commandToUse} ${commandArgs?.join(' ') || ''}\"`);\n\nloadEnv({mode: deploymentContext});\n\nfunction _execute() {\n\ttry {\n\t\texecFileSync(commandToUse, commandArgs, {stdio: ['inherit', 'inherit', 'inherit']});\n\t} catch (err) {\n\t\tconsole.error('failed to execue', err);\n\t}\n\tconsole.log(`-------------------------------------`);\n}\n\n// let counter = 0;\nasync function subscribe_folder(absolute_path: string, execute: () => void, filename?: string) {\n\t// const c = ++counter;\n\tconst p = path.relative(process.cwd(), absolute_path) || '.';\n\tconst subscription = await watcher.subscribe(absolute_path, (err, events) => {\n\t\t// console.log(`Files changed under ${p} (${c})`);\n\t\tif (filename) {\n\t\t\tfor (const event of events) {\n\t\t\t\tif (path.normalize(event.path) === filename) {\n\t\t\t\t\tconsole.log(`\"${path.basename(filename)}\" changed under ${p}`);\n\t\t\t\t\texecute();\n\t\t\t\t} else if (event.type === 'delete' && event.path === absolute_path) {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tlisten(filename, execute);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(`Files changed under ${p}`);\n\t\t\tfor (const event of events) {\n\t\t\t\tif (event.type === 'delete' && event.path === absolute_path) {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tlisten(absolute_path, execute);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\texecute();\n\t\t}\n\t});\n}\n\nasync function listen(absolute_path: string, execute: () => void) {\n\tconst exists = fs.existsSync(absolute_path);\n\n\tif (exists) {\n\t\tconst isDirectory = fs.statSync(absolute_path).isDirectory();\n\t\tif (isDirectory) {\n\t\t\t// console.log(`listen for folder changes...`);\n\t\t\tsubscribe_folder(absolute_path, execute);\n\t\t} else {\n\t\t\t// console.log(`listen for file changes...`);\n\t\t\tsubscribe_folder(path.dirname(absolute_path), execute, absolute_path);\n\t\t}\n\t} else {\n\t\tconst parent = path.dirname(absolute_path);\n\t\tif (!fs.existsSync(parent)) {\n\t\t\tconsole.error(`cannot listen on folder who have no parent yet: ${absolute_path}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\t// console.log(`${absolute_path} do not exist yet, listening on parent : ${parent}`);\n\t\tlet tmp_subscription: AsyncSubscription | undefined = await watcher.subscribe(parent, (err, events) => {\n\t\t\tfor (const event of events) {\n\t\t\t\tif (event.type === 'create' && path.normalize(event.path) === absolute_path) {\n\t\t\t\t\t// console.log(`${absolute_path} just got created, listening for it...`);\n\t\t\t\t\ttmp_subscription?.unsubscribe();\n\t\t\t\t\ttmp_subscription = undefined;\n\t\t\t\t\t// wrap in a timeout to ensure @parcel/watcher hook on the correct inode?\n\t\t\t\t\tsetTimeout((v) => {\n\t\t\t\t\t\tlisten(absolute_path, execute);\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nasync function main() {\n\tconst execute = debounce(_execute, 200);\n\texecute();\n\tif (options['w']) {\n\t\tconst folders = options['w'].map((p) => path.normalize(path.join(process.cwd(), p)));\n\t\tfor (const folder of folders) {\n\t\t\tlisten(folder, execute);\n\n\t\t\tconsole.log(`Now listening on ${folder}`);\n\t\t\tconsole.log(`-------------------------------------`);\n\t\t}\n\t} else {\n\t\tconst folder = path.normalize(process.cwd());\n\t\tconsole.log(`listening on current folder: ${folder}`);\n\t\tlisten(folder, execute);\n\t}\n}\nmain();\n"],"mappings":";;;;;;AACA,SAAQ,oBAAmB;AAC3B,OAAO,aAAkC;AACzC,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAQ,gBAAe;AACvB,SAAQ,eAAc;AAEtB,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAEjC,SAAS,MAAM,KAAa;AAC3B,UAAQ,MAAM,GAAG;AACjB,UAAQ,KAAK,CAAC;AACf;AAEA,IAAI,oBAAoB;AACxB,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAM,UAAqC,CAAC;AAC5C,SAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,QAAM,MAAM,KAAK,CAAC;AAClB,MAAI,IAAI,WAAW,IAAI,GAAG;AACzB,mBAAe,IAAI,UAAU,CAAC;AAAA,EAC/B,WAAW,IAAI,WAAW,GAAG,GAAG;AAC/B,mBAAe,IAAI,UAAU,CAAC;AAAA,EAC/B,OAAO;AACN,QAAI,cAAc;AACjB,UAAI,QAAQ,YAAY,GAAG;AAC1B,gBAAQ,YAAY,EAAE,KAAK,GAAG;AAAA,MAC/B,OAAO;AACN,gBAAQ,YAAY,IAAI,CAAC,GAAG;AAAA,MAC7B;AACA,qBAAe;AAAA,IAChB,OAAO;AACN,gBAAU;AACV,oBAAc,KAAK,MAAM,IAAI,CAAC;AAC9B;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAI,CAAC,SAAS;AACb,QAAM,0BAA0B;AACjC;AACA,IAAM,eAAe;AAErB,QAAQ,IAAI,IAAI,YAAY,KAAI,2CAAa,KAAK,SAAQ,EAAE,GAAG;AAE/D,QAAQ,EAAC,MAAM,kBAAiB,CAAC;AAEjC,SAAS,WAAW;AACnB,MAAI;AACH,iBAAa,cAAc,aAAa,EAAC,OAAO,CAAC,WAAW,WAAW,SAAS,EAAC,CAAC;AAAA,EACnF,SAAS,KAAK;AACb,YAAQ,MAAM,oBAAoB,GAAG;AAAA,EACtC;AACA,UAAQ,IAAI,uCAAuC;AACpD;AAGA,SAAe,iBAAiB,eAAuB,SAAqB,UAAmB;AAAA;AAE9F,UAAM,IAAI,KAAK,SAAS,QAAQ,IAAI,GAAG,aAAa,KAAK;AACzD,UAAM,eAAe,MAAM,QAAQ,UAAU,eAAe,CAAC,KAAK,WAAW;AAE5E,UAAI,UAAU;AACb,mBAAW,SAAS,QAAQ;AAC3B,cAAI,KAAK,UAAU,MAAM,IAAI,MAAM,UAAU;AAC5C,oBAAQ,IAAI,IAAI,KAAK,SAAS,QAAQ,CAAC,mBAAmB,CAAC,EAAE;AAC7D,oBAAQ;AAAA,UACT,WAAW,MAAM,SAAS,YAAY,MAAM,SAAS,eAAe;AACnE,yBAAa,YAAY;AACzB,mBAAO,UAAU,OAAO;AACxB;AAAA,UACD;AAAA,QACD;AAAA,MACD,OAAO;AACN,gBAAQ,IAAI,uBAAuB,CAAC,EAAE;AACtC,mBAAW,SAAS,QAAQ;AAC3B,cAAI,MAAM,SAAS,YAAY,MAAM,SAAS,eAAe;AAC5D,yBAAa,YAAY;AACzB,mBAAO,eAAe,OAAO;AAC7B;AAAA,UACD;AAAA,QACD;AACA,gBAAQ;AAAA,MACT;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAEA,SAAe,OAAO,eAAuB,SAAqB;AAAA;AACjE,UAAM,SAAS,GAAG,WAAW,aAAa;AAE1C,QAAI,QAAQ;AACX,YAAM,cAAc,GAAG,SAAS,aAAa,EAAE,YAAY;AAC3D,UAAI,aAAa;AAEhB,yBAAiB,eAAe,OAAO;AAAA,MACxC,OAAO;AAEN,yBAAiB,KAAK,QAAQ,aAAa,GAAG,SAAS,aAAa;AAAA,MACrE;AAAA,IACD,OAAO;AACN,YAAM,SAAS,KAAK,QAAQ,aAAa;AACzC,UAAI,CAAC,GAAG,WAAW,MAAM,GAAG;AAC3B,gBAAQ,MAAM,mDAAmD,aAAa,EAAE;AAChF,gBAAQ,KAAK,CAAC;AAAA,MACf;AAEA,UAAI,mBAAkD,MAAM,QAAQ,UAAU,QAAQ,CAAC,KAAK,WAAW;AACtG,mBAAW,SAAS,QAAQ;AAC3B,cAAI,MAAM,SAAS,YAAY,KAAK,UAAU,MAAM,IAAI,MAAM,eAAe;AAE5E,iEAAkB;AAClB,+BAAmB;AAEnB,uBAAW,CAAC,MAAM;AACjB,qBAAO,eAAe,OAAO;AAAA,YAC9B,GAAG,GAAG;AAAA,UACP;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAAA;AAEA,SAAe,OAAO;AAAA;AACrB,UAAM,UAAU,SAAS,UAAU,GAAG;AACtC,YAAQ;AACR,QAAI,QAAQ,GAAG,GAAG;AACjB,YAAM,UAAU,QAAQ,GAAG,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC;AACnF,iBAAW,UAAU,SAAS;AAC7B,eAAO,QAAQ,OAAO;AAEtB,gBAAQ,IAAI,oBAAoB,MAAM,EAAE;AACxC,gBAAQ,IAAI,uCAAuC;AAAA,MACpD;AAAA,IACD,OAAO;AACN,YAAM,SAAS,KAAK,UAAU,QAAQ,IAAI,CAAC;AAC3C,cAAQ,IAAI,gCAAgC,MAAM,EAAE;AACpD,aAAO,QAAQ,OAAO;AAAA,IACvB;AAAA,EACD;AAAA;AACA,KAAK;","names":[]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,34 +1,28 @@
1
1
  {
2
2
  "name": "as-soon",
3
- "version": "0.0.11",
3
+ "version": "0.1.1",
4
4
  "description": "watch and execute",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "type": "module",
9
- "main": "dist/index.cjs",
10
- "module": "dist/index.js",
11
- "types": "dist/index.d.ts",
9
+
12
10
  "bin": {
13
- "as-soon": "dist/cli.cjs"
11
+ "as-soon": "dist/cli.js"
14
12
  },
15
13
  "dependencies": {
16
- "@parcel/watcher": "^2.4.0",
17
- "ldenv": "^0.3.9",
18
- "lodash": "^4.17.21",
19
- "lodash-es": "^4.17.21"
14
+ "@parcel/watcher": "^2.5.4",
15
+ "ldenv": "^0.3.16",
16
+ "lodash": "^4.17.23"
20
17
  },
21
18
  "devDependencies": {
22
- "@types/lodash": "^4.14.202",
23
- "@types/lodash-es": "^4.17.12",
24
- "@types/node": "^20.11.16",
25
- "set-defaults": "^0.0.2",
26
- "tsup": "^8.0.1",
27
- "typescript": "^5.3.3"
19
+ "@types/lodash": "^4.17.23",
20
+ "@types/node": "^25.0.10",
21
+ "as-soon": "^0.0.11",
22
+ "typescript": "^5.9.3"
28
23
  },
29
24
  "scripts": {
30
- "prepare": "set-defaults .vscode",
31
- "build": "tsup --entry src/index.ts --entry src/cli.ts --dts --format esm,cjs",
32
- "dev": "tsup --entry src/index.ts --entry src/cli.ts --dts --watch --format esm,cjs"
25
+ "build": "tsc --project tsconfig.json",
26
+ "dev": "as-soon -w src pnpm build"
33
27
  }
34
28
  }
package/src/cli.ts CHANGED
@@ -13,7 +13,6 @@ function error(msg: string) {
13
13
  process.exit(1);
14
14
  }
15
15
 
16
- let deploymentContext = 'localhost';
17
16
  let argToConsume;
18
17
  let command: string | undefined;
19
18
  let commandArgs: string[] | undefined;
@@ -47,7 +46,12 @@ const commandToUse = command!;
47
46
 
48
47
  console.log(`"${commandToUse} ${commandArgs?.join(' ') || ''}"`);
49
48
 
50
- loadEnv({mode: deploymentContext});
49
+ if (options['mode'] || options['m']) {
50
+ loadEnv({mode: options['mode'][0] || options['m'][0]});
51
+ } else {
52
+ loadEnv();
53
+ }
54
+
51
55
 
52
56
  function _execute() {
53
57
  try {
@@ -115,7 +119,7 @@ async function listen(absolute_path: string, execute: () => void) {
115
119
  tmp_subscription?.unsubscribe();
116
120
  tmp_subscription = undefined;
117
121
  // wrap in a timeout to ensure @parcel/watcher hook on the correct inode?
118
- setTimeout((v) => {
122
+ setTimeout(() => {
119
123
  listen(absolute_path, execute);
120
124
  }, 500);
121
125
  }
package/tsconfig.json CHANGED
@@ -1,13 +1,18 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "moduleResolution": "node",
4
- "lib": ["ES2020"],
5
- "target": "ES6",
3
+ "strict": true,
4
+ "strictNullChecks": true,
5
+ "target": "ESNext",
6
+ "module": "NodeNext",
7
+ "lib": ["ESNext", "dom"],
8
+ "moduleResolution": "NodeNext",
9
+ "resolveJsonModule": true,
10
+ "skipLibCheck": true,
11
+ "sourceMap": true,
6
12
  "declaration": true,
7
13
  "declarationMap": true,
8
- "sourceMap": true,
9
- "strict": true,
10
- "esModuleInterop": true,
11
- "skipLibCheck": true
12
- }
13
- }
14
+ "rootDir": "./src",
15
+ "outDir": "./dist"
16
+ },
17
+ "include": ["src/**/*.ts"]
18
+ }
@@ -1,25 +0,0 @@
1
- var __async = (__this, __arguments, generator) => {
2
- return new Promise((resolve, reject) => {
3
- var fulfilled = (value) => {
4
- try {
5
- step(generator.next(value));
6
- } catch (e) {
7
- reject(e);
8
- }
9
- };
10
- var rejected = (value) => {
11
- try {
12
- step(generator.throw(value));
13
- } catch (e) {
14
- reject(e);
15
- }
16
- };
17
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
- step((generator = generator.apply(__this, __arguments)).next());
19
- });
20
- };
21
-
22
- export {
23
- __async
24
- };
25
- //# sourceMappingURL=chunk-AVQVENQ2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/cli.cjs DELETED
@@ -1,176 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __create = Object.create;
4
- var __defProp = Object.defineProperty;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getProtoOf = Object.getPrototypeOf;
8
- var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
18
- // If the importer is in node compatibility mode or this is not an ESM
19
- // file that has been converted to a CommonJS file using a Babel-
20
- // compatible transform (i.e. "__esModule" has not been set), then set
21
- // "default" to the CommonJS "module.exports" for node compatibility.
22
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
23
- mod
24
- ));
25
- var __async = (__this, __arguments, generator) => {
26
- return new Promise((resolve, reject) => {
27
- var fulfilled = (value) => {
28
- try {
29
- step(generator.next(value));
30
- } catch (e) {
31
- reject(e);
32
- }
33
- };
34
- var rejected = (value) => {
35
- try {
36
- step(generator.throw(value));
37
- } catch (e) {
38
- reject(e);
39
- }
40
- };
41
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
42
- step((generator = generator.apply(__this, __arguments)).next());
43
- });
44
- };
45
-
46
- // src/cli.ts
47
- var import_child_process = require("child_process");
48
- var import_watcher = __toESM(require("@parcel/watcher"), 1);
49
- var import_node_path = __toESM(require("path"), 1);
50
- var import_node_fs = __toESM(require("fs"), 1);
51
- var import_lodash = require("lodash");
52
- var import_ldenv = require("ldenv");
53
- var args = process.argv.slice(2);
54
- function error(msg) {
55
- console.error(msg);
56
- process.exit(1);
57
- }
58
- var deploymentContext = "localhost";
59
- var argToConsume;
60
- var command;
61
- var commandArgs;
62
- var options = {};
63
- for (let i = 0; i < args.length; i++) {
64
- const arg = args[i];
65
- if (arg.startsWith("--")) {
66
- argToConsume = arg.substring(2);
67
- } else if (arg.startsWith("-")) {
68
- argToConsume = arg.substring(1);
69
- } else {
70
- if (argToConsume) {
71
- if (options[argToConsume]) {
72
- options[argToConsume].push(arg);
73
- } else {
74
- options[argToConsume] = [arg];
75
- }
76
- argToConsume = void 0;
77
- } else {
78
- command = arg;
79
- commandArgs = args.slice(i + 1);
80
- break;
81
- }
82
- }
83
- }
84
- if (!command) {
85
- error(`please specify a command`);
86
- }
87
- var commandToUse = command;
88
- console.log(`"${commandToUse} ${(commandArgs == null ? void 0 : commandArgs.join(" ")) || ""}"`);
89
- (0, import_ldenv.loadEnv)({ mode: deploymentContext });
90
- function _execute() {
91
- try {
92
- (0, import_child_process.execFileSync)(commandToUse, commandArgs, { stdio: ["inherit", "inherit", "inherit"] });
93
- } catch (err) {
94
- console.error("failed to execue", err);
95
- }
96
- console.log(`-------------------------------------`);
97
- }
98
- function subscribe_folder(absolute_path, execute, filename) {
99
- return __async(this, null, function* () {
100
- const p = import_node_path.default.relative(process.cwd(), absolute_path) || ".";
101
- const subscription = yield import_watcher.default.subscribe(absolute_path, (err, events) => {
102
- if (filename) {
103
- for (const event of events) {
104
- if (import_node_path.default.normalize(event.path) === filename) {
105
- console.log(`"${import_node_path.default.basename(filename)}" changed under ${p}`);
106
- execute();
107
- } else if (event.type === "delete" && event.path === absolute_path) {
108
- subscription.unsubscribe();
109
- listen(filename, execute);
110
- return;
111
- }
112
- }
113
- } else {
114
- console.log(`Files changed under ${p}`);
115
- for (const event of events) {
116
- if (event.type === "delete" && event.path === absolute_path) {
117
- subscription.unsubscribe();
118
- listen(absolute_path, execute);
119
- return;
120
- }
121
- }
122
- execute();
123
- }
124
- });
125
- });
126
- }
127
- function listen(absolute_path, execute) {
128
- return __async(this, null, function* () {
129
- const exists = import_node_fs.default.existsSync(absolute_path);
130
- if (exists) {
131
- const isDirectory = import_node_fs.default.statSync(absolute_path).isDirectory();
132
- if (isDirectory) {
133
- subscribe_folder(absolute_path, execute);
134
- } else {
135
- subscribe_folder(import_node_path.default.dirname(absolute_path), execute, absolute_path);
136
- }
137
- } else {
138
- const parent = import_node_path.default.dirname(absolute_path);
139
- if (!import_node_fs.default.existsSync(parent)) {
140
- console.error(`cannot listen on folder who have no parent yet: ${absolute_path}`);
141
- process.exit(1);
142
- }
143
- let tmp_subscription = yield import_watcher.default.subscribe(parent, (err, events) => {
144
- for (const event of events) {
145
- if (event.type === "create" && import_node_path.default.normalize(event.path) === absolute_path) {
146
- tmp_subscription == null ? void 0 : tmp_subscription.unsubscribe();
147
- tmp_subscription = void 0;
148
- setTimeout((v) => {
149
- listen(absolute_path, execute);
150
- }, 500);
151
- }
152
- }
153
- });
154
- }
155
- });
156
- }
157
- function main() {
158
- return __async(this, null, function* () {
159
- const execute = (0, import_lodash.debounce)(_execute, 200);
160
- execute();
161
- if (options["w"]) {
162
- const folders = options["w"].map((p) => import_node_path.default.normalize(import_node_path.default.join(process.cwd(), p)));
163
- for (const folder of folders) {
164
- listen(folder, execute);
165
- console.log(`Now listening on ${folder}`);
166
- console.log(`-------------------------------------`);
167
- }
168
- } else {
169
- const folder = import_node_path.default.normalize(process.cwd());
170
- console.log(`listening on current folder: ${folder}`);
171
- listen(folder, execute);
172
- }
173
- });
174
- }
175
- main();
176
- //# sourceMappingURL=cli.cjs.map
package/dist/cli.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport {execFileSync} from 'child_process';\nimport watcher, {AsyncSubscription} from '@parcel/watcher';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport {debounce} from 'lodash';\nimport {loadEnv} from 'ldenv';\n\nconst args = process.argv.slice(2);\n\nfunction error(msg: string) {\n\tconsole.error(msg);\n\tprocess.exit(1);\n}\n\nlet deploymentContext = 'localhost';\nlet argToConsume;\nlet command: string | undefined;\nlet commandArgs: string[] | undefined;\nconst options: {[key: string]: string[]} = {};\nfor (let i = 0; i < args.length; i++) {\n\tconst arg = args[i];\n\tif (arg.startsWith('--')) {\n\t\targToConsume = arg.substring(2);\n\t} else if (arg.startsWith('-')) {\n\t\targToConsume = arg.substring(1);\n\t} else {\n\t\tif (argToConsume) {\n\t\t\tif (options[argToConsume]) {\n\t\t\t\toptions[argToConsume].push(arg);\n\t\t\t} else {\n\t\t\t\toptions[argToConsume] = [arg];\n\t\t\t}\n\t\t\targToConsume = undefined;\n\t\t} else {\n\t\t\tcommand = arg;\n\t\t\tcommandArgs = args.slice(i + 1);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nif (!command) {\n\terror(`please specify a command`);\n}\nconst commandToUse = command!;\n\nconsole.log(`\"${commandToUse} ${commandArgs?.join(' ') || ''}\"`);\n\nloadEnv({mode: deploymentContext});\n\nfunction _execute() {\n\ttry {\n\t\texecFileSync(commandToUse, commandArgs, {stdio: ['inherit', 'inherit', 'inherit']});\n\t} catch (err) {\n\t\tconsole.error('failed to execue', err);\n\t}\n\tconsole.log(`-------------------------------------`);\n}\n\n// let counter = 0;\nasync function subscribe_folder(absolute_path: string, execute: () => void, filename?: string) {\n\t// const c = ++counter;\n\tconst p = path.relative(process.cwd(), absolute_path) || '.';\n\tconst subscription = await watcher.subscribe(absolute_path, (err, events) => {\n\t\t// console.log(`Files changed under ${p} (${c})`);\n\t\tif (filename) {\n\t\t\tfor (const event of events) {\n\t\t\t\tif (path.normalize(event.path) === filename) {\n\t\t\t\t\tconsole.log(`\"${path.basename(filename)}\" changed under ${p}`);\n\t\t\t\t\texecute();\n\t\t\t\t} else if (event.type === 'delete' && event.path === absolute_path) {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tlisten(filename, execute);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(`Files changed under ${p}`);\n\t\t\tfor (const event of events) {\n\t\t\t\tif (event.type === 'delete' && event.path === absolute_path) {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tlisten(absolute_path, execute);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\texecute();\n\t\t}\n\t});\n}\n\nasync function listen(absolute_path: string, execute: () => void) {\n\tconst exists = fs.existsSync(absolute_path);\n\n\tif (exists) {\n\t\tconst isDirectory = fs.statSync(absolute_path).isDirectory();\n\t\tif (isDirectory) {\n\t\t\t// console.log(`listen for folder changes...`);\n\t\t\tsubscribe_folder(absolute_path, execute);\n\t\t} else {\n\t\t\t// console.log(`listen for file changes...`);\n\t\t\tsubscribe_folder(path.dirname(absolute_path), execute, absolute_path);\n\t\t}\n\t} else {\n\t\tconst parent = path.dirname(absolute_path);\n\t\tif (!fs.existsSync(parent)) {\n\t\t\tconsole.error(`cannot listen on folder who have no parent yet: ${absolute_path}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\t// console.log(`${absolute_path} do not exist yet, listening on parent : ${parent}`);\n\t\tlet tmp_subscription: AsyncSubscription | undefined = await watcher.subscribe(parent, (err, events) => {\n\t\t\tfor (const event of events) {\n\t\t\t\tif (event.type === 'create' && path.normalize(event.path) === absolute_path) {\n\t\t\t\t\t// console.log(`${absolute_path} just got created, listening for it...`);\n\t\t\t\t\ttmp_subscription?.unsubscribe();\n\t\t\t\t\ttmp_subscription = undefined;\n\t\t\t\t\t// wrap in a timeout to ensure @parcel/watcher hook on the correct inode?\n\t\t\t\t\tsetTimeout((v) => {\n\t\t\t\t\t\tlisten(absolute_path, execute);\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nasync function main() {\n\tconst execute = debounce(_execute, 200);\n\texecute();\n\tif (options['w']) {\n\t\tconst folders = options['w'].map((p) => path.normalize(path.join(process.cwd(), p)));\n\t\tfor (const folder of folders) {\n\t\t\tlisten(folder, execute);\n\n\t\t\tconsole.log(`Now listening on ${folder}`);\n\t\t\tconsole.log(`-------------------------------------`);\n\t\t}\n\t} else {\n\t\tconst folder = path.normalize(process.cwd());\n\t\tconsole.log(`listening on current folder: ${folder}`);\n\t\tlisten(folder, execute);\n\t}\n}\nmain();\n"],"mappings":"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","names":["path","watcher","fs"]}
package/dist/cli.d.cts DELETED
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
package/dist/index.cjs DELETED
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
23
- nothing: () => nothing
24
- });
25
- module.exports = __toCommonJS(src_exports);
26
- var nothing = 0;
27
- // Annotate the CommonJS export names for ESM import in node:
28
- 0 && (module.exports = {
29
- nothing
30
- });
31
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export const nothing = 0;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,UAAU;","names":[]}
package/dist/index.d.cts DELETED
@@ -1,3 +0,0 @@
1
- declare const nothing = 0;
2
-
3
- export { nothing };
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- declare const nothing = 0;
2
-
3
- export { nothing };
package/dist/index.js DELETED
@@ -1,8 +0,0 @@
1
- import "./chunk-AVQVENQ2.js";
2
-
3
- // src/index.ts
4
- var nothing = 0;
5
- export {
6
- nothing
7
- };
8
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export const nothing = 0;\n"],"mappings":";;;AAAO,IAAM,UAAU;","names":[]}
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- export const nothing = 0;
package/tsup.config.ts DELETED
@@ -1,5 +0,0 @@
1
- import {defineConfig} from 'tsup';
2
- export default defineConfig({
3
- outDir: 'dist',
4
- sourcemap: true,
5
- });