@deessejs/collections 0.0.47 → 0.0.49
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/worker/index.js +49 -18
- package/package.json +1 -1
package/dist/worker/index.js
CHANGED
|
@@ -8,47 +8,78 @@ const path_1 = __importDefault(require("path"));
|
|
|
8
8
|
const chokidar_1 = __importDefault(require("chokidar"));
|
|
9
9
|
const fs_1 = __importDefault(require("fs"));
|
|
10
10
|
const generate_1 = require("../drizzle/generate");
|
|
11
|
-
// Chemins relatifs au projet de l'utilisateur (process.cwd())
|
|
12
11
|
const PROJECT_ROOT = process.cwd();
|
|
13
12
|
const CONFIG_PATH = path_1.default.join(PROJECT_ROOT, "src", "api", "index.ts");
|
|
14
13
|
const COLLECTIONS_DIR = path_1.default.join(PROJECT_ROOT, "src", "collections");
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Utilise Jiti pour lire le tsconfig.json.
|
|
16
|
+
* Jiti gère nativement le JSONC (commentaires, trailing commas)
|
|
17
|
+
* que JSON.parse ne supporte pas.
|
|
18
|
+
*/
|
|
19
|
+
function getTsConfigAliases(root) {
|
|
20
|
+
const tsConfigPath = path_1.default.join(root, "tsconfig.json");
|
|
21
|
+
if (!fs_1.default.existsSync(tsConfigPath)) {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
// 1. On crée une instance temporaire de Jiti juste pour lire la config
|
|
26
|
+
const tempJiti = (0, jiti_1.createJiti)(root, { requireCache: false });
|
|
27
|
+
// 2. On charge le fichier. Jiti va le parser correctement.
|
|
28
|
+
// Note: selon la version de jiti, pour du JSON, il retourne l'objet directement
|
|
29
|
+
// ou un module avec export default.
|
|
30
|
+
const loaded = tempJiti(tsConfigPath);
|
|
31
|
+
const tsConfig = loaded.default || loaded;
|
|
32
|
+
const paths = tsConfig?.compilerOptions?.paths;
|
|
33
|
+
if (!paths)
|
|
34
|
+
return {};
|
|
35
|
+
const aliases = {};
|
|
36
|
+
for (const [key, values] of Object.entries(paths)) {
|
|
37
|
+
const value = Array.isArray(values) ? values[0] : values;
|
|
38
|
+
// Conversion: "@/*" -> "src/*" ===> "@" -> "/abs/path/to/src"
|
|
39
|
+
const aliasKey = key.replace("/*", "");
|
|
40
|
+
const aliasValue = String(value).replace("/*", "");
|
|
41
|
+
aliases[aliasKey] = path_1.default.resolve(root, aliasValue);
|
|
42
|
+
}
|
|
43
|
+
return aliases;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.warn("[Deesse] ⚠️ Failed to load aliases from tsconfig.json", error);
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// --- Initialisation ---
|
|
51
|
+
// 1. Récupération des alias (ex: { "@": "C:/.../src" })
|
|
52
|
+
const aliases = getTsConfigAliases(PROJECT_ROOT);
|
|
53
|
+
// 2. Initialisation de l'instance principale de Jiti avec les alias
|
|
16
54
|
const jiti = (0, jiti_1.createJiti)(PROJECT_ROOT, {
|
|
17
55
|
interopDefault: true,
|
|
18
|
-
requireCache: false,
|
|
56
|
+
requireCache: false,
|
|
57
|
+
alias: aliases, // Injection des alias pour que "@/collections/posts" fonctionne
|
|
19
58
|
});
|
|
20
59
|
async function runGenerator() {
|
|
21
60
|
try {
|
|
22
|
-
// Vérifier si le fichier existe avant
|
|
23
61
|
if (!fs_1.default.existsSync(CONFIG_PATH)) {
|
|
24
|
-
console.warn(`[Deesse] Config file not found at ${CONFIG_PATH}`);
|
|
25
62
|
return;
|
|
26
63
|
}
|
|
27
|
-
//
|
|
28
|
-
//
|
|
64
|
+
// Importation de la config utilisateur
|
|
65
|
+
// Grâce à l'étape précédente, les imports avec "@/" fonctionnent maintenant
|
|
29
66
|
const mod = await jiti.import(CONFIG_PATH);
|
|
30
|
-
// 2. Récupérer l'instance db exportée
|
|
31
67
|
const dbInstance = mod.db || mod.default;
|
|
32
|
-
// Note : Vous devrez modifier votre `defineConfig` pour qu'il attache la config brute à l'objet retourné
|
|
33
|
-
// Exemple dans src/api/index.ts : (db as any)._config = config;
|
|
34
68
|
if (!dbInstance || !dbInstance._config) {
|
|
35
|
-
// Si c'est le premier run, on ne spam pas l'erreur, l'utilisateur est peut-être en train d'écrire
|
|
36
69
|
return;
|
|
37
70
|
}
|
|
38
71
|
const collections = dbInstance._config.collections;
|
|
39
|
-
//
|
|
40
|
-
console.log("[Deesse] ⚡ Updating Drizzle schema...");
|
|
72
|
+
// Génération du schéma
|
|
41
73
|
(0, generate_1.generateShadowSchema)(collections);
|
|
42
74
|
}
|
|
43
75
|
catch (error) {
|
|
44
|
-
|
|
76
|
+
// On log l'erreur proprement pour le debugging
|
|
77
|
+
console.error("[Deesse] ❌ Worker Error:", error);
|
|
45
78
|
}
|
|
46
79
|
}
|
|
47
|
-
// ---
|
|
48
|
-
// 1. Génération initiale
|
|
80
|
+
// --- Exécution ---
|
|
49
81
|
runGenerator();
|
|
50
|
-
|
|
51
|
-
console.log(`[Deesse] 👀 Watching changes in: src/collections`);
|
|
82
|
+
console.log(`[Deesse] 👀 Watching collections...`);
|
|
52
83
|
const watcher = chokidar_1.default.watch([CONFIG_PATH, COLLECTIONS_DIR], {
|
|
53
84
|
ignoreInitial: true,
|
|
54
85
|
ignored: /(^|[\/\\])\../,
|