@capacitor/cli 3.4.1 → 3.5.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.
- package/CHANGELOG.md +33 -0
- package/assets/android-template.tar.gz +0 -0
- package/assets/capacitor-cordova-android-plugins.tar.gz +0 -0
- package/assets/capacitor-cordova-ios-plugins.tar.gz +0 -0
- package/assets/ios-template.tar.gz +0 -0
- package/dist/android/update.js +44 -1
- package/dist/declarations.d.ts +14 -0
- package/dist/tasks/copy.js +47 -5
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,39 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.5.0](https://github.com/ionic-team/capacitor/compare/3.4.3...3.5.0) (2022-04-22)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **cli:** support capacitor portals plugin changes needed ([#5558](https://github.com/ionic-team/capacitor/issues/5558)) ([6810a19](https://github.com/ionic-team/capacitor/commit/6810a19ae2bbda1f4b2afad61d37ca822ca157f5))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [3.4.3](https://github.com/ionic-team/capacitor/compare/3.4.2...3.4.3) (2022-03-04)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **cli:** avoid srcFiles is not iterable on kotlinNeededCheck ([#5481](https://github.com/ionic-team/capacitor/issues/5481)) ([3c2b579](https://github.com/ionic-team/capacitor/commit/3c2b579c6edb1fc69d85689b268eb92067b7821b))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## [3.4.2](https://github.com/ionic-team/capacitor/compare/3.4.1...3.4.2) (2022-03-03)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* **android:** compatibility with cordova kotlin plugins ([#5438](https://github.com/ionic-team/capacitor/issues/5438)) ([55bf004](https://github.com/ionic-team/capacitor/commit/55bf004897b3feb280ab6b6575d2a2c1a0a183e2))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
6
39
|
## [3.4.1](https://github.com/ionic-team/capacitor/compare/3.4.0...3.4.1) (2022-02-09)
|
|
7
40
|
|
|
8
41
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/android/update.js
CHANGED
|
@@ -166,7 +166,11 @@ if (hasProperty('postBuildExtras')) {
|
|
|
166
166
|
}
|
|
167
167
|
exports.installGradlePlugins = installGradlePlugins;
|
|
168
168
|
async function handleCordovaPluginsGradle(config, cordovaPlugins) {
|
|
169
|
+
var _a, _b, _c;
|
|
169
170
|
const pluginsGradlePath = path_1.join(config.android.cordovaPluginsDirAbs, 'build.gradle');
|
|
171
|
+
const kotlinNeeded = await kotlinNeededCheck(config, cordovaPlugins);
|
|
172
|
+
const isKotlinVersionInVariablesGradle = (await getVariablesGradleFile(config)).includes('kotlin_version');
|
|
173
|
+
const kotlinVersionString = (_c = (_b = (_a = config.app.extConfig.cordova) === null || _a === void 0 ? void 0 : _a.preferences) === null || _b === void 0 ? void 0 : _b.GradlePluginKotlinVersion) !== null && _c !== void 0 ? _c : '1.4.32';
|
|
170
174
|
const frameworksArray = [];
|
|
171
175
|
let prefsArray = [];
|
|
172
176
|
const applyArray = [];
|
|
@@ -193,10 +197,24 @@ async function handleCordovaPluginsGradle(config, cordovaPlugins) {
|
|
|
193
197
|
})
|
|
194
198
|
.join('\n');
|
|
195
199
|
frameworkString = await replaceFrameworkVariables(config, prefsArray, frameworkString);
|
|
200
|
+
if (kotlinNeeded) {
|
|
201
|
+
frameworkString += `\n implementation "androidx.core:core-ktx:$androidxCoreKTXVersion"`;
|
|
202
|
+
frameworkString += `\n implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"`;
|
|
203
|
+
}
|
|
196
204
|
const applyString = applyArray.join('\n');
|
|
197
205
|
let buildGradle = await utils_fs_1.readFile(pluginsGradlePath, { encoding: 'utf-8' });
|
|
198
206
|
buildGradle = buildGradle.replace(/(SUB-PROJECT DEPENDENCIES START)[\s\S]*(\/\/ SUB-PROJECT DEPENDENCIES END)/, '$1\n' + frameworkString.concat('\n') + ' $2');
|
|
199
207
|
buildGradle = buildGradle.replace(/(PLUGIN GRADLE EXTENSIONS START)[\s\S]*(\/\/ PLUGIN GRADLE EXTENSIONS END)/, '$1\n' + applyString.concat('\n') + '$2');
|
|
208
|
+
if (kotlinNeeded) {
|
|
209
|
+
buildGradle = buildGradle.replace(/(buildscript\s{\n(\t|\s{4})repositories\s{\n((\t{2}|\s{8}).+\n)+(\t|\s{4})}\n(\t|\s{4})dependencies\s{\n(\t{2}|\s{8}).+)\n((\t|\s{4})}\n}\n)/, `$1\n classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:` +
|
|
210
|
+
(isKotlinVersionInVariablesGradle
|
|
211
|
+
? '$kotlin_version'
|
|
212
|
+
: kotlinVersionString) +
|
|
213
|
+
`"\n$8`);
|
|
214
|
+
buildGradle = buildGradle.replace(/(ext\s{)/, `$1\n kotlin_version = project.hasProperty('kotlin_version') ? rootProject.ext.kotlin_version : '${kotlinVersionString}'\n androidxCoreKTXVersion = project.hasProperty('androidxCoreKTXVersion') ? rootProject.ext.androidxCoreKTXVersion : '1.6.0'`);
|
|
215
|
+
buildGradle = buildGradle.replace(/(apply\splugin:\s'com\.android\.library')/, `$1\napply plugin: 'kotlin-android'`);
|
|
216
|
+
buildGradle = buildGradle.replace(/(compileOptions\s{\n((\t{2}|\s{8}).+\n)+(\t|\s{4})})\n(})/, `$1\n sourceSets {\n main.java.srcDirs += 'src/main/kotlin'\n }\n$5`);
|
|
217
|
+
}
|
|
200
218
|
await utils_fs_1.writeFile(pluginsGradlePath, buildGradle);
|
|
201
219
|
const cordovaVariables = `// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
|
|
202
220
|
ext {
|
|
@@ -208,6 +226,27 @@ ext {
|
|
|
208
226
|
await utils_fs_1.writeFile(path_1.join(config.android.cordovaPluginsDirAbs, 'cordova.variables.gradle'), cordovaVariables);
|
|
209
227
|
}
|
|
210
228
|
exports.handleCordovaPluginsGradle = handleCordovaPluginsGradle;
|
|
229
|
+
async function kotlinNeededCheck(config, cordovaPlugins) {
|
|
230
|
+
var _a, _b;
|
|
231
|
+
if (((_b = (_a = config.app.extConfig.cordova) === null || _a === void 0 ? void 0 : _a.preferences) === null || _b === void 0 ? void 0 : _b.GradlePluginKotlinEnabled) !==
|
|
232
|
+
'true') {
|
|
233
|
+
for (const plugin of cordovaPlugins) {
|
|
234
|
+
const androidPlatform = plugin_1.getPluginPlatform(plugin, platform);
|
|
235
|
+
const sourceFiles = androidPlatform['source-file'];
|
|
236
|
+
if (sourceFiles) {
|
|
237
|
+
for (const srcFile of sourceFiles) {
|
|
238
|
+
if (/^.*\.kt$/.test(srcFile['$'].src)) {
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
211
250
|
async function copyPluginsNativeFiles(config, cordovaPlugins) {
|
|
212
251
|
const pluginsPath = path_1.join(config.android.cordovaPluginsDirAbs, 'src', 'main');
|
|
213
252
|
for (const p of cordovaPlugins) {
|
|
@@ -257,12 +296,16 @@ async function getPluginsTask(config) {
|
|
|
257
296
|
return androidPlugins;
|
|
258
297
|
});
|
|
259
298
|
}
|
|
260
|
-
async function
|
|
299
|
+
async function getVariablesGradleFile(config) {
|
|
261
300
|
const variablesFile = path_1.resolve(config.android.platformDirAbs, 'variables.gradle');
|
|
262
301
|
let variablesGradle = '';
|
|
263
302
|
if (await utils_fs_1.pathExists(variablesFile)) {
|
|
264
303
|
variablesGradle = await utils_fs_1.readFile(variablesFile, { encoding: 'utf-8' });
|
|
265
304
|
}
|
|
305
|
+
return variablesGradle;
|
|
306
|
+
}
|
|
307
|
+
async function replaceFrameworkVariables(config, prefsArray, frameworkString) {
|
|
308
|
+
const variablesGradle = await getVariablesGradleFile(config);
|
|
266
309
|
prefsArray.map((preference) => {
|
|
267
310
|
if (!variablesGradle.includes(preference.$.name)) {
|
|
268
311
|
frameworkString = frameworkString.replace(new RegExp(('$' + preference.$.name).replace('$', '\\$&'), 'g'), preference.$.default);
|
package/dist/declarations.d.ts
CHANGED
|
@@ -432,6 +432,11 @@ export interface CapacitorConfig {
|
|
|
432
432
|
*/
|
|
433
433
|
includePlugins?: string[];
|
|
434
434
|
}
|
|
435
|
+
export interface Portal {
|
|
436
|
+
name: string;
|
|
437
|
+
webDir: string;
|
|
438
|
+
appId?: string;
|
|
439
|
+
}
|
|
435
440
|
export interface PluginsConfig {
|
|
436
441
|
/**
|
|
437
442
|
* Plugin configuration by class name.
|
|
@@ -441,4 +446,13 @@ export interface PluginsConfig {
|
|
|
441
446
|
[key: string]: {
|
|
442
447
|
[key: string]: any;
|
|
443
448
|
} | undefined;
|
|
449
|
+
/**
|
|
450
|
+
* Capacitor Portals plugin configuration
|
|
451
|
+
*
|
|
452
|
+
* @since 3.5.0
|
|
453
|
+
*/
|
|
454
|
+
Portals?: {
|
|
455
|
+
shell: Portal;
|
|
456
|
+
apps: Portal[];
|
|
457
|
+
};
|
|
444
458
|
}
|
package/dist/tasks/copy.js
CHANGED
|
@@ -9,6 +9,7 @@ const common_1 = require("../common");
|
|
|
9
9
|
const cordova_1 = require("../cordova");
|
|
10
10
|
const errors_1 = require("../errors");
|
|
11
11
|
const log_1 = require("../log");
|
|
12
|
+
const plugin_1 = require("../plugin");
|
|
12
13
|
const promise_1 = require("../util/promise");
|
|
13
14
|
const copy_1 = require("../web/copy");
|
|
14
15
|
async function copyCommand(config, selectedPlatformName) {
|
|
@@ -43,21 +44,41 @@ async function copy(config, platformName) {
|
|
|
43
44
|
throw result;
|
|
44
45
|
}
|
|
45
46
|
await common_1.runPlatformHook(config, platformName, config.app.rootDir, 'capacitor:copy:before');
|
|
47
|
+
const allPlugins = await plugin_1.getPlugins(config, platformName);
|
|
48
|
+
let usesCapacitorPortals = false;
|
|
49
|
+
if (allPlugins.filter(plugin => plugin.id === '@ionic-enterprise/capacitor-portals').length > 0) {
|
|
50
|
+
usesCapacitorPortals = true;
|
|
51
|
+
}
|
|
46
52
|
if (platformName === config.ios.name) {
|
|
47
|
-
|
|
53
|
+
if (usesCapacitorPortals) {
|
|
54
|
+
await copyFederatedWebDirs(config, await config.ios.webDirAbs);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
await copyWebDir(config, await config.ios.webDirAbs, config.app.webDirAbs);
|
|
58
|
+
}
|
|
48
59
|
await copyCapacitorConfig(config, config.ios.nativeTargetDirAbs);
|
|
49
60
|
const cordovaPlugins = await cordova_1.getCordovaPlugins(config, platformName);
|
|
50
61
|
await cordova_1.handleCordovaPluginsJS(cordovaPlugins, config, platformName);
|
|
51
62
|
}
|
|
52
63
|
else if (platformName === config.android.name) {
|
|
53
|
-
|
|
64
|
+
if (usesCapacitorPortals) {
|
|
65
|
+
await copyFederatedWebDirs(config, config.android.webDirAbs);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
await copyWebDir(config, config.android.webDirAbs, config.app.webDirAbs);
|
|
69
|
+
}
|
|
54
70
|
await copyCapacitorConfig(config, config.android.assetsDirAbs);
|
|
55
71
|
const cordovaPlugins = await cordova_1.getCordovaPlugins(config, platformName);
|
|
56
72
|
await cordova_1.handleCordovaPluginsJS(cordovaPlugins, config, platformName);
|
|
57
73
|
await cordova_1.writeCordovaAndroidManifest(cordovaPlugins, config, platformName);
|
|
58
74
|
}
|
|
59
75
|
else if (platformName === config.web.name) {
|
|
60
|
-
|
|
76
|
+
if (usesCapacitorPortals) {
|
|
77
|
+
log_1.logger.info('Capacitor Portals Plugin installed, skipping web bundling...');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
await copy_1.copyWeb(config);
|
|
81
|
+
}
|
|
61
82
|
}
|
|
62
83
|
else {
|
|
63
84
|
throw `Platform ${platformName} is not valid.`;
|
|
@@ -76,9 +97,8 @@ async function copyCapacitorConfig(config, nativeAbsDir) {
|
|
|
76
97
|
});
|
|
77
98
|
});
|
|
78
99
|
}
|
|
79
|
-
async function copyWebDir(config, nativeAbsDir) {
|
|
100
|
+
async function copyWebDir(config, nativeAbsDir, webAbsDir) {
|
|
80
101
|
var _a;
|
|
81
|
-
const webAbsDir = config.app.webDirAbs;
|
|
82
102
|
const webRelDir = path_1.basename(webAbsDir);
|
|
83
103
|
const nativeRelDir = path_1.relative(config.app.rootDir, nativeAbsDir);
|
|
84
104
|
if (((_a = config.app.extConfig.server) === null || _a === void 0 ? void 0 : _a.url) && !(await utils_fs_1.pathExists(webAbsDir))) {
|
|
@@ -91,3 +111,25 @@ async function copyWebDir(config, nativeAbsDir) {
|
|
|
91
111
|
return utils_fs_1.copy(webAbsDir, nativeAbsDir);
|
|
92
112
|
});
|
|
93
113
|
}
|
|
114
|
+
async function copyFederatedWebDirs(config, nativeAbsDir) {
|
|
115
|
+
var _a, _b;
|
|
116
|
+
log_1.logger.info('Capacitor Portals Plugin Loaded - Copying Web Assets');
|
|
117
|
+
if (!((_b = (_a = config.app.extConfig) === null || _a === void 0 ? void 0 : _a.plugins) === null || _b === void 0 ? void 0 : _b.Portals)) {
|
|
118
|
+
throw `Capacitor Portals plugin is present but no valid config is defined.`;
|
|
119
|
+
}
|
|
120
|
+
const portalsConfig = config.app.extConfig.plugins.Portals;
|
|
121
|
+
if (!isPortal(portalsConfig.shell)) {
|
|
122
|
+
throw `Capacitor Portals plugin is present but no valid Shell application is defined in the config.`;
|
|
123
|
+
}
|
|
124
|
+
if (!portalsConfig.apps.every(isPortal)) {
|
|
125
|
+
throw `Capacitor Portals plugin is present but there is a problem with the apps defined in the config.`;
|
|
126
|
+
}
|
|
127
|
+
await Promise.all([...portalsConfig.apps, portalsConfig.shell].map(app => {
|
|
128
|
+
const appDir = path_1.resolve(config.app.rootDir, app.webDir);
|
|
129
|
+
return copyWebDir(config, path_1.resolve(nativeAbsDir, app.name), appDir);
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
function isPortal(config) {
|
|
133
|
+
return (config.webDir !== undefined &&
|
|
134
|
+
config.name !== undefined);
|
|
135
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Capacitor: Cross-platform apps with JavaScript and the web",
|
|
5
5
|
"homepage": "https://capacitorjs.com",
|
|
6
6
|
"author": "Ionic Team <hi@ionic.io> (https://ionic.io)",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"publishConfig": {
|
|
86
86
|
"access": "public"
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "f03e1a67140c8af25288456f9e99dd6234b50f25"
|
|
89
89
|
}
|