kea-typegen 3.6.0 → 3.6.2-leakfix

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 (99) hide show
  1. package/.github/workflows/ci.yml +20 -0
  2. package/CHANGELOG.md +8 -0
  3. package/dist/package.json +4 -4
  4. package/dist/src/__tests__/watch.d.ts +1 -0
  5. package/dist/src/__tests__/watch.js +32 -0
  6. package/dist/src/__tests__/watch.js.map +1 -0
  7. package/dist/src/cache.js +3 -4
  8. package/dist/src/cache.js.map +1 -1
  9. package/dist/src/print/print.js +5 -6
  10. package/dist/src/print/print.js.map +1 -1
  11. package/dist/src/print/printActionCreators.js +1 -2
  12. package/dist/src/print/printActionCreators.js.map +1 -1
  13. package/dist/src/print/printActionKeys.js +1 -2
  14. package/dist/src/print/printActionKeys.js.map +1 -1
  15. package/dist/src/print/printActionTypes.js +1 -2
  16. package/dist/src/print/printActionTypes.js.map +1 -1
  17. package/dist/src/print/printActions.js +1 -2
  18. package/dist/src/print/printActions.js.map +1 -1
  19. package/dist/src/print/printAsyncActions.js +1 -2
  20. package/dist/src/print/printAsyncActions.js.map +1 -1
  21. package/dist/src/print/printDefaults.js +1 -2
  22. package/dist/src/print/printDefaults.js.map +1 -1
  23. package/dist/src/print/printEvents.js +1 -2
  24. package/dist/src/print/printEvents.js.map +1 -1
  25. package/dist/src/print/printInternalExtraInput.js +1 -2
  26. package/dist/src/print/printInternalExtraInput.js.map +1 -1
  27. package/dist/src/print/printInternalReducerActions.js +1 -2
  28. package/dist/src/print/printInternalReducerActions.js.map +1 -1
  29. package/dist/src/print/printInternalSelectorTypes.js +1 -2
  30. package/dist/src/print/printInternalSelectorTypes.js.map +1 -1
  31. package/dist/src/print/printKey.js +1 -2
  32. package/dist/src/print/printKey.js.map +1 -1
  33. package/dist/src/print/printListeners.js +1 -2
  34. package/dist/src/print/printListeners.js.map +1 -1
  35. package/dist/src/print/printProps.js +1 -2
  36. package/dist/src/print/printProps.js.map +1 -1
  37. package/dist/src/print/printReducer.js +1 -2
  38. package/dist/src/print/printReducer.js.map +1 -1
  39. package/dist/src/print/printReducers.js +1 -2
  40. package/dist/src/print/printReducers.js.map +1 -1
  41. package/dist/src/print/printSelector.js +1 -2
  42. package/dist/src/print/printSelector.js.map +1 -1
  43. package/dist/src/print/printSelectors.js +1 -2
  44. package/dist/src/print/printSelectors.js.map +1 -1
  45. package/dist/src/print/printSharedListeners.js +1 -2
  46. package/dist/src/print/printSharedListeners.js.map +1 -1
  47. package/dist/src/print/printValues.js +1 -2
  48. package/dist/src/print/printValues.js.map +1 -1
  49. package/dist/src/typegen.js +33 -10
  50. package/dist/src/typegen.js.map +1 -1
  51. package/dist/src/utils.js +20 -20
  52. package/dist/src/utils.js.map +1 -1
  53. package/dist/src/visit/visit.js +3 -4
  54. package/dist/src/visit/visit.js.map +1 -1
  55. package/dist/src/visit/visitActions.js +1 -2
  56. package/dist/src/visit/visitActions.js.map +1 -1
  57. package/dist/src/visit/visitConnect.js +1 -2
  58. package/dist/src/visit/visitConnect.js.map +1 -1
  59. package/dist/src/visit/visitDefaults.js +1 -2
  60. package/dist/src/visit/visitDefaults.js.map +1 -1
  61. package/dist/src/visit/visitEvents.js +1 -2
  62. package/dist/src/visit/visitEvents.js.map +1 -1
  63. package/dist/src/visit/visitKey.js +1 -2
  64. package/dist/src/visit/visitKey.js.map +1 -1
  65. package/dist/src/visit/visitListeners.js +1 -2
  66. package/dist/src/visit/visitListeners.js.map +1 -1
  67. package/dist/src/visit/visitLoaders.js +1 -2
  68. package/dist/src/visit/visitLoaders.js.map +1 -1
  69. package/dist/src/visit/visitPath.js +1 -2
  70. package/dist/src/visit/visitPath.js.map +1 -1
  71. package/dist/src/visit/visitProps.js +1 -2
  72. package/dist/src/visit/visitProps.js.map +1 -1
  73. package/dist/src/visit/visitReducers.js +1 -2
  74. package/dist/src/visit/visitReducers.js.map +1 -1
  75. package/dist/src/visit/visitSelectors.js +1 -2
  76. package/dist/src/visit/visitSelectors.js.map +1 -1
  77. package/dist/src/visit/visitSharedListeners.js +1 -2
  78. package/dist/src/visit/visitSharedListeners.js.map +1 -1
  79. package/dist/src/visit/visitWindowValues.js +1 -2
  80. package/dist/src/visit/visitWindowValues.js.map +1 -1
  81. package/dist/src/write/convertToBuilders.js +1 -2
  82. package/dist/src/write/convertToBuilders.js.map +1 -1
  83. package/dist/src/write/utils.js +5 -5
  84. package/dist/src/write/utils.js.map +1 -1
  85. package/dist/src/write/writePaths.js +1 -2
  86. package/dist/src/write/writePaths.js.map +1 -1
  87. package/dist/src/write/writeTypeImports.js +1 -2
  88. package/dist/src/write/writeTypeImports.js.map +1 -1
  89. package/dist/tsconfig.tsbuildinfo +1 -1
  90. package/form-plugin/lib/src/types.d.ts +1 -0
  91. package/form-plugin/yarn.lock +7 -7
  92. package/package.json +4 -4
  93. package/samples/complexLogicType.ts +10 -7
  94. package/samples/tsconfig.json +1 -1
  95. package/src/__tests__/watch.ts +44 -0
  96. package/src/test-support/watch-mode-smoke.js +140 -0
  97. package/src/typegen.ts +37 -9
  98. package/src/write/convertToBuilders.ts +2 -2
  99. package/tsconfig.json +6 -2
