@payloadcms/codemod 4.0.0-canary.37 → 4.0.0-canary.38

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 (136) hide show
  1. package/README.md +6 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.help.d.ts +4 -0
  4. package/dist/cli.help.d.ts.map +1 -0
  5. package/dist/cli.help.js +29 -0
  6. package/dist/cli.help.js.map +1 -0
  7. package/dist/cli.js +8 -0
  8. package/dist/cli.js.map +1 -1
  9. package/dist/cli.parseFlags.d.ts +1 -0
  10. package/dist/cli.parseFlags.d.ts.map +1 -1
  11. package/dist/cli.parseFlags.js +6 -0
  12. package/dist/cli.parseFlags.js.map +1 -1
  13. package/dist/registry.d.ts.map +1 -1
  14. package/dist/registry.js +8 -0
  15. package/dist/registry.js.map +1 -1
  16. package/dist/runbook/payload-v4-upgrade.md +2 -2
  17. package/dist/runbook/v4.mdx +304 -20
  18. package/dist/transforms/migrate-aliased-exports/index.d.ts.map +1 -1
  19. package/dist/transforms/migrate-aliased-exports/index.js +4 -2
  20. package/dist/transforms/migrate-aliased-exports/index.js.map +1 -1
  21. package/dist/transforms/migrate-aliased-exports/request.input.js +6 -0
  22. package/dist/transforms/migrate-aliased-exports/request.input.js.map +1 -0
  23. package/dist/transforms/migrate-aliased-exports/request.output.js +5 -0
  24. package/dist/transforms/migrate-aliased-exports/request.output.js.map +1 -0
  25. package/dist/transforms/migrate-authorship-default/already-set.input.js +15 -0
  26. package/dist/transforms/migrate-authorship-default/already-set.input.js.map +1 -0
  27. package/dist/transforms/migrate-authorship-default/already-set.output.js +15 -0
  28. package/dist/transforms/migrate-authorship-default/already-set.output.js.map +1 -0
  29. package/dist/transforms/migrate-authorship-default/basic.input.js +16 -0
  30. package/dist/transforms/migrate-authorship-default/basic.input.js.map +1 -0
  31. package/dist/transforms/migrate-authorship-default/basic.output.js +18 -0
  32. package/dist/transforms/migrate-authorship-default/basic.output.js.map +1 -0
  33. package/dist/transforms/migrate-authorship-default/build-config.input.js +32 -0
  34. package/dist/transforms/migrate-authorship-default/build-config.input.js.map +1 -0
  35. package/dist/transforms/migrate-authorship-default/build-config.output.js +35 -0
  36. package/dist/transforms/migrate-authorship-default/build-config.output.js.map +1 -0
  37. package/dist/transforms/migrate-authorship-default/globals.input.js +16 -0
  38. package/dist/transforms/migrate-authorship-default/globals.input.js.map +1 -0
  39. package/dist/transforms/migrate-authorship-default/globals.output.js +17 -0
  40. package/dist/transforms/migrate-authorship-default/globals.output.js.map +1 -0
  41. package/dist/transforms/migrate-authorship-default/index.d.ts +11 -0
  42. package/dist/transforms/migrate-authorship-default/index.d.ts.map +1 -0
  43. package/dist/transforms/migrate-authorship-default/index.js +141 -0
  44. package/dist/transforms/migrate-authorship-default/index.js.map +1 -0
  45. package/dist/transforms/migrate-authorship-default/non-matching.input.js +18 -0
  46. package/dist/transforms/migrate-authorship-default/non-matching.input.js.map +1 -0
  47. package/dist/transforms/migrate-authorship-default/non-matching.output.js +18 -0
  48. package/dist/transforms/migrate-authorship-default/non-matching.output.js.map +1 -0
  49. package/dist/transforms/migrate-authorship-default/satisfies.input.js +11 -0
  50. package/dist/transforms/migrate-authorship-default/satisfies.input.js.map +1 -0
  51. package/dist/transforms/migrate-authorship-default/satisfies.output.js +13 -0
  52. package/dist/transforms/migrate-authorship-default/satisfies.output.js.map +1 -0
  53. package/dist/transforms/migrate-field-component-types/basic.input.js +8 -0
  54. package/dist/transforms/migrate-field-component-types/basic.input.js.map +1 -0
  55. package/dist/transforms/migrate-field-component-types/basic.output.js +8 -0
  56. package/dist/transforms/migrate-field-component-types/basic.output.js.map +1 -0
  57. package/dist/transforms/migrate-field-component-types/index.d.ts +3 -0
  58. package/dist/transforms/migrate-field-component-types/index.d.ts.map +1 -0
  59. package/dist/transforms/migrate-field-component-types/index.js +620 -0
  60. package/dist/transforms/migrate-field-component-types/index.js.map +1 -0
  61. package/dist/transforms/migrate-payload-request-creation/aliases.input.js +8 -0
  62. package/dist/transforms/migrate-payload-request-creation/aliases.input.js.map +1 -0
  63. package/dist/transforms/migrate-payload-request-creation/aliases.output.js +31 -0
  64. package/dist/transforms/migrate-payload-request-creation/aliases.output.js.map +1 -0
  65. package/dist/transforms/migrate-payload-request-creation/collision.input.js +9 -0
  66. package/dist/transforms/migrate-payload-request-creation/collision.input.js.map +1 -0
  67. package/dist/transforms/migrate-payload-request-creation/comments.input.js +9 -0
  68. package/dist/transforms/migrate-payload-request-creation/comments.input.js.map +1 -0
  69. package/dist/transforms/migrate-payload-request-creation/comments.output.js +34 -0
  70. package/dist/transforms/migrate-payload-request-creation/comments.output.js.map +1 -0
  71. package/dist/transforms/migrate-payload-request-creation/empty.input.js +5 -0
  72. package/dist/transforms/migrate-payload-request-creation/empty.input.js.map +1 -0
  73. package/dist/transforms/migrate-payload-request-creation/empty.output.js +7 -0
  74. package/dist/transforms/migrate-payload-request-creation/empty.output.js.map +1 -0
  75. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js +10 -0
  76. package/dist/transforms/migrate-payload-request-creation/evaluation-order.input.js.map +1 -0
  77. package/dist/transforms/migrate-payload-request-creation/expression.input.js +8 -0
  78. package/dist/transforms/migrate-payload-request-creation/expression.input.js.map +1 -0
  79. package/dist/transforms/migrate-payload-request-creation/expression.output.js +8 -0
  80. package/dist/transforms/migrate-payload-request-creation/expression.output.js.map +1 -0
  81. package/dist/transforms/migrate-payload-request-creation/getters.input.js +52 -0
  82. package/dist/transforms/migrate-payload-request-creation/getters.input.js.map +1 -0
  83. package/dist/transforms/migrate-payload-request-creation/index.d.ts +3 -0
  84. package/dist/transforms/migrate-payload-request-creation/index.d.ts.map +1 -0
  85. package/dist/transforms/migrate-payload-request-creation/index.js +236 -0
  86. package/dist/transforms/migrate-payload-request-creation/index.js.map +1 -0
  87. package/dist/transforms/migrate-payload-request-creation/internal.input.js +6 -0
  88. package/dist/transforms/migrate-payload-request-creation/internal.input.js.map +1 -0
  89. package/dist/transforms/migrate-payload-request-creation/internal.output.js +6 -0
  90. package/dist/transforms/migrate-payload-request-creation/internal.output.js.map +1 -0
  91. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js +5 -0
  92. package/dist/transforms/migrate-payload-request-creation/non-matching.input.js.map +1 -0
  93. package/dist/transforms/migrate-payload-request-creation/populated.input.js +7 -0
  94. package/dist/transforms/migrate-payload-request-creation/populated.input.js.map +1 -0
  95. package/dist/transforms/migrate-payload-request-creation/populated.output.js +30 -0
  96. package/dist/transforms/migrate-payload-request-creation/populated.output.js.map +1 -0
  97. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js +7 -0
  98. package/dist/transforms/migrate-payload-request-creation/shadowed.input.js.map +1 -0
  99. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js +9 -0
  100. package/dist/transforms/migrate-payload-request-creation/shadowed.output.js.map +1 -0
  101. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js +12 -0
  102. package/dist/transforms/migrate-payload-request-creation/shorthand.input.js.map +1 -0
  103. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js +12 -0
  104. package/dist/transforms/migrate-payload-request-creation/shorthand.output.js.map +1 -0
  105. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js +9 -0
  106. package/dist/transforms/migrate-payload-request-creation/unsupported.input.js.map +1 -0
  107. package/dist/transforms/migrate-sharp-to-transformer/basic.input.js +28 -0
  108. package/dist/transforms/migrate-sharp-to-transformer/basic.input.js.map +1 -0
  109. package/dist/transforms/migrate-sharp-to-transformer/basic.output.js +39 -0
  110. package/dist/transforms/migrate-sharp-to-transformer/basic.output.js.map +1 -0
  111. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.input.js +27 -0
  112. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.input.js.map +1 -0
  113. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.output.js +33 -0
  114. package/dist/transforms/migrate-sharp-to-transformer/existing-transformers.output.js.map +1 -0
  115. package/dist/transforms/migrate-sharp-to-transformer/index.d.ts +3 -0
  116. package/dist/transforms/migrate-sharp-to-transformer/index.d.ts.map +1 -0
  117. package/dist/transforms/migrate-sharp-to-transformer/index.js +430 -0
  118. package/dist/transforms/migrate-sharp-to-transformer/index.js.map +1 -0
  119. package/dist/transforms/migrate-sharp-to-transformer/no-match.input.js +11 -0
  120. package/dist/transforms/migrate-sharp-to-transformer/no-match.input.js.map +1 -0
  121. package/dist/transforms/migrate-sharp-to-transformer/no-match.output.js +11 -0
  122. package/dist/transforms/migrate-sharp-to-transformer/no-match.output.js.map +1 -0
  123. package/dist/transforms/remove-storage-always-insert-fields/index.d.ts.map +1 -1
  124. package/dist/transforms/remove-storage-always-insert-fields/index.js +4 -0
  125. package/dist/transforms/remove-storage-always-insert-fields/index.js.map +1 -1
  126. package/dist/transforms/rename-experimental-table-feature/index.d.ts.map +1 -1
  127. package/dist/transforms/rename-experimental-table-feature/index.js +7 -1
  128. package/dist/transforms/rename-experimental-table-feature/index.js.map +1 -1
  129. package/dist/upgrade/rewritePackageJson.d.ts.map +1 -1
  130. package/dist/upgrade/rewritePackageJson.js +52 -11
  131. package/dist/upgrade/rewritePackageJson.js.map +1 -1
  132. package/dist/utils/project.d.ts +7 -1
  133. package/dist/utils/project.d.ts.map +1 -1
  134. package/dist/utils/project.js +20 -7
  135. package/dist/utils/project.js.map +1 -1
  136. package/package.json +2 -2
