44import { promises as fs } from "node:fs" ;
55import path from "node:path" ;
66import ts from "typescript" ;
7+ import {
8+ explicitUndefinedLegacyObjectPropertyValue ,
9+ mergeConditionalLegacyObjectPropertyValue ,
10+ mergeConditionalLiteralTexts ,
11+ mergeExhaustiveLiteralTexts ,
12+ mergeLegacyObjectPropertyValues ,
13+ mergeLegacyPathBranchAssignments ,
14+ } from "./lib/legacy-store-path-domain.mjs" ;
715import { resolveRepoRoot , runAsScript , toLine , unwrapExpression } from "./lib/ts-guard-utils.mjs" ;
816
917const databaseFirstLegacyStoreSourceRoots = [ "src" , "extensions" , "packages" ] ;
@@ -1049,42 +1057,6 @@ export function collectDatabaseFirstLegacyStoreViolations(
10491057 return element && ! ts . isSpreadElement ( element ) ? element : null ;
10501058 }
10511059
1052- function mergeConditionalLiteralTexts ( previous , next ) {
1053- if ( next . length === 0 ) {
1054- return previous ?? null ;
1055- }
1056- return [ ...new Set ( [ ...( previous ?? [ ] ) , ...next ] ) ] ;
1057- }
1058-
1059- function mergeExhaustiveLiteralTexts ( left , right ) {
1060- if ( left . length === 0 && right . length === 0 ) {
1061- return null ;
1062- }
1063- return [ ...new Set ( [ ...left , ...right ] ) ] ;
1064- }
1065-
1066- function mergeLegacyObjectPropertyValues ( left , right ) {
1067- if ( left === true || right === true ) {
1068- return true ;
1069- }
1070- if (
1071- left === explicitUndefinedLegacyObjectPropertyValue ||
1072- right === explicitUndefinedLegacyObjectPropertyValue ||
1073- left === undefined ||
1074- right === undefined
1075- ) {
1076- return explicitUndefinedLegacyObjectPropertyValue ;
1077- }
1078- return false ;
1079- }
1080-
1081- function mergeConditionalLegacyObjectPropertyValue ( previous , next ) {
1082- if ( previous === undefined && next === false ) {
1083- return null ;
1084- }
1085- return mergeLegacyObjectPropertyValues ( previous , next ) ;
1086- }
1087-
10881060 function legacyObjectPropertyRewriteValues ( objectName , initializer , existingScope ) {
10891061 const values = new Map ( ) ;
10901062 markLegacyObjectProperties ( objectName , initializer , values , null ) ;
@@ -1099,34 +1071,6 @@ export function collectDatabaseFirstLegacyStoreViolations(
10991071 return values ;
11001072 }
11011073
1102- function branchAssignmentPropertyValue ( assignment , propertyKey ) {
1103- if ( assignment . objectProperties . has ( propertyKey ) ) {
1104- return { known : true , value : assignment . objectProperties . get ( propertyKey ) } ;
1105- }
1106- if ( assignment . knownObjectLiteral ) {
1107- return { known : true , value : explicitUndefinedLegacyObjectPropertyValue } ;
1108- }
1109- return { known : false , value : null } ;
1110- }
1111-
1112- function mergeBranchLegacyObjectPropertyValue ( leftAssignment , rightAssignment , propertyKey ) {
1113- const left = branchAssignmentPropertyValue ( leftAssignment , propertyKey ) ;
1114- const right = branchAssignmentPropertyValue ( rightAssignment , propertyKey ) ;
1115- if ( ! left . known && ! right . known ) {
1116- return null ;
1117- }
1118- if ( left . value === true || right . value === true ) {
1119- return true ;
1120- }
1121- if (
1122- left . value === explicitUndefinedLegacyObjectPropertyValue ||
1123- right . value === explicitUndefinedLegacyObjectPropertyValue
1124- ) {
1125- return explicitUndefinedLegacyObjectPropertyValue ;
1126- }
1127- return left . known && right . known ? false : null ;
1128- }
1129-
11301074 function lookupLegacyObjectProperty (
11311075 objectName ,
11321076 propertyName ,
@@ -2236,9 +2180,6 @@ export function collectDatabaseFirstLegacyStoreViolations(
22362180 const unknownObjectLiteralPropertyInitializer = Symbol (
22372181 "unknown object literal property initializer" ,
22382182 ) ;
2239- const explicitUndefinedLegacyObjectPropertyValue = Symbol (
2240- "explicit undefined legacy object property value" ,
2241- ) ;
22422183 const explicitUndefinedNestedWrapperValue = Symbol ( "explicit undefined nested wrapper value" ) ;
22432184 const knownObjectLiteralNestedWrapperValue = Symbol ( "known object literal nested wrapper value" ) ;
22442185 const unknownNestedWrapperObjectValue = Symbol ( "unknown nested wrapper object value" ) ;
@@ -2634,86 +2575,44 @@ export function collectDatabaseFirstLegacyStoreViolations(
26342575 }
26352576 const { index, name } = thenAssignment ;
26362577 mergedIdentifierNames . add ( branchIdentifierAssignmentKey ( index , name ) ) ;
2637- const mergedValue = thenAssignment . value === true || elseAssignment . value === true ;
2638- const propertyKeys = new Set ( [
2639- ...thenAssignment . objectProperties . keys ( ) ,
2640- ...elseAssignment . objectProperties . keys ( ) ,
2641- ] ) ;
2642- const mergedProperties = new Map ( ) ;
2643- for ( const propertyKey of propertyKeys ) {
2644- const mergedPropertyValue = mergeBranchLegacyObjectPropertyValue (
2645- thenAssignment ,
2646- elseAssignment ,
2647- propertyKey ,
2648- ) ;
2649- if ( mergedPropertyValue !== null ) {
2650- mergedProperties . set ( propertyKey , mergedPropertyValue ) ;
2651- }
2652- }
2653- const mergedKnownObjectLiteral =
2654- thenAssignment . knownObjectLiteral && elseAssignment . knownObjectLiteral ;
2655- const mergedKnownUndefined = thenAssignment . knownUndefined || elseAssignment . knownUndefined ;
2656- const knownObjectLiteralKeys = new Set ( [
2657- ...thenAssignment . knownObjectLiterals . keys ( ) ,
2658- ...elseAssignment . knownObjectLiterals . keys ( ) ,
2659- ] ) ;
2660- const mergedKnownObjectLiterals = new Map ( ) ;
2661- for ( const knownObjectLiteralKey of knownObjectLiteralKeys ) {
2662- mergedKnownObjectLiterals . set (
2663- knownObjectLiteralKey ,
2664- thenAssignment . knownObjectLiterals . get ( knownObjectLiteralKey ) === true &&
2665- elseAssignment . knownObjectLiterals . get ( knownObjectLiteralKey ) === true ,
2666- ) ;
2667- }
2578+ const merged = mergeLegacyPathBranchAssignments ( thenAssignment , elseAssignment ) ;
26682579 if ( applyToTargetScopes ) {
26692580 const pathScope = legacyPathScopes [ index ] ;
26702581 const literalScope = literalTextScopes [ index ] ;
26712582 const knownUndefinedScope = knownUndefinedScopes [ index ] ;
26722583 const propertyScope = legacyObjectPropertyScopes [ index ] ;
26732584 const knownObjectLiteralScope = legacyKnownObjectLiteralScopes [ index ] ;
26742585 clearKnownLegacyObjectLiterals ( knownObjectLiteralScope , name ) ;
2675- knownObjectLiteralScope . set ( name , mergedKnownObjectLiteral ) ;
2676- for ( const [ knownObjectLiteralKey , value ] of mergedKnownObjectLiterals ) {
2586+ knownObjectLiteralScope . set ( name , merged . knownObjectLiteral ) ;
2587+ for ( const [ knownObjectLiteralKey , value ] of merged . knownObjectLiterals ) {
26772588 knownObjectLiteralScope . set ( knownObjectLiteralKey , value ) ;
26782589 }
2679- pathScope . set ( name , mergedValue ) ;
2680- knownUndefinedScope . set ( name , mergedKnownUndefined ) ;
2681- literalScope . set (
2682- name ,
2683- mergeExhaustiveLiteralTexts ( thenAssignment . literalTexts , elseAssignment . literalTexts ) ,
2684- ) ;
2590+ pathScope . set ( name , merged . value ) ;
2591+ knownUndefinedScope . set ( name , merged . knownUndefined ) ;
2592+ literalScope . set ( name , merged . literalTexts ) ;
26852593 clearLegacyObjectProperties ( propertyScope , name ) ;
2686- for ( const [ propertyKey , value ] of mergedProperties ) {
2594+ for ( const [ propertyKey , value ] of merged . objectProperties ) {
26872595 propertyScope . set ( propertyKey , value ) ;
26882596 }
26892597 }
26902598 clearKnownLegacyObjectLiterals ( currentLegacyKnownObjectLiteralScope ( ) , name ) ;
2691- currentLegacyKnownObjectLiteralScope ( ) . set ( name , mergedKnownObjectLiteral ) ;
2692- for ( const [ knownObjectLiteralKey , value ] of mergedKnownObjectLiterals ) {
2599+ currentLegacyKnownObjectLiteralScope ( ) . set ( name , merged . knownObjectLiteral ) ;
2600+ for ( const [ knownObjectLiteralKey , value ] of merged . knownObjectLiterals ) {
26932601 currentLegacyKnownObjectLiteralScope ( ) . set ( knownObjectLiteralKey , value ) ;
26942602 }
2695- currentLegacyPathScope ( ) . set ( name , mergedValue ) ;
2696- currentKnownUndefinedScope ( ) . set ( name , mergedKnownUndefined ) ;
2697- currentLiteralTextScope ( ) . set (
2698- name ,
2699- mergeExhaustiveLiteralTexts ( thenAssignment . literalTexts , elseAssignment . literalTexts ) ,
2700- ) ;
2603+ currentLegacyPathScope ( ) . set ( name , merged . value ) ;
2604+ currentKnownUndefinedScope ( ) . set ( name , merged . knownUndefined ) ;
2605+ currentLiteralTextScope ( ) . set ( name , merged . literalTexts ) ;
27012606 clearLegacyObjectProperties ( currentLegacyObjectPropertyScope ( ) , name ) ;
2702- for ( const [ propertyKey , value ] of mergedProperties ) {
2607+ for ( const [ propertyKey , value ] of merged . objectProperties ) {
27032608 currentLegacyObjectPropertyScope ( ) . set ( propertyKey , value ) ;
27042609 }
27052610 if ( parentEffect ) {
27062611 parentEffect . identifierAssignments . set ( branchIdentifierAssignmentKey ( index , name ) , {
27072612 index,
2708- knownUndefined : mergedKnownUndefined ,
2709- knownObjectLiteral : mergedKnownObjectLiteral ,
2710- knownObjectLiterals : mergedKnownObjectLiterals ,
2711- literalTexts :
2712- mergeExhaustiveLiteralTexts ( thenAssignment . literalTexts , elseAssignment . literalTexts ) ??
2713- [ ] ,
2613+ ...merged ,
2614+ literalTexts : merged . literalTexts ?? [ ] ,
27142615 name,
2715- value : mergedValue ,
2716- objectProperties : mergedProperties ,
27172616 } ) ;
27182617 }
27192618 }
0 commit comments