@sonicjs-cms/core 2.3.0 → 2.3.2

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 (40) hide show
  1. package/bin/db-reset.js +240 -0
  2. package/dist/{chunk-CAMM3MJV.js → chunk-3FYCRI7Q.js} +278 -2
  3. package/dist/chunk-3FYCRI7Q.js.map +1 -0
  4. package/dist/{chunk-HBJU3I2Y.cjs → chunk-BARJXFBB.cjs} +278 -2
  5. package/dist/chunk-BARJXFBB.cjs.map +1 -0
  6. package/dist/{chunk-5TRX2JHU.js → chunk-DAY5XPQC.js} +3 -3
  7. package/dist/{chunk-5TRX2JHU.js.map → chunk-DAY5XPQC.js.map} +1 -1
  8. package/dist/{chunk-4C433FET.js → chunk-ES7DYKEM.js} +7 -3
  9. package/dist/chunk-ES7DYKEM.js.map +1 -0
  10. package/dist/{chunk-TT266RYM.cjs → chunk-FSYW6HZV.cjs} +7 -3
  11. package/dist/chunk-FSYW6HZV.cjs.map +1 -0
  12. package/dist/{chunk-MPFSSBIY.cjs → chunk-LWGJWWVV.cjs} +90 -90
  13. package/dist/{chunk-MPFSSBIY.cjs.map → chunk-LWGJWWVV.cjs.map} +1 -1
  14. package/dist/{chunk-KP4DVEX5.cjs → chunk-UYMASN2Z.cjs} +4 -4
  15. package/dist/{chunk-KP4DVEX5.cjs.map → chunk-UYMASN2Z.cjs.map} +1 -1
  16. package/dist/{chunk-3ZLCMOCM.js → chunk-ZCAPRT76.js} +8 -8
  17. package/dist/{chunk-3ZLCMOCM.js.map → chunk-ZCAPRT76.js.map} +1 -1
  18. package/dist/index.cjs +74 -74
  19. package/dist/index.js +7 -7
  20. package/dist/middleware.cjs +23 -23
  21. package/dist/middleware.js +2 -2
  22. package/dist/migrations-6TOOBUO5.js +4 -0
  23. package/dist/{migrations-B2CDNN76.js.map → migrations-6TOOBUO5.js.map} +1 -1
  24. package/dist/migrations-GLNXD53E.cjs +13 -0
  25. package/dist/{migrations-IBKKBIKR.cjs.map → migrations-GLNXD53E.cjs.map} +1 -1
  26. package/dist/routes.cjs +24 -24
  27. package/dist/routes.js +4 -4
  28. package/dist/services.cjs +2 -2
  29. package/dist/services.js +1 -1
  30. package/dist/utils.cjs +11 -11
  31. package/dist/utils.js +1 -1
  32. package/migrations/002_faq_plugin.sql +86 -0
  33. package/migrations/013_code_examples_plugin.sql +177 -0
  34. package/package.json +5 -1
  35. package/dist/chunk-4C433FET.js.map +0 -1
  36. package/dist/chunk-CAMM3MJV.js.map +0 -1
  37. package/dist/chunk-HBJU3I2Y.cjs.map +0 -1
  38. package/dist/chunk-TT266RYM.cjs.map +0 -1
  39. package/dist/migrations-B2CDNN76.js +0 -4
  40. package/dist/migrations-IBKKBIKR.cjs +0 -13
