@plugjs/plug 0.1.4 → 0.2.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 +2 -2
- package/cli/plug.mjs +1397 -0
- package/cli/ts-loader.mjs +273 -0
- package/cli/tsrun.mjs +136 -0
- package/dist/asserts.cjs +1 -0
- package/dist/asserts.cjs.map +1 -1
- package/dist/asserts.mjs +1 -0
- package/dist/asserts.mjs.map +1 -1
- package/dist/build.cjs +51 -24
- package/dist/build.cjs.map +2 -2
- package/dist/build.d.ts +7 -3
- package/dist/build.mjs +50 -24
- package/dist/build.mjs.map +2 -2
- package/dist/files.cjs +9 -0
- package/dist/files.cjs.map +1 -1
- package/dist/files.mjs +9 -0
- package/dist/files.mjs.map +1 -1
- package/dist/fork.cjs +2 -0
- package/dist/fork.cjs.map +1 -1
- package/dist/fork.mjs +2 -0
- package/dist/fork.mjs.map +1 -1
- package/dist/fs.cjs +11 -4
- package/dist/fs.cjs.map +1 -1
- package/dist/fs.mjs +7 -4
- package/dist/fs.mjs.map +1 -1
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.mjs +1 -1
- package/dist/helpers.mjs.map +1 -1
- package/dist/index.cjs +7 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/logging/levels.cjs.map +1 -1
- package/dist/logging/levels.mjs.map +1 -1
- package/dist/logging/logger.cjs.map +1 -1
- package/dist/logging/logger.mjs.map +1 -1
- package/dist/logging/options.cjs +5 -0
- package/dist/logging/options.cjs.map +1 -1
- package/dist/logging/options.mjs +5 -0
- package/dist/logging/options.mjs.map +1 -1
- package/dist/logging/report.cjs.map +1 -1
- package/dist/logging/report.mjs.map +1 -1
- package/dist/logging/spinner.cjs +12 -0
- package/dist/logging/spinner.cjs.map +1 -1
- package/dist/logging/spinner.mjs +12 -0
- package/dist/logging/spinner.mjs.map +1 -1
- package/dist/paths.cjs.map +1 -1
- package/dist/paths.mjs.map +1 -1
- package/dist/pipe.cjs +34 -0
- package/dist/pipe.cjs.map +1 -1
- package/dist/pipe.mjs +34 -0
- package/dist/pipe.mjs.map +1 -1
- package/dist/plugs/debug.cjs.map +1 -1
- package/dist/plugs/debug.mjs.map +1 -1
- package/dist/plugs/edit.cjs +1 -1
- package/dist/plugs/edit.cjs.map +1 -1
- package/dist/plugs/edit.d.ts +2 -2
- package/dist/plugs/edit.mjs +1 -1
- package/dist/plugs/edit.mjs.map +1 -1
- package/dist/plugs/esbuild/fix-extensions.cjs +4 -0
- package/dist/plugs/esbuild/fix-extensions.cjs.map +1 -1
- package/dist/plugs/esbuild/fix-extensions.mjs.map +1 -1
- package/dist/plugs/esbuild.cjs +6 -2
- package/dist/plugs/esbuild.cjs.map +1 -1
- package/dist/plugs/esbuild.mjs +6 -2
- package/dist/plugs/esbuild.mjs.map +1 -1
- package/dist/plugs/exec.cjs.map +1 -1
- package/dist/plugs/exec.mjs.map +1 -1
- package/dist/plugs/exports.cjs +122 -0
- package/dist/plugs/exports.cjs.map +6 -0
- package/dist/plugs/exports.d.ts +17 -0
- package/dist/plugs/exports.mjs +105 -0
- package/dist/plugs/exports.mjs.map +6 -0
- package/dist/plugs/filter.cjs.map +1 -1
- package/dist/plugs/filter.mjs.map +1 -1
- package/dist/plugs.cjs +1 -0
- package/dist/plugs.cjs.map +1 -1
- package/dist/plugs.d.ts +1 -0
- package/dist/plugs.mjs +1 -0
- package/dist/plugs.mjs.map +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/utils/exec.cjs +9 -0
- package/dist/utils/exec.cjs.map +1 -1
- package/dist/utils/exec.mjs +5 -0
- package/dist/utils/exec.mjs.map +1 -1
- package/dist/utils/match.cjs +5 -0
- package/dist/utils/match.cjs.map +1 -1
- package/dist/utils/match.mjs +1 -0
- package/dist/utils/match.mjs.map +1 -1
- package/dist/utils/options.cjs.map +1 -1
- package/dist/utils/options.mjs.map +1 -1
- package/dist/utils/walk.cjs.map +1 -1
- package/dist/utils/walk.mjs.map +1 -1
- package/extra/plug.mts +373 -0
- package/extra/ts-loader.mts +545 -0
- package/extra/tsrun.mts +64 -0
- package/extra/utils.ts +168 -0
- package/package.json +9 -19
- package/src/build.ts +66 -33
- package/src/fork.ts +1 -0
- package/src/helpers.ts +1 -1
- package/src/index.ts +7 -0
- package/src/logging/spinner.ts +2 -0
- package/src/plugs/edit.ts +4 -3
- package/src/plugs/esbuild.ts +0 -1
- package/src/plugs/exports.ts +175 -0
- package/src/plugs.ts +1 -0
- package/src/types.ts +5 -1
- package/types/plugjs.d.ts +0 -2
- package/LICENSE.md +0 -211
- package/NOTICE.md +0 -13
- package/extra/cli.mjs +0 -1356
- package/extra/ts-loader.mjs +0 -223
package/extra/ts-loader.mjs
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
// extra/ts-loader.mts
|
|
2
|
-
import _fs from "node:fs";
|
|
3
|
-
import _module from "node:module";
|
|
4
|
-
import _path from "node:path";
|
|
5
|
-
import _url from "node:url";
|
|
6
|
-
import _esbuild from "esbuild";
|
|
7
|
-
var CJS = "commonjs";
|
|
8
|
-
var ESM = "module";
|
|
9
|
-
var _debug = process.env.DEBUG_TS_LOADER === "true";
|
|
10
|
-
function _log(type, arg, ...args) {
|
|
11
|
-
if (!_debug)
|
|
12
|
-
return;
|
|
13
|
-
const t = type === "module" ? "esm" : type === "commonjs" ? "cjs" : "---";
|
|
14
|
-
const prefix = `[ts-loader|${t}|pid=${process.pid}]`;
|
|
15
|
-
console.log(prefix, arg, ...args);
|
|
16
|
-
}
|
|
17
|
-
function _throw(type, message, options = {}) {
|
|
18
|
-
const t = type === "module" ? "esm" : type === "commonjs" ? "cjs" : "---";
|
|
19
|
-
const prefix = `[ts-loader|${t}|pid=${process.pid}]`;
|
|
20
|
-
const { start = _throw, ...extra } = options;
|
|
21
|
-
const error = new Error(`${prefix} ${message}`);
|
|
22
|
-
Error.captureStackTrace(error, start);
|
|
23
|
-
Object.assign(error, extra);
|
|
24
|
-
throw error;
|
|
25
|
-
}
|
|
26
|
-
var _moduleFormatCache = /* @__PURE__ */ new Map();
|
|
27
|
-
if (process.env.__TS_LOADER_FORCE_TYPE) {
|
|
28
|
-
const type = process.env.__TS_LOADER_FORCE_TYPE;
|
|
29
|
-
const dir = process.cwd();
|
|
30
|
-
_log(null, `Forcing ".ts" files from "${dir}" to be interpreted as "${type}"`);
|
|
31
|
-
_moduleFormatCache.set(dir, type);
|
|
32
|
-
}
|
|
33
|
-
if (_debug)
|
|
34
|
-
process.on("exit", () => _log(null, "Format cache", _moduleFormatCache));
|
|
35
|
-
function _moduleFormat(directory) {
|
|
36
|
-
const type = _moduleFormatCache.get(directory);
|
|
37
|
-
if (type)
|
|
38
|
-
return type;
|
|
39
|
-
const file = _path.resolve(directory, "package.json");
|
|
40
|
-
try {
|
|
41
|
-
const json = _fs.readFileSync(file, "utf-8");
|
|
42
|
-
const data = JSON.parse(json);
|
|
43
|
-
const type2 = data.type === "module" ? ESM : CJS;
|
|
44
|
-
_log(null, `File "${file}" defines module type as "${data.type}" (${type2})`);
|
|
45
|
-
_moduleFormatCache.set(directory, type2);
|
|
46
|
-
return type2;
|
|
47
|
-
} catch (cause) {
|
|
48
|
-
if (cause.code !== "ENOENT" && cause.code !== "EISDIR") {
|
|
49
|
-
_throw(null, `Unable to read or parse "${file}"`, { cause, start: _moduleFormat });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const name = _path.basename(directory);
|
|
53
|
-
const parent = _path.dirname(directory);
|
|
54
|
-
if (name === "node_modules" || parent === directory) {
|
|
55
|
-
_moduleFormatCache.set(directory, CJS);
|
|
56
|
-
return CJS;
|
|
57
|
-
} else {
|
|
58
|
-
const type2 = _moduleFormat(parent);
|
|
59
|
-
_moduleFormatCache.set(directory, type2);
|
|
60
|
-
return type2;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function _isFile(path) {
|
|
64
|
-
try {
|
|
65
|
-
return _fs.statSync(path).isFile();
|
|
66
|
-
} catch (error) {
|
|
67
|
-
return false;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
function _isDirectory(path) {
|
|
71
|
-
try {
|
|
72
|
-
return _fs.statSync(path).isDirectory();
|
|
73
|
-
} catch (error) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function _esbReport(kind, messages = []) {
|
|
78
|
-
const output = process.stderr;
|
|
79
|
-
const options = { color: !!output.isTTY, terminalWidth: output.columns || 80 };
|
|
80
|
-
const array = _esbuild.formatMessagesSync(messages, { kind, ...options });
|
|
81
|
-
array.forEach((message) => output.write(`${message}
|
|
82
|
-
`));
|
|
83
|
-
}
|
|
84
|
-
function _esbTranpile(filename, type) {
|
|
85
|
-
_log(type, `Transpiling "${filename}`);
|
|
86
|
-
const [format, __fileurl] = type === ESM ? ["esm", "import.meta.url"] : ["cjs", "__filename"];
|
|
87
|
-
const options = {
|
|
88
|
-
sourcefile: filename,
|
|
89
|
-
format,
|
|
90
|
-
loader: "ts",
|
|
91
|
-
sourcemap: "inline",
|
|
92
|
-
sourcesContent: false,
|
|
93
|
-
platform: "node",
|
|
94
|
-
logLevel: "silent",
|
|
95
|
-
target: `node${process.versions["node"]}`,
|
|
96
|
-
define: { __fileurl }
|
|
97
|
-
};
|
|
98
|
-
if (_debug) {
|
|
99
|
-
options.banner = `console.log(\`[ts-loader|${format}]: Loaded "\${${__fileurl}}"\`);`;
|
|
100
|
-
}
|
|
101
|
-
let result;
|
|
102
|
-
try {
|
|
103
|
-
const source = _fs.readFileSync(filename, "utf-8");
|
|
104
|
-
result = _esbuild.transformSync(source, options);
|
|
105
|
-
} catch (cause) {
|
|
106
|
-
_esbReport("error", cause.errors);
|
|
107
|
-
_esbReport("warning", cause.warnings);
|
|
108
|
-
_throw(type, `ESBuild error transpiling "${filename}"`, { cause, start: _esbTranpile });
|
|
109
|
-
}
|
|
110
|
-
if (_debug)
|
|
111
|
-
_esbReport("warning", result.warnings);
|
|
112
|
-
return result.code;
|
|
113
|
-
}
|
|
114
|
-
var resolve = (specifier, context, nextResolve) => {
|
|
115
|
-
_log(ESM, `Resolving "${specifier}" from "${context.parentURL}"`);
|
|
116
|
-
if (!specifier.match(/^\.\.?\//))
|
|
117
|
-
return nextResolve(specifier, context);
|
|
118
|
-
const parentURL = context.parentURL;
|
|
119
|
-
if (!parentURL)
|
|
120
|
-
return nextResolve(specifier, context);
|
|
121
|
-
if (!parentURL.startsWith("file:"))
|
|
122
|
-
return nextResolve(specifier, context);
|
|
123
|
-
if (!parentURL.match(/\.m?ts$/))
|
|
124
|
-
return nextResolve(specifier, context);
|
|
125
|
-
const url = new URL(specifier, parentURL).href;
|
|
126
|
-
const path = _url.fileURLToPath(url);
|
|
127
|
-
if (_isFile(path)) {
|
|
128
|
-
_log(ESM, `Positive match for "${specifier}" as "${path}" (1)`);
|
|
129
|
-
return nextResolve(specifier, context);
|
|
130
|
-
}
|
|
131
|
-
const match = specifier.match(/(.*)(\.[mc]?js$)/);
|
|
132
|
-
if (match) {
|
|
133
|
-
const [, base, ext] = match;
|
|
134
|
-
const tsspecifier = base + ext.replace("js", "ts");
|
|
135
|
-
const tsurl = new URL(tsspecifier, parentURL).href;
|
|
136
|
-
const tspath = _url.fileURLToPath(tsurl);
|
|
137
|
-
if (_isFile(tspath)) {
|
|
138
|
-
_log(ESM, `Positive match for "${specifier}" as "${tspath}" (2)`);
|
|
139
|
-
return nextResolve(tsspecifier, context);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if (_isFile(`${path}.ts`)) {
|
|
143
|
-
_log(ESM, `Positive match for "${specifier}.ts" as "${path}.ts" (3)`);
|
|
144
|
-
return nextResolve(`${specifier}.ts`, context);
|
|
145
|
-
}
|
|
146
|
-
if (_isDirectory(path)) {
|
|
147
|
-
const file = _path.resolve(path, "index.ts");
|
|
148
|
-
if (_isFile(file)) {
|
|
149
|
-
_log(ESM, `Positive match for "${specifier}" as "${file}" (4)`);
|
|
150
|
-
const spec = _url.pathToFileURL(file).pathname;
|
|
151
|
-
return nextResolve(spec, context);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return nextResolve(specifier, context);
|
|
155
|
-
};
|
|
156
|
-
var load = (url, context, nextLoad) => {
|
|
157
|
-
var _a;
|
|
158
|
-
_log(ESM, `Attempting to load "${url}"`);
|
|
159
|
-
if (!url.startsWith("file:"))
|
|
160
|
-
return nextLoad(url, context);
|
|
161
|
-
const ext = (_a = url.match(/\.[cm]?ts$/)) == null ? void 0 : _a[0];
|
|
162
|
-
if (!ext)
|
|
163
|
-
return nextLoad(url, context);
|
|
164
|
-
if (ext === ".cts")
|
|
165
|
-
return { format: "commonjs", shortCircuit: true };
|
|
166
|
-
const filename = _url.fileURLToPath(url);
|
|
167
|
-
if (ext === ".ts") {
|
|
168
|
-
const format = _moduleFormat(_path.dirname(filename));
|
|
169
|
-
if (format === CJS)
|
|
170
|
-
return { format: "commonjs", shortCircuit: true };
|
|
171
|
-
}
|
|
172
|
-
const source = _esbTranpile(filename, ESM);
|
|
173
|
-
return { source, format: "module", shortCircuit: true };
|
|
174
|
-
};
|
|
175
|
-
var loader = (module, filename) => {
|
|
176
|
-
_log(ESM, `Attempting to load "${filename}"`);
|
|
177
|
-
const ext = _path.extname(filename);
|
|
178
|
-
if (ext === ".ts") {
|
|
179
|
-
const format = _moduleFormat(_path.dirname(filename));
|
|
180
|
-
if (format === ESM) {
|
|
181
|
-
_throw(CJS, `Must use import to load ES Module: ${filename}`, { code: "ERR_REQUIRE_ESM" });
|
|
182
|
-
}
|
|
183
|
-
} else if (ext !== ".cts") {
|
|
184
|
-
_throw(CJS, `Unsupported filename "${filename}"`);
|
|
185
|
-
}
|
|
186
|
-
const source = _esbTranpile(filename, CJS);
|
|
187
|
-
try {
|
|
188
|
-
module._compile(source, filename);
|
|
189
|
-
} catch (cause) {
|
|
190
|
-
console.log(`Error compiling module "${filename}"`, cause);
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
_module._extensions[".ts"] = _module._extensions[".cts"] = loader;
|
|
194
|
-
var _oldResolveFilename = _module._resolveFilename;
|
|
195
|
-
_module._resolveFilename = function(request, parent, ...args) {
|
|
196
|
-
try {
|
|
197
|
-
return _oldResolveFilename.call(this, request, parent, ...args);
|
|
198
|
-
} catch (error) {
|
|
199
|
-
if (error.code !== "MODULE_NOT_FOUND")
|
|
200
|
-
throw error;
|
|
201
|
-
const match = request.match(/(.*)(\.[mc]?js$)/);
|
|
202
|
-
if (parent && match) {
|
|
203
|
-
const [, name, ext] = match;
|
|
204
|
-
const tsrequest = name + ext.replace("js", "ts");
|
|
205
|
-
try {
|
|
206
|
-
const result = _oldResolveFilename.call(this, tsrequest, parent, ...args);
|
|
207
|
-
_log("commonjs", `Resolution for "${request}" intercepted as "${tsrequest}`);
|
|
208
|
-
return result;
|
|
209
|
-
} catch (discard) {
|
|
210
|
-
throw error;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
throw error;
|
|
214
|
-
}
|
|
215
|
-
};
|
|
216
|
-
var tsLoaderMarker = Symbol.for("plugjs:tsLoader");
|
|
217
|
-
globalThis[tsLoaderMarker] = tsLoaderMarker;
|
|
218
|
-
_log(null, `Installing loader from "${import.meta.url}"`);
|
|
219
|
-
export {
|
|
220
|
-
load,
|
|
221
|
-
resolve
|
|
222
|
-
};
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,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
|