@@ -0,0 +1,32 @@
1
+ import { buildConfig } from 'payload';
2
+ export default buildConfig({
3
+ collections: [
4
+ {
5
+ slug: 'posts',
6
+ fields: [
7
+ {
8
+ name: 'title',
9
+ type: 'text'
10
+ }
11
+ ]
12
+ },
13
+ {
14
+ slug: 'media',
15
+ fields: [],
16
+ upload: true
17
+ }
18
+ ],
19
+ globals: [
20
+ {
21
+ slug: 'header',
22
+ fields: [
23
+ {
24
+ name: 'nav',
25
+ type: 'text'
26
+ }
27
+ ]
28
+ }
29
+ ]
30
+ });
31
+
32
+ //# sourceMappingURL=build-config.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/build-config.input.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nexport default buildConfig({\n collections: [\n {\n slug: 'posts',\n fields: [\n {\n name: 'title',\n type: 'text',\n },\n ],\n },\n {\n slug: 'media',\n fields: [],\n upload: true,\n },\n ],\n globals: [\n {\n slug: 'header',\n fields: [\n {\n name: 'nav',\n type: 'text',\n },\n ],\n },\n ],\n})\n"],"names":["buildConfig","collections","slug","fields","name","type","upload","globals"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,eAAeA,YAAY;IACzBC,aAAa;QACX;YACEC,MAAM;YACNC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;gBACR;aACD;QACH;QACA;YACEH,MAAM;YACNC,QAAQ,EAAE;YACVG,QAAQ;QACV;KACD;IACDC,SAAS;QACP;YACEL,MAAM;YACNC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;gBACR;aACD;QACH;KACD;AACH,GAAE"}
@@ -0,0 +1,35 @@
1
+ import { buildConfig } from 'payload';
2
+ export default buildConfig({
3
+ collections: [
4
+ {
5
+ slug: 'posts',
6
+ fields: [
7
+ {
8
+ name: 'title',
9
+ type: 'text'
10
+ }
11
+ ],
12
+ authorship: false
13
+ },
14
+ {
15
+ slug: 'media',
16
+ fields: [],
17
+ upload: true,
18
+ authorship: false
19
+ }
20
+ ],
21
+ globals: [
22
+ {
23
+ slug: 'header',
24
+ fields: [
25
+ {
26
+ name: 'nav',
27
+ type: 'text'
28
+ }
29
+ ],
30
+ authorship: false
31
+ }
32
+ ]
33
+ });
34
+
35
+ //# sourceMappingURL=build-config.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/build-config.output.ts"],"sourcesContent":["import { buildConfig } from 'payload'\n\nexport default buildConfig({\n collections: [\n {\n slug: 'posts',\n fields: [\n {\n name: 'title',\n type: 'text',\n },\n ],\n authorship: false,\n },\n {\n slug: 'media',\n fields: [],\n upload: true,\n authorship: false,\n },\n ],\n globals: [\n {\n slug: 'header',\n fields: [\n {\n name: 'nav',\n type: 'text',\n },\n ],\n authorship: false,\n },\n ],\n})\n"],"names":["buildConfig","collections","slug","fields","name","type","authorship","upload","globals"],"mappings":"AAAA,SAASA,WAAW,QAAQ,UAAS;AAErC,eAAeA,YAAY;IACzBC,aAAa;QACX;YACEC,MAAM;YACNC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;gBACR;aACD;YACDC,YAAY;QACd;QACA;YACEJ,MAAM;YACNC,QAAQ,EAAE;YACVI,QAAQ;YACRD,YAAY;QACd;KACD;IACDE,SAAS;QACP;YACEN,MAAM;YACNC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;gBACR;aACD;YACDC,YAAY;QACd;KACD;AACH,GAAE"}
@@ -0,0 +1,16 @@
1
+ export const Header = {
2
+ slug: 'header',
3
+ fields: [
4
+ {
5
+ name: 'nav',
6
+ type: 'text'
7
+ }
8
+ ]
9
+ };
10
+ export const Footer = {
11
+ slug: 'footer',
12
+ fields: [],
13
+ authorship: false
14
+ };
15
+
16
+ //# sourceMappingURL=globals.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/globals.input.ts"],"sourcesContent":["import type { GlobalConfig } from 'payload'\n\nexport const Header: GlobalConfig = {\n slug: 'header',\n fields: [\n {\n name: 'nav',\n type: 'text',\n },\n ],\n}\n\nexport const Footer: GlobalConfig = {\n slug: 'footer',\n fields: [],\n authorship: false,\n}\n"],"names":["Header","slug","fields","name","type","Footer","authorship"],"mappings":"AAEA,OAAO,MAAMA,SAAuB;IAClCC,MAAM;IACNC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;QACR;KACD;AACH,EAAC;AAED,OAAO,MAAMC,SAAuB;IAClCJ,MAAM;IACNC,QAAQ,EAAE;IACVI,YAAY;AACd,EAAC"}
@@ -0,0 +1,17 @@
1
+ export const Header = {
2
+ slug: 'header',
3
+ fields: [
4
+ {
5
+ name: 'nav',
6
+ type: 'text'
7
+ }
8
+ ],
9
+ authorship: false
10
+ };
11
+ export const Footer = {
12
+ slug: 'footer',
13
+ fields: [],
14
+ authorship: false
15
+ };
16
+
17
+ //# sourceMappingURL=globals.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/globals.output.ts"],"sourcesContent":["import type { GlobalConfig } from 'payload'\n\nexport const Header: GlobalConfig = {\n slug: 'header',\n fields: [\n {\n name: 'nav',\n type: 'text',\n },\n ],\n authorship: false,\n}\n\nexport const Footer: GlobalConfig = {\n slug: 'footer',\n fields: [],\n authorship: false,\n}\n"],"names":["Header","slug","fields","name","type","authorship","Footer"],"mappings":"AAEA,OAAO,MAAMA,SAAuB;IAClCC,MAAM;IACNC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;QACR;KACD;IACDC,YAAY;AACd,EAAC;AAED,OAAO,MAAMC,SAAuB;IAClCL,MAAM;IACNC,QAAQ,EAAE;IACVG,YAAY;AACd,EAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Transform } from '../../types.js';
2
+ /**
3
+ * Finds Collection/Global config object literals and adds `authorship: false` if the property
4
+ * is absent. Covers three annotation forms plus inline entries in a `buildConfig` call:
5
+ * const X: CollectionConfig = { ... }
6
+ * { ... } satisfies GlobalConfig
7
+ * { ... } as CollectionConfig
8
+ * buildConfig({ collections: [ { ... } ], globals: [ { ... } ] })
9
+ */
10
+ export declare const migrateAuthorshipDefault: Transform;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transforms/migrate-authorship-default/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAW/C;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAmCtC,CAAA"}
@@ -0,0 +1,141 @@
1
+ import { Node } from 'ts-morph';
2
+ // Only user-authored config types. The `Sanitized*` variants are internal runtime types
3
+ // whose `authorship` property is required, so injecting `false` would break their types.
4
+ const AUTHORSHIP_CONFIG_TYPE_NAMES = new Set([
5
+ 'CollectionConfig',
6
+ 'GlobalConfig'
7
+ ]);
8
+ const isAuthorshipConfigTypeName = (typeText)=>{
9
+ const baseName = typeText.replace(/<.*>$/, '').trim();
10
+ return AUTHORSHIP_CONFIG_TYPE_NAMES.has(baseName);
11
+ };
12
+ /**
13
+ * Finds Collection/Global config object literals and adds `authorship: false` if the property
14
+ * is absent. Covers three annotation forms plus inline entries in a `buildConfig` call:
15
+ * const X: CollectionConfig = { ... }
16
+ * { ... } satisfies GlobalConfig
17
+ * { ... } as CollectionConfig
18
+ * buildConfig({ collections: [ { ... } ], globals: [ { ... } ] })
19
+ */ export const migrateAuthorshipDefault = {
20
+ name: 'migrate-authorship-default',
21
+ apply: ({ project })=>{
22
+ const filesChanged = new Set();
23
+ for (const sourceFile of project.getSourceFiles()){
24
+ let mutated = false;
25
+ sourceFile.forEachDescendant((node)=>{
26
+ const objectLiteral = resolveAuthorshipConfigObject(node);
27
+ if (!objectLiteral) {
28
+ return;
29
+ }
30
+ if (objectLiteral.getProperty('authorship')) {
31
+ return;
32
+ }
33
+ objectLiteral.addPropertyAssignment({
34
+ name: 'authorship',
35
+ initializer: 'false'
36
+ });
37
+ mutated = true;
38
+ });
39
+ if (mutated) {
40
+ filesChanged.add(sourceFile.getFilePath());
41
+ }
42
+ }
43
+ return {
44
+ filesChanged: [
45
+ ...filesChanged
46
+ ]
47
+ };
48
+ },
49
+ description: 'Add `authorship: false` to CollectionConfig and GlobalConfig objects that do not already have an authorship property, preserving the previous behaviour after createdBy / updatedBy tracking became enabled by default.'
50
+ };
51
+ /**
52
+ * Given a node, returns its ObjectLiteralExpression if the node represents a
53
+ * CollectionConfig- or GlobalConfig-typed value in one of the three recognised forms.
54
+ * Returns undefined for everything else.
55
+ */ const resolveAuthorshipConfigObject = (node)=>{
56
+ // Form 1: const X: CollectionConfig = { ... }
57
+ if (Node.isVariableDeclaration(node)) {
58
+ const typeNode = node.getTypeNode();
59
+ if (!typeNode) {
60
+ return undefined;
61
+ }
62
+ const typeText = typeNode.getText().trim();
63
+ if (!isAuthorshipConfigTypeName(typeText)) {
64
+ return undefined;
65
+ }
66
+ const initializer = node.getInitializer();
67
+ if (initializer && Node.isObjectLiteralExpression(initializer)) {
68
+ return initializer;
69
+ }
70
+ return undefined;
71
+ }
72
+ // Form 2: { ... } satisfies CollectionConfig
73
+ if (Node.isSatisfiesExpression(node)) {
74
+ const typeNode = node.getTypeNode();
75
+ if (!typeNode) {
76
+ return undefined;
77
+ }
78
+ const typeText = typeNode.getText().trim();
79
+ if (!isAuthorshipConfigTypeName(typeText)) {
80
+ return undefined;
81
+ }
82
+ const expr = node.getExpression();
83
+ if (Node.isObjectLiteralExpression(expr)) {
84
+ return expr;
85
+ }
86
+ return undefined;
87
+ }
88
+ // Form 3: { ... } as CollectionConfig
89
+ if (Node.isAsExpression(node)) {
90
+ const typeNode = node.getTypeNode();
91
+ if (!typeNode) {
92
+ return undefined;
93
+ }
94
+ const typeText = typeNode.getText().trim();
95
+ if (!isAuthorshipConfigTypeName(typeText)) {
96
+ return undefined;
97
+ }
98
+ const expr = node.getExpression();
99
+ if (Node.isObjectLiteralExpression(expr)) {
100
+ return expr;
101
+ }
102
+ return undefined;
103
+ }
104
+ // Form 4: inline entries in `buildConfig({ collections: [ { ... } ], globals: [ { ... } ] })`
105
+ if (Node.isObjectLiteralExpression(node) && isInlineBuildConfigEntry(node)) {
106
+ return node;
107
+ }
108
+ return undefined;
109
+ };
110
+ const CONFIG_ENTRY_PROPERTY_NAMES = new Set([
111
+ 'collections',
112
+ 'globals'
113
+ ]);
114
+ /**
115
+ * True when `node` is an inline object-literal element of a `collections` or `globals` array
116
+ * passed to a `buildConfig(...)` call, e.g. `buildConfig({ collections: [{ ... }] })`.
117
+ */ const isInlineBuildConfigEntry = (node)=>{
118
+ const array = node.getParent();
119
+ if (!array || !Node.isArrayLiteralExpression(array)) {
120
+ return false;
121
+ }
122
+ const property = array.getParent();
123
+ if (!property || !Node.isPropertyAssignment(property)) {
124
+ return false;
125
+ }
126
+ if (!CONFIG_ENTRY_PROPERTY_NAMES.has(property.getName())) {
127
+ return false;
128
+ }
129
+ const configObject = property.getParent();
130
+ if (!configObject || !Node.isObjectLiteralExpression(configObject)) {
131
+ return false;
132
+ }
133
+ const call = configObject.getParent();
134
+ if (!call || !Node.isCallExpression(call)) {
135
+ return false;
136
+ }
137
+ const callee = call.getExpression();
138
+ return Node.isIdentifier(callee) && callee.getText() === 'buildConfig';
139
+ };
140
+
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/index.ts"],"sourcesContent":["import { Node } from 'ts-morph'\n\nimport type { Transform } from '../../types.js'\n\n// Only user-authored config types. The `Sanitized*` variants are internal runtime types\n// whose `authorship` property is required, so injecting `false` would break their types.\nconst AUTHORSHIP_CONFIG_TYPE_NAMES = new Set(['CollectionConfig', 'GlobalConfig'])\n\nconst isAuthorshipConfigTypeName = (typeText: string): boolean => {\n const baseName = typeText.replace(/<.*>$/, '').trim()\n return AUTHORSHIP_CONFIG_TYPE_NAMES.has(baseName)\n}\n\n/**\n * Finds Collection/Global config object literals and adds `authorship: false` if the property\n * is absent. Covers three annotation forms plus inline entries in a `buildConfig` call:\n * const X: CollectionConfig = { ... }\n * { ... } satisfies GlobalConfig\n * { ... } as CollectionConfig\n * buildConfig({ collections: [ { ... } ], globals: [ { ... } ] })\n */\nexport const migrateAuthorshipDefault: Transform = {\n name: 'migrate-authorship-default',\n apply: ({ project }) => {\n const filesChanged = new Set<string>()\n\n for (const sourceFile of project.getSourceFiles()) {\n let mutated = false\n\n sourceFile.forEachDescendant((node) => {\n const objectLiteral = resolveAuthorshipConfigObject(node)\n if (!objectLiteral) {\n return\n }\n\n if (objectLiteral.getProperty('authorship')) {\n return\n }\n\n objectLiteral.addPropertyAssignment({\n name: 'authorship',\n initializer: 'false',\n })\n\n mutated = true\n })\n\n if (mutated) {\n filesChanged.add(sourceFile.getFilePath())\n }\n }\n\n return { filesChanged: [...filesChanged] }\n },\n description:\n 'Add `authorship: false` to CollectionConfig and GlobalConfig objects that do not already have an authorship property, preserving the previous behaviour after createdBy / updatedBy tracking became enabled by default.',\n}\n\n/**\n * Given a node, returns its ObjectLiteralExpression if the node represents a\n * CollectionConfig- or GlobalConfig-typed value in one of the three recognised forms.\n * Returns undefined for everything else.\n */\nconst resolveAuthorshipConfigObject = (node: Node) => {\n // Form 1: const X: CollectionConfig = { ... }\n if (Node.isVariableDeclaration(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isAuthorshipConfigTypeName(typeText)) {\n return undefined\n }\n const initializer = node.getInitializer()\n if (initializer && Node.isObjectLiteralExpression(initializer)) {\n return initializer\n }\n return undefined\n }\n\n // Form 2: { ... } satisfies CollectionConfig\n if (Node.isSatisfiesExpression(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isAuthorshipConfigTypeName(typeText)) {\n return undefined\n }\n const expr = node.getExpression()\n if (Node.isObjectLiteralExpression(expr)) {\n return expr\n }\n return undefined\n }\n\n // Form 3: { ... } as CollectionConfig\n if (Node.isAsExpression(node)) {\n const typeNode = node.getTypeNode()\n if (!typeNode) {\n return undefined\n }\n const typeText = typeNode.getText().trim()\n if (!isAuthorshipConfigTypeName(typeText)) {\n return undefined\n }\n const expr = node.getExpression()\n if (Node.isObjectLiteralExpression(expr)) {\n return expr\n }\n return undefined\n }\n\n // Form 4: inline entries in `buildConfig({ collections: [ { ... } ], globals: [ { ... } ] })`\n if (Node.isObjectLiteralExpression(node) && isInlineBuildConfigEntry(node)) {\n return node\n }\n\n return undefined\n}\n\nconst CONFIG_ENTRY_PROPERTY_NAMES = new Set(['collections', 'globals'])\n\n/**\n * True when `node` is an inline object-literal element of a `collections` or `globals` array\n * passed to a `buildConfig(...)` call, e.g. `buildConfig({ collections: [{ ... }] })`.\n */\nconst isInlineBuildConfigEntry = (node: Node): boolean => {\n const array = node.getParent()\n if (!array || !Node.isArrayLiteralExpression(array)) {\n return false\n }\n\n const property = array.getParent()\n if (!property || !Node.isPropertyAssignment(property)) {\n return false\n }\n\n if (!CONFIG_ENTRY_PROPERTY_NAMES.has(property.getName())) {\n return false\n }\n\n const configObject = property.getParent()\n if (!configObject || !Node.isObjectLiteralExpression(configObject)) {\n return false\n }\n\n const call = configObject.getParent()\n if (!call || !Node.isCallExpression(call)) {\n return false\n }\n\n const callee = call.getExpression()\n return Node.isIdentifier(callee) && callee.getText() === 'buildConfig'\n}\n"],"names":["Node","AUTHORSHIP_CONFIG_TYPE_NAMES","Set","isAuthorshipConfigTypeName","typeText","baseName","replace","trim","has","migrateAuthorshipDefault","name","apply","project","filesChanged","sourceFile","getSourceFiles","mutated","forEachDescendant","node","objectLiteral","resolveAuthorshipConfigObject","getProperty","addPropertyAssignment","initializer","add","getFilePath","description","isVariableDeclaration","typeNode","getTypeNode","undefined","getText","getInitializer","isObjectLiteralExpression","isSatisfiesExpression","expr","getExpression","isAsExpression","isInlineBuildConfigEntry","CONFIG_ENTRY_PROPERTY_NAMES","array","getParent","isArrayLiteralExpression","property","isPropertyAssignment","getName","configObject","call","isCallExpression","callee","isIdentifier"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ const unrelated = {
2
+ collections: []
3
+ };
4
+ const untyped = {
5
+ slug: 'untyped',
6
+ fields: []
7
+ };
8
+ // Sanitized configs are internal runtime types with a required `authorship`
9
+ // property, so the codemod must leave them untouched.
10
+ const sanitizedCollection = {
11
+ slug: 'sanitized-collection'
12
+ };
13
+ const sanitizedGlobal = {
14
+ slug: 'sanitized-global'
15
+ };
16
+ export { };
17
+
18
+ //# sourceMappingURL=non-matching.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/non-matching.input.ts"],"sourcesContent":["import type { Config, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload'\n\nconst unrelated: Config = {\n collections: [],\n}\n\nconst untyped = {\n slug: 'untyped',\n fields: [],\n}\n\n// Sanitized configs are internal runtime types with a required `authorship`\n// property, so the codemod must leave them untouched.\nconst sanitizedCollection: SanitizedCollectionConfig = {\n slug: 'sanitized-collection',\n}\n\nconst sanitizedGlobal: SanitizedGlobalConfig = {\n slug: 'sanitized-global',\n}\n"],"names":["unrelated","collections","untyped","slug","fields","sanitizedCollection","sanitizedGlobal"],"mappings":"AAEA,MAAMA,YAAoB;IACxBC,aAAa,EAAE;AACjB;AAEA,MAAMC,UAAU;IACdC,MAAM;IACNC,QAAQ,EAAE;AACZ;AAEA,4EAA4E;AAC5E,sDAAsD;AACtD,MAAMC,sBAAiD;IACrDF,MAAM;AACR;AAEA,MAAMG,kBAAyC;IAC7CH,MAAM;AACR;AAnBA,WAAuF"}
@@ -0,0 +1,18 @@
1
+ const unrelated = {
2
+ collections: []
3
+ };
4
+ const untyped = {
5
+ slug: 'untyped',
6
+ fields: []
7
+ };
8
+ // Sanitized configs are internal runtime types with a required `authorship`
9
+ // property, so the codemod must leave them untouched.
10
+ const sanitizedCollection = {
11
+ slug: 'sanitized-collection'
12
+ };
13
+ const sanitizedGlobal = {
14
+ slug: 'sanitized-global'
15
+ };
16
+ export { };
17
+
18
+ //# sourceMappingURL=non-matching.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/non-matching.output.ts"],"sourcesContent":["import type { Config, SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload'\n\nconst unrelated: Config = {\n collections: [],\n}\n\nconst untyped = {\n slug: 'untyped',\n fields: [],\n}\n\n// Sanitized configs are internal runtime types with a required `authorship`\n// property, so the codemod must leave them untouched.\nconst sanitizedCollection: SanitizedCollectionConfig = {\n slug: 'sanitized-collection',\n}\n\nconst sanitizedGlobal: SanitizedGlobalConfig = {\n slug: 'sanitized-global',\n}\n"],"names":["unrelated","collections","untyped","slug","fields","sanitizedCollection","sanitizedGlobal"],"mappings":"AAEA,MAAMA,YAAoB;IACxBC,aAAa,EAAE;AACjB;AAEA,MAAMC,UAAU;IACdC,MAAM;IACNC,QAAQ,EAAE;AACZ;AAEA,4EAA4E;AAC5E,sDAAsD;AACtD,MAAMC,sBAAiD;IACrDF,MAAM;AACR;AAEA,MAAMG,kBAAyC;IAC7CH,MAAM;AACR;AAnBA,WAAuF"}
@@ -0,0 +1,11 @@
1
+ export const Posts = {
2
+ slug: 'posts',
3
+ fields: []
4
+ };
5
+ export const Media = {
6
+ slug: 'media',
7
+ fields: [],
8
+ upload: true
9
+ };
10
+
11
+ //# sourceMappingURL=satisfies.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/satisfies.input.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nexport const Posts = {\n slug: 'posts',\n fields: [],\n} satisfies CollectionConfig\n\nexport const Media = {\n slug: 'media',\n fields: [],\n upload: true,\n} satisfies CollectionConfig\n"],"names":["Posts","slug","fields","Media","upload"],"mappings":"AAEA,OAAO,MAAMA,QAAQ;IACnBC,MAAM;IACNC,QAAQ,EAAE;AACZ,EAA4B;AAE5B,OAAO,MAAMC,QAAQ;IACnBF,MAAM;IACNC,QAAQ,EAAE;IACVE,QAAQ;AACV,EAA4B"}
@@ -0,0 +1,13 @@
1
+ export const Posts = {
2
+ slug: 'posts',
3
+ fields: [],
4
+ authorship: false
5
+ };
6
+ export const Media = {
7
+ slug: 'media',
8
+ fields: [],
9
+ upload: true,
10
+ authorship: false
11
+ };
12
+
13
+ //# sourceMappingURL=satisfies.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-authorship-default/satisfies.output.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nexport const Posts = {\n slug: 'posts',\n fields: [],\n authorship: false,\n} satisfies CollectionConfig\n\nexport const Media = {\n slug: 'media',\n fields: [],\n upload: true,\n authorship: false,\n} satisfies CollectionConfig\n"],"names":["Posts","slug","fields","authorship","Media","upload"],"mappings":"AAEA,OAAO,MAAMA,QAAQ;IACnBC,MAAM;IACNC,QAAQ,EAAE;IACVC,YAAY;AACd,EAA4B;AAE5B,OAAO,MAAMC,QAAQ;IACnBH,MAAM;IACNC,QAAQ,EAAE;IACVG,QAAQ;IACRF,YAAY;AACd,EAA4B"}
@@ -0,0 +1,8 @@
1
+ export const CustomTextField = (props)=>{
2
+ return props.value;
3
+ };
4
+ export const CustomUploadField = async function(props) {
5
+ return props.path;
6
+ };
7
+
8
+ //# sourceMappingURL=basic.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-field-component-types/basic.input.ts"],"sourcesContent":["import type {\n TextFieldClientComponent,\n UploadFieldServerComponent,\n} from 'payload'\n\nexport const CustomTextField: TextFieldClientComponent = (props) => {\n return props.value\n}\n\nexport const CustomUploadField: UploadFieldServerComponent = async function (props) {\n return props.path\n}\n"],"names":["CustomTextField","props","value","CustomUploadField","path"],"mappings":"AAKA,OAAO,MAAMA,kBAA4C,CAACC;IACxD,OAAOA,MAAMC,KAAK;AACpB,EAAC;AAED,OAAO,MAAMC,oBAAgD,eAAgBF,KAAK;IAChF,OAAOA,MAAMG,IAAI;AACnB,EAAC"}
@@ -0,0 +1,8 @@
1
+ export const CustomTextField = (props)=>{
2
+ return props.value;
3
+ };
4
+ export const CustomUploadField = async function(props) {
5
+ return props.path;
6
+ };
7
+
8
+ //# sourceMappingURL=basic.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/migrate-field-component-types/basic.output.ts"],"sourcesContent":["import type {\n TextFieldClientProps,\n UploadFieldServerProps,\n} from 'payload'\nimport type React from 'react'\n\nexport const CustomTextField: React.FC<TextFieldClientProps> = (props) => {\n return props.value\n}\n\nexport const CustomUploadField: React.FC<UploadFieldServerProps> = async function (props) {\n return props.path\n}\n"],"names":["CustomTextField","props","value","CustomUploadField","path"],"mappings":"AAMA,OAAO,MAAMA,kBAAkD,CAACC;IAC9D,OAAOA,MAAMC,KAAK;AACpB,EAAC;AAED,OAAO,MAAMC,oBAAsD,eAAgBF,KAAK;IACtF,OAAOA,MAAMG,IAAI;AACnB,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Transform } from '../../types.js';
2
+ export declare const migrateFieldComponentTypes: Transform;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transforms/migrate-field-component-types/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAiG/C,eAAO,MAAM,0BAA0B,EAAE,SAwKxC,CAAA"}