package/src/typegen.ts CHANGED
@@ -42,7 +42,9 @@ export async function runTypeGen(appOptions: AppOptions) {
42
42
  const compilerOptions = ts.parseJsonSourceFileConfigFileContent(configFile, ts.sys, rootFolder)
43
43
 
44
44
  if (appOptions.watch) {
45
- const createProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram
45
+ // We don't emit JavaScript files in typegen watch mode, so the semantic-only
46
+ // builder is enough and avoids extra emit-related work on every rebuild.
47
+ const createProgram = ts.createSemanticDiagnosticsBuilderProgram
46
48
 
47
49
  const host = ts.createWatchCompilerHost(
48
50
  appOptions.tsConfigPath,
@@ -83,17 +85,43 @@ export async function runTypeGen(appOptions: AppOptions) {
83
85
  console.info(codes[diagnostic.code] || `🥚 ${ts.formatDiagnostic(diagnostic, formatHost).trim()}`)
84
86
  }
85
87
 
86
- const origCreateProgram = host.createProgram
87
- host.createProgram = (rootNames: ReadonlyArray<string>, options, host, oldProgram) => {
88
- return origCreateProgram(rootNames, options, host, oldProgram)
89
- }
90
88
  const origPostProgramCreate = host.afterProgramCreate
89
+ let scheduledProgram: Program | undefined
90
+ let runningTypegen = false
91
91
 
92
- host.afterProgramCreate = async (prog) => {
93
- program = prog.getProgram()
94
- origPostProgramCreate!(prog)
92
+ const runScheduledTypegen = async () => {
93
+ if (runningTypegen) {
94
+ return
95
+ }
95
96
 
96
- await goThroughAllTheFiles(program, appOptions)
97
+ runningTypegen = true
98
+
99
+ try {
100
+ while (scheduledProgram) {
101
+ const nextProgram = scheduledProgram
102
+ scheduledProgram = undefined
103
+
104
+ try {
105
+ await goThroughAllTheFiles(nextProgram, appOptions)
106
+ } catch (error) {
107
+ console.error('⛔ Error running kea-typegen in watch mode')
108
+ console.error(error)
109
+ }
110
+ }
111
+ } finally {
112
+ runningTypegen = false
113
+
114
+ if (scheduledProgram) {
115
+ void runScheduledTypegen()
116
+ }
117
+ }
118
+ }
119
+
120
+ host.afterProgramCreate = (prog) => {
121
+ program = prog.getProgram()
122
+ origPostProgramCreate?.(prog)
123
+ scheduledProgram = program
124
+ void runScheduledTypegen()
97
125
  }
98
126
 
99
127
  ts.createWatchProgram(host)
@@ -84,7 +84,7 @@ export async function convertToBuilders(
84
84
  const renameTo =
85
85
  Array.isArray(importFromOrArray) && importFromOrArray.length > 1 ? importFromOrArray[1] : key
86
86
 
87
- newEntries.push(b.callExpression(b.identifier(renameTo), [propertiesMap[key].value]))
87
+ newEntries.push(b.callExpression(b.identifier(renameTo), [propertiesMap[key].value as any]))
88
88
  neededImports[importFrom] ??= []
89
89
  if (!neededImports[importFrom].find(([l]) => l === renameTo)) {
90
90
  neededImports[importFrom].push([renameTo, renameTo])
@@ -102,7 +102,7 @@ export async function convertToBuilders(
102
102
  }
103
103
  for (const key of unsupported) {
104
104
  if (propertiesMap[key] && t.ObjectProperty.check(propertiesMap[key])) {
105
- newEntries.push(b.callExpression(b.identifier(key), [propertiesMap[key].value]))
105
+ newEntries.push(b.callExpression(b.identifier(key), [propertiesMap[key].value as any]))
106
106
  }
107
107
  }
108
108
 
package/tsconfig.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "module": "commonjs",
4
+ "allowSyntheticDefaultImports": true,
4
5
  "declaration": true,
5
6
  "removeComments": true,
6
7
  "emitDecoratorMetadata": true,
@@ -13,7 +14,10 @@
13
14
  "types": ["jest", "node"],
14
15
  "resolveJsonModule": true
15
16
  },
16
- "exclude": ["node_modules", "dist", "samples",
17
- "form-plugin"
17
+ "exclude": [
18
+ "node_modules",
19
+ "dist",
20
+ "samples",
21
+ "form-plugin"
18
22
  ]
19
23
  }