@_linked/cli 1.46.2 → 1.47.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 +107 -0
- package/README.md +48 -36
- package/hooks/drift.cjs +169 -0
- package/hooks/git-hook.cjs +170 -0
- package/hooks/hook-shim.cjs +63 -0
- package/hooks/lock-at-rest.cjs +268 -0
- package/hooks/manifests.cjs +216 -0
- package/hooks/platform.cjs +25 -0
- package/lib/esm/app-release/build-backend.d.ts.map +1 -1
- package/lib/esm/app-release/build-backend.js +2 -1
- package/lib/esm/app-release/build-backend.js.map +1 -1
- package/lib/esm/cli-methods.d.ts.map +1 -1
- package/lib/esm/cli-methods.js +166 -150
- package/lib/esm/cli-methods.js.map +1 -1
- package/lib/esm/cli.js +20 -22
- package/lib/esm/cli.js.map +1 -1
- package/lib/esm/commands/build-app.d.ts.map +1 -1
- package/lib/esm/commands/build-app.js +2 -1
- package/lib/esm/commands/build-app.js.map +1 -1
- package/lib/esm/commands/build-package.d.ts.map +1 -1
- package/lib/esm/commands/build-package.js +6 -2
- package/lib/esm/commands/build-package.js.map +1 -1
- package/lib/esm/commands/localize.d.ts +9 -15
- package/lib/esm/commands/localize.d.ts.map +1 -1
- package/lib/esm/commands/localize.js +43 -74
- package/lib/esm/commands/localize.js.map +1 -1
- package/lib/esm/commands/setup-publish.d.ts.map +1 -1
- package/lib/esm/commands/setup-publish.js +22 -15
- package/lib/esm/commands/setup-publish.js.map +1 -1
- package/lib/esm/commands/start.d.ts +8 -0
- package/lib/esm/commands/start.d.ts.map +1 -1
- package/lib/esm/commands/start.js +20 -8
- package/lib/esm/commands/start.js.map +1 -1
- package/lib/esm/installed-packages.d.ts +5 -13
- package/lib/esm/installed-packages.d.ts.map +1 -1
- package/lib/esm/installed-packages.js +5 -38
- package/lib/esm/installed-packages.js.map +1 -1
- package/lib/esm/lifecycle.d.ts +35 -22
- package/lib/esm/lifecycle.d.ts.map +1 -1
- package/lib/esm/lifecycle.js +62 -36
- package/lib/esm/lifecycle.js.map +1 -1
- package/lib/esm/localize/adopt.d.ts +5 -5
- package/lib/esm/localize/adopt.d.ts.map +1 -1
- package/lib/esm/localize/adopt.js +46 -55
- package/lib/esm/localize/adopt.js.map +1 -1
- package/lib/esm/localize/app-root.d.ts +16 -0
- package/lib/esm/localize/app-root.d.ts.map +1 -0
- package/lib/esm/localize/app-root.js +94 -0
- package/lib/esm/localize/app-root.js.map +1 -0
- package/lib/esm/localize/app-setup.d.ts +21 -0
- package/lib/esm/localize/app-setup.d.ts.map +1 -0
- package/lib/esm/localize/app-setup.js +178 -0
- package/lib/esm/localize/app-setup.js.map +1 -0
- package/lib/esm/localize/delocalize.d.ts.map +1 -1
- package/lib/esm/localize/delocalize.js +169 -104
- package/lib/esm/localize/delocalize.js.map +1 -1
- package/lib/esm/localize/drift-hook.d.ts +18 -0
- package/lib/esm/localize/drift-hook.d.ts.map +1 -0
- package/lib/esm/localize/drift-hook.js +37 -0
- package/lib/esm/localize/drift-hook.js.map +1 -0
- package/lib/esm/localize/drift.d.ts +36 -0
- package/lib/esm/localize/drift.d.ts.map +1 -0
- package/lib/esm/localize/drift.js +34 -0
- package/lib/esm/localize/drift.js.map +1 -0
- package/lib/esm/localize/errors.d.ts +14 -8
- package/lib/esm/localize/errors.d.ts.map +1 -1
- package/lib/esm/localize/errors.js +14 -8
- package/lib/esm/localize/errors.js.map +1 -1
- package/lib/esm/localize/fsops.d.ts +11 -27
- package/lib/esm/localize/fsops.d.ts.map +1 -1
- package/lib/esm/localize/fsops.js +40 -115
- package/lib/esm/localize/fsops.js.map +1 -1
- package/lib/esm/localize/git-hooks.d.ts +33 -0
- package/lib/esm/localize/git-hooks.d.ts.map +1 -0
- package/lib/esm/localize/git-hooks.js +146 -0
- package/lib/esm/localize/git-hooks.js.map +1 -0
- package/lib/esm/localize/hook-module.d.ts +6 -0
- package/lib/esm/localize/hook-module.d.ts.map +1 -0
- package/lib/esm/localize/hook-module.js +37 -0
- package/lib/esm/localize/hook-module.js.map +1 -0
- package/lib/esm/localize/index.d.ts +14 -15
- package/lib/esm/localize/index.d.ts.map +1 -1
- package/lib/esm/localize/index.js +8 -9
- package/lib/esm/localize/index.js.map +1 -1
- package/lib/esm/localize/list.d.ts +6 -10
- package/lib/esm/localize/list.d.ts.map +1 -1
- package/lib/esm/localize/list.js +49 -189
- package/lib/esm/localize/list.js.map +1 -1
- package/lib/esm/localize/localize.d.ts +46 -62
- package/lib/esm/localize/localize.d.ts.map +1 -1
- package/lib/esm/localize/localize.js +411 -285
- package/lib/esm/localize/localize.js.map +1 -1
- package/lib/esm/localize/members.d.ts +13 -0
- package/lib/esm/localize/members.d.ts.map +1 -0
- package/lib/esm/localize/members.js +46 -0
- package/lib/esm/localize/members.js.map +1 -0
- package/lib/esm/localize/resolve.d.ts +1 -2
- package/lib/esm/localize/resolve.d.ts.map +1 -1
- package/lib/esm/localize/resolve.js +3 -5
- package/lib/esm/localize/resolve.js.map +1 -1
- package/lib/esm/localize/run.d.ts +1 -0
- package/lib/esm/localize/run.d.ts.map +1 -1
- package/lib/esm/localize/run.js +11 -6
- package/lib/esm/localize/run.js.map +1 -1
- package/lib/esm/localize/setup-lockfile.d.ts +13 -0
- package/lib/esm/localize/setup-lockfile.d.ts.map +1 -0
- package/lib/esm/localize/setup-lockfile.js +80 -0
- package/lib/esm/localize/setup-lockfile.js.map +1 -0
- package/lib/esm/utils/createPackageLocation.d.ts +4 -13
- package/lib/esm/utils/createPackageLocation.d.ts.map +1 -1
- package/lib/esm/utils/createPackageLocation.js +12 -21
- package/lib/esm/utils/createPackageLocation.js.map +1 -1
- package/lib/esm/utils/packageSetup.d.ts +5 -2
- package/lib/esm/utils/packageSetup.d.ts.map +1 -1
- package/lib/esm/utils/packageSetup.js +9 -3
- package/lib/esm/utils/packageSetup.js.map +1 -1
- package/lib/esm/utils/platform.d.ts +24 -0
- package/lib/esm/utils/platform.d.ts.map +1 -0
- package/lib/esm/utils/platform.js +62 -0
- package/lib/esm/utils/platform.js.map +1 -0
- package/lib/esm/utils/shapeReferences.d.ts.map +1 -1
- package/lib/esm/utils/shapeReferences.js +3 -2
- package/lib/esm/utils/shapeReferences.js.map +1 -1
- package/lib/esm/utils/spawn.d.ts +65 -0
- package/lib/esm/utils/spawn.d.ts.map +1 -0
- package/lib/esm/utils/spawn.js +181 -0
- package/lib/esm/utils/spawn.js.map +1 -0
- package/lib/esm/utils.d.ts.map +1 -1
- package/lib/esm/utils.js +19 -5
- package/lib/esm/utils.js.map +1 -1
- package/lib/esm/vite-config.d.ts +5 -12
- package/lib/esm/vite-config.d.ts.map +1 -1
- package/lib/esm/vite-config.js +41 -33
- package/lib/esm/vite-config.js.map +1 -1
- package/package.json +4 -3
- package/lib/esm/localize/ensure.d.ts +0 -44
- package/lib/esm/localize/ensure.d.ts.map +0 -1
- package/lib/esm/localize/ensure.js +0 -151
- package/lib/esm/localize/ensure.js.map +0 -1
- package/lib/esm/localize/manifest.d.ts +0 -63
- package/lib/esm/localize/manifest.d.ts.map +0 -1
- package/lib/esm/localize/manifest.js +0 -133
- package/lib/esm/localize/manifest.js.map +0 -1
- package/lib/esm/localize/one-copy-hook.d.ts +0 -16
- package/lib/esm/localize/one-copy-hook.d.ts.map +0 -1
- package/lib/esm/localize/one-copy-hook.js +0 -20
- package/lib/esm/localize/one-copy-hook.js.map +0 -1
- package/lib/esm/localize/provided.d.ts +0 -28
- package/lib/esm/localize/provided.d.ts.map +0 -1
- package/lib/esm/localize/provided.js +0 -89
- package/lib/esm/localize/provided.js.map +0 -1
- package/lib/esm/localize/prune.d.ts +0 -182
- package/lib/esm/localize/prune.d.ts.map +0 -1
- package/lib/esm/localize/prune.js +0 -703
- package/lib/esm/localize/prune.js.map +0 -1
- package/lib/esm/localize/relink.d.ts +0 -13
- package/lib/esm/localize/relink.d.ts.map +0 -1
- package/lib/esm/localize/relink.js +0 -181
- package/lib/esm/localize/relink.js.map +0 -1
- package/lib/esm/localized-dedupe.d.ts +0 -26
- package/lib/esm/localized-dedupe.d.ts.map +0 -1
- package/lib/esm/localized-dedupe.js +0 -139
- package/lib/esm/localized-dedupe.js.map +0 -1
- package/lib/esm/utils/relinkHooks.d.ts +0 -19
- package/lib/esm/utils/relinkHooks.d.ts.map +0 -1
- package/lib/esm/utils/relinkHooks.js +0 -74
- package/lib/esm/utils/relinkHooks.js.map +0 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* The one way the cli starts `npm`, `npx` and other command shims with an
|
|
14
|
+
* argument list.
|
|
15
|
+
*
|
|
16
|
+
* On macOS and Linux a command runs as it is named, without a shell. On
|
|
17
|
+
* Windows `npm`, `npx`, `yarn` and every `node_modules/.bin` entry are `.cmd`
|
|
18
|
+
* batch files, which Node refuses to spawn without a shell (EINVAL since
|
|
19
|
+
* Node 18.20.2 / 20.12.2, CVE-2024-27980). There:
|
|
20
|
+
*
|
|
21
|
+
* - `npm` and `npx` run as `node <npm-cli.js|npx-cli.js>` when the npm that
|
|
22
|
+
* started this process says where it lives (`npm_execpath`): no shell, no
|
|
23
|
+
* quoting;
|
|
24
|
+
* - any other shim runs through `cmd.exe` as one command line, each argument
|
|
25
|
+
* quoted for it;
|
|
26
|
+
* - everything else (`git`, `gh`, `node`) is an `.exe` and runs as it is.
|
|
27
|
+
*
|
|
28
|
+
* Commands given as one shell string (`exec`, a configured build command) go
|
|
29
|
+
* to the platform's shell as they are; they must not use POSIX-only syntax.
|
|
30
|
+
*/
|
|
31
|
+
import { spawn, spawnSync, } from 'node:child_process';
|
|
32
|
+
import fs from 'node:fs';
|
|
33
|
+
import path from 'node:path';
|
|
34
|
+
/** Names that are batch-file shims on Windows, not executables. */
|
|
35
|
+
const WINDOWS_SHIMS = new Set([
|
|
36
|
+
'npm',
|
|
37
|
+
'npx',
|
|
38
|
+
'yarn',
|
|
39
|
+
'pnpm',
|
|
40
|
+
'corepack',
|
|
41
|
+
'linked',
|
|
42
|
+
'tsc',
|
|
43
|
+
'vite',
|
|
44
|
+
]);
|
|
45
|
+
/** What `cmd.exe` treats specially outside quotes (cross-spawn's set). */
|
|
46
|
+
const CMD_META = /([()\][%!^"`<>&|;, *?])/g;
|
|
47
|
+
/**
|
|
48
|
+
* `arg` as one argument on a `cmd.exe` command line: quoted the way the C
|
|
49
|
+
* runtime splits arguments, then every `cmd.exe` metacharacter escaped with
|
|
50
|
+
* `^` -- twice for a `.cmd` shim whose `%*` is parsed again (`reparsesArgs`).
|
|
51
|
+
* The same scheme as cross-spawn.
|
|
52
|
+
*/
|
|
53
|
+
export function quoteCmdArg(arg, doubleEscape = false) {
|
|
54
|
+
let quoted = arg
|
|
55
|
+
// Backslashes before a quote are doubled, and the quote escaped.
|
|
56
|
+
.replace(/(\\*)"/g, '$1$1\\"')
|
|
57
|
+
// Backslashes before the closing quote are doubled.
|
|
58
|
+
.replace(/(\\*)$/, '$1$1');
|
|
59
|
+
quoted = `"${quoted}"`.replace(CMD_META, '^$1');
|
|
60
|
+
return doubleEscape ? quoted.replace(CMD_META, '^$1') : quoted;
|
|
61
|
+
}
|
|
62
|
+
/** Is `cmd` a batch-file shim on Windows: a known name, a `.cmd`/`.bat` path, or a `.bin` entry? */
|
|
63
|
+
function isWindowsShim(cmd) {
|
|
64
|
+
if (/\.(cmd|bat)$/i.test(cmd))
|
|
65
|
+
return true;
|
|
66
|
+
if (/(^|[\\/])node_modules[\\/]\.bin[\\/]/i.test(cmd))
|
|
67
|
+
return true;
|
|
68
|
+
return WINDOWS_SHIMS.has(cmd.toLowerCase());
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Does the batch file `file` hand its `%*` to another command line, where
|
|
72
|
+
* `cmd.exe` parses the arguments again: a `node_modules/.bin` shim, or the
|
|
73
|
+
* `.cmd` shim of a known name (`npm.cmd`, `npx.cmd`, `tsc.cmd`, ...), which
|
|
74
|
+
* npm writes the same way. Their arguments are escaped twice.
|
|
75
|
+
*/
|
|
76
|
+
function reparsesArgs(file) {
|
|
77
|
+
if (!/\.cmd$/i.test(file))
|
|
78
|
+
return false;
|
|
79
|
+
if (/(^|[\\/])node_modules[\\/]\.bin[\\/][^\\/]+\.cmd$/i.test(file))
|
|
80
|
+
return true;
|
|
81
|
+
return WINDOWS_SHIMS.has(path.win32.basename(file).slice(0, -'.cmd'.length).toLowerCase());
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The JS entry of npm's `npm` or `npx`, from `npm_execpath` -- which npm sets
|
|
85
|
+
* for every script and `npx` it runs, to `npm-cli.js` or `npx-cli.js`. Only
|
|
86
|
+
* npm's own: under yarn or pnpm it names their entry, which takes other
|
|
87
|
+
* arguments.
|
|
88
|
+
*/
|
|
89
|
+
function npmScript(cmd, env, exists) {
|
|
90
|
+
const execPath = env.npm_execpath;
|
|
91
|
+
if (!execPath)
|
|
92
|
+
return null;
|
|
93
|
+
// npm sets it to npm-cli.js, and npx to npx-cli.js; the other sits next to it.
|
|
94
|
+
const started = path.win32.basename(execPath).toLowerCase();
|
|
95
|
+
if (started !== 'npm-cli.js' && started !== 'npx-cli.js')
|
|
96
|
+
return null;
|
|
97
|
+
const wanted = `${cmd}-cli.js`;
|
|
98
|
+
const script = started === wanted
|
|
99
|
+
? execPath
|
|
100
|
+
: path.win32.join(path.win32.dirname(execPath), wanted);
|
|
101
|
+
return exists(script) ? script : null;
|
|
102
|
+
}
|
|
103
|
+
/** How to start `cmd` with `args` on `platform`; see the module comment. */
|
|
104
|
+
export function planCommand(cmd, args, opts = {}) {
|
|
105
|
+
var _a, _b, _c, _d;
|
|
106
|
+
const platform = (_a = opts.platform) !== null && _a !== void 0 ? _a : process.platform;
|
|
107
|
+
if (platform !== 'win32' || !isWindowsShim(cmd)) {
|
|
108
|
+
return { command: cmd, args: [...args], shell: false };
|
|
109
|
+
}
|
|
110
|
+
const name = cmd.toLowerCase();
|
|
111
|
+
if (name === 'npm' || name === 'npx') {
|
|
112
|
+
const script = npmScript(name, (_b = opts.env) !== null && _b !== void 0 ? _b : process.env, (_c = opts.exists) !== null && _c !== void 0 ? _c : fs.existsSync);
|
|
113
|
+
if (script) {
|
|
114
|
+
return {
|
|
115
|
+
command: (_d = opts.execPath) !== null && _d !== void 0 ? _d : process.execPath,
|
|
116
|
+
args: [script, ...args],
|
|
117
|
+
shell: false,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const file = /\.(cmd|bat|exe)$/i.test(cmd) || !WINDOWS_SHIMS.has(name)
|
|
122
|
+
? cmd
|
|
123
|
+
: `${cmd}.cmd`;
|
|
124
|
+
const doubleEscape = reparsesArgs(file);
|
|
125
|
+
const line = [
|
|
126
|
+
// A path with spaces is quoted; a bare name stays bare so cmd.exe searches PATH for it.
|
|
127
|
+
/[\s"]/.test(file) ? quoteCmdArg(file) : file,
|
|
128
|
+
...args.map((a) => quoteCmdArg(a, doubleEscape)),
|
|
129
|
+
].join(' ');
|
|
130
|
+
return { command: line, args: [], shell: true };
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* `spawnSync` for an argument list, planned by `planCommand`. A `shell` in
|
|
134
|
+
* `options` is ignored: whether a shell is needed is the plan's call.
|
|
135
|
+
*/
|
|
136
|
+
export function spawnCommandSync(cmd, args, options) {
|
|
137
|
+
const plan = planCommand(cmd, args, { env: options.env });
|
|
138
|
+
return spawnSync(plan.command, plan.args, Object.assign(Object.assign({}, options), { shell: plan.shell }));
|
|
139
|
+
}
|
|
140
|
+
/** `spawn` for an argument list, planned by `planCommand`. */
|
|
141
|
+
export function spawnCommand(cmd, args, options = {}) {
|
|
142
|
+
const plan = planCommand(cmd, args, { env: options.env });
|
|
143
|
+
return spawn(plan.command, plan.args, Object.assign(Object.assign({}, options), { shell: plan.shell }));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Run `cmd` with `args` and collect its output; resolves (never rejects) with
|
|
147
|
+
* the exit status, 1 when it could not start. `echo` also streams the output.
|
|
148
|
+
*/
|
|
149
|
+
export function runCommand(cmd, args, options = {}) {
|
|
150
|
+
const { echo, input } = options, spawnOptions = __rest(options, ["echo", "input"]);
|
|
151
|
+
return new Promise((resolve) => {
|
|
152
|
+
var _a, _b, _c, _d, _e;
|
|
153
|
+
let stdout = '';
|
|
154
|
+
let stderr = '';
|
|
155
|
+
let child;
|
|
156
|
+
try {
|
|
157
|
+
child = spawnCommand(cmd, args, Object.assign(Object.assign({}, spawnOptions), { stdio: 'pipe' }));
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
resolve({ status: 1, stdout, stderr: String((_a = e.message) !== null && _a !== void 0 ? _a : e) });
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
(_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on('data', (chunk) => {
|
|
164
|
+
stdout += chunk;
|
|
165
|
+
if (echo)
|
|
166
|
+
process.stdout.write(chunk);
|
|
167
|
+
});
|
|
168
|
+
(_c = child.stderr) === null || _c === void 0 ? void 0 : _c.on('data', (chunk) => {
|
|
169
|
+
stderr += chunk;
|
|
170
|
+
if (echo)
|
|
171
|
+
process.stderr.write(chunk);
|
|
172
|
+
});
|
|
173
|
+
child.on('error', (e) => resolve({ status: 1, stdout, stderr: stderr + e.message }));
|
|
174
|
+
child.on('close', (code) => resolve({ status: code !== null && code !== void 0 ? code : 1, stdout, stderr }));
|
|
175
|
+
if (input !== undefined)
|
|
176
|
+
(_d = child.stdin) === null || _d === void 0 ? void 0 : _d.end(input);
|
|
177
|
+
else
|
|
178
|
+
(_e = child.stdin) === null || _e === void 0 ? void 0 : _e.end();
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/utils/spawn.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The one way the cli starts `npm`, `npx` and other command shims with an\n * argument list.\n *\n * On macOS and Linux a command runs as it is named, without a shell. On\n * Windows `npm`, `npx`, `yarn` and every `node_modules/.bin` entry are `.cmd`\n * batch files, which Node refuses to spawn without a shell (EINVAL since\n * Node 18.20.2 / 20.12.2, CVE-2024-27980). There:\n *\n * - `npm` and `npx` run as `node <npm-cli.js|npx-cli.js>` when the npm that\n * started this process says where it lives (`npm_execpath`): no shell, no\n * quoting;\n * - any other shim runs through `cmd.exe` as one command line, each argument\n * quoted for it;\n * - everything else (`git`, `gh`, `node`) is an `.exe` and runs as it is.\n *\n * Commands given as one shell string (`exec`, a configured build command) go\n * to the platform's shell as they are; they must not use POSIX-only syntax.\n */\nimport {\n spawn,\n spawnSync,\n type ChildProcess,\n type SpawnOptions,\n type SpawnSyncOptions,\n type SpawnSyncReturns,\n} from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface CommandPlan {\n command: string;\n args: string[];\n shell: boolean;\n}\n\nexport interface PlanOptions {\n platform?: NodeJS.Platform;\n env?: NodeJS.ProcessEnv;\n /** The node binary that runs npm's own scripts; `process.execPath` by default. */\n execPath?: string;\n /** Injectable for tests; `fs.existsSync` by default. */\n exists?: (p: string) => boolean;\n}\n\n/** Names that are batch-file shims on Windows, not executables. */\nconst WINDOWS_SHIMS = new Set([\n 'npm',\n 'npx',\n 'yarn',\n 'pnpm',\n 'corepack',\n 'linked',\n 'tsc',\n 'vite',\n]);\n\n/** What `cmd.exe` treats specially outside quotes (cross-spawn's set). */\nconst CMD_META = /([()\\][%!^\"`<>&|;, *?])/g;\n\n/**\n * `arg` as one argument on a `cmd.exe` command line: quoted the way the C\n * runtime splits arguments, then every `cmd.exe` metacharacter escaped with\n * `^` -- twice for a `.cmd` shim whose `%*` is parsed again (`reparsesArgs`).\n * The same scheme as cross-spawn.\n */\nexport function quoteCmdArg(arg: string, doubleEscape = false): string {\n let quoted = arg\n // Backslashes before a quote are doubled, and the quote escaped.\n .replace(/(\\\\*)\"/g, '$1$1\\\\\"')\n // Backslashes before the closing quote are doubled.\n .replace(/(\\\\*)$/, '$1$1');\n quoted = `\"${quoted}\"`.replace(CMD_META, '^$1');\n return doubleEscape ? quoted.replace(CMD_META, '^$1') : quoted;\n}\n\n/** Is `cmd` a batch-file shim on Windows: a known name, a `.cmd`/`.bat` path, or a `.bin` entry? */\nfunction isWindowsShim(cmd: string): boolean {\n if (/\\.(cmd|bat)$/i.test(cmd)) return true;\n if (/(^|[\\\\/])node_modules[\\\\/]\\.bin[\\\\/]/i.test(cmd)) return true;\n return WINDOWS_SHIMS.has(cmd.toLowerCase());\n}\n\n/**\n * Does the batch file `file` hand its `%*` to another command line, where\n * `cmd.exe` parses the arguments again: a `node_modules/.bin` shim, or the\n * `.cmd` shim of a known name (`npm.cmd`, `npx.cmd`, `tsc.cmd`, ...), which\n * npm writes the same way. Their arguments are escaped twice.\n */\nfunction reparsesArgs(file: string): boolean {\n if (!/\\.cmd$/i.test(file)) return false;\n if (/(^|[\\\\/])node_modules[\\\\/]\\.bin[\\\\/][^\\\\/]+\\.cmd$/i.test(file))\n return true;\n return WINDOWS_SHIMS.has(\n path.win32.basename(file).slice(0, -'.cmd'.length).toLowerCase(),\n );\n}\n\n/**\n * The JS entry of npm's `npm` or `npx`, from `npm_execpath` -- which npm sets\n * for every script and `npx` it runs, to `npm-cli.js` or `npx-cli.js`. Only\n * npm's own: under yarn or pnpm it names their entry, which takes other\n * arguments.\n */\nfunction npmScript(\n cmd: 'npm' | 'npx',\n env: NodeJS.ProcessEnv,\n exists: (p: string) => boolean,\n): string | null {\n const execPath = env.npm_execpath;\n if (!execPath) return null;\n // npm sets it to npm-cli.js, and npx to npx-cli.js; the other sits next to it.\n const started = path.win32.basename(execPath).toLowerCase();\n if (started !== 'npm-cli.js' && started !== 'npx-cli.js') return null;\n const wanted = `${cmd}-cli.js`;\n const script =\n started === wanted\n ? execPath\n : path.win32.join(path.win32.dirname(execPath), wanted);\n return exists(script) ? script : null;\n}\n\n/** How to start `cmd` with `args` on `platform`; see the module comment. */\nexport function planCommand(\n cmd: string,\n args: readonly string[],\n opts: PlanOptions = {},\n): CommandPlan {\n const platform = opts.platform ?? process.platform;\n if (platform !== 'win32' || !isWindowsShim(cmd)) {\n return {command: cmd, args: [...args], shell: false};\n }\n const name = cmd.toLowerCase();\n if (name === 'npm' || name === 'npx') {\n const script = npmScript(\n name,\n opts.env ?? process.env,\n opts.exists ?? fs.existsSync,\n );\n if (script) {\n return {\n command: opts.execPath ?? process.execPath,\n args: [script, ...args],\n shell: false,\n };\n }\n }\n const file =\n /\\.(cmd|bat|exe)$/i.test(cmd) || !WINDOWS_SHIMS.has(name)\n ? cmd\n : `${cmd}.cmd`;\n const doubleEscape = reparsesArgs(file);\n const line = [\n // A path with spaces is quoted; a bare name stays bare so cmd.exe searches PATH for it.\n /[\\s\"]/.test(file) ? quoteCmdArg(file) : file,\n ...args.map((a) => quoteCmdArg(a, doubleEscape)),\n ].join(' ');\n return {command: line, args: [], shell: true};\n}\n\n/**\n * `spawnSync` for an argument list, planned by `planCommand`. A `shell` in\n * `options` is ignored: whether a shell is needed is the plan's call.\n */\nexport function spawnCommandSync(\n cmd: string,\n args: readonly string[],\n options: SpawnSyncOptions & {encoding: BufferEncoding},\n): SpawnSyncReturns<string> {\n const plan = planCommand(cmd, args, {env: options.env});\n return spawnSync(plan.command, plan.args, {...options, shell: plan.shell});\n}\n\n/** `spawn` for an argument list, planned by `planCommand`. */\nexport function spawnCommand(\n cmd: string,\n args: readonly string[],\n options: SpawnOptions = {},\n): ChildProcess {\n const plan = planCommand(cmd, args, {env: options.env});\n return spawn(plan.command, plan.args, {...options, shell: plan.shell});\n}\n\nexport interface CommandOutput {\n status: number;\n stdout: string;\n stderr: string;\n}\n\n/**\n * Run `cmd` with `args` and collect its output; resolves (never rejects) with\n * the exit status, 1 when it could not start. `echo` also streams the output.\n */\nexport function runCommand(\n cmd: string,\n args: readonly string[],\n options: SpawnOptions & {echo?: boolean; input?: string} = {},\n): Promise<CommandOutput> {\n const {echo, input, ...spawnOptions} = options;\n return new Promise((resolve) => {\n let stdout = '';\n let stderr = '';\n let child: ChildProcess;\n try {\n child = spawnCommand(cmd, args, {...spawnOptions, stdio: 'pipe'});\n } catch (e) {\n resolve({status: 1, stdout, stderr: String((e as Error).message ?? e)});\n return;\n }\n child.stdout?.on('data', (chunk) => {\n stdout += chunk;\n if (echo) process.stdout.write(chunk);\n });\n child.stderr?.on('data', (chunk) => {\n stderr += chunk;\n if (echo) process.stderr.write(chunk);\n });\n child.on('error', (e) =>\n resolve({status: 1, stdout, stderr: stderr + e.message}),\n );\n child.on('close', (code) => resolve({status: code ?? 1, stdout, stderr}));\n if (input !== undefined) child.stdin?.end(input);\n else child.stdin?.end();\n });\n}\n"]}
|
package/lib/esm/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,WAAW,EAAC,MAAM,eAAe,CAAC;AAK1D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAuBpD,eAAO,IAAI,cAAc,GAAmB,aAAQ,sBAwEnD,CAAC;AA4BF;;;;;;;;;;;;;GAaG;AACH,eAAO,IAAI,sBAAsB,GAAa,YAAY,MAAM,YAQ/D,CAAC;AACF;;;;;;;;GAQG;AACH,eAAO,IAAI,wBAAwB,GACjC,YAAY,MAAM,EAClB,cAAc,MAAM,YAerB,CAAC;AAEF,eAAO,IAAI,cAAc,GAAa,aAAoB,EAAE,eAAY,QAcvE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,IAAI,oBAAoB,GAC7B,iBAAY,EACZ,kBAAiB,GAAG,CAAC,MAAM,CAAa,KACvC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EA2I5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,gBAAW;;;;CAE3C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,gBAAW;;;;CAUpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,gBAAW,KACV,OAAO,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAuBzD,CAAC;AAYF,eAAO,MAAM,mBAAmB,GAAI,aAAQ,EAAE,WAAW;;;;CAsBxD,CAAC;AAGF,eAAO,IAAI,oBAAoB,GAAa,gBAAW,EAAE,cAAS,QA4BjE,CAAC;AACF,wBAAgB,KAAK,CACnB,GAAG,KAAA,EACH,GAAG,GAAE,OAAe,EACpB,UAAU,GAAE,OAAe,EAC3B,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED,wBAAgB,WAAW,CACzB,OAAO,KAAA,EACP,GAAG,UAAQ,EACX,UAAU,GAAE,OAAe,EAC3B,OAAO,CAAC,EAAE,WAAW,EACrB,UAAU,GAAE,OAAe,GAC1B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,wBAAgB,kBAAkB,CAAC,YAAY,KAAA,EAAE,QAAQ,KAAA,EAAE,GAAG,CAAC,KAAA,UAwB9D;AAED,eAAO,MAAM,eAAe,GAC1B,KAAK,cAAc,EACnB,uBAAuB,OAAO,EAC9B,MAAK,OAAe,qBAyCrB,CAAC;AAEF,wBAAgB,GAAG,CAAC,GAAG,QAAQ,OAAA,QAI9B;AAED,wBAAgB,KAAK,CAAC,MAAM,KAAA,EAAE,GAAG,QAAQ,OAAA,QAIxC;AAED,wBAAgB,SAAS,CAAC,GAAG,QAAQ,OAAA,QAiBpC;AAED,wBAAgB,IAAI,CAAC,GAAG,QAAQ,OAAA,QAI/B;AAED,wBAAgB,OAAO,CAAC,GAAG,KAAA,OAI1B;AAED,wBAAgB,uBAAuB;;;EAKtC;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
package/lib/esm/utils.js
CHANGED
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import chalk from 'chalk';
|
|
11
|
-
import { exec } from 'child_process';
|
|
11
|
+
import { exec, execFile } from 'child_process';
|
|
12
12
|
import * as fs from 'fs';
|
|
13
13
|
import { builtinModules } from 'module';
|
|
14
14
|
import * as path from 'path';
|
|
@@ -307,12 +307,14 @@ export const getLastModifiedSourceTime = (packagePath) => {
|
|
|
307
307
|
export const getLastCommitTime = (packagePath) => {
|
|
308
308
|
// console.log(`git log -1 --format=%ci -- ${packagePath}`);
|
|
309
309
|
// process.exit();
|
|
310
|
-
|
|
310
|
+
// git with an argument list and a cwd: no `cd` (cmd.exe's does not change
|
|
311
|
+
// drives) and no `%` for cmd.exe to expand.
|
|
312
|
+
return gitOutput(['log', '-1', '--format=%h %ci', '--', '.'], packagePath)
|
|
311
313
|
.then((result) => __awaiter(void 0, void 0, void 0, function* () {
|
|
312
314
|
let commitId = result.substring(0, result.indexOf(' '));
|
|
313
315
|
let date = result.substring(commitId.length + 1);
|
|
314
316
|
let lastCommitDate = new Date(date);
|
|
315
|
-
let changes = yield
|
|
317
|
+
let changes = yield gitOutput(['show', '--stat', '--oneline', commitId, '--', '.'], packagePath);
|
|
316
318
|
// log(packagePath, result, lastCommitDate);
|
|
317
319
|
// log(changes);
|
|
318
320
|
return { date: lastCommitDate, changes, commitId };
|
|
@@ -322,6 +324,17 @@ export const getLastCommitTime = (packagePath) => {
|
|
|
322
324
|
return null;
|
|
323
325
|
});
|
|
324
326
|
};
|
|
327
|
+
/** git's trimmed stdout; rejects like `execPromise`, with `{error, stdout, stderr}`. */
|
|
328
|
+
function gitOutput(args, cwd) {
|
|
329
|
+
return new Promise((resolve, reject) => {
|
|
330
|
+
execFile('git', args, { cwd, maxBuffer: 64 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
331
|
+
if (error)
|
|
332
|
+
reject({ error, stdout, stderr });
|
|
333
|
+
else
|
|
334
|
+
resolve(String(stdout).trim());
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
}
|
|
325
338
|
export const getLastModifiedFile = (filePath, config = {}) => {
|
|
326
339
|
var files = glob.sync(filePath, config);
|
|
327
340
|
// console.log(files.join(" - "));
|
|
@@ -360,8 +373,9 @@ export var getModulePackageJSON = function (module_name, work_dir) {
|
|
|
360
373
|
package_json = JSON.parse(fs.readFileSync(module_dir + '/package.json', 'utf-8'));
|
|
361
374
|
}
|
|
362
375
|
}
|
|
363
|
-
|
|
364
|
-
|
|
376
|
+
// The filesystem root is its own parent: `/`, or `C:\` on Windows.
|
|
377
|
+
if (!package_json && path.dirname(work_dir) !== work_dir) {
|
|
378
|
+
return getModulePackageJSON(module_name, path.dirname(work_dir));
|
|
365
379
|
}
|
|
366
380
|
return [package_json, module_dir];
|
|
367
381
|
};
|
package/lib/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport {exec, ExecOptions} from 'child_process';\nimport * as fs from 'fs';\nimport {builtinModules} from 'module';\nimport * as path from 'path';\nimport ts from 'typescript';\nimport type {PackageDetails} from './interfaces.js';\nimport {isLinkedPackageJson} from './installed-packages.js';\n\nimport {findNearestPackageJsonSync} from 'find-nearest-package-json';\nimport * as glob from 'glob';\n\nvar gruntConfig;\n\n// Credit: https://gist.github.com/tinovyatkin/727ddbf7e7e10831a1eca9e4ff2fc32e\nconst tsHost = ts.createCompilerHost(\n {\n allowJs: true,\n noEmit: true,\n isolatedModules: true,\n resolveJsonModule: false,\n moduleResolution: ts.ModuleResolutionKind.Classic, // we don't want node_modules\n incremental: true,\n noLib: true,\n noResolve: true,\n },\n true,\n);\n\nexport var getFileImports = async function (filePath) {\n try {\n const importing: string[] = [];\n\n const add = (literal: ts.Node) => {\n const moduleName = literal.getText().replace(/['\"`]/g, '');\n if (\n !moduleName.startsWith('node:') &&\n !builtinModules.includes(moduleName)\n ) {\n importing.push(moduleName);\n }\n };\n // Every form that names a module: `import ... from 'x'`, `import 'x'`,\n // `export ... from 'x'`, `import('x')` (value and type position) and\n // `import x = require('x')`. Children are always visited, so specifiers\n // nested inside functions or a `declare module` body are found too.\n const delintNode = (node: ts.Node) => {\n if (\n (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) &&\n node.moduleSpecifier &&\n ts.isStringLiteralLike(node.moduleSpecifier)\n ) {\n add(node.moduleSpecifier);\n } else if (\n ts.isCallExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ImportKeyword &&\n node.arguments.length >= 1 &&\n ts.isStringLiteralLike(node.arguments[0])\n ) {\n // `import('x')` with a literal argument. A computed specifier cannot be\n // checked statically and is skipped.\n add(node.arguments[0]);\n } else if (\n // `type A = import('x').B`, and the same inside `typeof import('x')`.\n ts.isImportTypeNode(node) &&\n ts.isLiteralTypeNode(node.argument) &&\n ts.isStringLiteral(node.argument.literal)\n ) {\n add(node.argument.literal);\n } else if (\n // `import x = require('x')`.\n ts.isExternalModuleReference(node) &&\n ts.isStringLiteralLike(node.expression)\n ) {\n add(node.expression);\n }\n ts.forEachChild(node, delintNode);\n };\n const sourceFile = tsHost.getSourceFile(\n filePath,\n ts.ScriptTarget.Latest,\n (msg) => {\n throw new Error(`Failed to parse ${filePath}: ${msg}`);\n },\n );\n //check if its a directory, then we wanr that we can't parse it\n let stat = fs.lstatSync(filePath);\n if (stat.isDirectory()) {\n return importing;\n }\n\n if (!sourceFile) {\n console.warn(`Failed to find file ${filePath}`);\n return importing;\n }\n delintNode(sourceFile);\n return importing;\n } catch (err) {\n console.warn(`Error parsing file ${filePath}: ${err}`);\n return [];\n }\n};\n\n// The package name part of a bare specifier: '@scope/name' for a scoped\n// package, the first segment otherwise. Returns null for anything that is not a\n// bare specifier (relative and absolute paths). The 'node:' case is redundant\n// for callers that use getFileImports (which drops builtins already), and is\n// kept so the helper is correct standalone.\nvar barePackageName = function (importPath: string): string | null {\n if (\n importPath.startsWith('.') ||\n importPath.startsWith('/') ||\n importPath.startsWith('node:')\n ) {\n return null;\n }\n const segments = importPath.split('/');\n const name = importPath.startsWith('@')\n ? segments.slice(0, 2).join('/')\n : segments[0];\n return name || null;\n};\n\nvar isLinkedPackageName = function (name: string) {\n // The current '@_linked/*' scope, and the legacy 'lincd'-prefixed names\n // ('lincd', 'lincd-foo', ...).\n return name.startsWith('@_linked/') || /^lincd(-|$)/.test(name);\n};\n\n/**\n * True when the import reaches into ANOTHER Linked package's internals — a\n * '/src/' or '/lib/' path inside '@_linked/<pkg>' or a 'lincd'-prefixed package\n * — instead of going through that package's public subpath. Such an import\n * breaks when the other package changes its build layout, and it bypasses the\n * exports map, so the two are not interchangeable.\n *\n * Relative specifiers are exempt on purpose: the rule is about other packages,\n * and a relative path can only reach files inside the current package, where a\n * './lib/helpers' folder is a perfectly ordinary local module. Escaping the\n * package with '../' is already caught by isImportOutsideOfPackage.\n *\n * @param importPath The import path to check\n */\nexport var isInternalLinkedImport = function (importPath: string) {\n const name = barePackageName(importPath);\n if (!name || !isLinkedPackageName(name)) {\n return false;\n }\n // Match whole path segments, so '@_linked/core/library/x' is not a hit.\n const subPath = importPath.slice(name.length).split('/').filter(Boolean);\n return subPath.includes('src') || subPath.includes('lib');\n};\n/**\n * True when a relative import escapes the package source root. Normalising\n * first is what makes this correct: only leading '..' segments that survive\n * normalisation actually climb out, so './a..b' is an ordinary file name and\n * '../a/../b' climbs one level, not two.\n *\n * @param importPath The import path to check\n * @param curFileDepth How many folders deep the current file is (0 = src, 1 = src/foo, etc.)\n */\nexport var isImportOutsideOfPackage = function (\n importPath: string,\n curFileDepth: number,\n) {\n if (!importPath.startsWith('.')) {\n return false;\n }\n const segments = path.posix\n .normalize(importPath.split('\\\\').join('/'))\n .split('/');\n // How many folders the specifier climbs: the leading '..' segments that\n // normalisation could not cancel out.\n let climbs = 0;\n while (segments[climbs] === '..') {\n climbs++;\n }\n return climbs > curFileDepth;\n};\n\nexport var getPackageJSON = function (root = process.cwd(), error = true) {\n // console.log('Getting package.json from ' + chalk.cyan(root));\n //log stack trace\n let packagePath = path.join(root, 'package.json');\n if (fs.existsSync(packagePath)) {\n return JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n } else if (root === process.cwd()) {\n if (error) {\n console.warn(\n 'Could not find package.json. Make sure you run this command from the root of a linked package or a linked workspace',\n );\n process.exit();\n }\n }\n};\n\n/**\n * Scans package.json for dependencies that are LINCD packages\n * Also looks into dependencies of dependencies\n * If no packageJson is given, it will attempt to obtain it from the current working directory\n * Returns an array of lincd packages, with each entry containing an array with the package name and the local path to the package\n * @param packageJson\n */\nexport var getLINCDDependencies = function (\n packageJson?,\n checkedPackages: Set<string> = new Set(),\n): [string, string, string[]][] {\n if (!packageJson) {\n packageJson = getPackageJSON();\n }\n let dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n let lincdPackagePaths: [string, string, string[]][] = [];\n let firstTime = checkedPackages.size === 0;\n\n for (var dependency of Object.keys(dependencies)) {\n try {\n if (!checkedPackages.has(dependency)) {\n let [modulePackageJson, modulePath] = getModulePackageJSON(dependency);\n checkedPackages.add(dependency);\n\n if (isLinkedPackageJson(modulePackageJson)) {\n lincdPackagePaths.push([\n modulePackageJson.name,\n modulePath,\n [\n ...Object.keys({\n ...modulePackageJson.dependencies,\n ...modulePackageJson.devDependencies,\n }),\n ],\n ]);\n //also check if this package has any dependencies that are lincd packages\n lincdPackagePaths = lincdPackagePaths.concat(\n getLINCDDependencies(modulePackageJson, checkedPackages),\n );\n }\n if (!modulePackageJson) {\n //this seems to only happen with yarn workspaces for some grunt related dependencies of lincd-cli\n // console.log(`could not find package.json of ${dependency}`);\n }\n }\n } catch (err) {\n console.log(\n `could not check if ${dependency} is a lincd package: ${err}`,\n );\n }\n }\n\n if (firstTime) {\n // let dependencyMap:Map<string,Set<string>> = new Map();\n let lincdPackageNames = new Set(\n lincdPackagePaths.map(\n ([packageName, modulePath, pkgDependencies]) => packageName,\n ),\n );\n //remove lincd-cli from the list of lincd packages\n lincdPackageNames.delete('lincd-cli');\n\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies], key) => {\n let lincdDependencies = pkgDependencies.filter((dependency) =>\n lincdPackageNames.has(dependency),\n );\n if (packageName === 'lincd-cli') {\n //remove lincd-modules from the dependencies of lincd-cli (it's not a hard dependency, and it messes things up)\n lincdDependencies.splice(\n lincdDependencies.indexOf('lincd-modules'),\n 1,\n );\n }\n // dependencyMap.set(packageName, new Set(lincdDependencies));\n //update dependencies to be the actual lincd package objects\n lincdPackagePaths[key][2] = lincdDependencies;\n },\n );\n\n // //add the nested dependencies for each lincd package\n // for (let [packageName,pkgDependencies] of dependencyMap) {\n // pkgDependencies.forEach((dependency) => {\n // if (dependencyMap.has(dependency)) {\n // dependencyMap.get(dependency).forEach((nestedDependency) => {\n // pkgDependencies.add(nestedDependency);\n // });\n // }\n // });\n // }\n //\n // dependencyMap.forEach((dependencies,packageName) => {\n // //check for circular dependencies\n // if([...dependencies].some(dependency => {\n // return dependencyMap.get(dependency).has(packageName);\n // }))\n // {\n // console.warn(`Circular dependency detected between ${packageName} and ${dependency}`);\n // }\n //\n // });\n\n // a simple sort with dependencyMap doesn't seem to work,so we start with LINCD (least dependencies) and from there add packages that have all their dependencies already added\n let sortedPackagePaths = [];\n let addedPackages = new Set();\n let lincdItself = lincdPackagePaths.find(([packageName]) => {\n return packageName === 'lincd';\n });\n if (lincdItself) {\n sortedPackagePaths.push(lincdItself);\n addedPackages = new Set(['lincd']);\n }\n\n while (addedPackages.size !== lincdPackagePaths.length) {\n let startSize = addedPackages.size;\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies]) => {\n if (\n !addedPackages.has(packageName) &&\n pkgDependencies.every((dependency) => addedPackages.has(dependency))\n ) {\n sortedPackagePaths.push([packageName, modulePath, pkgDependencies]);\n addedPackages.add(packageName);\n }\n },\n );\n if (startSize === addedPackages.size) {\n console.warn('Could not sort lincd packages, circular dependencies?');\n break;\n }\n }\n\n //sort the lincd packages by least dependent first\n // lincdPackagePaths = lincdPackagePaths.sort(([packageNameA],[packageNameB]) => {\n // //if package A depends on package B, then package B should come first\n // if (dependencyMap.get(packageNameA).has(packageNameB)) {\n // console.log(packageNameA+' depends on '+packageNameB+ ' (below)')\n // return 1;\n // }\n // console.log(packageNameA+' above '+packageNameB)\n // return -1;\n // });\n return sortedPackagePaths;\n }\n\n return lincdPackagePaths;\n};\n\nexport const getLastBuildTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(builds|lib|dist)/**/*.js');\n};\n\nexport const getLastModifiedSourceTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(src|data|css|modules)/**/*', {\n ignore: [\n packagePath + '/**/*.css.json',\n packagePath + '/**/*.d.ts',\n packagePath + '/**/node_modules/**/*',\n packagePath + '/**/lib/**/*',\n packagePath + '/**/dist/**/*',\n ],\n });\n};\n\nexport const getLastCommitTime = (\n packagePath,\n): Promise<{date: Date; changes: string; commitId: string}> => {\n // console.log(`git log -1 --format=%ci -- ${packagePath}`);\n // process.exit();\n return execPromise(`cd ${packagePath} && git log -1 --format=\"%h %ci\" -- .`)\n .then(async (result) => {\n let commitId = result.substring(0, result.indexOf(' '));\n let date = result.substring(commitId.length + 1);\n let lastCommitDate = new Date(date);\n\n let changes = await execPromise(\n `cd ${packagePath} && git show --stat --oneline ${commitId} -- .`,\n );\n // log(packagePath, result, lastCommitDate);\n // log(changes);\n return {date: lastCommitDate, changes, commitId};\n })\n .catch(({error, stdout, stderr}) => {\n debugInfo(chalk.red('Git error: ') + error.message.toString());\n return null;\n });\n};\n\nexport const getLastModifiedFile = (filePath, config = {}) => {\n var files = glob.sync(filePath, config);\n\n // console.log(files.join(\" - \"));\n var lastModifiedName;\n var lastModified: Date;\n var lastModifiedTime = 0;\n files.forEach((fileName) => {\n if (fs.lstatSync(fileName).isDirectory()) {\n // console.log(\"skipping directory \"+fileName);\n return;\n }\n let mtime = fs.statSync(path.join(fileName)).mtime;\n let modifiedTime = mtime.getTime();\n if (modifiedTime > lastModifiedTime) {\n // console.log(fileName,mtime);\n lastModifiedName = fileName;\n lastModified = mtime;\n lastModifiedTime = modifiedTime;\n }\n });\n return {lastModified, lastModifiedName, lastModifiedTime};\n};\n\n//from https://github.com/haalcala/node-packagejson/blob/master/index.js\nexport var getModulePackageJSON = function (module_name, work_dir?) {\n if (!work_dir) {\n work_dir = process.cwd();\n } else {\n work_dir = path.resolve(work_dir);\n }\n\n var package_json;\n\n if (fs.existsSync(path.resolve(work_dir, './node_modules'))) {\n var module_dir = path.resolve(work_dir, './node_modules/' + module_name);\n\n if (\n fs.existsSync(module_dir) &&\n fs.existsSync(module_dir + '/package.json')\n ) {\n package_json = JSON.parse(\n fs.readFileSync(module_dir + '/package.json', 'utf-8'),\n );\n }\n }\n\n if (!package_json && work_dir != '/') {\n return getModulePackageJSON(module_name, path.resolve(work_dir, '..'));\n }\n\n return [package_json, module_dir];\n};\nexport function execp(\n cmd,\n log: boolean = false,\n allowError: boolean = false,\n options: any = {},\n): Promise<null> {\n // opts || (opts = {});\n if (log) console.log(chalk.cyan(cmd));\n\n return new Promise((resolve, reject) => {\n var child = exec(cmd, options);\n\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n // process.stdin.pipe(child.stdin);\n\n child.on('close', function (code) {\n if (code === 0) {\n resolve(null);\n } else {\n reject();\n }\n // console.log('killing child');\n // child.kill('SIGHUP');\n // resolve(code);\n });\n // child.on('data', function (result) {\n // \t// if (log)\n // \t// {\n // \t// \tconsole.log(result);\n // \t// }\n // \tresolve(result);\n // \tconsole.log('resolve data');\n //\n // });\n\n child.on('error', function (err) {\n if (!allowError) {\n // console.log('reject err');\n reject(err);\n return;\n } else if (log) {\n console.warn(err);\n }\n // console.log('resolve err');\n resolve(null);\n });\n child.on('exit', function (code, signal) {\n if (code !== 0) {\n reject('Child process exited with error code ' + code);\n return;\n }\n // console.log('resolve exit');\n resolve(null);\n });\n });\n}\n\nexport function execPromise(\n command,\n log = false,\n allowError: boolean = false,\n options?: ExecOptions,\n pipeOutput: boolean = false,\n): Promise<string> {\n return new Promise(function (resolve, reject) {\n if (log) console.log(chalk.cyan(command));\n let child = exec(command, options, (error, stdout, stderr) => {\n if (error) {\n if (!allowError) {\n reject({error, stdout, stderr});\n return;\n } else if (log) {\n console.warn(error);\n }\n }\n //TODO: getting a typescript error for 'trim()', this worked before, is it still used? do we log anywhere?\n let result = stdout['trim']();\n if (log) {\n // console.log(chalk\"RESOLVING \"+command);\n console.log(result);\n // console.log('ERRORS:'+(result.indexOf('Aborted due to warnings') !== -1));\n // console.log('stderr:'+stderr);\n }\n resolve(result);\n });\n if (pipeOutput) {\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n }\n });\n}\n\nexport {generateScopedNameProduction} from './css-module-names.js';\nexport function generateScopedName(cssClassName, filepath, css?) {\n // Strip any Vite-style query suffix (?inline, ?raw, ?direct) before\n // computing the filename. Without this, dev-mode SSR CSS collection\n // via `?inline` produces selectors like\n // `._foo_SigninLayout.module.css?inline_leftSidebar` — the literal\n // `.module.css?inline` becomes part of the class name, which CSS\n // parsers split on `.` and `?`, breaking everything.\n const cleanFilepath = filepath.replace(/\\?.*$/, '');\n var filename = path\n .basename(cleanFilepath)\n .replace(/\\.module\\.css$/, '')\n .replace(/\\.css$/, '');\n let resolved = path.resolve(cleanFilepath).replace(/[\\w\\-_\\/]+\\/file\\:/, '');\n let nearestPackageJson = findNearestPackageJsonSync(resolved);\n let packageName = nearestPackageJson\n ? nearestPackageJson.data.name\n : 'unknown';\n return (\n packageName.replace(/[^a-zA-Z0-9_]+/g, '_') +\n '_' +\n filename +\n '_' +\n cssClassName\n );\n}\n\nexport const needsRebuilding = async function (\n pkg: PackageDetails,\n useGitForLastModified: boolean,\n log: boolean = false,\n) {\n let lastModifiedSourceDate: Date;\n let lastModifiedSourceName: string;\n\n if (useGitForLastModified) {\n const {changes, commitId, date} = await getLastCommitTime(pkg.path);\n\n lastModifiedSourceDate = date;\n lastModifiedSourceName = commitId;\n } else {\n const {lastModified, lastModifiedName, lastModifiedTime} =\n getLastModifiedSourceTime(pkg.path);\n lastModifiedSourceName = lastModifiedName;\n lastModifiedSourceDate = lastModified;\n }\n\n let lastModifiedBundle = getLastBuildTime(pkg.path);\n let result =\n lastModifiedSourceDate &&\n lastModifiedSourceDate.getTime() > lastModifiedBundle.lastModifiedTime;\n if (log) {\n console.log(\n chalk.cyan(\n 'Last modified source: ' +\n lastModifiedSourceName +\n ' on ' +\n lastModifiedSourceDate.toString(),\n ),\n );\n console.log(\n chalk.cyan(\n 'Last build: ' +\n (lastModifiedBundle &&\n typeof lastModifiedBundle.lastModified !== 'undefined'\n ? lastModifiedBundle.lastModified.toString()\n : 'never'),\n ),\n );\n }\n return result;\n};\n\nexport function log(...messages) {\n messages.forEach((message) => {\n console.log(chalk.cyan(message));\n });\n}\n\nexport function debug(config, ...messages) {\n if (config.debug) {\n log(...messages);\n }\n}\n\nexport function debugInfo(...messages) {\n // messages.forEach((message) => {\n // console.log(chalk.cyan('Info: ') + message);\n // });\n //@TODO: let packages also use linked.config.json? instead of gruntfile...\n // that way we can read \"analyse\" here and see if we need to log debug info\n // if(!gruntConfig)\n // {\n // gruntConfig = getGruntConfig();\n // console.log(gruntConfig);\n // process.exit();\n // }\n if (gruntConfig && gruntConfig.analyse === true) {\n messages.forEach((message) => {\n console.log(chalk.cyan('Info: ') + message);\n });\n }\n}\n\nexport function warn(...messages) {\n messages.forEach((message) => {\n console.log(chalk.red(message));\n });\n}\n\nexport function flatten(arr) {\n return arr.reduce(function (a, b) {\n return b ? a.concat(b) : a;\n }, []);\n}\n\nexport function getLinkedTailwindColors() {\n return {\n 'primary-color': 'var(--primary-color)',\n 'font-color': 'var(--font-color)',\n };\n}\n\n/**\n * Recursively get all files in a directory\n * https://stackoverflow.com/a/45130990/831465\n * @param dir The directory to get files from\n * @returns A promise that resolves to an array of file paths\n */\nexport async function getFiles(\n dir: string,\n filenameFilter?: string,\n): Promise<string[]> {\n const entries = await fs.promises.readdir(dir, {withFileTypes: true});\n let files = await Promise.all(\n entries.map((entry) => {\n const res = path.resolve(dir, entry.name);\n return entry.isDirectory() ? getFiles(res, filenameFilter) : res;\n }),\n );\n //flatten the array of arrays into a single array\n let flatFiles = flatten(files) as string[];\n if (filenameFilter) {\n //filter the files to only include those that match the filenameFilter\n flatFiles = flatFiles.filter((file) => file.includes(filenameFilter));\n }\n return flatFiles;\n}\n\n/**\n * Strip ANSI escape codes from a string\n * @param str The string to strip ANSI codes from\n * @returns The string with ANSI codes removed\n */\nexport function stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport {exec, execFile, ExecOptions} from 'child_process';\nimport * as fs from 'fs';\nimport {builtinModules} from 'module';\nimport * as path from 'path';\nimport ts from 'typescript';\nimport type {PackageDetails} from './interfaces.js';\nimport {isLinkedPackageJson} from './installed-packages.js';\n\nimport {findNearestPackageJsonSync} from 'find-nearest-package-json';\nimport * as glob from 'glob';\n\nvar gruntConfig;\n\n// Credit: https://gist.github.com/tinovyatkin/727ddbf7e7e10831a1eca9e4ff2fc32e\nconst tsHost = ts.createCompilerHost(\n {\n allowJs: true,\n noEmit: true,\n isolatedModules: true,\n resolveJsonModule: false,\n moduleResolution: ts.ModuleResolutionKind.Classic, // we don't want node_modules\n incremental: true,\n noLib: true,\n noResolve: true,\n },\n true,\n);\n\nexport var getFileImports = async function (filePath) {\n try {\n const importing: string[] = [];\n\n const add = (literal: ts.Node) => {\n const moduleName = literal.getText().replace(/['\"`]/g, '');\n if (\n !moduleName.startsWith('node:') &&\n !builtinModules.includes(moduleName)\n ) {\n importing.push(moduleName);\n }\n };\n // Every form that names a module: `import ... from 'x'`, `import 'x'`,\n // `export ... from 'x'`, `import('x')` (value and type position) and\n // `import x = require('x')`. Children are always visited, so specifiers\n // nested inside functions or a `declare module` body are found too.\n const delintNode = (node: ts.Node) => {\n if (\n (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) &&\n node.moduleSpecifier &&\n ts.isStringLiteralLike(node.moduleSpecifier)\n ) {\n add(node.moduleSpecifier);\n } else if (\n ts.isCallExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ImportKeyword &&\n node.arguments.length >= 1 &&\n ts.isStringLiteralLike(node.arguments[0])\n ) {\n // `import('x')` with a literal argument. A computed specifier cannot be\n // checked statically and is skipped.\n add(node.arguments[0]);\n } else if (\n // `type A = import('x').B`, and the same inside `typeof import('x')`.\n ts.isImportTypeNode(node) &&\n ts.isLiteralTypeNode(node.argument) &&\n ts.isStringLiteral(node.argument.literal)\n ) {\n add(node.argument.literal);\n } else if (\n // `import x = require('x')`.\n ts.isExternalModuleReference(node) &&\n ts.isStringLiteralLike(node.expression)\n ) {\n add(node.expression);\n }\n ts.forEachChild(node, delintNode);\n };\n const sourceFile = tsHost.getSourceFile(\n filePath,\n ts.ScriptTarget.Latest,\n (msg) => {\n throw new Error(`Failed to parse ${filePath}: ${msg}`);\n },\n );\n //check if its a directory, then we wanr that we can't parse it\n let stat = fs.lstatSync(filePath);\n if (stat.isDirectory()) {\n return importing;\n }\n\n if (!sourceFile) {\n console.warn(`Failed to find file ${filePath}`);\n return importing;\n }\n delintNode(sourceFile);\n return importing;\n } catch (err) {\n console.warn(`Error parsing file ${filePath}: ${err}`);\n return [];\n }\n};\n\n// The package name part of a bare specifier: '@scope/name' for a scoped\n// package, the first segment otherwise. Returns null for anything that is not a\n// bare specifier (relative and absolute paths). The 'node:' case is redundant\n// for callers that use getFileImports (which drops builtins already), and is\n// kept so the helper is correct standalone.\nvar barePackageName = function (importPath: string): string | null {\n if (\n importPath.startsWith('.') ||\n importPath.startsWith('/') ||\n importPath.startsWith('node:')\n ) {\n return null;\n }\n const segments = importPath.split('/');\n const name = importPath.startsWith('@')\n ? segments.slice(0, 2).join('/')\n : segments[0];\n return name || null;\n};\n\nvar isLinkedPackageName = function (name: string) {\n // The current '@_linked/*' scope, and the legacy 'lincd'-prefixed names\n // ('lincd', 'lincd-foo', ...).\n return name.startsWith('@_linked/') || /^lincd(-|$)/.test(name);\n};\n\n/**\n * True when the import reaches into ANOTHER Linked package's internals — a\n * '/src/' or '/lib/' path inside '@_linked/<pkg>' or a 'lincd'-prefixed package\n * — instead of going through that package's public subpath. Such an import\n * breaks when the other package changes its build layout, and it bypasses the\n * exports map, so the two are not interchangeable.\n *\n * Relative specifiers are exempt on purpose: the rule is about other packages,\n * and a relative path can only reach files inside the current package, where a\n * './lib/helpers' folder is a perfectly ordinary local module. Escaping the\n * package with '../' is already caught by isImportOutsideOfPackage.\n *\n * @param importPath The import path to check\n */\nexport var isInternalLinkedImport = function (importPath: string) {\n const name = barePackageName(importPath);\n if (!name || !isLinkedPackageName(name)) {\n return false;\n }\n // Match whole path segments, so '@_linked/core/library/x' is not a hit.\n const subPath = importPath.slice(name.length).split('/').filter(Boolean);\n return subPath.includes('src') || subPath.includes('lib');\n};\n/**\n * True when a relative import escapes the package source root. Normalising\n * first is what makes this correct: only leading '..' segments that survive\n * normalisation actually climb out, so './a..b' is an ordinary file name and\n * '../a/../b' climbs one level, not two.\n *\n * @param importPath The import path to check\n * @param curFileDepth How many folders deep the current file is (0 = src, 1 = src/foo, etc.)\n */\nexport var isImportOutsideOfPackage = function (\n importPath: string,\n curFileDepth: number,\n) {\n if (!importPath.startsWith('.')) {\n return false;\n }\n const segments = path.posix\n .normalize(importPath.split('\\\\').join('/'))\n .split('/');\n // How many folders the specifier climbs: the leading '..' segments that\n // normalisation could not cancel out.\n let climbs = 0;\n while (segments[climbs] === '..') {\n climbs++;\n }\n return climbs > curFileDepth;\n};\n\nexport var getPackageJSON = function (root = process.cwd(), error = true) {\n // console.log('Getting package.json from ' + chalk.cyan(root));\n //log stack trace\n let packagePath = path.join(root, 'package.json');\n if (fs.existsSync(packagePath)) {\n return JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n } else if (root === process.cwd()) {\n if (error) {\n console.warn(\n 'Could not find package.json. Make sure you run this command from the root of a linked package or a linked workspace',\n );\n process.exit();\n }\n }\n};\n\n/**\n * Scans package.json for dependencies that are LINCD packages\n * Also looks into dependencies of dependencies\n * If no packageJson is given, it will attempt to obtain it from the current working directory\n * Returns an array of lincd packages, with each entry containing an array with the package name and the local path to the package\n * @param packageJson\n */\nexport var getLINCDDependencies = function (\n packageJson?,\n checkedPackages: Set<string> = new Set(),\n): [string, string, string[]][] {\n if (!packageJson) {\n packageJson = getPackageJSON();\n }\n let dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n let lincdPackagePaths: [string, string, string[]][] = [];\n let firstTime = checkedPackages.size === 0;\n\n for (var dependency of Object.keys(dependencies)) {\n try {\n if (!checkedPackages.has(dependency)) {\n let [modulePackageJson, modulePath] = getModulePackageJSON(dependency);\n checkedPackages.add(dependency);\n\n if (isLinkedPackageJson(modulePackageJson)) {\n lincdPackagePaths.push([\n modulePackageJson.name,\n modulePath,\n [\n ...Object.keys({\n ...modulePackageJson.dependencies,\n ...modulePackageJson.devDependencies,\n }),\n ],\n ]);\n //also check if this package has any dependencies that are lincd packages\n lincdPackagePaths = lincdPackagePaths.concat(\n getLINCDDependencies(modulePackageJson, checkedPackages),\n );\n }\n if (!modulePackageJson) {\n //this seems to only happen with yarn workspaces for some grunt related dependencies of lincd-cli\n // console.log(`could not find package.json of ${dependency}`);\n }\n }\n } catch (err) {\n console.log(\n `could not check if ${dependency} is a lincd package: ${err}`,\n );\n }\n }\n\n if (firstTime) {\n // let dependencyMap:Map<string,Set<string>> = new Map();\n let lincdPackageNames = new Set(\n lincdPackagePaths.map(\n ([packageName, modulePath, pkgDependencies]) => packageName,\n ),\n );\n //remove lincd-cli from the list of lincd packages\n lincdPackageNames.delete('lincd-cli');\n\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies], key) => {\n let lincdDependencies = pkgDependencies.filter((dependency) =>\n lincdPackageNames.has(dependency),\n );\n if (packageName === 'lincd-cli') {\n //remove lincd-modules from the dependencies of lincd-cli (it's not a hard dependency, and it messes things up)\n lincdDependencies.splice(\n lincdDependencies.indexOf('lincd-modules'),\n 1,\n );\n }\n // dependencyMap.set(packageName, new Set(lincdDependencies));\n //update dependencies to be the actual lincd package objects\n lincdPackagePaths[key][2] = lincdDependencies;\n },\n );\n\n // //add the nested dependencies for each lincd package\n // for (let [packageName,pkgDependencies] of dependencyMap) {\n // pkgDependencies.forEach((dependency) => {\n // if (dependencyMap.has(dependency)) {\n // dependencyMap.get(dependency).forEach((nestedDependency) => {\n // pkgDependencies.add(nestedDependency);\n // });\n // }\n // });\n // }\n //\n // dependencyMap.forEach((dependencies,packageName) => {\n // //check for circular dependencies\n // if([...dependencies].some(dependency => {\n // return dependencyMap.get(dependency).has(packageName);\n // }))\n // {\n // console.warn(`Circular dependency detected between ${packageName} and ${dependency}`);\n // }\n //\n // });\n\n // a simple sort with dependencyMap doesn't seem to work,so we start with LINCD (least dependencies) and from there add packages that have all their dependencies already added\n let sortedPackagePaths = [];\n let addedPackages = new Set();\n let lincdItself = lincdPackagePaths.find(([packageName]) => {\n return packageName === 'lincd';\n });\n if (lincdItself) {\n sortedPackagePaths.push(lincdItself);\n addedPackages = new Set(['lincd']);\n }\n\n while (addedPackages.size !== lincdPackagePaths.length) {\n let startSize = addedPackages.size;\n lincdPackagePaths.forEach(\n ([packageName, modulePath, pkgDependencies]) => {\n if (\n !addedPackages.has(packageName) &&\n pkgDependencies.every((dependency) => addedPackages.has(dependency))\n ) {\n sortedPackagePaths.push([packageName, modulePath, pkgDependencies]);\n addedPackages.add(packageName);\n }\n },\n );\n if (startSize === addedPackages.size) {\n console.warn('Could not sort lincd packages, circular dependencies?');\n break;\n }\n }\n\n //sort the lincd packages by least dependent first\n // lincdPackagePaths = lincdPackagePaths.sort(([packageNameA],[packageNameB]) => {\n // //if package A depends on package B, then package B should come first\n // if (dependencyMap.get(packageNameA).has(packageNameB)) {\n // console.log(packageNameA+' depends on '+packageNameB+ ' (below)')\n // return 1;\n // }\n // console.log(packageNameA+' above '+packageNameB)\n // return -1;\n // });\n return sortedPackagePaths;\n }\n\n return lincdPackagePaths;\n};\n\nexport const getLastBuildTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(builds|lib|dist)/**/*.js');\n};\n\nexport const getLastModifiedSourceTime = (packagePath) => {\n return getLastModifiedFile(packagePath + '/@(src|data|css|modules)/**/*', {\n ignore: [\n packagePath + '/**/*.css.json',\n packagePath + '/**/*.d.ts',\n packagePath + '/**/node_modules/**/*',\n packagePath + '/**/lib/**/*',\n packagePath + '/**/dist/**/*',\n ],\n });\n};\n\nexport const getLastCommitTime = (\n packagePath,\n): Promise<{date: Date; changes: string; commitId: string}> => {\n // console.log(`git log -1 --format=%ci -- ${packagePath}`);\n // process.exit();\n // git with an argument list and a cwd: no `cd` (cmd.exe's does not change\n // drives) and no `%` for cmd.exe to expand.\n return gitOutput(['log', '-1', '--format=%h %ci', '--', '.'], packagePath)\n .then(async (result) => {\n let commitId = result.substring(0, result.indexOf(' '));\n let date = result.substring(commitId.length + 1);\n let lastCommitDate = new Date(date);\n\n let changes = await gitOutput(\n ['show', '--stat', '--oneline', commitId, '--', '.'],\n packagePath,\n );\n // log(packagePath, result, lastCommitDate);\n // log(changes);\n return {date: lastCommitDate, changes, commitId};\n })\n .catch(({error, stdout, stderr}) => {\n debugInfo(chalk.red('Git error: ') + error.message.toString());\n return null;\n });\n};\n\n/** git's trimmed stdout; rejects like `execPromise`, with `{error, stdout, stderr}`. */\nfunction gitOutput(args: string[], cwd: string): Promise<string> {\n return new Promise((resolve, reject) => {\n execFile('git', args, {cwd, maxBuffer: 64 * 1024 * 1024}, (error, stdout, stderr) => {\n if (error) reject({error, stdout, stderr});\n else resolve(String(stdout).trim());\n });\n });\n}\n\nexport const getLastModifiedFile = (filePath, config = {}) => {\n var files = glob.sync(filePath, config);\n\n // console.log(files.join(\" - \"));\n var lastModifiedName;\n var lastModified: Date;\n var lastModifiedTime = 0;\n files.forEach((fileName) => {\n if (fs.lstatSync(fileName).isDirectory()) {\n // console.log(\"skipping directory \"+fileName);\n return;\n }\n let mtime = fs.statSync(path.join(fileName)).mtime;\n let modifiedTime = mtime.getTime();\n if (modifiedTime > lastModifiedTime) {\n // console.log(fileName,mtime);\n lastModifiedName = fileName;\n lastModified = mtime;\n lastModifiedTime = modifiedTime;\n }\n });\n return {lastModified, lastModifiedName, lastModifiedTime};\n};\n\n//from https://github.com/haalcala/node-packagejson/blob/master/index.js\nexport var getModulePackageJSON = function (module_name, work_dir?) {\n if (!work_dir) {\n work_dir = process.cwd();\n } else {\n work_dir = path.resolve(work_dir);\n }\n\n var package_json;\n\n if (fs.existsSync(path.resolve(work_dir, './node_modules'))) {\n var module_dir = path.resolve(work_dir, './node_modules/' + module_name);\n\n if (\n fs.existsSync(module_dir) &&\n fs.existsSync(module_dir + '/package.json')\n ) {\n package_json = JSON.parse(\n fs.readFileSync(module_dir + '/package.json', 'utf-8'),\n );\n }\n }\n\n // The filesystem root is its own parent: `/`, or `C:\\` on Windows.\n if (!package_json && path.dirname(work_dir) !== work_dir) {\n return getModulePackageJSON(module_name, path.dirname(work_dir));\n }\n\n return [package_json, module_dir];\n};\nexport function execp(\n cmd,\n log: boolean = false,\n allowError: boolean = false,\n options: any = {},\n): Promise<null> {\n // opts || (opts = {});\n if (log) console.log(chalk.cyan(cmd));\n\n return new Promise((resolve, reject) => {\n var child = exec(cmd, options);\n\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n // process.stdin.pipe(child.stdin);\n\n child.on('close', function (code) {\n if (code === 0) {\n resolve(null);\n } else {\n reject();\n }\n // console.log('killing child');\n // child.kill('SIGHUP');\n // resolve(code);\n });\n // child.on('data', function (result) {\n // \t// if (log)\n // \t// {\n // \t// \tconsole.log(result);\n // \t// }\n // \tresolve(result);\n // \tconsole.log('resolve data');\n //\n // });\n\n child.on('error', function (err) {\n if (!allowError) {\n // console.log('reject err');\n reject(err);\n return;\n } else if (log) {\n console.warn(err);\n }\n // console.log('resolve err');\n resolve(null);\n });\n child.on('exit', function (code, signal) {\n if (code !== 0) {\n reject('Child process exited with error code ' + code);\n return;\n }\n // console.log('resolve exit');\n resolve(null);\n });\n });\n}\n\nexport function execPromise(\n command,\n log = false,\n allowError: boolean = false,\n options?: ExecOptions,\n pipeOutput: boolean = false,\n): Promise<string> {\n return new Promise(function (resolve, reject) {\n if (log) console.log(chalk.cyan(command));\n let child = exec(command, options, (error, stdout, stderr) => {\n if (error) {\n if (!allowError) {\n reject({error, stdout, stderr});\n return;\n } else if (log) {\n console.warn(error);\n }\n }\n //TODO: getting a typescript error for 'trim()', this worked before, is it still used? do we log anywhere?\n let result = stdout['trim']();\n if (log) {\n // console.log(chalk\"RESOLVING \"+command);\n console.log(result);\n // console.log('ERRORS:'+(result.indexOf('Aborted due to warnings') !== -1));\n // console.log('stderr:'+stderr);\n }\n resolve(result);\n });\n if (pipeOutput) {\n child.stdout.pipe(process.stdout);\n child.stderr.pipe(process.stderr);\n }\n });\n}\n\nexport {generateScopedNameProduction} from './css-module-names.js';\nexport function generateScopedName(cssClassName, filepath, css?) {\n // Strip any Vite-style query suffix (?inline, ?raw, ?direct) before\n // computing the filename. Without this, dev-mode SSR CSS collection\n // via `?inline` produces selectors like\n // `._foo_SigninLayout.module.css?inline_leftSidebar` — the literal\n // `.module.css?inline` becomes part of the class name, which CSS\n // parsers split on `.` and `?`, breaking everything.\n const cleanFilepath = filepath.replace(/\\?.*$/, '');\n var filename = path\n .basename(cleanFilepath)\n .replace(/\\.module\\.css$/, '')\n .replace(/\\.css$/, '');\n let resolved = path.resolve(cleanFilepath).replace(/[\\w\\-_\\/]+\\/file\\:/, '');\n let nearestPackageJson = findNearestPackageJsonSync(resolved);\n let packageName = nearestPackageJson\n ? nearestPackageJson.data.name\n : 'unknown';\n return (\n packageName.replace(/[^a-zA-Z0-9_]+/g, '_') +\n '_' +\n filename +\n '_' +\n cssClassName\n );\n}\n\nexport const needsRebuilding = async function (\n pkg: PackageDetails,\n useGitForLastModified: boolean,\n log: boolean = false,\n) {\n let lastModifiedSourceDate: Date;\n let lastModifiedSourceName: string;\n\n if (useGitForLastModified) {\n const {changes, commitId, date} = await getLastCommitTime(pkg.path);\n\n lastModifiedSourceDate = date;\n lastModifiedSourceName = commitId;\n } else {\n const {lastModified, lastModifiedName, lastModifiedTime} =\n getLastModifiedSourceTime(pkg.path);\n lastModifiedSourceName = lastModifiedName;\n lastModifiedSourceDate = lastModified;\n }\n\n let lastModifiedBundle = getLastBuildTime(pkg.path);\n let result =\n lastModifiedSourceDate &&\n lastModifiedSourceDate.getTime() > lastModifiedBundle.lastModifiedTime;\n if (log) {\n console.log(\n chalk.cyan(\n 'Last modified source: ' +\n lastModifiedSourceName +\n ' on ' +\n lastModifiedSourceDate.toString(),\n ),\n );\n console.log(\n chalk.cyan(\n 'Last build: ' +\n (lastModifiedBundle &&\n typeof lastModifiedBundle.lastModified !== 'undefined'\n ? lastModifiedBundle.lastModified.toString()\n : 'never'),\n ),\n );\n }\n return result;\n};\n\nexport function log(...messages) {\n messages.forEach((message) => {\n console.log(chalk.cyan(message));\n });\n}\n\nexport function debug(config, ...messages) {\n if (config.debug) {\n log(...messages);\n }\n}\n\nexport function debugInfo(...messages) {\n // messages.forEach((message) => {\n // console.log(chalk.cyan('Info: ') + message);\n // });\n //@TODO: let packages also use linked.config.json? instead of gruntfile...\n // that way we can read \"analyse\" here and see if we need to log debug info\n // if(!gruntConfig)\n // {\n // gruntConfig = getGruntConfig();\n // console.log(gruntConfig);\n // process.exit();\n // }\n if (gruntConfig && gruntConfig.analyse === true) {\n messages.forEach((message) => {\n console.log(chalk.cyan('Info: ') + message);\n });\n }\n}\n\nexport function warn(...messages) {\n messages.forEach((message) => {\n console.log(chalk.red(message));\n });\n}\n\nexport function flatten(arr) {\n return arr.reduce(function (a, b) {\n return b ? a.concat(b) : a;\n }, []);\n}\n\nexport function getLinkedTailwindColors() {\n return {\n 'primary-color': 'var(--primary-color)',\n 'font-color': 'var(--font-color)',\n };\n}\n\n/**\n * Recursively get all files in a directory\n * https://stackoverflow.com/a/45130990/831465\n * @param dir The directory to get files from\n * @returns A promise that resolves to an array of file paths\n */\nexport async function getFiles(\n dir: string,\n filenameFilter?: string,\n): Promise<string[]> {\n const entries = await fs.promises.readdir(dir, {withFileTypes: true});\n let files = await Promise.all(\n entries.map((entry) => {\n const res = path.resolve(dir, entry.name);\n return entry.isDirectory() ? getFiles(res, filenameFilter) : res;\n }),\n );\n //flatten the array of arrays into a single array\n let flatFiles = flatten(files) as string[];\n if (filenameFilter) {\n //filter the files to only include those that match the filenameFilter\n flatFiles = flatFiles.filter((file) => file.includes(filenameFilter));\n }\n return flatFiles;\n}\n\n/**\n * Strip ANSI escape codes from a string\n * @param str The string to strip ANSI codes from\n * @returns The string with ANSI codes removed\n */\nexport function stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n"]}
|
package/lib/esm/vite-config.d.ts
CHANGED
|
@@ -129,10 +129,11 @@ export declare function workspaceDependents(workspaces: {
|
|
|
129
129
|
* ones that ship `src/`.
|
|
130
130
|
*
|
|
131
131
|
* A dep ships `src/` when it is a symlinked workspace clone, a `link:`/`portal:`
|
|
132
|
-
* dev install, or a LOCALIZED checkout (`packages-local/<pkg>`, in
|
|
133
|
-
*
|
|
134
|
-
* per-branch clone under /apps) resolve a
|
|
135
|
-
* extension probing, instead of falling
|
|
132
|
+
* dev install, or a LOCALIZED checkout (`packages-local/<pkg>`, in an app
|
|
133
|
+
* not set up for localizing yet). That's what lets a STANDALONE app (not
|
|
134
|
+
* itself a workspace root — e.g. a per-branch clone under /apps) resolve a
|
|
135
|
+
* linked package's `.tsx` sources with extension probing, instead of falling
|
|
136
|
+
* through to the package's
|
|
136
137
|
* `development → ./src/*.ts` export (which misses `.tsx` like LinkedServer). A
|
|
137
138
|
* prod/ejected app installs PUBLISHED packages (no `src/`) → not registered,
|
|
138
139
|
* resolved via each package's `lib`.
|
|
@@ -202,14 +203,6 @@ export declare const SSR_ENTRY_PACKAGES: string[];
|
|
|
202
203
|
export declare function ssrNoExternal(workspaces: {
|
|
203
204
|
name: string;
|
|
204
205
|
}[], dependents?: string[]): (string | RegExp)[];
|
|
205
|
-
/**
|
|
206
|
-
* `resolve.dedupe` for every mode: the localized packages, what their checkouts
|
|
207
|
-
* import that the app has at a version they accept, and React — see
|
|
208
|
-
* `localizedDedupe`. Duplicates come from localization (a checkout's own
|
|
209
|
-
* `node_modules`), so that is what is detected; an app with nothing localized
|
|
210
|
-
* dedupes only React.
|
|
211
|
-
*/
|
|
212
|
-
export { localizedDedupe } from './localized-dedupe.js';
|
|
213
206
|
/**
|
|
214
207
|
* The `process.env.*` values inlined into the browser bundle — and only there.
|
|
215
208
|
* See the `environments.client.define` note in `createViteConfig` for why the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/vite-config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAC,YAAY,EAAC,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/vite-config.ts"],"names":[],"mappings":"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"}
|