prodex 1.3.0 → 1.4.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/README.md +234 -234
- package/dist/cli/cli-input.js +21 -26
- package/dist/cli/cli-input.js.map +1 -0
- package/dist/cli/flags.js +1 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/init.js +5 -5
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/picker.js +9 -7
- package/dist/cli/picker.js.map +1 -0
- package/dist/cli/summary.js +16 -9
- package/dist/cli/summary.js.map +1 -0
- package/dist/constants/cache-keys.js +12 -0
- package/dist/constants/cache-keys.js.map +1 -0
- package/dist/constants/config-loader.js +2 -2
- package/dist/constants/config-loader.js.map +1 -0
- package/dist/constants/config.js +7 -5
- package/dist/constants/config.js.map +1 -0
- package/dist/constants/default-config.js +1 -0
- package/dist/constants/default-config.js.map +1 -0
- package/dist/constants/flags.js +74 -0
- package/dist/constants/flags.js.map +1 -0
- package/dist/constants/index.js +21 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/render-constants.js +1 -4
- package/dist/constants/render-constants.js.map +1 -0
- package/dist/core/cache.js +54 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/combine.js +32 -13
- package/dist/core/combine.js.map +1 -0
- package/dist/core/config-manager.js +104 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/dependency.js +40 -19
- package/dist/core/dependency.js.map +1 -0
- package/dist/core/file-utils.js +1 -41
- package/dist/core/file-utils.js.map +1 -0
- package/dist/core/helpers.js +43 -38
- package/dist/core/helpers.js.map +1 -0
- package/dist/core/managers/cache.js +54 -0
- package/dist/core/managers/cache.js.map +1 -0
- package/dist/core/managers/config-manager.js +104 -0
- package/dist/core/managers/config-manager.js.map +1 -0
- package/dist/core/managers/config.js +104 -0
- package/dist/core/managers/config.js.map +1 -0
- package/dist/core/output.js +1 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/parsers/extract-imports.js +2 -7
- package/dist/core/parsers/extract-imports.js.map +1 -0
- package/dist/core/renderers.js +10 -8
- package/dist/core/renderers.js.map +1 -0
- package/dist/debug.js +14 -0
- package/dist/debug.js.map +1 -0
- package/dist/index.js +43 -13
- package/dist/index.js.map +1 -0
- package/dist/lib/logger.js +38 -9
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/polyfills.js +1 -10
- package/dist/lib/polyfills.js.map +1 -0
- package/dist/lib/prompt.js +1 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/questions.js +1 -0
- package/dist/lib/questions.js.map +1 -0
- package/dist/lib/utils.js +1 -13
- package/dist/lib/utils.js.map +1 -0
- package/dist/resolvers/js/alias-loader.js +1 -0
- package/dist/resolvers/js/alias-loader.js.map +1 -0
- package/dist/resolvers/js/extract-imports.js +46 -0
- package/dist/resolvers/js/extract-imports.js.map +1 -0
- package/dist/resolvers/js/js-resolver.js +93 -116
- package/dist/resolvers/js/js-resolver.js.map +1 -0
- package/dist/resolvers/js/resolve-alias.js +58 -0
- package/dist/resolvers/js/resolve-alias.js.map +1 -0
- package/dist/resolvers/php/bindings.js +21 -9
- package/dist/resolvers/php/bindings.js.map +1 -0
- package/dist/resolvers/php/extract-imports.js +50 -0
- package/dist/resolvers/php/extract-imports.js.map +1 -0
- package/dist/resolvers/php/patterns.js +37 -4
- package/dist/resolvers/php/patterns.js.map +1 -0
- package/dist/resolvers/php/php-resolver.js +99 -59
- package/dist/resolvers/php/php-resolver.js.map +1 -0
- package/dist/resolvers/php/psr4.js +19 -5
- package/dist/resolvers/php/psr4.js.map +1 -0
- package/dist/resolvers/shared/excludes.js +1 -0
- package/dist/resolvers/shared/excludes.js.map +1 -0
- package/dist/resolvers/shared/file-cache.js +1 -29
- package/dist/resolvers/shared/file-cache.js.map +1 -0
- package/dist/resolvers/shared/resolve-alias.js +62 -0
- package/dist/resolvers/shared/resolve-alias.js.map +1 -0
- package/dist/resolvers/shared/stats.js +3 -3
- package/dist/resolvers/shared/stats.js.map +1 -0
- package/dist/shared/collections.js +34 -0
- package/dist/shared/collections.js.map +1 -0
- package/dist/shared/index.js +20 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/io.js +52 -0
- package/dist/shared/io.js.map +1 -0
- package/dist/shared/patterns.js +30 -0
- package/dist/shared/patterns.js.map +1 -0
- package/dist/shared/stats.js +32 -0
- package/dist/shared/stats.js.map +1 -0
- package/dist/store.js +16 -0
- package/dist/store.js.map +1 -0
- package/dist/types/cli.types.js +1 -0
- package/dist/types/cli.types.js.map +1 -0
- package/dist/types/config.types.js +1 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/core.types.js +1 -0
- package/dist/types/core.types.js.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/resolver.types.js +1 -0
- package/dist/types/resolver.types.js.map +1 -0
- package/dist/types/utils.types.js +1 -0
- package/dist/types/utils.types.js.map +1 -0
- package/package.json +5 -4
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// @ts-nocheck
|
|
3
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
4
|
};
|
|
@@ -35,12 +34,7 @@ async function extractImports(filePath, code) {
|
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
function fallbackRegex(code) {
|
|
38
|
-
const patterns = [
|
|
39
|
-
/import\s+[^'"]*['"]([^'"]+)['"]/g,
|
|
40
|
-
/import\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
41
|
-
/require\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
42
|
-
/export\s+\*\s+from\s+['"]([^'"]+)['"]/g,
|
|
43
|
-
];
|
|
37
|
+
const patterns = [/import\s+[^'"]*['"]([^'"]+)['"]/g, /import\(\s*['"]([^'"]+)['"]\s*\)/g, /require\(\s*['"]([^'"]+)['"]\s*\)/g, /export\s+\*\s+from\s+['"]([^'"]+)['"]/g];
|
|
44
38
|
const matches = new Set();
|
|
45
39
|
for (const r of patterns) {
|
|
46
40
|
let m;
|
|
@@ -49,3 +43,4 @@ function fallbackRegex(code) {
|
|
|
49
43
|
}
|
|
50
44
|
return matches;
|
|
51
45
|
}
|
|
46
|
+
//# sourceMappingURL=extract-imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-imports.js","sourceRoot":"","sources":["../../../src/core/parsers/extract-imports.ts"],"names":[],"mappings":";;;;;AAKA,wCAuBC;AA5BD,2DAA6B;AAC7B,qDAA8C;AAE9C,IAAI,WAAW,GAAG,KAAK,CAAC;AAEjB,KAAK,UAAU,cAAc,CAAC,QAAQ,EAAE,IAAI;IAClD,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,sBAAI,CAAC;QACX,WAAW,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACJ,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,GAAG,EAAE,CAAC;QAClB,CAAC;IACF,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,CAAC,OAAO,CAAC,GAAG,IAAA,uBAAK,EAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,IAAI,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,IAAI;IAC1B,MAAM,QAAQ,GAAG,CAAC,kCAAkC,EAAE,mCAAmC,EAAE,oCAAoC,EAAE,wCAAwC,CAAC,CAAC;IAE3K,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC","sourcesContent":["import fs from \"fs/promises\";\r\nimport { init, parse } from \"es-module-lexer\";\r\n\r\nlet initialized = false;\r\n\r\nexport async function extractImports(filePath, code): Promise<Set<string>> {\r\n\tif (!initialized) {\r\n\t\tawait init;\r\n\t\tinitialized = true;\r\n\t}\r\n\r\n\tlet src = code;\r\n\tif (src == null) {\r\n\t\ttry {\r\n\t\t\tsrc = await fs.readFile(filePath, \"utf8\");\r\n\t\t} catch {\r\n\t\t\treturn new Set();\r\n\t\t}\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst [imports] = parse(src);\r\n\t\tconst out = new Set<string>();\r\n\t\tfor (const i of imports) if (i.n) out.add(i.n);\r\n\t\treturn out;\r\n\t} catch {\r\n\t\treturn fallbackRegex(src);\r\n\t}\r\n}\r\n\r\nfunction fallbackRegex(code) {\r\n\tconst patterns = [/import\\s+[^'\"]*['\"]([^'\"]+)['\"]/g, /import\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g, /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g, /export\\s+\\*\\s+from\\s+['\"]([^'\"]+)['\"]/g];\r\n\r\n\tconst matches = new Set<string>();\r\n\tfor (const r of patterns) {\r\n\t\tlet m;\r\n\t\twhile ((m = r.exec(code))) matches.add(m[1]);\r\n\t}\r\n\treturn matches;\r\n}\r\n"]}
|
package/dist/core/renderers.js
CHANGED
|
@@ -8,24 +8,25 @@ exports.renderMd = renderMd;
|
|
|
8
8
|
exports.tocTxt = tocTxt;
|
|
9
9
|
exports.renderTxt = renderTxt;
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const
|
|
11
|
+
const io_1 = require("../shared/io");
|
|
12
|
+
const io_2 = require("../shared/io");
|
|
12
13
|
const render_constants_1 = require("../constants/render-constants");
|
|
13
14
|
/**
|
|
14
15
|
* Generate Markdown Table of Contents with anchors
|
|
15
16
|
*/
|
|
16
17
|
function tocMd(files) {
|
|
17
18
|
const count = files.length;
|
|
18
|
-
const items = files.map((f, i) => `- [${(0,
|
|
19
|
-
return [
|
|
19
|
+
const items = files.map((f, i) => `- [${(0, io_2.rel)(f)}](#${i + 1})`).join("\n");
|
|
20
|
+
return ["# Index ", `\nIncluded Source Files (${count})`, items, "", "---"].join("\n");
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
23
|
* Render each file section with invisible anchors
|
|
23
24
|
*/
|
|
24
25
|
function renderMd(p, i) {
|
|
25
|
-
const rp = (0,
|
|
26
|
+
const rp = (0, io_2.rel)(p);
|
|
26
27
|
const ext = path_1.default.extname(p).toLowerCase();
|
|
27
28
|
const lang = render_constants_1.LANG_MAP[ext] || "txt";
|
|
28
|
-
const code = (0,
|
|
29
|
+
const code = (0, io_1.readFileSafe)(p).trimEnd();
|
|
29
30
|
return [`---\n#### ${i + 1}`, "\n", "` File: " + rp + "` [↑ Back to top](#index)", "", "```" + lang, code, "```", ""].join("\n");
|
|
30
31
|
}
|
|
31
32
|
/**
|
|
@@ -33,10 +34,11 @@ function renderMd(p, i) {
|
|
|
33
34
|
*/
|
|
34
35
|
function tocTxt(files) {
|
|
35
36
|
const sorted = [...files].sort((a, b) => a.localeCompare(b));
|
|
36
|
-
return ["##==== Combined Scope ====", ...sorted.map((f) => "## - " + (0,
|
|
37
|
+
return ["##==== Combined Scope ====", ...sorted.map((f) => "## - " + (0, io_2.rel)(f))].join("\n") + "\n\n";
|
|
37
38
|
}
|
|
38
39
|
function renderTxt(p) {
|
|
39
|
-
const relPath = (0,
|
|
40
|
-
const code = (0,
|
|
40
|
+
const relPath = (0, io_2.rel)(p);
|
|
41
|
+
const code = (0, io_1.readFileSafe)(p);
|
|
41
42
|
return ["##==== path: " + relPath + " ====", "##region " + relPath, code, "##endregion", ""].join("\n");
|
|
42
43
|
}
|
|
44
|
+
//# sourceMappingURL=renderers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../src/core/renderers.ts"],"names":[],"mappings":";;;;;AAQA,sBAKC;AAKD,4BAOC;AAKD,wBAGC;AAED,8BAIC;AAvCD,gDAAwB;AACxB,qCAA4C;AAC5C,qCAAmC;AACnC,oEAAyD;AAEzD;;GAEG;AACH,SAAgB,KAAK,CAAC,KAAK;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,IAAA,QAAG,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzE,OAAO,CAAC,UAAU,EAAE,4BAA4B,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,IAAA,QAAG,EAAC,CAAC,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,2BAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,IAAA,iBAAY,EAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAEvC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,GAAG,4BAA4B,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnI,CAAC;AAED;;GAEG;AACH,SAAgB,MAAM,CAAC,KAAK;IAC3B,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,4BAA4B,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,IAAA,QAAG,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACnG,CAAC;AAED,SAAgB,SAAS,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAA,QAAG,EAAC,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,IAAA,iBAAY,EAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,eAAe,GAAG,OAAO,GAAG,OAAO,EAAE,WAAW,GAAG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzG,CAAC","sourcesContent":["import path from \"path\";\nimport { readFileSafe } from \"../shared/io\";\nimport { rel } from \"../shared/io\";\nimport { LANG_MAP } from \"../constants/render-constants\";\n\n/**\n * Generate Markdown Table of Contents with anchors\n */\nexport function tocMd(files) {\n\tconst count = files.length;\n\tconst items = files.map((f, i) => `- [${rel(f)}](#${i + 1})`).join(\"\\n\");\n\n\treturn [\"# Index \", `\\nIncluded Source Files (${count})`, items, \"\", \"---\"].join(\"\\n\");\n}\n\n/**\n * Render each file section with invisible anchors\n */\nexport function renderMd(p, i) {\n\tconst rp = rel(p);\n\tconst ext = path.extname(p).toLowerCase();\n\tconst lang = LANG_MAP[ext] || \"txt\";\n\tconst code = readFileSafe(p).trimEnd();\n\n\treturn [`---\\n#### ${i + 1}`, \"\\n\", \"` File: \" + rp + \"` [↑ Back to top](#index)\", \"\", \"```\" + lang, code, \"```\", \"\"].join(\"\\n\");\n}\n\n/**\n * TXT version (unchanged)\n */\nexport function tocTxt(files) {\n\tconst sorted = [...files].sort((a, b) => a.localeCompare(b));\n\treturn [\"##==== Combined Scope ====\", ...sorted.map((f) => \"## - \" + rel(f))].join(\"\\n\") + \"\\n\\n\";\n}\n\nexport function renderTxt(p) {\n\tconst relPath = rel(p);\n\tconst code = readFileSafe(p);\n\treturn [\"##==== path: \" + relPath + \" ====\", \"##region \" + relPath, code, \"##endregion\", \"\"].join(\"\\n\");\n}\n"]}
|
package/dist/debug.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const index_1 = __importDefault(require("./index"));
|
|
7
|
+
(async () => {
|
|
8
|
+
const mockArgs = ["node", "prodex", "C:\\Users\\USER\\Herd\\fireshot", "-f", "**/(dashboard|accounts).tsx", "-cd"];
|
|
9
|
+
process.argv = mockArgs;
|
|
10
|
+
console.log("🧩 Debug runner starting...");
|
|
11
|
+
await (0, index_1.default)();
|
|
12
|
+
console.log("🧩 Debug runner done.");
|
|
13
|
+
})();
|
|
14
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":";;;;;AAAA,oDAAkC;AAElC,CAAC,KAAK,IAAI,EAAE;IACX,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,iCAAiC,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACnH,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;IAGxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,MAAM,IAAA,eAAW,GAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACtC,CAAC,CAAC,EAAE,CAAC","sourcesContent":["import startProdex from \"./index\";\r\n\r\n(async () => {\r\n\tconst mockArgs = [\"node\", \"prodex\", \"C:\\\\Users\\\\USER\\\\Herd\\\\fireshot\", \"-f\", \"**/(dashboard|accounts).tsx\", \"-cd\"];\r\n\tprocess.argv = mockArgs;\r\n\r\n\r\n\tconsole.log(\"🧩 Debug runner starting...\");\r\n\tawait startProdex();\r\n\tconsole.log(\"🧩 Debug runner done.\");\r\n})();\r\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.default = startProdex;
|
|
4
|
-
const combine_1 = require("./core/combine");
|
|
5
37
|
const init_1 = require("./cli/init");
|
|
6
38
|
const cli_input_1 = require("./cli/cli-input");
|
|
7
|
-
const
|
|
8
|
-
require("./
|
|
9
|
-
const
|
|
10
|
-
async function startProdex() {
|
|
11
|
-
|
|
12
|
-
// Handle init mode
|
|
13
|
-
if (args.includes("init")) {
|
|
39
|
+
const config_1 = require("./core/managers/config");
|
|
40
|
+
const store_1 = require("./store");
|
|
41
|
+
const combine_1 = require("./core/combine");
|
|
42
|
+
async function startProdex(args = process.argv) {
|
|
43
|
+
if (args.includes("init"))
|
|
14
44
|
return (0, init_1.initProdex)();
|
|
15
|
-
}
|
|
16
|
-
// Parse CLI input
|
|
17
45
|
const { root, flags } = (0, cli_input_1.parseCliInput)(args);
|
|
18
|
-
|
|
19
|
-
const config =
|
|
20
|
-
(0,
|
|
46
|
+
const userConfig = config_1.ConfigManager.load(root);
|
|
47
|
+
const config = config_1.ConfigManager.merge(userConfig, flags, root);
|
|
48
|
+
(0, store_1.setGlobals)(config, flags);
|
|
21
49
|
const opts = {
|
|
22
50
|
showUi: !flags.ci && !flags?.files?.length && !config?.entry?.ui?.enablePicker,
|
|
23
51
|
cliName: config.name,
|
|
24
52
|
};
|
|
53
|
+
await Promise.resolve().then(() => __importStar(require("./lib/polyfills")));
|
|
25
54
|
await (0, combine_1.runCombine)({ cfg: config, opts });
|
|
26
55
|
}
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,8BAeC;AArBD,qCAAwC;AACxC,+CAAgD;AAChD,mDAAuD;AACvD,mCAAqC;AACrC,4CAA4C;AAE7B,KAAK,UAAU,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAA,iBAAU,GAAE,CAAC;IAE/C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAA,yBAAa,EAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,sBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,sBAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5D,IAAA,kBAAU,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE1B,MAAM,IAAI,GAAG;QACZ,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY;QAC9E,OAAO,EAAE,MAAM,CAAC,IAAI;KACpB,CAAC;IAEF,wDAAa,iBAAiB,GAAC,CAAC;IAChC,MAAM,IAAA,oBAAU,EAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC","sourcesContent":["import { initProdex } from \"./cli/init\";\nimport { parseCliInput } from \"./cli/cli-input\";\nimport { ConfigManager } from \"./core/managers/config\";\nimport { setGlobals } from \"./store\";\nimport { runCombine } from \"./core/combine\";\n\nexport default async function startProdex(args = process.argv) {\n\tif (args.includes(\"init\")) return initProdex();\n\n\tconst { root, flags } = parseCliInput(args);\n\tconst userConfig = ConfigManager.load(root);\n\tconst config = ConfigManager.merge(userConfig, flags, root);\n\tsetGlobals(config, flags);\n\n\tconst opts = {\n\t\tshowUi: !flags.ci && !flags?.files?.length && !config?.entry?.ui?.enablePicker,\n\t\tcliName: config.name,\n\t};\n\n\tawait import(\"./lib/polyfills\");\n\tawait runCombine({ cfg: config, opts });\n}\n"]}
|
package/dist/lib/logger.js
CHANGED
|
@@ -1,14 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.logger = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const store_1 = require("../store");
|
|
5
|
+
let FLAGS = null;
|
|
6
|
+
let DEBUG = false;
|
|
7
|
+
let SILENT = false;
|
|
8
|
+
function ensureFlags() {
|
|
9
|
+
if (FLAGS)
|
|
10
|
+
return;
|
|
11
|
+
FLAGS = (0, store_1.getFlags)() || {};
|
|
12
|
+
DEBUG = !!FLAGS.debug;
|
|
13
|
+
SILENT = !!FLAGS.silent;
|
|
14
|
+
}
|
|
8
15
|
exports.logger = {
|
|
9
|
-
debug: (...
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
debug: (...a) => {
|
|
17
|
+
ensureFlags();
|
|
18
|
+
if (DEBUG && !SILENT)
|
|
19
|
+
console.log("\n🪶 [debug]", ...a);
|
|
20
|
+
},
|
|
21
|
+
info: (...a) => {
|
|
22
|
+
ensureFlags();
|
|
23
|
+
if (!SILENT)
|
|
24
|
+
console.log("\n📌 [info]", ...a);
|
|
25
|
+
},
|
|
26
|
+
warn: (...a) => {
|
|
27
|
+
ensureFlags();
|
|
28
|
+
if (!SILENT)
|
|
29
|
+
console.warn("\n⚠️ [warn]", ...a);
|
|
30
|
+
},
|
|
31
|
+
error: (...a) => {
|
|
32
|
+
ensureFlags();
|
|
33
|
+
if (!SILENT)
|
|
34
|
+
console.error("\n💥 [error]", ...a);
|
|
35
|
+
},
|
|
36
|
+
log: (...a) => {
|
|
37
|
+
ensureFlags();
|
|
38
|
+
if (!SILENT)
|
|
39
|
+
console.log("\n", ...a);
|
|
40
|
+
},
|
|
41
|
+
clear: () => console.clear(),
|
|
14
42
|
};
|
|
43
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AAGpC,IAAI,KAAK,GAAQ,IAAI,CAAC;AACtB,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,IAAI,MAAM,GAAG,KAAK,CAAC;AAEnB,SAAS,WAAW;IACnB,IAAI,KAAK;QAAE,OAAO;IAClB,KAAK,GAAG,IAAA,gBAAQ,GAAE,IAAI,EAAE,CAAC;IACzB,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACtB,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AACzB,CAAC;AAEY,QAAA,MAAM,GAAW;IAC7B,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QACf,WAAW,EAAE,CAAC;QACd,IAAI,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QACd,WAAW,EAAE,CAAC;QACd,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QACd,WAAW,EAAE,CAAC;QACd,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QACf,WAAW,EAAE,CAAC;QACd,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;QACb,WAAW,EAAE,CAAC;QACd,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;CAC5B,CAAC","sourcesContent":["import { getFlags } from \"../store\";\r\nimport { Logger } from \"../types\";\r\n\r\nlet FLAGS: any = null;\r\nlet DEBUG = false;\r\nlet SILENT = false;\r\n\r\nfunction ensureFlags() {\r\n\tif (FLAGS) return;\r\n\tFLAGS = getFlags() || {};\r\n\tDEBUG = !!FLAGS.debug;\r\n\tSILENT = !!FLAGS.silent;\r\n}\r\n\r\nexport const logger: Logger = {\r\n\tdebug: (...a) => {\r\n\t\tensureFlags();\r\n\t\tif (DEBUG && !SILENT) console.log(\"\\n🪶 [debug]\", ...a);\r\n\t},\r\n\tinfo: (...a) => {\r\n\t\tensureFlags();\r\n\t\tif (!SILENT) console.log(\"\\n📌 [info]\", ...a);\r\n\t},\r\n\twarn: (...a) => {\r\n\t\tensureFlags();\r\n\t\tif (!SILENT) console.warn(\"\\n⚠️ [warn]\", ...a);\r\n\t},\r\n\terror: (...a) => {\r\n\t\tensureFlags();\r\n\t\tif (!SILENT) console.error(\"\\n💥 [error]\", ...a);\r\n\t},\r\n\tlog: (...a) => {\r\n\t\tensureFlags();\r\n\t\tif (!SILENT) console.log(\"\\n\", ...a);\r\n\t},\r\n\tclear: () => console.clear(),\r\n};\r\n"]}
|
package/dist/lib/polyfills.js
CHANGED
|
@@ -15,13 +15,4 @@ if (!String.prototype.clean) {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
globalThis._2j = (obj) => util_1.default.inspect(obj, { colors: true, depth: null, breakLength: 150, compact: 3 });
|
|
18
|
-
|
|
19
|
-
if (process.env.PRODEX_DEBUG !== "1")
|
|
20
|
-
return;
|
|
21
|
-
console.log("⭕ BREAKPOINT");
|
|
22
|
-
if (typeof param === "function")
|
|
23
|
-
param();
|
|
24
|
-
else
|
|
25
|
-
console.log(_2j(param));
|
|
26
|
-
process.exit(1);
|
|
27
|
-
};
|
|
18
|
+
//# sourceMappingURL=polyfills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfills.js","sourceRoot":"","sources":["../../src/lib/polyfills.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;AACH,CAAC;AAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC7B,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC;AACH,CAAC;AAED,UAAU,CAAC,GAAG,GAAG,CAAC,GAAQ,EAAU,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC","sourcesContent":["import util from \"util\";\r\n\r\nif (!String.prototype.norm) {\r\n\tString.prototype.norm = function () {\r\n\t\treturn this.replace(/\\\\/g, \"/\");\r\n\t};\r\n}\r\n\r\nif (!String.prototype.clean) {\r\n\tString.prototype.clean = function () {\r\n\t\treturn this.replace(/[<>:\\\"/\\\\|?*]+/g, \"_\");\r\n\t};\r\n}\r\n\r\nglobalThis._2j = (obj: any): string => util.inspect(obj, { colors: true, depth: null, breakLength: 150, compact: 3 });\r\n"]}
|
package/dist/lib/prompt.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/prompt.ts"],"names":[],"mappings":";;;;;AAYA,wBAcC;AA1BD,wDAAgC;AAChC,qCAAkC;AAGlC;;;;;;;GAOG;AACI,KAAK,UAAU,MAAM,CAAU,SAAyB,EAAE,QAAY;IAC5E,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,CAAC,MAAM,kBAAQ,CAAC,MAAM,CAAI,SAAgB,CAAC,CAAM,CAAC;QAClE,OAAO,OAAO,CAAC;IAChB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QACnB,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;YACrB,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YACnD,eAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACP,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,QAAQ,IAAI,IAAI,CAAC;IACzB,CAAC;AACF,CAAC","sourcesContent":["import inquirer from \"inquirer\";\r\nimport { logger } from \"./logger\";\r\nimport type { QuestionSet } from \"../types\";\r\n\r\n/**\r\n * 🧩 prompt()\r\n * Unified and safe wrapper for inquirer.prompt()\r\n *\r\n * - Requires explicit `showUi` flag (no env auto-detection).\r\n * - Returns `null` or `fallback` on failure or disabled UI.\r\n * - Handles TTY errors and user cancellations gracefully.\r\n */\r\nexport async function prompt<T = any>(questions: QuestionSet<T>, fallback?: T): Promise<T | null> {\r\n\ttry {\r\n\t\tconst answers = (await inquirer.prompt<T>(questions as any)) as T;\r\n\t\treturn answers;\r\n\t} catch (err: any) {\r\n\t\tif (err?.isTtyError) {\r\n\t\t\tlogger.warn(\"Interactive prompts not supported (no TTY).\");\r\n\t\t} else if (/canceled|aborted/i.test(err?.message)) {\r\n\t\t\tlogger.warn(\"Prompt canceled by user.\");\r\n\t\t} else {\r\n\t\t\tlogger.error(\"Prompt failed:\", err.message || err);\r\n\t\t}\r\n\t\treturn fallback ?? null;\r\n\t}\r\n}\r\n"]}
|
package/dist/lib/questions.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/lib/questions.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AAEH,2DAA2D;AAC9C,QAAA,oBAAoB,GAAwC;IACxE;QACC,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,uCAAuC;QAChD,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,UAAU;KAC7E;CACD,CAAC;AAEK,MAAM,qBAAqB,GAAG,CAAC,OAAc,EAAE,KAAa,EAAoC,EAAE,CAAC;IACzG;QACC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,6BAA6B,KAAK,GAAG;QAC9C,OAAO;QACP,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,EAAE;KACZ;CACD,CAAC;AATW,QAAA,qBAAqB,yBAShC","sourcesContent":["import type { QuestionSet } from \"../types\";\r\n\r\n/**\r\n * 🧩 Centralized Inquirer question definitions.\r\n * Each export is a named, reusable question set.\r\n */\r\n\r\n/** Ask for the output filename (used in produceOutput). */\r\nexport const OUTPUT_NAME_QUESTION: QuestionSet<{ outputBase: string }> = [\r\n\t{\r\n\t\ttype: \"input\",\r\n\t\tname: \"outputBase\",\r\n\t\tmessage: \"Output file name (without extension):\",\r\n\t\tdefault: \"combined\",\r\n\t\tfilter: (v: string) => v.trim().replace(/[<>:\\\"/\\\\|?*]+/g, \"_\") || \"combined\",\r\n\t},\r\n];\r\n\r\nexport const PICK_ENTRIES_QUESTION = (choices: any[], depth: number): QuestionSet<{ picks: string[] }> => [\r\n\t{\r\n\t\ttype: \"checkbox\",\r\n\t\tname: \"picks\",\r\n\t\tmessage: `Select entry files (depth ${depth})`,\r\n\t\tchoices,\r\n\t\tloop: false,\r\n\t\tpageSize: 20,\r\n\t},\r\n];\r\n"]}
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// @ts-nocheck
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.unique = unique;
|
|
5
|
-
exports.setDiff = setDiff;
|
|
6
|
-
exports.toArray = toArray;
|
|
7
3
|
exports.shortTimestamp = shortTimestamp;
|
|
8
4
|
exports.normalizePatterns = normalizePatterns;
|
|
9
5
|
const config_1 = require("../constants/config");
|
|
10
|
-
function unique(arr) {
|
|
11
|
-
return [...new Set(arr)];
|
|
12
|
-
}
|
|
13
|
-
function setDiff(A, B) {
|
|
14
|
-
return new Set([...A].filter((x) => !B.has(x)));
|
|
15
|
-
}
|
|
16
|
-
function toArray(v) {
|
|
17
|
-
return Array.isArray(v) ? v : [v];
|
|
18
|
-
}
|
|
19
6
|
/** Compact YYMMDD-HHmm timestamp for versioned filenames. */
|
|
20
7
|
function shortTimestamp() {
|
|
21
8
|
const d = new Date();
|
|
@@ -49,3 +36,4 @@ function normalizePatterns(input) {
|
|
|
49
36
|
return valid;
|
|
50
37
|
});
|
|
51
38
|
}
|
|
39
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":";;AAGA,wCAQC;AAED,8CAqBC;AAlCD,gDAAuD;AAEvD,6DAA6D;AAC7D,SAAgB,cAAc;IAC7B,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;AACrC,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAyB;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,IAAI,GAAa,CAAC;IAElB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,GAAG;SACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB;SACtD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,yBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { VALID_GLOB_CHARS } from \"../constants/config\";\r\n\r\n/** Compact YYMMDD-HHmm timestamp for versioned filenames. */\r\nexport function shortTimestamp(): string {\r\n\tconst d = new Date();\r\n\tconst yy = String(d.getFullYear()).slice(-2);\r\n\tconst MM = String(d.getMonth() + 1).padStart(2, \"0\");\r\n\tconst dd = String(d.getDate()).padStart(2, \"0\");\r\n\tconst hh = String(d.getHours()).padStart(2, \"0\");\r\n\tconst mm = String(d.getMinutes()).padStart(2, \"0\");\r\n\treturn `${yy}${MM}${dd}-${hh}${mm}`;\r\n}\r\n\r\nexport function normalizePatterns(input?: string | string[]): string[] {\r\n\tif (!input) return [];\r\n\r\n\tlet arr: string[];\r\n\r\n\tif (typeof input === \"string\") {\r\n\t\tarr = input.split(\",\").map((s) => s.trim());\r\n\t} else if (Array.isArray(input)) {\r\n\t\tarr = input.map((s) => (typeof s === \"string\" ? s.trim() : \"\"));\r\n\t} else {\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturn arr\r\n\t\t.filter((s) => s.length > 0)\r\n\t\t.map((s) => s.replace(/\\\\/g, \"/\")) // normalize slashes\r\n\t\t.filter((s) => {\r\n\t\t\tconst valid = VALID_GLOB_CHARS.test(s);\r\n\t\t\tif (!valid) console.warn(`⚠️ Invalid glob pattern skipped: \"${s}\"`);\r\n\t\t\treturn valid;\r\n\t\t});\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-loader.js","sourceRoot":"","sources":["../../../src/resolvers/js/alias-loader.ts"],"names":[],"mappings":";AAAA,cAAc;;;;;AAOd,gDAyCC;AA9CD,4CAAoB;AACpB,gDAAwB;AAExB,IAAI,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AAE5B,SAAgB,kBAAkB,CAAC,IAAI;IACrC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,EAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAEjD,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC;YAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtD,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,UAAU,CAAC,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QACvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACjE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBACxE,KAAK,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;oBACjC,MAAM,GAAG,GAAG,cAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACjE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["// @ts-nocheck\r\n\r\nimport fs from \"fs\";\r\nimport path from \"path\";\r\n\r\nlet cacheByRoot = new Map();\r\n\r\nexport function loadProjectAliases(root) {\r\n if (cacheByRoot.has(root)) return cacheByRoot.get(root);\r\n\r\n const aliases = {};\r\n\r\n const tsPath = path.join(root, \"tsconfig.json\");\r\n const viteJs = path.join(root, \"vite.config\");\r\n const viteTs = path.join(root, \"vite.config.ts\");\r\n\r\n if (fs.existsSync(tsPath)) {\r\n try {\r\n const ts = JSON.parse(fs.readFileSync(tsPath, \"utf8\"));\r\n const paths = ts.compilerOptions?.paths || {};\r\n for (const [key, value] of Object.entries(paths)) {\r\n const cleanedKey = key.replace(/\\/\\*$/, \"\");\r\n const first = Array.isArray(value) ? value[0] : value;\r\n if (!first) continue;\r\n const cleanedVal = first.replace(/\\/\\*$/, \"\");\r\n aliases[cleanedKey] = path.resolve(root, cleanedVal);\r\n }\r\n } catch {}\r\n }\r\n\r\n for (const vitePath of [viteJs, viteTs]) {\r\n if (!fs.existsSync(vitePath)) continue;\r\n try {\r\n const content = fs.readFileSync(vitePath, \"utf8\");\r\n const blocks = [...content.matchAll(/alias\\s*:\\s*\\{([^}]+)\\}/g)];\r\n for (const m of blocks) {\r\n const inner = m[1];\r\n const pairs = [...inner.matchAll(/['\"](.+?)['\"]\\s*:\\s*['\"](.+?)['\"]/g)];\r\n for (const [, key, val] of pairs) {\r\n const abs = path.isAbsolute(val) ? val : path.resolve(root, val);\r\n aliases[key] = abs;\r\n }\r\n }\r\n } catch {}\r\n }\r\n\r\n cacheByRoot.set(root, aliases);\r\n return aliases;\r\n}\r\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.extractImports = extractImports;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
+
const es_module_lexer_1 = require("es-module-lexer");
|
|
9
|
+
let initialized = false;
|
|
10
|
+
async function extractImports(filePath, code) {
|
|
11
|
+
if (!initialized) {
|
|
12
|
+
await es_module_lexer_1.init;
|
|
13
|
+
initialized = true;
|
|
14
|
+
}
|
|
15
|
+
let src = code;
|
|
16
|
+
if (src == null) {
|
|
17
|
+
try {
|
|
18
|
+
src = await promises_1.default.readFile(filePath, "utf8");
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return new Set();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const [imports] = (0, es_module_lexer_1.parse)(src);
|
|
26
|
+
const out = new Set();
|
|
27
|
+
for (const i of imports)
|
|
28
|
+
if (i.n)
|
|
29
|
+
out.add(i.n);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return fallbackRegex(src);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function fallbackRegex(code) {
|
|
37
|
+
const patterns = [/import\s+[^'"]*['"]([^'"]+)['"]/g, /import\(\s*['"]([^'"]+)['"]\s*\)/g, /require\(\s*['"]([^'"]+)['"]\s*\)/g, /export\s+\*\s+from\s+['"]([^'"]+)['"]/g];
|
|
38
|
+
const matches = new Set();
|
|
39
|
+
for (const r of patterns) {
|
|
40
|
+
let m;
|
|
41
|
+
while ((m = r.exec(code)))
|
|
42
|
+
matches.add(m[1]);
|
|
43
|
+
}
|
|
44
|
+
return matches;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=extract-imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-imports.js","sourceRoot":"","sources":["../../../src/resolvers/js/extract-imports.ts"],"names":[],"mappings":";;;;;AAKA,wCAuBC;AA5BD,2DAA6B;AAC7B,qDAA8C;AAE9C,IAAI,WAAW,GAAG,KAAK,CAAC;AAEjB,KAAK,UAAU,cAAc,CAAC,QAAQ,EAAE,IAAI;IAClD,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,sBAAI,CAAC;QACX,WAAW,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACJ,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,GAAG,EAAE,CAAC;QAClB,CAAC;IACF,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,CAAC,OAAO,CAAC,GAAG,IAAA,uBAAK,EAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,IAAI,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,IAAI;IAC1B,MAAM,QAAQ,GAAG,CAAC,kCAAkC,EAAE,mCAAmC,EAAE,oCAAoC,EAAE,wCAAwC,CAAC,CAAC;IAE3K,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC","sourcesContent":["import fs from \"fs/promises\";\r\nimport { init, parse } from \"es-module-lexer\";\r\n\r\nlet initialized = false;\r\n\r\nexport async function extractImports(filePath, code): Promise<Set<string>> {\r\n\tif (!initialized) {\r\n\t\tawait init;\r\n\t\tinitialized = true;\r\n\t}\r\n\r\n\tlet src = code;\r\n\tif (src == null) {\r\n\t\ttry {\r\n\t\t\tsrc = await fs.readFile(filePath, \"utf8\");\r\n\t\t} catch {\r\n\t\t\treturn new Set();\r\n\t\t}\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst [imports] = parse(src);\r\n\t\tconst out = new Set<string>();\r\n\t\tfor (const i of imports) if (i.n) out.add(i.n);\r\n\t\treturn out;\r\n\t} catch {\r\n\t\treturn fallbackRegex(src);\r\n\t}\r\n}\r\n\r\nfunction fallbackRegex(code) {\r\n\tconst patterns = [/import\\s+[^'\"]*['\"]([^'\"]+)['\"]/g, /import\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g, /require\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g, /export\\s+\\*\\s+from\\s+['\"]([^'\"]+)['\"]/g];\r\n\r\n\tconst matches = new Set<string>();\r\n\tfor (const r of patterns) {\r\n\t\tlet m;\r\n\t\twhile ((m = r.exec(code))) matches.add(m[1]);\r\n\t}\r\n\treturn matches;\r\n}\r\n"]}
|