@@ -0,0 +1,240 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { execSync, spawn } from 'child_process';
4
+ import { readFileSync, writeFileSync, existsSync, rmSync } from 'fs';
5
+ import { createInterface } from 'readline';
6
+ import { join, dirname } from 'path';
7
+
8
+ const colors = {
9
+ reset: '\x1b[0m',
10
+ green: '\x1b[32m',
11
+ yellow: '\x1b[33m',
12
+ red: '\x1b[31m',
13
+ cyan: '\x1b[36m',
14
+ bold: '\x1b[1m',
15
+ };
16
+
17
+ function log(message, color = '') {
18
+ console.log(`${color}${message}${colors.reset}`);
19
+ }
20
+
21
+ function execCommand(command, options = {}) {
22
+ try {
23
+ return execSync(command, { encoding: 'utf-8', stdio: options.silent ? 'pipe' : 'inherit', ...options });
24
+ } catch (error) {
25
+ if (options.ignoreError) return '';
26
+ throw error;
27
+ }
28
+ }
29
+
30
+ function execCommandOutput(command) {
31
+ try {
32
+ return execSync(command, { encoding: 'utf-8', stdio: 'pipe' }).trim();
33
+ } catch {
34
+ return '';
35
+ }
36
+ }
37
+
38
+ async function prompt(question) {
39
+ const rl = createInterface({
40
+ input: process.stdin,
41
+ output: process.stdout,
42
+ });
43
+
44
+ return new Promise((resolve) => {
45
+ rl.question(question, (answer) => {
46
+ rl.close();
47
+ resolve(answer.toLowerCase());
48
+ });
49
+ });
50
+ }
51
+
52
+ function findWranglerToml() {
53
+ // Look for wrangler.toml in current directory or parent directories
54
+ let dir = process.cwd();
55
+ for (let i = 0; i < 5; i++) {
56
+ const tomlPath = join(dir, 'wrangler.toml');
57
+ if (existsSync(tomlPath)) {
58
+ return { path: tomlPath, dir };
59
+ }
60
+ dir = dirname(dir);
61
+ }
62
+ return null;
63
+ }
64
+
65
+ async function main() {
66
+ log('\n🔧 SonicJS Database Reset Tool', colors.cyan + colors.bold);
67
+ log('================================\n', colors.cyan);
68
+
69
+ // Find wrangler.toml
70
+ const wranglerInfo = findWranglerToml();
71
+ if (!wranglerInfo) {
72
+ log('Error: Could not find wrangler.toml in current or parent directories', colors.red);
73
+ log('Please run this command from your SonicJS project directory.', colors.yellow);
74
+ process.exit(1);
75
+ }
76
+
77
+ const { path: wranglerPath, dir: projectDir } = wranglerInfo;
78
+ log(`Found wrangler.toml at: ${wranglerPath}`, colors.green);
79
+
80
+ // Change to project directory
81
+ process.chdir(projectDir);
82
+
83
+ // Get the current branch name
84
+ let branchName;
85
+ try {
86
+ branchName = execCommandOutput('git rev-parse --abbrev-ref HEAD');
87
+ } catch {
88
+ branchName = '';
89
+ }
90
+
91
+ if (!branchName || branchName === 'HEAD') {
92
+ log('Error: Could not determine branch name', colors.red);
93
+ process.exit(1);
94
+ }
95
+
96
+ // Create a safe database name from branch
97
+ const safeBranch = branchName.replace(/[^a-zA-Z0-9-]/g, '-').slice(0, 50);
98
+ const dbName = `sonicjs-worktree-${safeBranch}`;
99
+
100
+ log(`Setting up fresh D1 database for worktree: ${branchName}`, colors.cyan);
101
+ log(`Database name: ${dbName}\n`, colors.cyan);
102
+
103
+ // Check if database already exists
104
+ log('Checking for existing database...', colors.yellow);
105
+ let existingDbId = '';
106
+ try {
107
+ const listOutput = execCommandOutput('npx wrangler d1 list --json 2>/dev/null');
108
+ if (listOutput) {
109
+ const databases = JSON.parse(listOutput);
110
+ const existing = databases.find((db) => db.name === dbName);
111
+ if (existing) {
112
+ existingDbId = existing.uuid;
113
+ }
114
+ }
115
+ } catch {
116
+ // Ignore errors - database may not exist
117
+ }
118
+
119
+ let dbId = existingDbId;
120
+
121
+ if (existingDbId) {
122
+ log(`Database ${dbName} already exists with ID: ${existingDbId}`, colors.yellow);
123
+
124
+ const answer = await prompt('Delete existing database and create fresh one? (y/N): ');
125
+ if (answer === 'y' || answer === 'yes') {
126
+ log('\nDeleting existing database...', colors.yellow);
127
+ try {
128
+ execCommand(`npx wrangler d1 delete "${dbName}" --skip-confirmation`, { silent: true });
129
+ existingDbId = '';
130
+ dbId = '';
131
+ } catch (error) {
132
+ log(`Warning: Failed to delete database: ${error.message}`, colors.yellow);
133
+ }
134
+ }
135
+ }
136
+
137
+ if (!existingDbId || !dbId) {
138
+ // Create new database
139
+ log(`\nCreating new D1 database: ${dbName}`, colors.cyan);
140
+ let createOutput = '';
141
+ try {
142
+ createOutput = execCommandOutput(`npx wrangler d1 create "${dbName}" 2>&1`);
143
+ console.log(createOutput);
144
+ } catch (error) {
145
+ log(`Error creating database: ${error.message}`, colors.red);
146
+ process.exit(1);
147
+ }
148
+
149
+ // Extract database ID from creation output
150
+ const idMatch = createOutput.match(/database_id\s*=\s*"([^"]+)"/);
151
+ if (idMatch) {
152
+ dbId = idMatch[1];
153
+ }
154
+
155
+ // If extraction failed, try listing databases
156
+ if (!dbId) {
157
+ try {
158
+ const listOutput = execCommandOutput('npx wrangler d1 list --json');
159
+ if (listOutput) {
160
+ const databases = JSON.parse(listOutput);
161
+ const created = databases.find((db) => db.name === dbName);
162
+ if (created) {
163
+ dbId = created.uuid;
164
+ }
165
+ }
166
+ } catch {
167
+ // Ignore
168
+ }
169
+ }
170
+ }
171
+
172
+ if (!dbId) {
173
+ log('Error: Failed to get database ID', colors.red);
174
+ process.exit(1);
175
+ }
176
+
177
+ log(`\nDatabase ID: ${dbId}`, colors.green);
178
+
179
+ // Update wrangler.toml with the new database ID
180
+ log('\nUpdating wrangler.toml...', colors.yellow);
181
+ try {
182
+ let wranglerContent = readFileSync(wranglerPath, 'utf-8');
183
+ wranglerContent = wranglerContent.replace(
184
+ /database_id\s*=\s*"[^"]*"/,
185
+ `database_id = "${dbId}"`
186
+ );
187
+ wranglerContent = wranglerContent.replace(
188
+ /database_name\s*=\s*"[^"]*"/,
189
+ `database_name = "${dbName}"`
190
+ );
191
+ writeFileSync(wranglerPath, wranglerContent);
192
+ log('Updated wrangler.toml successfully', colors.green);
193
+ } catch (error) {
194
+ log(`Error updating wrangler.toml: ${error.message}`, colors.red);
195
+ process.exit(1);
196
+ }
197
+
198
+ // Reset local database by removing it
199
+ log('\nResetting local database...', colors.yellow);
200
+ const localDbPath = join(projectDir, '.wrangler', 'state', 'v3', 'd1');
201
+ if (existsSync(localDbPath)) {
202
+ try {
203
+ rmSync(localDbPath, { recursive: true, force: true });
204
+ log('Local database cleared.', colors.green);
205
+ } catch (error) {
206
+ log(`Warning: Could not clear local database: ${error.message}`, colors.yellow);
207
+ }
208
+ } else {
209
+ log('No local database to clear.', colors.green);
210
+ }
211
+
212
+ // Run migrations on remote
213
+ log('\nRunning migrations on remote database...', colors.cyan);
214
+ try {
215
+ execCommand(`npx wrangler d1 migrations apply "${dbName}" --remote`);
216
+ } catch (error) {
217
+ log(`Warning: Remote migrations may have failed: ${error.message}`, colors.yellow);
218
+ }
219
+
220
+ // Run migrations on local
221
+ log('\nRunning migrations on local database...', colors.cyan);
222
+ try {
223
+ execCommand(`npx wrangler d1 migrations apply "${dbName}" --local`);
224
+ } catch (error) {
225
+ log(`Warning: Local migrations may have failed: ${error.message}`, colors.yellow);
226
+ }
227
+
228
+ log('\n==========================================', colors.green + colors.bold);
229
+ log('Database setup complete!', colors.green + colors.bold);
230
+ log(`Database name: ${dbName}`, colors.green);
231
+ log(`Database ID: ${dbId}`, colors.green);
232
+ log('Both remote and local databases are ready.', colors.green);
233
+ log('==========================================\n', colors.green + colors.bold);
234
+ log('You can now run: npm run dev', colors.cyan);
235
+ }
236
+
237
+ main().catch((error) => {
238
+ log(`\nError: ${error.message}`, colors.red);
239
+ process.exit(1);
240
+ });
@@ -203,6 +203,98 @@ INSERT OR IGNORE INTO content (
203
203
  strftime('%s', 'now') * 1000,
204
204
  strftime('%s', 'now') * 1000
205
205
  );`
206
+ },
207
+ {
208
+ id: "002",
209
+ name: "Faq Plugin",
210
+ filename: "002_faq_plugin.sql",
211
+ description: "Migration 002: Faq Plugin",
212
+ sql: `-- FAQ Plugin Migration (DEPRECATED - Now managed by third-party plugin)
213
+ -- Creates FAQ table for the FAQ plugin
214
+ -- NOTE: This migration is kept for historical purposes.
215
+ -- The FAQ functionality is now provided by the faq-plugin third-party plugin.
216
+
217
+ CREATE TABLE IF NOT EXISTS faqs (
218
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
219
+ question TEXT NOT NULL,
220
+ answer TEXT NOT NULL,
221
+ category TEXT,
222
+ tags TEXT,
223
+ isPublished INTEGER NOT NULL DEFAULT 1,
224
+ sortOrder INTEGER NOT NULL DEFAULT 0,
225
+ created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
226
+ updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
227
+ );
228
+
229
+ -- Create indexes for better performance
230
+ CREATE INDEX IF NOT EXISTS idx_faqs_category ON faqs(category);
231
+ CREATE INDEX IF NOT EXISTS idx_faqs_published ON faqs(isPublished);
232
+ CREATE INDEX IF NOT EXISTS idx_faqs_sort_order ON faqs(sortOrder);
233
+
234
+ -- Create trigger to update updated_at timestamp
235
+ CREATE TRIGGER IF NOT EXISTS faqs_updated_at
236
+ AFTER UPDATE ON faqs
237
+ BEGIN
238
+ UPDATE faqs SET updated_at = strftime('%s', 'now') WHERE id = NEW.id;
239
+ END;
240
+
241
+ -- Insert sample FAQ data
242
+ INSERT OR IGNORE INTO faqs (question, answer, category, tags, isPublished, sortOrder) VALUES
243
+ ('What is SonicJS AI?',
244
+ 'SonicJS AI is a modern, TypeScript-first headless CMS built for Cloudflare''s edge platform. It provides a complete content management system with admin interface, API endpoints, and plugin architecture.',
245
+ 'general',
246
+ 'sonicjs, cms, cloudflare',
247
+ 1,
248
+ 1),
249
+
250
+ ('How do I get started with SonicJS AI?',
251
+ 'To get started: 1) Clone the repository, 2) Install dependencies with npm install, 3) Set up your Cloudflare account and services, 4) Run the development server with npm run dev, 5) Access the admin interface at /admin.',
252
+ 'general',
253
+ 'getting-started, setup',
254
+ 1,
255
+ 2),
256
+
257
+ ('What technologies does SonicJS AI use?',
258
+ 'SonicJS AI is built with: TypeScript for type safety, Hono.js as the web framework, Cloudflare D1 for the database, Cloudflare R2 for media storage, Cloudflare Workers for serverless execution, and Tailwind CSS for styling.',
259
+ 'technical',
260
+ 'technology-stack, typescript, cloudflare',
261
+ 1,
262
+ 3),
263
+
264
+ ('How do I create content in SonicJS AI?',
265
+ 'Content creation is done through the admin interface. Navigate to /admin, log in with your credentials, go to Content section, select a collection, and click "New Content" to create articles, pages, or other content types.',
266
+ 'general',
267
+ 'content-creation, admin',
268
+ 1,
269
+ 4),
270
+
271
+ ('Is SonicJS AI free to use?',
272
+ 'SonicJS AI is open source and free to use. You only pay for the Cloudflare services you consume (D1 database, R2 storage, Workers execution time). Cloudflare offers generous free tiers for development and small projects.',
273
+ 'billing',
274
+ 'pricing, open-source, cloudflare',
275
+ 1,
276
+ 5),
277
+
278
+ ('How do I add custom functionality?',
279
+ 'SonicJS AI features a plugin system that allows you to extend functionality. You can create plugins using the PluginBuilder API, add custom routes, models, admin pages, and integrate with external services.',
280
+ 'technical',
281
+ 'plugins, customization, development',
282
+ 1,
283
+ 6),
284
+
285
+ ('Can I customize the admin interface?',
286
+ 'Yes! The admin interface is built with TypeScript templates and can be customized. You can modify existing templates, create new components, add custom pages, and integrate your own styling while maintaining the dark theme.',
287
+ 'technical',
288
+ 'admin-interface, customization, templates',
289
+ 1,
290
+ 7),
291
+
292
+ ('How does authentication work?',
293
+ 'SonicJS AI includes a built-in authentication system with JWT tokens, role-based access control (admin, editor, viewer), secure password hashing, and session management. Users can be managed through the admin interface.',
294
+ 'technical',
295
+ 'authentication, security, users',
296
+ 1,
297
+ 8);`
206
298
  },
207
299
  {
208
300
  id: "003",
@@ -640,6 +732,190 @@ INSERT OR IGNORE INTO testimonials (author_name, author_title, author_company, t
640
732
  4,
641
733
  1,
642
734
  5);
735
+ `
736
+ },
737
+ {
738
+ id: "013",
739
+ name: "Code Examples Plugin",
740
+ filename: "013_code_examples_plugin.sql",
741
+ description: "Migration 013: Code Examples Plugin",
742
+ sql: `-- Code Examples Plugin Migration
743
+ -- Creates code_examples table for the code examples plugin
744
+ -- This demonstrates a code-based collection for storing and managing code snippets
745
+
746
+ CREATE TABLE IF NOT EXISTS code_examples (
747
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
748
+ title TEXT NOT NULL,
749
+ description TEXT,
750
+ code TEXT NOT NULL,
751
+ language TEXT NOT NULL,
752
+ category TEXT,
753
+ tags TEXT,
754
+ isPublished INTEGER NOT NULL DEFAULT 1,
755
+ sortOrder INTEGER NOT NULL DEFAULT 0,
756
+ created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
757
+ updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
758
+ );
759
+
760
+ -- Create indexes for better performance
761
+ CREATE INDEX IF NOT EXISTS idx_code_examples_published ON code_examples(isPublished);
762
+ CREATE INDEX IF NOT EXISTS idx_code_examples_sort_order ON code_examples(sortOrder);
763
+ CREATE INDEX IF NOT EXISTS idx_code_examples_language ON code_examples(language);
764
+ CREATE INDEX IF NOT EXISTS idx_code_examples_category ON code_examples(category);
765
+
766
+ -- Create trigger to update updated_at timestamp
767
+ CREATE TRIGGER IF NOT EXISTS code_examples_updated_at
768
+ AFTER UPDATE ON code_examples
769
+ BEGIN
770
+ UPDATE code_examples SET updated_at = strftime('%s', 'now') WHERE id = NEW.id;
771
+ END;
772
+
773
+ -- Insert plugin record
774
+ INSERT OR IGNORE INTO plugins (name, display_name, description, version, status, category, settings) VALUES
775
+ ('code-examples',
776
+ 'Code Examples',
777
+ 'Manage code snippets and examples with syntax highlighting support. Perfect for documentation and tutorials.',
778
+ '1.0.0',
779
+ 'active',
780
+ 'content',
781
+ '{"defaultPublished": true, "supportedLanguages": ["javascript", "typescript", "python", "go", "rust", "java", "php", "ruby", "sql"]}');
782
+
783
+ -- Insert sample code examples
784
+ INSERT OR IGNORE INTO code_examples (title, description, code, language, category, tags, isPublished, sortOrder) VALUES
785
+ ('React useState Hook',
786
+ 'Basic example of using the useState hook in React for managing component state.',
787
+ 'import { useState } from ''react'';
788
+
789
+ function Counter() {
790
+ const [count, setCount] = useState(0);
791
+
792
+ return (
793
+ <div>
794
+ <p>Count: {count}</p>
795
+ <button onClick={() => setCount(count + 1)}>
796
+ Increment
797
+ </button>
798
+ </div>
799
+ );
800
+ }
801
+
802
+ export default Counter;',
803
+ 'javascript',
804
+ 'frontend',
805
+ 'react,hooks,state',
806
+ 1,
807
+ 1),
808
+
809
+ ('TypeScript Interface Example',
810
+ 'Defining a TypeScript interface for type-safe objects.',
811
+ 'interface User {
812
+ id: string;
813
+ email: string;
814
+ name: string;
815
+ role: ''admin'' | ''editor'' | ''viewer'';
816
+ createdAt: Date;
817
+ }
818
+
819
+ function greetUser(user: User): string {
820
+ return \`Hello, \${user.name}!\`;
821
+ }
822
+
823
+ const user: User = {
824
+ id: ''123'',
825
+ email: ''user@example.com'',
826
+ name: ''John Doe'',
827
+ role: ''admin'',
828
+ createdAt: new Date()
829
+ };
830
+
831
+ console.log(greetUser(user));',
832
+ 'typescript',
833
+ 'backend',
834
+ 'typescript,types,interface',
835
+ 1,
836
+ 2),
837
+
838
+ ('Python List Comprehension',
839
+ 'Elegant way to create lists in Python using list comprehensions.',
840
+ '# Basic list comprehension
841
+ squares = [x**2 for x in range(10)]
842
+ print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
843
+
844
+ # With condition
845
+ even_squares = [x**2 for x in range(10) if x % 2 == 0]
846
+ print(even_squares) # [0, 4, 16, 36, 64]
847
+
848
+ # Nested list comprehension
849
+ matrix = [[i+j for j in range(3)] for i in range(3)]
850
+ print(matrix) # [[0, 1, 2], [1, 2, 3], [2, 3, 4]]',
851
+ 'python',
852
+ 'general',
853
+ 'python,lists,comprehension',
854
+ 1,
855
+ 3),
856
+
857
+ ('SQL Join Example',
858
+ 'Common SQL JOIN patterns for combining data from multiple tables.',
859
+ '-- INNER JOIN: Returns only matching rows
860
+ SELECT users.name, orders.total
861
+ FROM users
862
+ INNER JOIN orders ON users.id = orders.user_id;
863
+
864
+ -- LEFT JOIN: Returns all users, even without orders
865
+ SELECT users.name, orders.total
866
+ FROM users
867
+ LEFT JOIN orders ON users.id = orders.user_id;
868
+
869
+ -- Multiple JOINs
870
+ SELECT
871
+ users.name,
872
+ orders.order_date,
873
+ products.name AS product_name
874
+ FROM users
875
+ INNER JOIN orders ON users.id = orders.user_id
876
+ INNER JOIN order_items ON orders.id = order_items.order_id
877
+ INNER JOIN products ON order_items.product_id = products.id;',
878
+ 'sql',
879
+ 'database',
880
+ 'sql,joins,queries',
881
+ 1,
882
+ 4),
883
+
884
+ ('Go Error Handling',
885
+ 'Idiomatic error handling pattern in Go.',
886
+ 'package main
887
+
888
+ import (
889
+ "errors"
890
+ "fmt"
891
+ )
892
+
893
+ func divide(a, b float64) (float64, error) {
894
+ if b == 0 {
895
+ return 0, errors.New("division by zero")
896
+ }
897
+ return a / b, nil
898
+ }
899
+
900
+ func main() {
901
+ result, err := divide(10, 2)
902
+ if err != nil {
903
+ fmt.Println("Error:", err)
904
+ return
905
+ }
906
+ fmt.Printf("Result: %.2f\\n", result)
907
+
908
+ // This will error
909
+ _, err = divide(10, 0)
910
+ if err != nil {
911
+ fmt.Println("Error:", err)
912
+ }
913
+ }',
914
+ 'go',
915
+ 'backend',
916
+ 'go,error-handling,functions',
917
+ 1,
918
+ 5);
643
919
  `
644
920
  },
645
921
  {
@@ -1546,5 +1822,5 @@ var MigrationService = class {
1546
1822
  };
1547
1823
 
1548
1824
  export { MigrationService };
1549
- //# sourceMappingURL=chunk-CAMM3MJV.js.map
1550
- //# sourceMappingURL=chunk-CAMM3MJV.js.map
1825
+ //# sourceMappingURL=chunk-3FYCRI7Q.js.map
1826
+ //# sourceMappingURL=chunk-3FYCRI7Q.js.map