lucy-cli 0.7.13 → 0.7.15
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.
- package/dist/gulp/types.js +118 -28
- package/package.json +1 -1
- package/settings/master-settings.json +2 -2
- package/settings/page-settings.json +2 -2
- package/settings/public-settings.json +2 -1
- package/src/gulp/types.ts +160 -60
- package/tsconfig.json +1 -1
package/dist/gulp/types.js
CHANGED
@@ -17,62 +17,116 @@ export function updateWixTypes(options) {
|
|
17
17
|
localModules = options.projectSettings.lucySettings.modules;
|
18
18
|
}
|
19
19
|
// Add module to publicSettings
|
20
|
+
publicSettings.compilerOptions.paths['backend/*.web'] = ["../../../typescript/backend/*.web.ts"];
|
21
|
+
publicSettings.compilerOptions.paths['backend/*.web.js'] = ["../../../typescript/backend/*.web.ts"];
|
22
|
+
publicSettings.compilerOptions.paths['backend/*.jsw'] = ["../../../typescript/backend/*.jsw.ts"];
|
20
23
|
publicSettings.compilerOptions.paths.mocks = ["../../../typescript/__mocks__/*"];
|
21
24
|
publicSettings.compilerOptions.paths['types/*'] = ["../../../typescript/types/*"];
|
22
25
|
publicSettings.compilerOptions.paths['public/*'] = ["../../../typescript/public/*.ts"];
|
23
|
-
publicSettings.include = [
|
26
|
+
publicSettings.include = [
|
27
|
+
"../../../typescript/public/**/*",
|
28
|
+
"../../../typescript/__mocks__/**/*",
|
29
|
+
];
|
24
30
|
// Add module to backendSettings
|
25
31
|
backendSettings.compilerOptions.paths.mocks = ["../../../typescript/__mocks__/*"];
|
26
32
|
backendSettings.compilerOptions.paths['types/*'] = [`../../../typescript/types/*`];
|
27
|
-
backendSettings.include = [
|
33
|
+
backendSettings.include = [
|
34
|
+
"../../../typescript/backend/**/*",
|
35
|
+
"../../../typescript/__mocks__/**/*"
|
36
|
+
];
|
28
37
|
// Add module to masterSettings
|
38
|
+
masterSettings.compilerOptions.paths['backend/*.web'] = ["../../../typescript/backend/*.web.ts"];
|
39
|
+
masterSettings.compilerOptions.paths['backend/*.web.js'] = ["../../../typescript/backend/*.web.ts"];
|
40
|
+
masterSettings.compilerOptions.paths['backend/*.jsw'] = ["../../../typescript/backend/*.jsw.ts"];
|
29
41
|
masterSettings.compilerOptions.paths['types/*'] = ["../../../typescript/types/*"];
|
30
|
-
masterSettings.include = [
|
42
|
+
masterSettings.include = [
|
43
|
+
"../../../typescript/public/**/*",
|
44
|
+
"../../../typescript/__mocks__/**/*",
|
45
|
+
];
|
31
46
|
// Add module to pageSettings
|
47
|
+
pageSettings.compilerOptions.paths['backend/*.web'] = ["../../../typescript/backend/*.web.ts"];
|
48
|
+
pageSettings.compilerOptions.paths['backend/*.web.js'] = ["../../../typescript/backend/*.web.ts"];
|
49
|
+
pageSettings.compilerOptions.paths['backend/*.jsw'] = ["../../../typescript/backend/*.jsw.ts"];
|
32
50
|
pageSettings.compilerOptions.paths['types/*'] = ["../../../typescript/types/*"];
|
33
|
-
pageSettings.compilerOptions.paths['backend
|
34
|
-
pageSettings.include = [
|
51
|
+
pageSettings.compilerOptions.paths['backend/*.jsw'] = ["../../../typescript/backend/*.jsw.ts"];
|
52
|
+
pageSettings.include = [
|
53
|
+
"../../../typescript/public/**/*",
|
54
|
+
"../../../typescript/__mocks__/**/*",
|
55
|
+
];
|
35
56
|
if (modules) {
|
36
57
|
for (const [name] of Object.entries(modules)) {
|
37
58
|
// Add module to publicSettings
|
38
|
-
publicSettings.compilerOptions.paths['backend/*.web.js']
|
39
|
-
publicSettings.compilerOptions.paths['backend/*.web']
|
59
|
+
publicSettings.compilerOptions.paths['backend/*.web.js'].push(`../../../${name}/backend/*.web.ts`);
|
60
|
+
publicSettings.compilerOptions.paths['backend/*.web'].push(`../../../${name}/backend/*.web.ts`);
|
61
|
+
publicSettings.compilerOptions.paths['backend/*.jsw'].push(`../../../${name}/backend/*.jsw.ts`);
|
40
62
|
publicSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*`);
|
41
63
|
publicSettings.compilerOptions.paths.mocks.push(...[`../../../${name}/__mocks__/*`]);
|
42
64
|
publicSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*`);
|
43
|
-
publicSettings.include.push(...[
|
65
|
+
publicSettings.include.push(...[
|
66
|
+
`../../../${name}/public/**/*`,
|
67
|
+
`../../../${name}__mocks__/**/*`,
|
68
|
+
]);
|
44
69
|
// Add module to backendSettings
|
45
70
|
backendSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*`);
|
46
71
|
backendSettings.compilerOptions.paths['backend/*'].push(`../../../${name}/backend/*`);
|
47
72
|
backendSettings.compilerOptions.paths.mocks.push(...[`../../../${name}/__mocks__/*`]);
|
48
73
|
backendSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*`);
|
49
|
-
backendSettings.include.push(...[
|
74
|
+
backendSettings.include.push(...[
|
75
|
+
`../../../${name}/public/**/*`,
|
76
|
+
`../../../${name}__mocks__/**/*`,
|
77
|
+
`../../../${name}/backend/**/*`
|
78
|
+
]);
|
50
79
|
// Add module to masterSettings
|
51
|
-
masterSettings.compilerOptions.paths['backend/*.web.js']
|
52
|
-
masterSettings.compilerOptions.paths['backend/*.web']
|
80
|
+
masterSettings.compilerOptions.paths['backend/*.web.js'].push(`../../../${name}/backend/*.web.ts`);
|
81
|
+
masterSettings.compilerOptions.paths['backend/*.web'].push(`../../../${name}/backend/*.web.ts`);
|
82
|
+
masterSettings.compilerOptions.paths['backend/*.jsw'].push(`../../../${name}/backend/*.jsw.ts`);
|
53
83
|
masterSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*`);
|
54
|
-
masterSettings.compilerOptions.paths['backend/*'].push(`../../../${name}/backend/*`);
|
55
84
|
masterSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*`);
|
56
|
-
masterSettings.include.push(...[
|
85
|
+
masterSettings.include.push(...[
|
86
|
+
`../../../${name}/public/**/*`,
|
87
|
+
`../../../${name}__mocks__/**/*`,
|
88
|
+
]);
|
57
89
|
// Add module to pageSettings
|
58
|
-
pageSettings.compilerOptions.paths['backend/*.web.js']
|
59
|
-
pageSettings.compilerOptions.paths['backend/*.web']
|
90
|
+
pageSettings.compilerOptions.paths['backend/*.web.js'].push(`../../../${name}/backend/*.web.ts`);
|
91
|
+
pageSettings.compilerOptions.paths['backend/*.web'].push(`../../../${name}/backend/*.web.ts`);
|
92
|
+
pageSettings.compilerOptions.paths['backend/*.jsw'].push(`../../../${name}/backend/*.jsw.ts`);
|
60
93
|
pageSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*`);
|
61
|
-
pageSettings.compilerOptions.paths['backend/*'].push(`../../../${name}/backend/*.jsw.ts`);
|
62
94
|
pageSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*`);
|
63
|
-
pageSettings.include.push(...[
|
95
|
+
pageSettings.include.push(...[
|
96
|
+
`../../../${name}/public/**/*`,
|
97
|
+
`../../../${name}__mocks__/**/*`,
|
98
|
+
]);
|
64
99
|
}
|
65
100
|
}
|
66
|
-
return gulp.src(['./.wix/types/**/*.json', '!./.wix/types/wix-code-types
|
101
|
+
return gulp.src(['./.wix/types/**/*.json', '!./.wix/types/wix-code-types/**/*'])
|
67
102
|
.pipe(flatmap(function (stream, file) {
|
68
103
|
count++;
|
69
|
-
if (file.dirname.endsWith('public'))
|
70
|
-
return stream.pipe(jeditor(publicSettings))
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
104
|
+
if (file.dirname.endsWith('public')) {
|
105
|
+
return stream.pipe(jeditor(publicSettings))
|
106
|
+
.pipe(jeditor((json) => cleanTsConfig(json)))
|
107
|
+
.pipe(jeditor((json) => processJson(json)))
|
108
|
+
.pipe(replace('"../backend.d.ts",', '', replaceOptions))
|
109
|
+
.pipe(replace('"../../../src/backend/\\*\\*/\\*.web.js",', '', replaceOptions));
|
110
|
+
}
|
111
|
+
if (file.dirname.endsWith('backend')) {
|
112
|
+
return stream.pipe(jeditor(backendSettings))
|
113
|
+
.pipe(jeditor((json) => cleanTsConfig(json)))
|
114
|
+
.pipe(jeditor((json) => processJson(json)));
|
115
|
+
}
|
116
|
+
;
|
117
|
+
if (file.dirname.endsWith('masterPage')) {
|
118
|
+
return stream.pipe(jeditor(masterSettings))
|
119
|
+
.pipe(jeditor((json) => cleanTsConfig(json)))
|
120
|
+
.pipe(jeditor((json) => processJson(json)))
|
121
|
+
.pipe(replace('"../backend.d.ts",', '', replaceOptions))
|
122
|
+
.pipe(replace('"../../../src/backend/\\*\\*/\\*.web.js",', '', replaceOptions));
|
123
|
+
}
|
124
|
+
;
|
125
|
+
return stream.pipe(jeditor(pageSettings))
|
126
|
+
.pipe(jeditor((json) => cleanTsConfig(json)))
|
127
|
+
.pipe(jeditor((json) => processJson(json)))
|
128
|
+
.pipe(replace('"../backend.d.ts",', '', replaceOptions))
|
129
|
+
.pipe(replace('"../../../src/backend/\\*\\*/\\*.web.js",', '', replaceOptions));
|
76
130
|
}))
|
77
131
|
.pipe(replace('masterPage.masterPage.js', 'masterPage.ts', replaceOptions))
|
78
132
|
.pipe(replace('/src/', '/typescript/', replaceOptions))
|
@@ -157,18 +211,54 @@ function removeDuplicatesFromArray(arr) {
|
|
157
211
|
}
|
158
212
|
function processJson(obj) {
|
159
213
|
if (Array.isArray(obj)) {
|
160
|
-
|
214
|
+
// Process arrays and remove duplicate items
|
215
|
+
const uniqueArray = removeDuplicatesFromArray(obj);
|
216
|
+
return uniqueArray.length > 0 ? uniqueArray : undefined; // Remove empty arrays
|
161
217
|
}
|
162
218
|
else if (obj && typeof obj === 'object') {
|
219
|
+
// Process objects, ensuring keys are unique
|
163
220
|
const result = {};
|
221
|
+
const seenKeys = new Set();
|
164
222
|
for (const key in obj) {
|
165
223
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
166
|
-
|
224
|
+
if (!seenKeys.has(key)) {
|
225
|
+
const processedValue = processJson(obj[key]);
|
226
|
+
if (processedValue !== undefined) { // Remove keys with undefined values
|
227
|
+
seenKeys.add(key);
|
228
|
+
result[key] = processedValue;
|
229
|
+
}
|
230
|
+
}
|
167
231
|
}
|
168
232
|
}
|
169
|
-
return
|
233
|
+
// If all keys were empty or undefined, return undefined
|
234
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
170
235
|
}
|
171
236
|
else {
|
237
|
+
// Return primitive values as-is
|
172
238
|
return obj;
|
173
239
|
}
|
174
240
|
}
|
241
|
+
function cleanTsConfig(json) {
|
242
|
+
// Process the paths object to remove duplicates
|
243
|
+
if (json.compilerOptions?.paths) {
|
244
|
+
for (const key in json.compilerOptions.paths) {
|
245
|
+
if (Array.isArray(json.compilerOptions.paths[key])) {
|
246
|
+
const uniquePaths = [...new Set(json.compilerOptions.paths[key])];
|
247
|
+
json.compilerOptions.paths[key] = uniquePaths.length > 0 ? uniquePaths : undefined;
|
248
|
+
}
|
249
|
+
}
|
250
|
+
}
|
251
|
+
// Process the include array to remove duplicates
|
252
|
+
if (Array.isArray(json.include)) {
|
253
|
+
const uniqueIncludes = [...new Set(json.include)];
|
254
|
+
json.include = uniqueIncludes.length > 0 ? uniqueIncludes : undefined;
|
255
|
+
}
|
256
|
+
// Remove empty or undefined fields
|
257
|
+
if (json.compilerOptions?.paths) {
|
258
|
+
json.compilerOptions.paths = Object.fromEntries(Object.entries(json.compilerOptions.paths).filter(([_, value]) => value !== undefined));
|
259
|
+
}
|
260
|
+
if (json.include?.length === 0) {
|
261
|
+
delete json.include;
|
262
|
+
}
|
263
|
+
return json;
|
264
|
+
}
|
package/package.json
CHANGED
@@ -6,12 +6,12 @@
|
|
6
6
|
"jsx": "react-jsx",
|
7
7
|
"noEmit": false,
|
8
8
|
"noUncheckedIndexedAccess": true,
|
9
|
-
"lib": ["DOM"],
|
9
|
+
"lib": ["DOM", "ESNext"],
|
10
10
|
"paths": {
|
11
11
|
"backend/*.web.js": [],
|
12
12
|
"backend/*.web": [],
|
13
|
+
"backend/*.jsw": [],
|
13
14
|
"public/*": [],
|
14
|
-
"backend/*": [],
|
15
15
|
"wix-types/*": ["../wix-code-types/dist/types/*"],
|
16
16
|
"types/*": []
|
17
17
|
}
|
@@ -7,12 +7,12 @@
|
|
7
7
|
"jsx": "react-jsx",
|
8
8
|
"noEmit": false,
|
9
9
|
"noUncheckedIndexedAccess": true,
|
10
|
-
"lib": ["DOM", "
|
10
|
+
"lib": ["DOM", "ESNext"],
|
11
11
|
"paths": {
|
12
12
|
"backend/*.web.js": [],
|
13
13
|
"backend/*.web": [],
|
14
|
+
"backend/*.jsw": [],
|
14
15
|
"public/*": [],
|
15
|
-
"backend/*": [],
|
16
16
|
"wix-types/*": ["../wix-code-types/dist/types/*"],
|
17
17
|
"types/*": []
|
18
18
|
}
|
@@ -6,10 +6,11 @@
|
|
6
6
|
"strict": true,
|
7
7
|
"jsx": "react-jsx",
|
8
8
|
"strictNullChecks": true,
|
9
|
-
"lib": ["DOM"],
|
9
|
+
"lib": ["DOM", "ESNext"],
|
10
10
|
"paths": {
|
11
11
|
"backend/*.web.js": [],
|
12
12
|
"backend/*.web": [],
|
13
|
+
"backend/*.jsw": [],
|
13
14
|
"mocks": [],
|
14
15
|
"public/*": [],
|
15
16
|
"types/*": [],
|
package/src/gulp/types.ts
CHANGED
@@ -22,62 +22,118 @@ export function updateWixTypes(options: TaskOptions) {
|
|
22
22
|
localModules = options.projectSettings.lucySettings.modules as unknown as Record<string, string>;
|
23
23
|
}
|
24
24
|
// Add module to publicSettings
|
25
|
+
publicSettings.compilerOptions.paths['backend/*.web'] = [ "../../../typescript/backend/*.web.ts" ] as never;
|
26
|
+
publicSettings.compilerOptions.paths['backend/*.web.js'] = [ "../../../typescript/backend/*.web.ts" ] as never;
|
27
|
+
publicSettings.compilerOptions.paths['backend/*.jsw'] = [ "../../../typescript/backend/*.jsw.ts" ] as never;
|
25
28
|
publicSettings.compilerOptions.paths.mocks = [ "../../../typescript/__mocks__/*" ] as never;
|
26
29
|
publicSettings.compilerOptions.paths['types/*'] = [ "../../../typescript/types/*" ] as never;
|
27
30
|
publicSettings.compilerOptions.paths['public/*'] = [ "../../../typescript/public/*.ts" ] as never;
|
28
|
-
publicSettings.include = [
|
31
|
+
publicSettings.include = [
|
32
|
+
"../../../typescript/public/**/*",
|
33
|
+
"../../../typescript/__mocks__/**/*",
|
34
|
+
] as never;
|
35
|
+
|
29
36
|
// Add module to backendSettings
|
30
37
|
backendSettings.compilerOptions.paths.mocks = [ "../../../typescript/__mocks__/*" ] as never;
|
31
38
|
backendSettings.compilerOptions.paths['types/*'] = [ `../../../typescript/types/*` ] as never;
|
32
|
-
backendSettings.include = [
|
39
|
+
backendSettings.include = [
|
40
|
+
"../../../typescript/backend/**/*",
|
41
|
+
"../../../typescript/__mocks__/**/*"
|
42
|
+
] as never;
|
33
43
|
// Add module to masterSettings
|
44
|
+
masterSettings.compilerOptions.paths['backend/*.web'] = [ "../../../typescript/backend/*.web.ts" ] as never;
|
45
|
+
masterSettings.compilerOptions.paths['backend/*.web.js'] = [ "../../../typescript/backend/*.web.ts" ] as never;
|
46
|
+
masterSettings.compilerOptions.paths['backend/*.jsw'] = [ "../../../typescript/backend/*.jsw.ts" ] as never;
|
34
47
|
masterSettings.compilerOptions.paths['types/*'] = [ "../../../typescript/types/*" ] as never;
|
35
|
-
masterSettings.include = [
|
48
|
+
masterSettings.include = [
|
49
|
+
"../../../typescript/public/**/*",
|
50
|
+
"../../../typescript/__mocks__/**/*",
|
51
|
+
] as never;
|
36
52
|
// Add module to pageSettings
|
53
|
+
pageSettings.compilerOptions.paths['backend/*.web'] = [ "../../../typescript/backend/*.web.ts" ] as never;
|
54
|
+
pageSettings.compilerOptions.paths['backend/*.web.js'] = [ "../../../typescript/backend/*.web.ts" ] as never;
|
55
|
+
pageSettings.compilerOptions.paths['backend/*.jsw'] = [ "../../../typescript/backend/*.jsw.ts" ] as never;
|
37
56
|
pageSettings.compilerOptions.paths['types/*'] = [ "../../../typescript/types/*" ] as never;
|
38
|
-
pageSettings.compilerOptions.paths['backend
|
39
|
-
pageSettings.include = [
|
57
|
+
pageSettings.compilerOptions.paths['backend/*.jsw'] = [ "../../../typescript/backend/*.jsw.ts" ] as never;
|
58
|
+
pageSettings.include = [
|
59
|
+
"../../../typescript/public/**/*",
|
60
|
+
"../../../typescript/__mocks__/**/*",
|
61
|
+
] as never;
|
40
62
|
|
41
63
|
if (modules) {
|
42
64
|
for (const [name] of Object.entries(modules)) {
|
43
65
|
// Add module to publicSettings
|
44
|
-
publicSettings.compilerOptions.paths['backend/*.web.js']
|
45
|
-
publicSettings.compilerOptions.paths['backend/*.web']
|
66
|
+
publicSettings.compilerOptions.paths['backend/*.web.js'].push(`../../../${name}/backend/*.web.ts` as never);
|
67
|
+
publicSettings.compilerOptions.paths['backend/*.web'].push(`../../../${name}/backend/*.web.ts` as never);
|
68
|
+
publicSettings.compilerOptions.paths['backend/*.jsw'].push(`../../../${name}/backend/*.jsw.ts` as never);
|
46
69
|
publicSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*` as never);
|
47
70
|
publicSettings.compilerOptions.paths.mocks.push(...[ `../../../${name}/__mocks__/*` as never ]);
|
48
71
|
publicSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*` as never);
|
49
|
-
publicSettings.include.push(...[
|
72
|
+
publicSettings.include.push(...[
|
73
|
+
`../../../${name}/public/**/*`,
|
74
|
+
`../../../${name}__mocks__/**/*`,
|
75
|
+
] as never[]);
|
50
76
|
// Add module to backendSettings
|
51
77
|
backendSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*` as never);
|
52
78
|
backendSettings.compilerOptions.paths['backend/*'].push(`../../../${name}/backend/*` as never);
|
53
79
|
backendSettings.compilerOptions.paths.mocks.push(...[ `../../../${name}/__mocks__/*` ] as never[]);
|
54
80
|
backendSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*` as never);
|
55
|
-
backendSettings.include.push(...[
|
81
|
+
backendSettings.include.push(...[
|
82
|
+
`../../../${name}/public/**/*`,
|
83
|
+
`../../../${name}__mocks__/**/*`,
|
84
|
+
`../../../${name}/backend/**/*`
|
85
|
+
] as never[]);
|
56
86
|
// Add module to masterSettings
|
57
|
-
masterSettings.compilerOptions.paths['backend/*.web.js']
|
58
|
-
masterSettings.compilerOptions.paths['backend/*.web']
|
87
|
+
masterSettings.compilerOptions.paths['backend/*.web.js'].push(`../../../${name}/backend/*.web.ts` as never);
|
88
|
+
masterSettings.compilerOptions.paths['backend/*.web'].push(`../../../${name}/backend/*.web.ts` as never);
|
89
|
+
masterSettings.compilerOptions.paths['backend/*.jsw'].push(`../../../${name}/backend/*.jsw.ts` as never);
|
59
90
|
masterSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*` as never);
|
60
|
-
masterSettings.compilerOptions.paths['backend/*'].push(`../../../${name}/backend/*` as never);
|
61
91
|
masterSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*` as never);
|
62
|
-
masterSettings.include.push(...[
|
92
|
+
masterSettings.include.push(...[
|
93
|
+
`../../../${name}/public/**/*`,
|
94
|
+
`../../../${name}__mocks__/**/*`,
|
95
|
+
] as never[]);
|
63
96
|
// Add module to pageSettings
|
64
|
-
pageSettings.compilerOptions.paths['backend/*.web.js']
|
65
|
-
pageSettings.compilerOptions.paths['backend/*.web']
|
97
|
+
pageSettings.compilerOptions.paths['backend/*.web.js'].push(`../../../${name}/backend/*.web.ts` as never);
|
98
|
+
pageSettings.compilerOptions.paths['backend/*.web'].push(`../../../${name}/backend/*.web.ts` as never);
|
99
|
+
pageSettings.compilerOptions.paths['backend/*.jsw'].push(`../../../${name}/backend/*.jsw.ts` as never);
|
66
100
|
pageSettings.compilerOptions.paths['public/*'].push(`../../../${name}/public/*` as never);
|
67
|
-
pageSettings.compilerOptions.paths['backend/*'].push(`../../../${name}/backend/*.jsw.ts` as never);
|
68
101
|
pageSettings.compilerOptions.paths['types/*'].push(`../../../${name}/types/*` as never);
|
69
|
-
pageSettings.include.push(...[
|
102
|
+
pageSettings.include.push(...[
|
103
|
+
`../../../${name}/public/**/*`,
|
104
|
+
`../../../${name}__mocks__/**/*`,
|
105
|
+
] as never[]);
|
70
106
|
}
|
71
107
|
}
|
72
108
|
|
73
|
-
return gulp.src(['./.wix/types/**/*.json', '!./.wix/types/wix-code-types
|
109
|
+
return gulp.src(['./.wix/types/**/*.json', '!./.wix/types/wix-code-types/**/*'])
|
74
110
|
.pipe(flatmap(function(stream: NodeJS.ReadableStream, file: File) {
|
75
111
|
count ++;
|
76
|
-
if (file.dirname.endsWith('public'))
|
77
|
-
|
78
|
-
|
112
|
+
if (file.dirname.endsWith('public')) {
|
113
|
+
return stream.pipe(jeditor(publicSettings))
|
114
|
+
.pipe(jeditor((json: any) => cleanTsConfig(json)))
|
115
|
+
.pipe(jeditor((json: any) => processJson(json)))
|
116
|
+
.pipe(replace('"../backend.d.ts",', '', replaceOptions))
|
117
|
+
.pipe(replace('"../../../src/backend/\\*\\*/\\*.web.js",', '', replaceOptions));
|
118
|
+
}
|
119
|
+
if (file.dirname.endsWith('backend')) {
|
120
|
+
return stream.pipe(jeditor(backendSettings))
|
121
|
+
.pipe(jeditor((json: any) => cleanTsConfig(json)))
|
122
|
+
.pipe(jeditor((json: any) => processJson(json)))
|
123
|
+
};
|
124
|
+
if (file.dirname.endsWith('masterPage')) {
|
125
|
+
return stream.pipe(jeditor(masterSettings))
|
126
|
+
.pipe(jeditor((json: any) => cleanTsConfig(json)))
|
127
|
+
.pipe(jeditor((json: any) => processJson(json)))
|
128
|
+
.pipe(replace('"../backend.d.ts",', '', replaceOptions))
|
129
|
+
.pipe(replace('"../../../src/backend/\\*\\*/\\*.web.js",', '', replaceOptions));
|
130
|
+
};
|
79
131
|
|
80
|
-
return stream.pipe(jeditor(pageSettings))
|
132
|
+
return stream.pipe(jeditor(pageSettings))
|
133
|
+
.pipe(jeditor((json: any) => cleanTsConfig(json)))
|
134
|
+
.pipe(jeditor((json: any) => processJson(json)))
|
135
|
+
.pipe(replace('"../backend.d.ts",', '', replaceOptions))
|
136
|
+
.pipe(replace('"../../../src/backend/\\*\\*/\\*.web.js",', '', replaceOptions));
|
81
137
|
}))
|
82
138
|
.pipe(replace('masterPage.masterPage.js', 'masterPage.ts', replaceOptions))
|
83
139
|
.pipe(replace('/src/', '/typescript/', replaceOptions))
|
@@ -141,51 +197,95 @@ export function addTypes(options: TaskOptions, done: gulp.TaskFunctionCallback):
|
|
141
197
|
});
|
142
198
|
};
|
143
199
|
|
144
|
-
|
145
200
|
function makeHashable(obj: any): any {
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
201
|
+
if (Array.isArray(obj)) {
|
202
|
+
return obj.map(makeHashable);
|
203
|
+
} else if (obj && typeof obj === 'object') {
|
204
|
+
const sortedKeys = Object.keys(obj).sort();
|
205
|
+
const result: any = {};
|
206
|
+
for (const key of sortedKeys) {
|
207
|
+
result[key] = makeHashable(obj[key]);
|
208
|
+
}
|
209
|
+
return result;
|
210
|
+
} else {
|
211
|
+
return obj;
|
212
|
+
}
|
158
213
|
}
|
159
214
|
|
160
215
|
function removeDuplicatesFromArray(arr: any[]): any[] {
|
161
|
-
|
162
|
-
|
216
|
+
const seen = new Set<string>();
|
217
|
+
const newArr: any[] = [];
|
163
218
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
219
|
+
for (const item of arr) {
|
220
|
+
const processedItem = processJson(item); // Recursively process the item
|
221
|
+
const hashableItem = makeHashable(processedItem);
|
222
|
+
const serializedItem = JSON.stringify(hashableItem);
|
168
223
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
224
|
+
if (!seen.has(serializedItem)) {
|
225
|
+
seen.add(serializedItem);
|
226
|
+
newArr.push(processedItem);
|
227
|
+
}
|
228
|
+
}
|
229
|
+
return newArr;
|
175
230
|
}
|
176
231
|
|
177
232
|
function processJson(obj: any): any {
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
233
|
+
if (Array.isArray(obj)) {
|
234
|
+
// Process arrays and remove duplicate items
|
235
|
+
const uniqueArray = removeDuplicatesFromArray(obj);
|
236
|
+
return uniqueArray.length > 0 ? uniqueArray : undefined; // Remove empty arrays
|
237
|
+
} else if (obj && typeof obj === 'object') {
|
238
|
+
// Process objects, ensuring keys are unique
|
239
|
+
const result: any = {};
|
240
|
+
const seenKeys = new Set<string>();
|
241
|
+
|
242
|
+
for (const key in obj) {
|
243
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
244
|
+
if (!seenKeys.has(key)) {
|
245
|
+
const processedValue = processJson(obj[key]);
|
246
|
+
if (processedValue !== undefined) { // Remove keys with undefined values
|
247
|
+
seenKeys.add(key);
|
248
|
+
result[key] = processedValue;
|
249
|
+
}
|
250
|
+
}
|
251
|
+
}
|
252
|
+
}
|
253
|
+
|
254
|
+
// If all keys were empty or undefined, return undefined
|
255
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
256
|
+
} else {
|
257
|
+
// Return primitive values as-is
|
258
|
+
return obj;
|
259
|
+
}
|
260
|
+
}
|
261
|
+
|
262
|
+
function cleanTsConfig(json: any): any {
|
263
|
+
// Process the paths object to remove duplicates
|
264
|
+
if (json.compilerOptions?.paths) {
|
265
|
+
for (const key in json.compilerOptions.paths) {
|
266
|
+
if (Array.isArray(json.compilerOptions.paths[key])) {
|
267
|
+
const uniquePaths = [...new Set(json.compilerOptions.paths[key])];
|
268
|
+
json.compilerOptions.paths[key] = uniquePaths.length > 0 ? uniquePaths : undefined;
|
269
|
+
}
|
270
|
+
}
|
271
|
+
}
|
272
|
+
|
273
|
+
// Process the include array to remove duplicates
|
274
|
+
if (Array.isArray(json.include)) {
|
275
|
+
const uniqueIncludes = [...new Set(json.include)];
|
276
|
+
json.include = uniqueIncludes.length > 0 ? uniqueIncludes : undefined;
|
277
|
+
}
|
278
|
+
|
279
|
+
// Remove empty or undefined fields
|
280
|
+
if (json.compilerOptions?.paths) {
|
281
|
+
json.compilerOptions.paths = Object.fromEntries(
|
282
|
+
Object.entries(json.compilerOptions.paths).filter(([_, value]) => value !== undefined)
|
283
|
+
);
|
284
|
+
}
|
285
|
+
|
286
|
+
if (json.include?.length === 0) {
|
287
|
+
delete json.include;
|
288
|
+
}
|
289
|
+
|
290
|
+
return json;
|
191
291
|
}
|
package/tsconfig.json
CHANGED