sqlew 3.7.2 → 3.7.4

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.
Files changed (117) hide show
  1. package/CHANGELOG.md +237 -0
  2. package/LICENSE +0 -0
  3. package/README.md +2 -2
  4. package/assets/config.example.toml +0 -0
  5. package/assets/kanban-style.png +0 -0
  6. package/assets/sample-agents/README.md +0 -0
  7. package/assets/sample-agents/sqlew-architect.md +0 -0
  8. package/assets/sample-agents/sqlew-researcher.md +0 -0
  9. package/assets/sample-agents/sqlew-scrum-master.md +0 -0
  10. package/assets/schema.sql +0 -0
  11. package/assets/sqlew-logo.png +0 -0
  12. package/dist/cli/db-export.d.ts +29 -0
  13. package/dist/cli/db-export.d.ts.map +1 -0
  14. package/dist/cli/db-export.js +251 -0
  15. package/dist/cli/db-export.js.map +1 -0
  16. package/dist/cli/db-import.d.ts +31 -0
  17. package/dist/cli/db-import.d.ts.map +1 -0
  18. package/dist/cli/db-import.js +258 -0
  19. package/dist/cli/db-import.js.map +1 -0
  20. package/dist/cli.js +24 -2
  21. package/dist/cli.js.map +1 -1
  22. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -1
  23. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js +12 -3
  24. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -1
  25. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts +29 -0
  26. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts.map +1 -0
  27. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.js +556 -0
  28. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.js.map +1 -0
  29. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -1
  30. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +110 -9
  31. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +1 -1
  32. package/dist/database.d.ts +3 -3
  33. package/dist/database.d.ts.map +1 -1
  34. package/dist/database.js +30 -12
  35. package/dist/database.js.map +1 -1
  36. package/dist/tests/migration-idempotency.test.js +11 -10
  37. package/dist/tests/migration-idempotency.test.js.map +1 -1
  38. package/dist/tests/migration-upgrade-paths.test.js +6 -5
  39. package/dist/tests/migration-upgrade-paths.test.js.map +1 -1
  40. package/dist/tests/migrations/test-all-versions-real.js +3 -2
  41. package/dist/tests/migrations/test-all-versions-real.js.map +1 -1
  42. package/dist/tests/project-detector.test.d.ts +10 -0
  43. package/dist/tests/project-detector.test.d.ts.map +1 -0
  44. package/dist/tests/project-detector.test.js +156 -0
  45. package/dist/tests/project-detector.test.js.map +1 -0
  46. package/dist/tests/tasks.auto-pruning-partial.test.js +1 -1
  47. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
  48. package/dist/tests/tasks.link-file-backward-compat.test.js +3 -3
  49. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  50. package/dist/tests/tasks.watch-files-action.test.js +1 -1
  51. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  52. package/dist/tests/tasks.watch-files-parameter.test.js +2 -2
  53. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
  54. package/dist/tools/constraints.js +1 -1
  55. package/dist/tools/constraints.js.map +1 -1
  56. package/dist/tools/context.js +2 -2
  57. package/dist/tools/context.js.map +1 -1
  58. package/dist/tools/files.js +2 -2
  59. package/dist/tools/files.js.map +1 -1
  60. package/dist/tools/tasks.d.ts.map +1 -1
  61. package/dist/tools/tasks.js +7 -5
  62. package/dist/tools/tasks.js.map +1 -1
  63. package/dist/types.d.ts +121 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/utils/exporter/export.d.ts +100 -0
  66. package/dist/utils/exporter/export.d.ts.map +1 -0
  67. package/dist/utils/exporter/export.js +363 -0
  68. package/dist/utils/exporter/export.js.map +1 -0
  69. package/dist/utils/importer/import.d.ts +29 -0
  70. package/dist/utils/importer/import.d.ts.map +1 -0
  71. package/dist/utils/importer/import.js +514 -0
  72. package/dist/utils/importer/import.js.map +1 -0
  73. package/dist/utils/importer/master-tables.d.ts +18 -0
  74. package/dist/utils/importer/master-tables.d.ts.map +1 -0
  75. package/dist/utils/importer/master-tables.js +255 -0
  76. package/dist/utils/importer/master-tables.js.map +1 -0
  77. package/dist/utils/importer/topological-sort.d.ts +61 -0
  78. package/dist/utils/importer/topological-sort.d.ts.map +1 -0
  79. package/dist/utils/importer/topological-sort.js +143 -0
  80. package/dist/utils/importer/topological-sort.js.map +1 -0
  81. package/dist/utils/project-detector.d.ts +42 -0
  82. package/dist/utils/project-detector.d.ts.map +1 -0
  83. package/dist/utils/project-detector.js +130 -0
  84. package/dist/utils/project-detector.js.map +1 -0
  85. package/docs/ACCEPTANCE_CRITERIA.md +0 -0
  86. package/docs/AI_AGENT_GUIDE.md +0 -0
  87. package/docs/ARCHITECTURE.md +0 -0
  88. package/docs/AUTO_FILE_TRACKING.md +0 -1
  89. package/docs/BEST_PRACTICES.md +0 -0
  90. package/docs/CONFIGURATION.md +0 -0
  91. package/docs/DATABASE_AUTH.md +1 -2
  92. package/docs/DECISION_CONTEXT.md +0 -0
  93. package/docs/DECISION_TO_TASK_MIGRATION_GUIDE.md +0 -0
  94. package/docs/GIT_AWARE_AUTO_COMPLETE.md +0 -0
  95. package/docs/SHARED_CONCEPTS.md +0 -0
  96. package/docs/SPECIALIZED_AGENTS.md +0 -0
  97. package/docs/TASK_ACTIONS.md +0 -0
  98. package/docs/TASK_DEPENDENCIES.md +0 -0
  99. package/docs/TASK_LINKING.md +0 -0
  100. package/docs/TASK_MIGRATION.md +0 -0
  101. package/docs/TASK_OVERVIEW.md +0 -0
  102. package/docs/TASK_PRUNING.md +0 -0
  103. package/docs/TASK_SYSTEM.md +0 -0
  104. package/docs/TOOL_REFERENCE.md +0 -2
  105. package/docs/TOOL_SELECTION.md +0 -0
  106. package/docs/WORKFLOWS.md +0 -0
  107. package/docs/{DATABASE_MIGRATION.md → cli/DATABASE_MIGRATION.md} +71 -32
  108. package/docs/cli/DATA_EXPORT_IMPORT.md +400 -0
  109. package/docs/cli/README.md +227 -0
  110. package/package.json +3 -2
  111. package/docs/BASEADAPTER_IMPLEMENTATION.md +0 -399
  112. package/docs/HELP_PREVIEW_COMPARISON.md +0 -259
  113. package/docs/MIGRATION_CHAIN.md +0 -293
  114. package/docs/MIGRATION_v2.md +0 -538
  115. package/docs/MIGRATION_v3.3.md +0 -602
  116. package/docs/MIGRATION_v3.6.0.md +0 -170
  117. package/docs/MULTI_PROJECT_ARCHITECTURE.md +0 -497
