@ethlete/core 4.30.0 → 5.0.0-next.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.
@@ -0,0 +1,14 @@
1
+ {
2
+ "generators": {
3
+ "migrate-to-v5": {
4
+ "factory": "./migrate-to-v5/migration",
5
+ "schema": "./migrate-to-v5/schema.json",
6
+ "description": "Migrate to v5"
7
+ },
8
+ "tailwind-4-theme": {
9
+ "factory": "./tailwind-4-theme/generator",
10
+ "schema": "./tailwind-4-theme/schema.json",
11
+ "description": "Generate theming for Tailwind CSS v4"
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,158 @@
1
+ import { logger } from '@nx/devkit';
2
+ import * as ts from 'typescript';
3
+ export default async function migrateCreateProvider(tree) {
4
+ logger.log('\nšŸ”„ Migrating createProvider imports from @ethlete/cdk to @ethlete/core...\n');
5
+ const tsFiles = [];
6
+ // Recursively find all TypeScript files
7
+ function findTsFiles(dir) {
8
+ const children = tree.children(dir);
9
+ for (const child of children) {
10
+ const path = dir === '.' ? child : `${dir}/${child}`;
11
+ if (tree.isFile(path)) {
12
+ if (path.endsWith('.ts') && !path.includes('node_modules') && !path.endsWith('.spec.ts')) {
13
+ tsFiles.push(path);
14
+ }
15
+ }
16
+ else {
17
+ findTsFiles(path);
18
+ }
19
+ }
20
+ }
21
+ findTsFiles('.');
22
+ let filesModified = 0;
23
+ for (const filePath of tsFiles) {
24
+ const wasModified = migrateCreateProviderInFile(tree, filePath);
25
+ if (wasModified) {
26
+ filesModified++;
27
+ logger.log(` āœ“ ${filePath}`);
28
+ }
29
+ }
30
+ if (filesModified > 0) {
31
+ logger.log(`\nāœ… Successfully migrated createProvider in ${filesModified} file(s)\n`);
32
+ }
33
+ else {
34
+ logger.log('\nā„¹ļø No files needed migration\n');
35
+ }
36
+ }
37
+ function migrateCreateProviderInFile(tree, filePath) {
38
+ const content = tree.read(filePath, 'utf-8');
39
+ if (!content || !content.includes('createProvider'))
40
+ return false;
41
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
42
+ let cdkImport;
43
+ let coreImport;
44
+ let hasCreateProviderInCdk = false;
45
+ // Find relevant imports
46
+ for (const statement of sourceFile.statements) {
47
+ if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {
48
+ const modulePath = statement.moduleSpecifier.text;
49
+ if (modulePath === '@ethlete/cdk') {
50
+ cdkImport = statement;
51
+ if (statement.importClause?.namedBindings && ts.isNamedImports(statement.importClause.namedBindings)) {
52
+ hasCreateProviderInCdk = statement.importClause.namedBindings.elements.some((element) => element.name.text === 'createProvider');
53
+ }
54
+ }
55
+ else if (modulePath === '@ethlete/core') {
56
+ coreImport = statement;
57
+ }
58
+ }
59
+ }
60
+ // If createProvider is not imported from @ethlete/cdk, nothing to do
61
+ if (!hasCreateProviderInCdk)
62
+ return false;
63
+ let updatedContent = content;
64
+ // Remove createProvider from @ethlete/cdk import
65
+ if (cdkImport && cdkImport.importClause?.namedBindings && ts.isNamedImports(cdkImport.importClause.namedBindings)) {
66
+ const namedBindings = cdkImport.importClause.namedBindings;
67
+ const otherImports = namedBindings.elements.filter((element) => element.name.text !== 'createProvider');
68
+ const importStart = cdkImport.getStart(sourceFile);
69
+ const importEnd = cdkImport.getEnd();
70
+ if (otherImports.length === 0) {
71
+ // Remove entire import line including newline
72
+ let lineStart = importStart;
73
+ while (lineStart > 0 && content[lineStart - 1] !== '\n') {
74
+ lineStart--;
75
+ }
76
+ let lineEnd = importEnd;
77
+ while (lineEnd < content.length && content[lineEnd] !== '\n') {
78
+ lineEnd++;
79
+ }
80
+ if (content[lineEnd] === '\n') {
81
+ lineEnd++;
82
+ }
83
+ updatedContent = content.slice(0, lineStart) + content.slice(lineEnd);
84
+ }
85
+ else {
86
+ // Keep other imports
87
+ const newImports = otherImports.map((el) => el.name.text).join(', ');
88
+ const newImportText = `import { ${newImports} } from '@ethlete/cdk';`;
89
+ updatedContent = content.slice(0, importStart) + newImportText + content.slice(importEnd);
90
+ }
91
+ }
92
+ // Re-parse after first modification
93
+ const intermediateSourceFile = ts.createSourceFile(filePath, updatedContent, ts.ScriptTarget.Latest, true);
94
+ // Find @ethlete/core import in the updated content
95
+ let updatedCoreImport;
96
+ for (const statement of intermediateSourceFile.statements) {
97
+ if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {
98
+ if (statement.moduleSpecifier.text === '@ethlete/core') {
99
+ updatedCoreImport = statement;
100
+ break;
101
+ }
102
+ }
103
+ }
104
+ // Add createProvider to @ethlete/core import
105
+ if (updatedCoreImport?.importClause?.namedBindings &&
106
+ ts.isNamedImports(updatedCoreImport.importClause.namedBindings)) {
107
+ const namedBindings = updatedCoreImport.importClause.namedBindings;
108
+ // Check if createProvider already exists
109
+ const hasCreateProvider = namedBindings.elements.some((element) => element.name.text === 'createProvider');
110
+ if (!hasCreateProvider) {
111
+ const importStart = updatedCoreImport.getStart(intermediateSourceFile);
112
+ const importEnd = updatedCoreImport.getEnd();
113
+ const existingImports = namedBindings.elements.map((el) => el.name.text);
114
+ const allImports = [...existingImports, 'createProvider'].sort();
115
+ const newImportText = `import { ${allImports.join(', ')} } from '@ethlete/core';`;
116
+ updatedContent = updatedContent.slice(0, importStart) + newImportText + updatedContent.slice(importEnd);
117
+ }
118
+ }
119
+ else {
120
+ // Add new import from @ethlete/core at the top
121
+ const firstImportIndex = updatedContent.indexOf('import');
122
+ if (firstImportIndex !== -1) {
123
+ // Add after other imports
124
+ let insertPosition;
125
+ let lastImportEnd = firstImportIndex;
126
+ for (const statement of intermediateSourceFile.statements) {
127
+ if (ts.isImportDeclaration(statement)) {
128
+ lastImportEnd = statement.getEnd();
129
+ }
130
+ else {
131
+ break;
132
+ }
133
+ }
134
+ insertPosition = lastImportEnd;
135
+ // Find end of line
136
+ while (insertPosition < updatedContent.length && updatedContent[insertPosition] !== '\n') {
137
+ insertPosition++;
138
+ }
139
+ if (updatedContent[insertPosition] === '\n') {
140
+ insertPosition++;
141
+ }
142
+ updatedContent =
143
+ updatedContent.slice(0, insertPosition) +
144
+ "import { createProvider } from '@ethlete/core';\n" +
145
+ updatedContent.slice(insertPosition);
146
+ }
147
+ else {
148
+ // No imports, add at the beginning
149
+ updatedContent = "import { createProvider } from '@ethlete/core';\n\n" + updatedContent;
150
+ }
151
+ }
152
+ if (updatedContent !== content) {
153
+ tree.write(filePath, updatedContent);
154
+ return true;
155
+ }
156
+ return false;
157
+ }
158
+ //# sourceMappingURL=create-provider.js.map
@@ -0,0 +1,28 @@
1
+ import { formatFiles } from '@nx/devkit';
2
+ import migrateCreateProvider from './create-provider.js';
3
+ import migrateRouterStateService from './router-state-service.js';
4
+ import migrateViewportService from './viewport-service.js';
5
+ export default async function migrate(tree, schema) {
6
+ console.log('\nšŸ”„ Starting core v5 migration...');
7
+ const shouldMigrateViewportService = schema.migrateViewportService !== false;
8
+ const shouldMigrateCreateProvider = schema.migrateCreateProvider !== false;
9
+ const shouldMigrateRouterStateService = schema.migrateRouterStateService !== false;
10
+ if (shouldMigrateViewportService) {
11
+ console.log(' • Migrating viewport service...');
12
+ await migrateViewportService(tree);
13
+ }
14
+ if (shouldMigrateCreateProvider) {
15
+ console.log(' • Migrating create provider...');
16
+ await migrateCreateProvider(tree);
17
+ }
18
+ if (shouldMigrateRouterStateService) {
19
+ await migrateRouterStateService(tree);
20
+ }
21
+ if (!schema.skipFormat) {
22
+ console.log(' • Formatting files...');
23
+ await formatFiles(tree);
24
+ }
25
+ console.log('\nāœ… Migration completed successfully!');
26
+ }
27
+ //#endregion
28
+ //# sourceMappingURL=migration.js.map