@craft-ng/dev-tools 0.5.0-beta.4 → 0.5.1-beta.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.
Files changed (67) hide show
  1. package/README.md +132 -23
  2. package/package.json +6 -2
  3. package/src/bin/craft-migrate-primitives.d.ts +2 -0
  4. package/src/bin/craft-migrate-primitives.js +71 -0
  5. package/src/bin/craft-migrate-primitives.js.map +1 -0
  6. package/src/bin/craft-migrate-routes.d.ts +2 -0
  7. package/src/bin/craft-migrate-routes.js +77 -0
  8. package/src/bin/craft-migrate-routes.js.map +1 -0
  9. package/src/bin/craft-migrate-services.d.ts +2 -0
  10. package/src/bin/craft-migrate-services.js +75 -0
  11. package/src/bin/craft-migrate-services.js.map +1 -0
  12. package/src/bin/craft-migrate.d.ts +2 -0
  13. package/src/bin/craft-migrate.js +90 -0
  14. package/src/bin/craft-migrate.js.map +1 -0
  15. package/src/eslint-rules/global-exception-registry-match.cjs +4 -4
  16. package/src/eslint-rules/index.cjs +6 -0
  17. package/src/eslint-rules/require-craft-exception-handler.cjs +142 -0
  18. package/src/eslint-rules/require-exception-component-di-check.cjs +314 -0
  19. package/src/eslint-rules/require-lazy-load-with-retry.cjs +148 -0
  20. package/src/eslint-rules/require-pending-component-di-check.cjs +3 -3
  21. package/src/index.d.ts +8 -0
  22. package/src/index.js +8 -0
  23. package/src/index.js.map +1 -1
  24. package/src/scripts/angular-brand-codemod.d.ts +17 -0
  25. package/src/scripts/angular-brand-codemod.js +44 -8
  26. package/src/scripts/angular-brand-codemod.js.map +1 -1
  27. package/src/scripts/angular-brand-codemod.spec.ts +3 -3
  28. package/src/scripts/angular-brand-codemod.ts +78 -7
  29. package/src/scripts/migrate.d.ts +32 -0
  30. package/src/scripts/migrate.js +67 -0
  31. package/src/scripts/migrate.js.map +1 -0
  32. package/src/scripts/migrate.ts +128 -0
  33. package/src/scripts/migration-workspace.d.ts +2 -0
  34. package/src/scripts/migration-workspace.js +72 -0
  35. package/src/scripts/migration-workspace.js.map +1 -0
  36. package/src/scripts/migration-workspace.ts +93 -0
  37. package/src/scripts/primitives/migrate-primitives.d.ts +27 -0
  38. package/src/scripts/primitives/migrate-primitives.js +354 -0
  39. package/src/scripts/primitives/migrate-primitives.js.map +1 -0
  40. package/src/scripts/primitives/migrate-primitives.spec.ts +279 -0
  41. package/src/scripts/primitives/migrate-primitives.ts +543 -0
  42. package/src/scripts/primitives/migration-diagnostic.d.ts +8 -0
  43. package/src/scripts/primitives/migration-diagnostic.js +2 -0
  44. package/src/scripts/primitives/migration-diagnostic.js.map +1 -0
  45. package/src/scripts/primitives/migration-diagnostic.ts +13 -0
  46. package/src/scripts/routes/migrate-routes.d.ts +34 -0
  47. package/src/scripts/routes/migrate-routes.js +669 -0
  48. package/src/scripts/routes/migrate-routes.js.map +1 -0
  49. package/src/scripts/routes/migrate-routes.spec.ts +264 -0
  50. package/src/scripts/routes/migrate-routes.ts +897 -0
  51. package/src/scripts/routes/migration-diagnostic.d.ts +16 -0
  52. package/src/scripts/routes/migration-diagnostic.js +2 -0
  53. package/src/scripts/routes/migration-diagnostic.js.map +1 -0
  54. package/src/scripts/routes/migration-diagnostic.ts +25 -0
  55. package/src/scripts/services/config.d.ts +2 -0
  56. package/src/scripts/services/config.js +39 -0
  57. package/src/scripts/services/config.js.map +1 -0
  58. package/src/scripts/services/config.ts +60 -0
  59. package/src/scripts/services/migrate-services.d.ts +29 -0
  60. package/src/scripts/services/migrate-services.js +895 -0
  61. package/src/scripts/services/migrate-services.js.map +1 -0
  62. package/src/scripts/services/migrate-services.spec.ts +719 -0
  63. package/src/scripts/services/migrate-services.ts +1282 -0
  64. package/src/scripts/services/migration-diagnostic.d.ts +8 -0
  65. package/src/scripts/services/migration-diagnostic.js +2 -0
  66. package/src/scripts/services/migration-diagnostic.js.map +1 -0
  67. package/src/scripts/services/migration-diagnostic.ts +27 -0
