@cldmv/slothlet 2.5.0 → 2.5.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/dist/lib/helpers/api_builder.mjs +10 -1
- package/dist/lib/modes/slothlet_eager.mjs +9 -5
- package/dist/lib/modes/slothlet_lazy.mjs +13 -5
- package/dist/slothlet.mjs +11 -8
- package/package.json +1 -1
- package/types/dist/lib/helpers/api_builder.d.mts +5 -2
- package/types/dist/lib/helpers/api_builder.d.mts.map +1 -1
- package/types/dist/lib/modes/slothlet_eager.d.mts.map +1 -1
- package/types/dist/lib/modes/slothlet_lazy.d.mts.map +1 -1
- package/types/dist/slothlet.d.mts.map +1 -1
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
|
|
20
|
+
|
|
19
21
|
import fs from "node:fs/promises";
|
|
20
22
|
import path from "node:path";
|
|
21
23
|
import { pathToFileURL } from "node:url";
|
|
@@ -381,6 +383,8 @@ export function getFlatteningDecision(options) {
|
|
|
381
383
|
apiPathKey,
|
|
382
384
|
hasMultipleDefaultExports,
|
|
383
385
|
isSelfReferential,
|
|
386
|
+
|
|
387
|
+
|
|
384
388
|
moduleHasDefault = !!mod.default,
|
|
385
389
|
categoryName,
|
|
386
390
|
totalModules = 1
|
|
@@ -485,7 +489,8 @@ export function processModuleForAPI(options) {
|
|
|
485
489
|
api,
|
|
486
490
|
getRootDefault,
|
|
487
491
|
setRootDefault,
|
|
488
|
-
context = {}
|
|
492
|
+
context = {},
|
|
493
|
+
originalAnalysis = null
|
|
489
494
|
} = options;
|
|
490
495
|
|
|
491
496
|
const { debug = false, mode = "unknown", categoryName, totalModules = 1 } = context;
|
|
@@ -571,6 +576,10 @@ export function processModuleForAPI(options) {
|
|
|
571
576
|
apiPathKey,
|
|
572
577
|
hasMultipleDefaultExports,
|
|
573
578
|
isSelfReferential,
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
moduleHasDefault: originalAnalysis ? originalAnalysis.hasDefault : !!mod.default,
|
|
574
583
|
categoryName,
|
|
575
584
|
totalModules,
|
|
576
585
|
debug
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
|
|
23
23
|
import fs from "node:fs/promises";
|
|
24
24
|
import path from "node:path";
|
|
25
|
+
import { processModuleForAPI } from "@cldmv/slothlet/helpers/api_builder";
|
|
26
|
+
import { multidefault_analyzeModules } from "@cldmv/slothlet/helpers/multidefault";
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
31
|
-
|
|
32
|
-
const { processModuleForAPI } = await import("@cldmv/slothlet/helpers/api_builder");
|
|
33
33
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
34
34
|
const api = {};
|
|
35
35
|
let rootDefaultFunction = null;
|
|
@@ -38,7 +38,6 @@ export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
|
38
38
|
const moduleFiles = entries.filter((e) => this._shouldIncludeFile(e));
|
|
39
39
|
const defaultExportFiles = [];
|
|
40
40
|
|
|
41
|
-
const { multidefault_analyzeModules } = await import("@cldmv/slothlet/helpers/multidefault");
|
|
42
41
|
const analysis = await multidefault_analyzeModules(moduleFiles, dir, this.config.debug);
|
|
43
42
|
|
|
44
43
|
const { totalDefaultExports, hasMultipleDefaultExports, selfReferentialFiles, defaultExportFiles: analysisDefaults } = analysis;
|
|
@@ -69,7 +68,11 @@ export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
|
69
68
|
const ext = path.extname(entry.name);
|
|
70
69
|
const fileName = path.basename(entry.name, ext);
|
|
71
70
|
const apiPathKey = this._toapiPathKey(fileName);
|
|
72
|
-
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
const moduleResult = await this._loadSingleModule(path.join(dir, entry.name), true);
|
|
74
|
+
const mod = moduleResult.mod;
|
|
75
|
+
const analysis = moduleResult.analysis;
|
|
73
76
|
|
|
74
77
|
|
|
75
78
|
const isSelfReferential = selfReferentialFiles.has(fileName);
|
|
@@ -89,7 +92,8 @@ export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
|
89
92
|
debug: this.config.debug,
|
|
90
93
|
mode: "root",
|
|
91
94
|
totalModules: moduleFiles.length
|
|
92
|
-
}
|
|
95
|
+
},
|
|
96
|
+
originalAnalysis: analysis
|
|
93
97
|
});
|
|
94
98
|
}
|
|
95
99
|
|
|
@@ -22,6 +22,7 @@ import { readdirSync } from "node:fs";
|
|
|
22
22
|
import path from "node:path";
|
|
23
23
|
import { runWithCtx } from "@cldmv/slothlet/runtime";
|
|
24
24
|
import { processModuleForAPI } from "@cldmv/slothlet/helpers/api_builder";
|
|
25
|
+
import { multidefault_analyzeModules } from "@cldmv/slothlet/helpers/multidefault";
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
@@ -36,7 +37,6 @@ export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
|
36
37
|
const defaultExportFiles = [];
|
|
37
38
|
|
|
38
39
|
|
|
39
|
-
const { multidefault_analyzeModules } = await import("@cldmv/slothlet/helpers/multidefault");
|
|
40
40
|
const analysis = await multidefault_analyzeModules(moduleFiles, dir, instance.config.debug);
|
|
41
41
|
|
|
42
42
|
const { totalDefaultExports, hasMultipleDefaultExports, selfReferentialFiles, defaultExportFiles: analysisDefaults } = analysis;
|
|
@@ -46,8 +46,11 @@ export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
|
46
46
|
for (const { fileName } of analysisDefaults) {
|
|
47
47
|
const entry = moduleFiles.find((f) => path.basename(f.name, path.extname(f.name)) === fileName);
|
|
48
48
|
if (entry) {
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
|
|
50
|
+
const moduleResult = await instance._loadSingleModule(path.join(dir, entry.name), true);
|
|
51
|
+
const mod = moduleResult.mod;
|
|
52
|
+
const moduleAnalysis = moduleResult.analysis;
|
|
53
|
+
defaultExportFiles.push({ entry, fileName, mod, analysis: moduleAnalysis });
|
|
51
54
|
}
|
|
52
55
|
}
|
|
53
56
|
|
|
@@ -68,12 +71,16 @@ export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
|
68
71
|
|
|
69
72
|
|
|
70
73
|
let mod = null;
|
|
74
|
+
let analysis = null;
|
|
71
75
|
const existingDefault = defaultExportFiles.find((def) => def.fileName === fileName);
|
|
72
76
|
if (existingDefault) {
|
|
73
77
|
mod = existingDefault.mod;
|
|
78
|
+
analysis = existingDefault.analysis;
|
|
74
79
|
} else {
|
|
75
80
|
|
|
76
|
-
|
|
81
|
+
const moduleResult = await instance._loadSingleModule(path.join(dir, entry.name), true);
|
|
82
|
+
mod = moduleResult.mod;
|
|
83
|
+
analysis = moduleResult.analysis;
|
|
77
84
|
processedModuleCache.set(entry.name, mod);
|
|
78
85
|
}
|
|
79
86
|
|
|
@@ -96,7 +103,8 @@ export async function create(dir, maxDepth = Infinity, currentDepth = 0) {
|
|
|
96
103
|
debug: instance.config.debug,
|
|
97
104
|
mode: "root",
|
|
98
105
|
totalModules: moduleFiles.length
|
|
99
|
-
}
|
|
106
|
+
},
|
|
107
|
+
originalAnalysis: analysis
|
|
100
108
|
});
|
|
101
109
|
}
|
|
102
110
|
|
package/dist/slothlet.mjs
CHANGED
|
@@ -23,12 +23,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
|
|
|
23
23
|
|
|
24
24
|
import { resolvePathFromCaller } from "@cldmv/slothlet/helpers/resolve-from-caller";
|
|
25
25
|
import { sanitizePathName } from "@cldmv/slothlet/helpers/sanitize";
|
|
26
|
-
import {
|
|
27
|
-
processModuleForAPI,
|
|
28
|
-
analyzeModule,
|
|
29
|
-
processModuleFromAnalysis,
|
|
30
|
-
getCategoryBuildingDecisions
|
|
31
|
-
} from "@cldmv/slothlet/helpers/api_builder";
|
|
26
|
+
import { analyzeModule, processModuleFromAnalysis, getCategoryBuildingDecisions } from "@cldmv/slothlet/helpers/api_builder";
|
|
32
27
|
|
|
33
28
|
|
|
34
29
|
|
|
@@ -556,16 +551,24 @@ const slothletObject = {
|
|
|
556
551
|
},
|
|
557
552
|
|
|
558
553
|
|
|
559
|
-
async _loadSingleModule(modulePath) {
|
|
554
|
+
async _loadSingleModule(modulePath, returnAnalysis = false) {
|
|
560
555
|
|
|
561
556
|
const analysis = await analyzeModule(modulePath, {
|
|
562
557
|
debug: this.config.debug,
|
|
563
558
|
instance: this
|
|
564
559
|
});
|
|
565
|
-
|
|
560
|
+
const processedModule = processModuleFromAnalysis(analysis, {
|
|
566
561
|
debug: this.config.debug,
|
|
567
562
|
instance: this
|
|
568
563
|
});
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
if (returnAnalysis) {
|
|
567
|
+
return { mod: processedModule, analysis };
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
return processedModule;
|
|
569
572
|
},
|
|
570
573
|
|
|
571
574
|
|
package/package.json
CHANGED
|
@@ -180,7 +180,9 @@ export function getCategoryBuildingDecisions(categoryPath: string, options?: {
|
|
|
180
180
|
* @param {string} options.apiPathKey - Sanitized API key for the module
|
|
181
181
|
* @param {boolean} options.hasMultipleDefaultExports - Whether multiple default exports exist in the container
|
|
182
182
|
* @param {boolean} options.isSelfReferential - Whether this is a self-referential export
|
|
183
|
-
* @param {boolean} [options.moduleHasDefault] - Whether this specific module has a default export
|
|
183
|
+
* @param {boolean} [options.moduleHasDefault] - Whether this specific module has a default export.
|
|
184
|
+
* Should use originalAnalysis.hasDefault when available for accuracy, as !!mod.default
|
|
185
|
+
* may be inaccurate after processModuleFromAnalysis modifies module structure.
|
|
184
186
|
* @param {string} [options.categoryName] - Container/category name for context
|
|
185
187
|
* @param {number} [options.totalModules=1] - Total number of modules in container
|
|
186
188
|
* @param {boolean} [options.debug=false] - Enable debug logging
|
|
@@ -270,7 +272,8 @@ export function getFlatteningDecision(options: {
|
|
|
270
272
|
* mod, fileName, apiPathKey, hasMultipleDefaultExports, isSelfReferential, api,
|
|
271
273
|
* getRootDefault: () => rootDefaultFunction,
|
|
272
274
|
* setRootDefault: (fn) => { rootDefaultFunction = fn; },
|
|
273
|
-
* context: { debug: true, mode: "root", totalModules: 3 }
|
|
275
|
+
* context: { debug: true, mode: "root", totalModules: 3 },
|
|
276
|
+
* originalAnalysis: { hasDefault: true, namedExportsCount: 2 }
|
|
274
277
|
* });
|
|
275
278
|
*/
|
|
276
279
|
export function processModuleForAPI(options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_builder.d.mts","sourceRoot":"","sources":["../../../../dist/lib/helpers/api_builder.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api_builder.d.mts","sourceRoot":"","sources":["../../../../dist/lib/helpers/api_builder.mjs"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slothlet_eager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/modes/slothlet_eager.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slothlet_eager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/modes/slothlet_eager.mjs"],"names":[],"mappings":"AA4IA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAsDH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,4BArBW,MAAM,aACN,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAgH3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slothlet_lazy.d.mts","sourceRoot":"","sources":["../../../../dist/lib/modes/slothlet_lazy.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slothlet_lazy.d.mts","sourceRoot":"","sources":["../../../../dist/lib/modes/slothlet_lazy.mjs"],"names":[],"mappings":"AAgKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,4BAtBW,MAAM,aACN,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,WAAS,MAAM,CAAC,CA4JpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slothlet.d.mts","sourceRoot":"","sources":["../../dist/slothlet.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slothlet.d.mts","sourceRoot":"","sources":["../../dist/slothlet.mjs"],"names":[],"mappings":"AAm0CA;;;;;;;;;GASG;AACH,kDARW,WAAS,MAAM,UACf,WAAS,MAAM,QAwCzB;AA7tCD;;;;;;;GAOG;AACH,mBAJU,MAAM,CAIO;AAEvB;;;;;GAKG;AACH,sBAJU,MAAM,CAIU;AAE1B;;;;;GAKG;AACH,wBAJU,MAAM,CAIY;;;;;;;;;UAgtCd,MAAM;;;;;;WAIN,OAAO;;;;;;;eAGP,MAAM;;;;;;;;YAIN,OAAO;;;;;;;;WAKP,MAAM;;;;;;;eAKN,MAAM;;;;;;cAIN,MAAM;;;;;;gBAGN,MAAM;;;;;;eAMjB;QAA8B,UAAU,GAA7B,OAAO;QACY,gBAAgB,GAAnC,OAAO;QACY,gBAAgB,GAAnC,OAAO;QACW,KAAK,GAClC;YAAqC,KAAK,GAA/B,MAAM,EAAE;YACkB,gBAAgB,GAA1C,MAAM,EAAE;YACkB,KAAK,GAA/B,MAAM,EAAE;YACkB,KAAK,GAA/B,MAAM,EAAE;SACrB;KAAA;;AAxvCD;;;;;;;;GAQG;AACH,mCAJW,eAAe,GACb,OAAO,CAAC,WAAS,MAAM,CAAC,CAiCpC"}
|