@@ -0,0 +1,363 @@
1
+ /**
2
+ * JSON Export Utility - Data-only export for append-import
3
+ * Schema-less export format for merging data across sqlew databases
4
+ */
5
+ // ============================================================================
6
+ // Export Functions
7
+ // ============================================================================
8
+ /**
9
+ * Generate JSON export from database
10
+ */
11
+ export async function generateJsonExport(knex, options = {}) {
12
+ const { projectName } = options;
13
+ // Determine export mode and get project ID(s)
14
+ let exportMode;
15
+ let projectIds;
16
+ let projectData;
17
+ if (projectName) {
18
+ exportMode = 'single_project';
19
+ // Get project by name
20
+ const project = await knex('m_projects')
21
+ .where({ name: projectName })
22
+ .first();
23
+ if (!project) {
24
+ throw new Error(`Project not found: ${projectName}`);
25
+ }
26
+ projectIds = [project.id];
27
+ projectData = {
28
+ name: project.name,
29
+ display_name: project.display_name,
30
+ detection_source: project.detection_source,
31
+ project_root_path: project.project_root_path,
32
+ created_ts: project.created_ts,
33
+ last_active_ts: project.last_active_ts,
34
+ metadata: project.metadata,
35
+ };
36
+ }
37
+ else {
38
+ exportMode = 'all_projects';
39
+ // Get all projects
40
+ const projects = await knex('m_projects').select('*');
41
+ projectIds = projects.map(p => p.id);
42
+ projectData = projects.map(p => ({
43
+ name: p.name,
44
+ display_name: p.display_name,
45
+ detection_source: p.detection_source,
46
+ project_root_path: p.project_root_path,
47
+ created_ts: p.created_ts,
48
+ last_active_ts: p.last_active_ts,
49
+ metadata: p.metadata,
50
+ }));
51
+ }
52
+ // Get database type
53
+ const dbType = knex.client.config.client;
54
+ const databaseType = dbType === 'better-sqlite3' || dbType === 'sqlite3' ? 'sqlite'
55
+ : dbType === 'mysql' || dbType === 'mysql2' ? 'mysql'
56
+ : 'postgresql';
57
+ // Build JSON export structure
58
+ const exportTimestamp = new Date().toISOString();
59
+ const jsonExport = {
60
+ // New metadata format (v3.7.3+)
61
+ metadata: {
62
+ sqlew_version: '3.7.3',
63
+ schema_version: 3, // Schema v3 = v3.7.x multi-project support
64
+ exported_at: exportTimestamp,
65
+ export_mode: exportMode,
66
+ database_type: databaseType,
67
+ },
68
+ // Legacy fields (backward compatibility)
69
+ version: '3.7.3',
70
+ exported_at: exportTimestamp,
71
+ export_mode: exportMode,
72
+ database_type: databaseType,
73
+ master_tables: {
74
+ agents: [],
75
+ files: [],
76
+ context_keys: [],
77
+ tags: [],
78
+ scopes: [],
79
+ constraint_categories: [],
80
+ layers: [],
81
+ task_statuses: [],
82
+ },
83
+ transaction_tables: {
84
+ decisions: [],
85
+ decisions_numeric: [],
86
+ decision_history: [],
87
+ decision_tags: [],
88
+ decision_scopes: [],
89
+ decision_context: [],
90
+ file_changes: [],
91
+ constraints: [],
92
+ constraint_tags: [],
93
+ tasks: [],
94
+ task_details: [],
95
+ task_tags: [],
96
+ task_file_links: [],
97
+ task_decision_links: [],
98
+ task_dependencies: [],
99
+ activity_log: [],
100
+ },
101
+ };
102
+ // Add project data
103
+ if (exportMode === 'single_project') {
104
+ jsonExport.project = projectData;
105
+ }
106
+ else {
107
+ jsonExport.projects = projectData;
108
+ }
109
+ // Export master tables (only used IDs)
110
+ jsonExport.master_tables = await exportMasterTables(knex, projectIds);
111
+ // Export transaction tables (filtered by project_id)
112
+ jsonExport.transaction_tables = await exportTransactionTables(knex, projectIds);
113
+ return JSON.stringify(jsonExport, null, 2);
114
+ }
115
+ /**
116
+ * Export master tables - only entries used by specified project(s)
117
+ */
118
+ async function exportMasterTables(knex, projectIds) {
119
+ const masterTables = {
120
+ agents: [],
121
+ files: [],
122
+ context_keys: [],
123
+ tags: [],
124
+ scopes: [],
125
+ constraint_categories: [],
126
+ layers: [],
127
+ task_statuses: [],
128
+ };
129
+ // Get used agent IDs from all transaction tables
130
+ const usedAgentIds = new Set();
131
+ // From t_decisions
132
+ const decisionAgents = await knex('t_decisions')
133
+ .whereIn('project_id', projectIds)
134
+ .whereNotNull('agent_id')
135
+ .distinct('agent_id');
136
+ decisionAgents.forEach(row => usedAgentIds.add(row.agent_id));
137
+ // From t_file_changes
138
+ const fileChangeAgents = await knex('t_file_changes')
139
+ .whereIn('project_id', projectIds)
140
+ .distinct('agent_id');
141
+ fileChangeAgents.forEach(row => usedAgentIds.add(row.agent_id));
142
+ // From t_constraints
143
+ const constraintAgents = await knex('t_constraints')
144
+ .whereIn('project_id', projectIds)
145
+ .whereNotNull('agent_id')
146
+ .distinct('agent_id');
147
+ constraintAgents.forEach(row => usedAgentIds.add(row.agent_id));
148
+ // From t_tasks
149
+ const taskAgents = await knex('t_tasks')
150
+ .whereIn('project_id', projectIds)
151
+ .whereNotNull('assigned_agent_id')
152
+ .distinct('assigned_agent_id as agent_id');
153
+ taskAgents.forEach(row => usedAgentIds.add(row.agent_id));
154
+ // From t_decision_context
155
+ const contextAgents = await knex('t_decision_context')
156
+ .whereIn('project_id', projectIds)
157
+ .whereNotNull('agent_id')
158
+ .distinct('agent_id');
159
+ contextAgents.forEach(row => usedAgentIds.add(row.agent_id));
160
+ if (usedAgentIds.size > 0) {
161
+ masterTables.agents = await knex('m_agents')
162
+ .whereIn('id', Array.from(usedAgentIds))
163
+ .select('id', 'name', 'last_active_ts');
164
+ }
165
+ // Get used file IDs from t_file_changes and t_task_file_links
166
+ const usedFileIds = new Set();
167
+ const fileChanges = await knex('t_file_changes')
168
+ .whereIn('project_id', projectIds)
169
+ .distinct('file_id');
170
+ fileChanges.forEach(row => usedFileIds.add(row.file_id));
171
+ const taskFiles = await knex('t_task_file_links')
172
+ .whereIn('project_id', projectIds)
173
+ .distinct('file_id');
174
+ taskFiles.forEach(row => usedFileIds.add(row.file_id));
175
+ if (usedFileIds.size > 0) {
176
+ masterTables.files = await knex('m_files')
177
+ .whereIn('id', Array.from(usedFileIds))
178
+ .select('id', 'project_id', 'path');
179
+ }
180
+ // Get used context key IDs from t_decisions
181
+ const usedKeyIds = new Set();
182
+ const decisions = await knex('t_decisions')
183
+ .whereIn('project_id', projectIds)
184
+ .distinct('key_id');
185
+ decisions.forEach(row => usedKeyIds.add(row.key_id));
186
+ const decisionsNumeric = await knex('t_decisions_numeric')
187
+ .whereIn('project_id', projectIds)
188
+ .distinct('key_id');
189
+ decisionsNumeric.forEach(row => usedKeyIds.add(row.key_id));
190
+ const taskDecisionLinks = await knex('t_task_decision_links')
191
+ .whereIn('project_id', projectIds)
192
+ .distinct('decision_key_id as key_id');
193
+ taskDecisionLinks.forEach(row => usedKeyIds.add(row.key_id));
194
+ if (usedKeyIds.size > 0) {
195
+ masterTables.context_keys = await knex('m_context_keys')
196
+ .whereIn('id', Array.from(usedKeyIds))
197
+ .select('id', 'key');
198
+ }
199
+ // Get used tag IDs from various tag tables
200
+ const usedTagIds = new Set();
201
+ // Join through parent table (t_decisions) to filter by project_id
202
+ // Note: t_decision_tags uses decision_key_id (references m_context_keys.id)
203
+ const decisionTags = await knex('t_decision_tags as dt')
204
+ .join('t_decisions as d', 'dt.decision_key_id', 'd.key_id')
205
+ .whereIn('d.project_id', projectIds)
206
+ .distinct('dt.tag_id');
207
+ decisionTags.forEach(row => usedTagIds.add(row.tag_id));
208
+ // Join through parent table (t_constraints) to filter by project_id
209
+ const constraintTags = await knex('t_constraint_tags as ct')
210
+ .join('t_constraints as c', 'ct.constraint_id', 'c.id')
211
+ .whereIn('c.project_id', projectIds)
212
+ .distinct('ct.tag_id');
213
+ constraintTags.forEach(row => usedTagIds.add(row.tag_id));
214
+ // Join through parent table (t_tasks) to filter by project_id
215
+ const taskTags = await knex('t_task_tags as tt')
216
+ .join('t_tasks as t', 'tt.task_id', 't.id')
217
+ .whereIn('t.project_id', projectIds)
218
+ .distinct('tt.tag_id');
219
+ taskTags.forEach(row => usedTagIds.add(row.tag_id));
220
+ if (usedTagIds.size > 0) {
221
+ masterTables.tags = await knex('m_tags')
222
+ .whereIn('id', Array.from(usedTagIds))
223
+ .select('id', 'project_id', 'name');
224
+ }
225
+ // Get used scope IDs from t_decision_scopes
226
+ const usedScopeIds = new Set();
227
+ // Join through parent table (t_decisions) to filter by project_id
228
+ // Note: t_decision_scopes uses decision_key_id (references m_context_keys.id)
229
+ const decisionScopes = await knex('t_decision_scopes as ds')
230
+ .join('t_decisions as d', 'ds.decision_key_id', 'd.key_id')
231
+ .whereIn('d.project_id', projectIds)
232
+ .distinct('ds.scope_id');
233
+ decisionScopes.forEach(row => usedScopeIds.add(row.scope_id));
234
+ if (usedScopeIds.size > 0) {
235
+ masterTables.scopes = await knex('m_scopes')
236
+ .whereIn('id', Array.from(usedScopeIds))
237
+ .select('id', 'project_id', 'name');
238
+ }
239
+ // Get used category IDs from t_constraints
240
+ const usedCategoryIds = new Set();
241
+ const constraints = await knex('t_constraints')
242
+ .whereIn('project_id', projectIds)
243
+ .distinct('category_id');
244
+ constraints.forEach(row => usedCategoryIds.add(row.category_id));
245
+ if (usedCategoryIds.size > 0) {
246
+ masterTables.constraint_categories = await knex('m_constraint_categories')
247
+ .whereIn('id', Array.from(usedCategoryIds))
248
+ .select('id', 'name');
249
+ }
250
+ // Get used layer IDs from all tables that reference layers
251
+ const usedLayerIds = new Set();
252
+ const decisionLayers = await knex('t_decisions')
253
+ .whereIn('project_id', projectIds)
254
+ .whereNotNull('layer_id')
255
+ .distinct('layer_id');
256
+ decisionLayers.forEach(row => usedLayerIds.add(row.layer_id));
257
+ const fileChangeLayers = await knex('t_file_changes')
258
+ .whereIn('project_id', projectIds)
259
+ .whereNotNull('layer_id')
260
+ .distinct('layer_id');
261
+ fileChangeLayers.forEach(row => usedLayerIds.add(row.layer_id));
262
+ const constraintLayers = await knex('t_constraints')
263
+ .whereIn('project_id', projectIds)
264
+ .whereNotNull('layer_id')
265
+ .distinct('layer_id');
266
+ constraintLayers.forEach(row => usedLayerIds.add(row.layer_id));
267
+ const taskLayers = await knex('t_tasks')
268
+ .whereIn('project_id', projectIds)
269
+ .whereNotNull('layer_id')
270
+ .distinct('layer_id');
271
+ taskLayers.forEach(row => usedLayerIds.add(row.layer_id));
272
+ if (usedLayerIds.size > 0) {
273
+ masterTables.layers = await knex('m_layers')
274
+ .whereIn('id', Array.from(usedLayerIds))
275
+ .select('id', 'name');
276
+ }
277
+ // Get all task statuses (these are static enum-like data)
278
+ masterTables.task_statuses = await knex('m_task_statuses')
279
+ .select('id', 'name');
280
+ return masterTables;
281
+ }
282
+ /**
283
+ * Export transaction tables filtered by project_id
284
+ */
285
+ async function exportTransactionTables(knex, projectIds) {
286
+ const transactionTables = {
287
+ decisions: [],
288
+ decisions_numeric: [],
289
+ decision_history: [],
290
+ decision_tags: [],
291
+ decision_scopes: [],
292
+ decision_context: [],
293
+ file_changes: [],
294
+ constraints: [],
295
+ constraint_tags: [],
296
+ tasks: [],
297
+ task_details: [],
298
+ task_tags: [],
299
+ task_file_links: [],
300
+ task_decision_links: [],
301
+ task_dependencies: [],
302
+ activity_log: [],
303
+ };
304
+ // Export each transaction table
305
+ transactionTables.decisions = await knex('t_decisions')
306
+ .whereIn('project_id', projectIds)
307
+ .select('*');
308
+ transactionTables.decisions_numeric = await knex('t_decisions_numeric')
309
+ .whereIn('project_id', projectIds)
310
+ .select('*');
311
+ transactionTables.decision_history = await knex('t_decision_history')
312
+ .whereIn('project_id', projectIds)
313
+ .select('*');
314
+ // Junction tables - filter by joining through parent table
315
+ // Note: decision junction tables use decision_key_id (references m_context_keys.id)
316
+ transactionTables.decision_tags = await knex('t_decision_tags as dt')
317
+ .join('t_decisions as d', 'dt.decision_key_id', 'd.key_id')
318
+ .whereIn('d.project_id', projectIds)
319
+ .select('dt.*');
320
+ transactionTables.decision_scopes = await knex('t_decision_scopes as ds')
321
+ .join('t_decisions as d', 'ds.decision_key_id', 'd.key_id')
322
+ .whereIn('d.project_id', projectIds)
323
+ .select('ds.*');
324
+ transactionTables.decision_context = await knex('t_decision_context')
325
+ .whereIn('project_id', projectIds)
326
+ .select('*');
327
+ transactionTables.file_changes = await knex('t_file_changes')
328
+ .whereIn('project_id', projectIds)
329
+ .select('*');
330
+ transactionTables.constraints = await knex('t_constraints')
331
+ .whereIn('project_id', projectIds)
332
+ .select('*');
333
+ // Junction table - filter by joining through parent table
334
+ transactionTables.constraint_tags = await knex('t_constraint_tags as ct')
335
+ .join('t_constraints as c', 'ct.constraint_id', 'c.id')
336
+ .whereIn('c.project_id', projectIds)
337
+ .select('ct.*');
338
+ transactionTables.tasks = await knex('t_tasks')
339
+ .whereIn('project_id', projectIds)
340
+ .select('*');
341
+ transactionTables.task_details = await knex('t_task_details')
342
+ .whereIn('project_id', projectIds)
343
+ .select('*');
344
+ // Junction table - filter by joining through parent table
345
+ transactionTables.task_tags = await knex('t_task_tags as tt')
346
+ .join('t_tasks as t', 'tt.task_id', 't.id')
347
+ .whereIn('t.project_id', projectIds)
348
+ .select('tt.*');
349
+ transactionTables.task_file_links = await knex('t_task_file_links')
350
+ .whereIn('project_id', projectIds)
351
+ .select('*');
352
+ transactionTables.task_decision_links = await knex('t_task_decision_links')
353
+ .whereIn('project_id', projectIds)
354
+ .select('*');
355
+ transactionTables.task_dependencies = await knex('t_task_dependencies')
356
+ .whereIn('project_id', projectIds)
357
+ .select('*');
358
+ transactionTables.activity_log = await knex('t_activity_log')
359
+ .whereIn('project_id', projectIds)
360
+ .select('*');
361
+ return transactionTables;
362
+ }
363
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/utils/exporter/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * JSON Import Main Orchestrator
3
+ *
4
+ * Coordinates the entire import process with transaction atomicity.
5
+ * Implements architectural decisions #247-259 for safe multi-project data migration.
6
+ *
7
+ * Import Order:
8
+ * 1. Validate JSON schema
9
+ * 2. Check project name conflict (skip if exists)
10
+ * 3. Create new project
11
+ * 4. Import master tables → ID mappings
12
+ * 5. Import transaction data with remapped IDs
13
+ * 6. Import junction tables with remapped IDs
14
+ */
15
+ import type { Knex } from 'knex';
16
+ import type { JsonImportOptions, JsonImportResult } from '../../types.js';
17
+ /**
18
+ * Main import function
19
+ *
20
+ * Architectural Decision #256: Transaction atomicity
21
+ * All imports wrapped in transaction, rollback on error
22
+ *
23
+ * @param knex - Knex database instance
24
+ * @param jsonData - Parsed JSON export data
25
+ * @param options - Import options
26
+ * @returns Import result with statistics
27
+ */
28
+ export declare function importJsonData(knex: Knex, jsonData: any, options?: JsonImportOptions): Promise<JsonImportResult>;
29
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/utils/importer/import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAIjB,MAAM,gBAAgB,CAAC;AAIxB;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,GAAG,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAuD3B"}