@@ -0,0 +1,16 @@
1
+ export type RouteMigrationDiagnosticCode = 'DYNAMIC_PATH' | 'COMPONENT_NOT_RESOLVABLE' | 'ANGULAR_GUARD_REQUIRES_REWRITE' | 'MULTIPLE_GUARDS_REQUIRE_COMPOSITION' | 'PARENT_CONTEXT_UNKNOWN' | 'DYNAMIC_REDIRECT' | 'ROUTE_SPLIT_RECOMMENDED' | 'APP_CONFIG_REQUIRES_CRAFT_ROUTES';
2
+ export type RouteMigrationDiagnostic = {
3
+ code: RouteMigrationDiagnosticCode;
4
+ filePath: string;
5
+ routePath?: string;
6
+ message: string;
7
+ };
8
+ export type RouteMigrationStatus = {
9
+ kind: 'migrated';
10
+ } | {
11
+ kind: 'preserved';
12
+ } | {
13
+ kind: 'manual';
14
+ code: RouteMigrationDiagnosticCode;
15
+ message: string;
16
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migration-diagnostic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-diagnostic.js","sourceRoot":"","sources":["../../../../../../libs/dev-tools/src/scripts/routes/migration-diagnostic.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ export type RouteMigrationDiagnosticCode =
2
+ | 'DYNAMIC_PATH'
3
+ | 'COMPONENT_NOT_RESOLVABLE'
4
+ | 'ANGULAR_GUARD_REQUIRES_REWRITE'
5
+ | 'MULTIPLE_GUARDS_REQUIRE_COMPOSITION'
6
+ | 'PARENT_CONTEXT_UNKNOWN'
7
+ | 'DYNAMIC_REDIRECT'
8
+ | 'ROUTE_SPLIT_RECOMMENDED'
9
+ | 'APP_CONFIG_REQUIRES_CRAFT_ROUTES';
10
+
11
+ export type RouteMigrationDiagnostic = {
12
+ code: RouteMigrationDiagnosticCode;
13
+ filePath: string;
14
+ routePath?: string;
15
+ message: string;
16
+ };
17
+
18
+ export type RouteMigrationStatus =
19
+ | { kind: 'migrated' }
20
+ | { kind: 'preserved' }
21
+ | {
22
+ kind: 'manual';
23
+ code: RouteMigrationDiagnosticCode;
24
+ message: string;
25
+ };
@@ -0,0 +1,2 @@
1
+ import { CraftDevToolsConfig } from '../angular-brand-codemod.js';
2
+ export declare function loadCraftDevToolsConfig(searchFromDir: string, explicitPath?: string): CraftDevToolsConfig;
@@ -0,0 +1,39 @@
1
+ import { existsSync, readFileSync, statSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { dirname, resolve } from 'node:path';
4
+ import ts from 'typescript';
5
+ import { defineAngularBrandConfig, defineCraftDevToolsConfig, discoverAngularBrandConfigFilePath, } from '../angular-brand-codemod.js';
6
+ export function loadCraftDevToolsConfig(searchFromDir, explicitPath) {
7
+ var _a;
8
+ const filePath = explicitPath
9
+ ? resolve(explicitPath)
10
+ : discoverAngularBrandConfigFilePath(searchFromDir);
11
+ if (!filePath)
12
+ return {};
13
+ if (!existsSync(filePath) || !statSync(filePath).isFile()) {
14
+ throw new Error(`Craft dev-tools config file not found at "${filePath}".`);
15
+ }
16
+ const sourceText = readFileSync(filePath, 'utf8');
17
+ const output = ts.transpileModule(sourceText, {
18
+ compilerOptions: {
19
+ module: ts.ModuleKind.CommonJS,
20
+ target: ts.ScriptTarget.ES2022,
21
+ esModuleInterop: true,
22
+ },
23
+ fileName: filePath,
24
+ }).outputText;
25
+ const module = { exports: {} };
26
+ const localRequire = createRequire(filePath);
27
+ const execute = new Function('exports', 'require', 'module', '__filename', '__dirname', output);
28
+ execute(module.exports, (specifier) => specifier === '@craft-ng/dev-tools'
29
+ ? { defineAngularBrandConfig, defineCraftDevToolsConfig }
30
+ : localRequire(specifier), module, filePath, dirname(filePath));
31
+ const exported = (_a = module.exports['default']) !== null && _a !== void 0 ? _a : module.exports;
32
+ if (!exported || typeof exported !== 'object') {
33
+ throw new Error(`Invalid Craft dev-tools config at "${filePath}".`);
34
+ }
35
+ return 'brand' in exported || 'serviceMigration' in exported
36
+ ? exported
37
+ : { brand: exported };
38
+ }
39
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../libs/dev-tools/src/scripts/services/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAEL,wBAAwB,EACxB,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,6BAA6B,CAAC;AAErC,MAAM,UAAU,uBAAuB,CACrC,aAAqB,EACrB,YAAqB;;IAErB,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QACvB,CAAC,CAAC,kCAAkC,CAAC,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE;QAC5C,eAAe,EAAE;YACf,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ;YAC9B,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;YAC9B,eAAe,EAAE,IAAI;SACtB;QACD,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC,UAAU,CAAC;IACd,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,EAA6B,EAAE,CAAC;IAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,QAAQ,CAC1B,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,MAAM,CACyB,CAAC;IAClC,OAAO,CACL,MAAM,CAAC,OAAO,EACd,CAAC,SAAiB,EAAE,EAAE,CACpB,SAAS,KAAK,qBAAqB;QACjC,CAAC,CAAC,EAAE,wBAAwB,EAAE,yBAAyB,EAAE;QACzD,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,OAAO,CAAC,QAAQ,CAAC,CAClB,CAAC;IACF,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,mCAAI,MAAM,CAAC,OAAO,CAAC;IAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,IAAI,QAAQ,IAAI,kBAAkB,IAAI,QAAQ;QAC1D,CAAC,CAAE,QAAgC;QACnC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { existsSync, readFileSync, statSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { dirname, resolve } from 'node:path';
4
+ import ts from 'typescript';
5
+ import {
6
+ CraftDevToolsConfig,
7
+ defineAngularBrandConfig,
8
+ defineCraftDevToolsConfig,
9
+ discoverAngularBrandConfigFilePath,
10
+ } from '../angular-brand-codemod.js';
11
+
12
+ export function loadCraftDevToolsConfig(
13
+ searchFromDir: string,
14
+ explicitPath?: string,
15
+ ): CraftDevToolsConfig {
16
+ const filePath = explicitPath
17
+ ? resolve(explicitPath)
18
+ : discoverAngularBrandConfigFilePath(searchFromDir);
19
+ if (!filePath) return {};
20
+ if (!existsSync(filePath) || !statSync(filePath).isFile()) {
21
+ throw new Error(`Craft dev-tools config file not found at "${filePath}".`);
22
+ }
23
+
24
+ const sourceText = readFileSync(filePath, 'utf8');
25
+ const output = ts.transpileModule(sourceText, {
26
+ compilerOptions: {
27
+ module: ts.ModuleKind.CommonJS,
28
+ target: ts.ScriptTarget.ES2022,
29
+ esModuleInterop: true,
30
+ },
31
+ fileName: filePath,
32
+ }).outputText;
33
+ const module = { exports: {} as Record<string, unknown> };
34
+ const localRequire = createRequire(filePath);
35
+ const execute = new Function(
36
+ 'exports',
37
+ 'require',
38
+ 'module',
39
+ '__filename',
40
+ '__dirname',
41
+ output,
42
+ ) as (...args: unknown[]) => void;
43
+ execute(
44
+ module.exports,
45
+ (specifier: string) =>
46
+ specifier === '@craft-ng/dev-tools'
47
+ ? { defineAngularBrandConfig, defineCraftDevToolsConfig }
48
+ : localRequire(specifier),
49
+ module,
50
+ filePath,
51
+ dirname(filePath),
52
+ );
53
+ const exported = module.exports['default'] ?? module.exports;
54
+ if (!exported || typeof exported !== 'object') {
55
+ throw new Error(`Invalid Craft dev-tools config at "${filePath}".`);
56
+ }
57
+ return 'brand' in exported || 'serviceMigration' in exported
58
+ ? (exported as CraftDevToolsConfig)
59
+ : { brand: exported };
60
+ }
@@ -0,0 +1,29 @@
1
+ import type { ServiceMigrationDiagnostic } from './migration-diagnostic.js';
2
+ export type MigrateServicesOptions = {
3
+ rootDir?: string;
4
+ tsConfigFilePath?: string;
5
+ configFilePath?: string;
6
+ files?: readonly string[];
7
+ write?: boolean;
8
+ check?: boolean;
9
+ json?: boolean;
10
+ jsonFilePath?: string;
11
+ failOnManual?: boolean;
12
+ eslint?: boolean;
13
+ log?: (message: string) => void;
14
+ };
15
+ export type MigratedServiceFile = {
16
+ filePath: string;
17
+ changed: boolean;
18
+ symbols: string[];
19
+ companions: string[];
20
+ };
21
+ export type MigrateServicesResult = {
22
+ changedFiles: string[];
23
+ files: MigratedServiceFile[];
24
+ diagnostics: ServiceMigrationDiagnostic[];
25
+ remainingLegacyServices: number;
26
+ eslintRan: boolean;
27
+ exitCode: number;
28
+ };
29
+ export declare function runServicesMigration(options?: MigrateServicesOptions): Promise<MigrateServicesResult>;