@dudousxd/nestjs-codegen 0.27.1 → 0.28.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 +14 -0
- package/README.md +23 -0
- package/dist/cli/main.cjs +64 -17
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.js +65 -18
- package/dist/cli/main.js.map +1 -1
- package/dist/index.cjs +163 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +56 -3
- package/dist/index.d.ts +56 -3
- package/dist/index.js +162 -12
- package/dist/index.js.map +1 -1
- package/dist/nest/index.cjs +58 -11
- package/dist/nest/index.cjs.map +1 -1
- package/dist/nest/index.js +59 -12
- package/dist/nest/index.js.map +1 -1
- package/package.json +6 -2
package/dist/nest/index.js
CHANGED
|
@@ -251,12 +251,18 @@ function findTypeInFile(name, file) {
|
|
|
251
251
|
function resolveModuleSpecifier(moduleSpecifier, sourceFile, project) {
|
|
252
252
|
if (moduleSpecifier.startsWith(".")) {
|
|
253
253
|
const dir = dirname(sourceFile.getFilePath());
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
254
|
+
const ext = /\.(c|m)?(j|t)sx?$/.exec(moduleSpecifier)?.[0];
|
|
255
|
+
const base = ext ? moduleSpecifier.slice(0, -ext.length) : moduleSpecifier;
|
|
256
|
+
const flavour = ext?.startsWith(".c") ? "c" : ext?.startsWith(".m") ? "m" : "";
|
|
257
|
+
const candidates = [
|
|
258
|
+
resolve2(dir, `${base}.${flavour}ts`),
|
|
259
|
+
...flavour === "" ? [resolve2(dir, `${base}.tsx`)] : [],
|
|
257
260
|
resolve2(dir, `${moduleSpecifier}.ts`),
|
|
258
|
-
resolve2(dir, moduleSpecifier, "index.ts")
|
|
261
|
+
resolve2(dir, moduleSpecifier, "index.ts"),
|
|
262
|
+
resolve2(dir, `${base}.d.${flavour}ts`),
|
|
263
|
+
...ext === void 0 ? [resolve2(dir, moduleSpecifier, "index.d.ts")] : []
|
|
259
264
|
];
|
|
265
|
+
return [...new Set(candidates)];
|
|
260
266
|
}
|
|
261
267
|
const ctx = _ctxFor(project);
|
|
262
268
|
const baseUrl = ctx.pathsBase ?? ctx.projectRoot;
|
|
@@ -5584,7 +5590,7 @@ async function generate(config, inputRoutes = [], entryPoint = "cli") {
|
|
|
5584
5590
|
|
|
5585
5591
|
// src/watch/watcher.ts
|
|
5586
5592
|
import { readFile as readFile3 } from "fs/promises";
|
|
5587
|
-
import { join as join15 } from "path";
|
|
5593
|
+
import { join as join15, resolve as resolve5 } from "path";
|
|
5588
5594
|
import chokidar from "chokidar";
|
|
5589
5595
|
|
|
5590
5596
|
// src/watch/lock-file.ts
|
|
@@ -5666,11 +5672,36 @@ async function watch(config, onChange, options = {}) {
|
|
|
5666
5672
|
}
|
|
5667
5673
|
return discovery;
|
|
5668
5674
|
}
|
|
5675
|
+
const trackedWatcher = chokidar.watch([], {
|
|
5676
|
+
ignoreInitial: true,
|
|
5677
|
+
persistent: true,
|
|
5678
|
+
awaitWriteFinish: { stabilityThreshold: 80, pollInterval: 20 }
|
|
5679
|
+
});
|
|
5680
|
+
const trackedPaths = /* @__PURE__ */ new Set();
|
|
5681
|
+
async function syncTrackedInputs() {
|
|
5682
|
+
const manifest = await readManifest(config.codegen.outDir);
|
|
5683
|
+
const fresh = [];
|
|
5684
|
+
for (const path of manifest?.extraInputs ?? []) {
|
|
5685
|
+
const abs = resolve5(config.codegen.cwd, path);
|
|
5686
|
+
if (trackedPaths.has(abs)) continue;
|
|
5687
|
+
trackedPaths.add(abs);
|
|
5688
|
+
fresh.push(abs);
|
|
5689
|
+
}
|
|
5690
|
+
if (fresh.length > 0) trackedWatcher.add(fresh);
|
|
5691
|
+
}
|
|
5692
|
+
async function generateAndTrack(routes) {
|
|
5693
|
+
try {
|
|
5694
|
+
await generate(config, routes, entryPoint);
|
|
5695
|
+
} finally {
|
|
5696
|
+
await syncTrackedInputs().catch(() => {
|
|
5697
|
+
});
|
|
5698
|
+
}
|
|
5699
|
+
}
|
|
5669
5700
|
async function runInitialPass() {
|
|
5670
5701
|
try {
|
|
5671
5702
|
const initialRoutes = (await getDiscovery()).discover();
|
|
5672
5703
|
lastRoutes = initialRoutes;
|
|
5673
|
-
await
|
|
5704
|
+
await generateAndTrack(initialRoutes);
|
|
5674
5705
|
} catch (err) {
|
|
5675
5706
|
if (err instanceof DriftGuardError) {
|
|
5676
5707
|
console.error(err.message);
|
|
@@ -5680,7 +5711,7 @@ async function watch(config, onChange, options = {}) {
|
|
|
5680
5711
|
`[nestjs-codegen] Initial route discovery failed, falling back to pages-only: ${err instanceof Error ? err.message : String(err)}`
|
|
5681
5712
|
);
|
|
5682
5713
|
try {
|
|
5683
|
-
await
|
|
5714
|
+
await generateAndTrack(lastRoutes);
|
|
5684
5715
|
} catch {
|
|
5685
5716
|
}
|
|
5686
5717
|
}
|
|
@@ -5713,7 +5744,7 @@ async function watch(config, onChange, options = {}) {
|
|
|
5713
5744
|
pagesDebounceTimer = setTimeout(async () => {
|
|
5714
5745
|
pagesDebounceTimer = void 0;
|
|
5715
5746
|
try {
|
|
5716
|
-
await
|
|
5747
|
+
await generateAndTrack(lastRoutes);
|
|
5717
5748
|
} catch (err) {
|
|
5718
5749
|
console.error(
|
|
5719
5750
|
"[nestjs-codegen] Pages generation failed:",
|
|
@@ -5745,7 +5776,7 @@ async function watch(config, onChange, options = {}) {
|
|
|
5745
5776
|
try {
|
|
5746
5777
|
const routes = await (await getDiscovery()).rediscover(changed);
|
|
5747
5778
|
lastRoutes = routes;
|
|
5748
|
-
await
|
|
5779
|
+
await generateAndTrack(routes);
|
|
5749
5780
|
} catch (err) {
|
|
5750
5781
|
console.error(
|
|
5751
5782
|
"[nestjs-codegen] Contracts generation failed:",
|
|
@@ -5766,6 +5797,9 @@ async function watch(config, onChange, options = {}) {
|
|
|
5766
5797
|
formsWatcher.on("add", (p) => scheduleContractsRegenerate(p));
|
|
5767
5798
|
formsWatcher.on("change", (p) => scheduleContractsRegenerate(p));
|
|
5768
5799
|
formsWatcher.on("unlink", (p) => scheduleContractsRegenerate(p));
|
|
5800
|
+
trackedWatcher.on("add", (p) => scheduleContractsRegenerate(p));
|
|
5801
|
+
trackedWatcher.on("change", (p) => scheduleContractsRegenerate(p));
|
|
5802
|
+
trackedWatcher.on("unlink", (p) => scheduleContractsRegenerate(p));
|
|
5769
5803
|
return {
|
|
5770
5804
|
close: async () => {
|
|
5771
5805
|
if (pagesDebounceTimer !== void 0) {
|
|
@@ -5779,13 +5813,14 @@ async function watch(config, onChange, options = {}) {
|
|
|
5779
5813
|
await pagesWatcher.close();
|
|
5780
5814
|
await contractsWatcher.close();
|
|
5781
5815
|
await formsWatcher.close();
|
|
5816
|
+
await trackedWatcher.close();
|
|
5782
5817
|
await lock.release();
|
|
5783
5818
|
}
|
|
5784
5819
|
};
|
|
5785
5820
|
}
|
|
5786
5821
|
|
|
5787
5822
|
// src/index.ts
|
|
5788
|
-
var VERSION = "0.
|
|
5823
|
+
var VERSION = "0.28.0";
|
|
5789
5824
|
|
|
5790
5825
|
// src/generate-manifest.ts
|
|
5791
5826
|
var MANIFEST_FILE = ".codegen-manifest.json";
|
|
@@ -5877,14 +5912,26 @@ async function computeInputsHash(config, extraInputs = []) {
|
|
|
5877
5912
|
hash.update("\n");
|
|
5878
5913
|
}
|
|
5879
5914
|
for (const file of extra) {
|
|
5880
|
-
const contents = await readFile4(join16(cwd, file), "utf8").catch(() => null);
|
|
5881
5915
|
hash.update(`extra:${file}
|
|
5882
5916
|
`);
|
|
5883
|
-
hash.update(
|
|
5917
|
+
hash.update(await readTrackedInput(join16(cwd, file)));
|
|
5884
5918
|
hash.update("\n");
|
|
5885
5919
|
}
|
|
5886
5920
|
return hash.digest("hex");
|
|
5887
5921
|
}
|
|
5922
|
+
async function readTrackedInput(path) {
|
|
5923
|
+
try {
|
|
5924
|
+
return await readFile4(path, "utf8");
|
|
5925
|
+
} catch (err) {
|
|
5926
|
+
if (err.code !== "EISDIR") return "\0missing";
|
|
5927
|
+
}
|
|
5928
|
+
try {
|
|
5929
|
+
const entries = await readdir(path);
|
|
5930
|
+
return `\0dir:${entries.sort().join("\n")}`;
|
|
5931
|
+
} catch {
|
|
5932
|
+
return "\0missing";
|
|
5933
|
+
}
|
|
5934
|
+
}
|
|
5888
5935
|
async function readManifest(outDir) {
|
|
5889
5936
|
try {
|
|
5890
5937
|
const raw = await readFile4(join16(outDir, MANIFEST_FILE), "utf8");
|