From a25f3ac1f2ce7ec41d9506f0ccecf6ac4cc023f9 Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Wed, 6 Mar 2024 15:46:57 +0900 Subject: [PATCH 01/10] feat: privacy manifest settings in config.xml --- lib/ConfigParseriOS.js | 45 ++++++++++++++++++++++++++++++++++++++++++ lib/prepare.js | 39 +++++++++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 lib/ConfigParseriOS.js diff --git a/lib/ConfigParseriOS.js b/lib/ConfigParseriOS.js new file mode 100644 index 000000000..669d63c4f --- /dev/null +++ b/lib/ConfigParseriOS.js @@ -0,0 +1,45 @@ + +/** + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +'use strict'; + +const et = require('elementtree'); +const fs = require('fs-extra'); +const path = require('path'); +const ConfigParser = require('cordova-common').ConfigParser; + +class ConfigParseriOS extends ConfigParser { + constructor (path) { + super(path); + } + + /** getPrivacyManifest */ + getPrivacyManifest () { + const platform_manifest = this.doc.find(`./platform[@name="ios"]/privacy-manifest-ios`); + if (platform_manifest != null) { + return platform_manifest; + } + const manifest = this.doc.find('privacy-manifest-ios'); + return manifest; + } +} + +module.exports = ConfigParseriOS; + diff --git a/lib/prepare.js b/lib/prepare.js index 38239e4c8..57ab7bbd6 100644 --- a/lib/prepare.js +++ b/lib/prepare.js @@ -23,6 +23,7 @@ const fs = require('fs-extra'); const path = require('path'); const unorm = require('unorm'); const plist = require('plist'); +const et = require('elementtree'); const URL = require('url'); const events = require('cordova-common').events; const xmlHelpers = require('cordova-common').xmlHelpers; @@ -35,6 +36,7 @@ const FileUpdater = require('cordova-common').FileUpdater; const projectFile = require('./projectFile'); const Podfile = require('./Podfile').Podfile; const check_reqs = require('./check_reqs'); +const ConfigParseriOS = require('./ConfigParseriOS'); // launch storyboard and related constants const IMAGESET_COMPACT_SIZE_CLASS = 'compact'; @@ -43,8 +45,15 @@ const CDV_ANY_SIZE_CLASS = 'any'; module.exports.prepare = function (cordovaProject, options) { const platformJson = PlatformJson.load(this.locations.root, 'ios'); const munger = new PlatformMunger('ios', this.locations.root, platformJson, new PluginInfoProvider()); - this._config = updateConfigFile(cordovaProject.projectConfig, munger, this.locations); + + const parser = new ConfigParseriOS(cordovaProject.projectConfig.path); + try { + const manifest = parser.getPrivacyManifest(); + overwritePrivacyManifest(manifest, this.locations); + } catch (err) { + return Promise.reject(new CordovaError(`Could not parse PrivacyManifest in config.xml: ${err}`)); + } // Update own www dir with project's www assets and plugins' assets and js-files return updateWww(cordovaProject, this.locations) @@ -87,6 +96,34 @@ module.exports.clean = function (options) { }); }; + +/** + * Overwrites the privacy manifest file with the provided manifest or sets the default manifest. + * @param {ElementTree} manifest - The manifest to be written to the privacy manifest file. + * @param {Object} locations - The locations object containing the path to the Xcode Cordova project. + */ +function overwritePrivacyManifest (manifest, locations) { + const privacyManifestDest = path.join(locations.xcodeCordovaProj, 'PrivacyInfo.xcprivacy'); + if (manifest != null) { + const XML_DECLARATION = '\n'; + const DOCTYPE = '\n'; + const plistElement = et.Element('plist'); + plistElement.set('version', '1.0'); + const dictElement = et.SubElement(plistElement, 'dict'); + manifest.getchildren().forEach((child) => { + dictElement.append(child); + }); + const etree = new et.ElementTree(plistElement); + const xmlString = XML_DECLARATION + DOCTYPE + etree.write({'xml_declaration': false}); + fs.writeFileSync(privacyManifestDest, xmlString, 'utf-8'); + return; + } + // Set default privacy manifest + const defaultPrivacyManifest = path.join(__dirname, '..', 'templates', 'project', '__PROJECT_NAME__', 'PrivacyInfo.xcprivacy'); + const xmlString = fs.readFileSync(defaultPrivacyManifest, 'utf8'); + fs.writeFileSync(privacyManifestDest, xmlString); +} + /** * Updates config files in project based on app's config.xml and config munge, * generated by plugins. From 7cc5703e2481ad8aea1bca5e9f8b1e9d7e2129b1 Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Wed, 6 Mar 2024 16:28:35 +0900 Subject: [PATCH 02/10] refac: remove unused code and tidy up --- lib/ConfigParseriOS.js | 10 +--------- lib/prepare.js | 5 ++--- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/lib/ConfigParseriOS.js b/lib/ConfigParseriOS.js index 669d63c4f..18786b36b 100644 --- a/lib/ConfigParseriOS.js +++ b/lib/ConfigParseriOS.js @@ -20,19 +20,12 @@ 'use strict'; -const et = require('elementtree'); -const fs = require('fs-extra'); -const path = require('path'); const ConfigParser = require('cordova-common').ConfigParser; class ConfigParseriOS extends ConfigParser { - constructor (path) { - super(path); - } - /** getPrivacyManifest */ getPrivacyManifest () { - const platform_manifest = this.doc.find(`./platform[@name="ios"]/privacy-manifest-ios`); + const platform_manifest = this.doc.find('./platform[@name="ios"]/privacy-manifest-ios'); if (platform_manifest != null) { return platform_manifest; } @@ -42,4 +35,3 @@ class ConfigParseriOS extends ConfigParser { } module.exports = ConfigParseriOS; - diff --git a/lib/prepare.js b/lib/prepare.js index 57ab7bbd6..7d3ba8c43 100644 --- a/lib/prepare.js +++ b/lib/prepare.js @@ -46,7 +46,7 @@ module.exports.prepare = function (cordovaProject, options) { const platformJson = PlatformJson.load(this.locations.root, 'ios'); const munger = new PlatformMunger('ios', this.locations.root, platformJson, new PluginInfoProvider()); this._config = updateConfigFile(cordovaProject.projectConfig, munger, this.locations); - + const parser = new ConfigParseriOS(cordovaProject.projectConfig.path); try { const manifest = parser.getPrivacyManifest(); @@ -96,7 +96,6 @@ module.exports.clean = function (options) { }); }; - /** * Overwrites the privacy manifest file with the provided manifest or sets the default manifest. * @param {ElementTree} manifest - The manifest to be written to the privacy manifest file. @@ -114,7 +113,7 @@ function overwritePrivacyManifest (manifest, locations) { dictElement.append(child); }); const etree = new et.ElementTree(plistElement); - const xmlString = XML_DECLARATION + DOCTYPE + etree.write({'xml_declaration': false}); + const xmlString = XML_DECLARATION + DOCTYPE + etree.write({ xml_declaration: false }); fs.writeFileSync(privacyManifestDest, xmlString, 'utf-8'); return; } From 76c8e209ba044d5e283ceedd95d766fcd77eaa31 Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Wed, 6 Mar 2024 17:26:44 +0900 Subject: [PATCH 03/10] refac: update class name PlatformConfigParser --- lib/{ConfigParseriOS.js => PlatformConfigParser.js} | 4 ++-- lib/prepare.js | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) rename lib/{ConfigParseriOS.js => PlatformConfigParser.js} (93%) diff --git a/lib/ConfigParseriOS.js b/lib/PlatformConfigParser.js similarity index 93% rename from lib/ConfigParseriOS.js rename to lib/PlatformConfigParser.js index 18786b36b..c0efad91c 100644 --- a/lib/ConfigParseriOS.js +++ b/lib/PlatformConfigParser.js @@ -22,7 +22,7 @@ const ConfigParser = require('cordova-common').ConfigParser; -class ConfigParseriOS extends ConfigParser { +class PlatformConfigParser extends ConfigParser { /** getPrivacyManifest */ getPrivacyManifest () { const platform_manifest = this.doc.find('./platform[@name="ios"]/privacy-manifest-ios'); @@ -34,4 +34,4 @@ class ConfigParseriOS extends ConfigParser { } } -module.exports = ConfigParseriOS; +module.exports = PlatformConfigParser; diff --git a/lib/prepare.js b/lib/prepare.js index 7d3ba8c43..49493357e 100644 --- a/lib/prepare.js +++ b/lib/prepare.js @@ -17,8 +17,6 @@ under the License. */ -'use strict'; - const fs = require('fs-extra'); const path = require('path'); const unorm = require('unorm'); @@ -36,7 +34,7 @@ const FileUpdater = require('cordova-common').FileUpdater; const projectFile = require('./projectFile'); const Podfile = require('./Podfile').Podfile; const check_reqs = require('./check_reqs'); -const ConfigParseriOS = require('./ConfigParseriOS'); +const PlatformConfigParser = require('./PlatformConfigParser'); // launch storyboard and related constants const IMAGESET_COMPACT_SIZE_CLASS = 'compact'; @@ -47,7 +45,7 @@ module.exports.prepare = function (cordovaProject, options) { const munger = new PlatformMunger('ios', this.locations.root, platformJson, new PluginInfoProvider()); this._config = updateConfigFile(cordovaProject.projectConfig, munger, this.locations); - const parser = new ConfigParseriOS(cordovaProject.projectConfig.path); + const parser = new PlatformConfigParser(cordovaProject.projectConfig.path); try { const manifest = parser.getPrivacyManifest(); overwritePrivacyManifest(manifest, this.locations); From 35870a06f20ea9bd8f514bae22875a3628818160 Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Wed, 6 Mar 2024 17:34:04 +0900 Subject: [PATCH 04/10] feat: add elementtree in package.json --- package-lock.json | 1 + package.json | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 744d6aa17..862e21156 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "Apache-2.0", "dependencies": { "cordova-common": "^5.0.0", + "elementtree": "^0.1.7", "execa": "^5.1.1", "fs-extra": "^11.1.1", "ios-sim": "^8.0.2", diff --git a/package.json b/package.json index 6082340a1..2a305d22b 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,8 @@ "unorm": "^1.6.0", "which": "^3.0.1", "xcode": "^3.0.1", - "xml-escape": "^1.1.0" + "xml-escape": "^1.1.0", + "elementtree": "^0.1.7" }, "nyc": { "include": [ From c2210a2d39373bb54974dce0af99ad9ba2c5ff3f Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Thu, 7 Mar 2024 17:20:13 +0900 Subject: [PATCH 05/10] dev: change privacy manifest tag name to privacy-manifest from privacy-manifest-ios --- lib/PlatformConfigParser.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/PlatformConfigParser.js b/lib/PlatformConfigParser.js index c0efad91c..f6cf2584c 100644 --- a/lib/PlatformConfigParser.js +++ b/lib/PlatformConfigParser.js @@ -1,4 +1,3 @@ - /** Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file @@ -25,12 +24,11 @@ const ConfigParser = require('cordova-common').ConfigParser; class PlatformConfigParser extends ConfigParser { /** getPrivacyManifest */ getPrivacyManifest () { - const platform_manifest = this.doc.find('./platform[@name="ios"]/privacy-manifest-ios'); + const platform_manifest = this.doc.find('./platform[@name="ios"]/privacy-manifest'); if (platform_manifest != null) { return platform_manifest; } - const manifest = this.doc.find('privacy-manifest-ios'); - return manifest; + return null; } } From efd1ec376a5ed8b4a8605e1f13bae82a41f797ab Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Thu, 7 Mar 2024 23:05:51 +0900 Subject: [PATCH 06/10] test: add test codes --- lib/prepare.js | 2 +- .../fixtures/prepare/no-privacy-manifest.xml | 23 ++++++++ .../fixtures/prepare/privacy-manifest.xml | 56 +++++++++++++++++++ tests/spec/unit/prepare.spec.js | 40 +++++++++++++ 4 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 tests/spec/unit/fixtures/prepare/no-privacy-manifest.xml create mode 100644 tests/spec/unit/fixtures/prepare/privacy-manifest.xml diff --git a/lib/prepare.js b/lib/prepare.js index 49493357e..cfaab02c2 100644 --- a/lib/prepare.js +++ b/lib/prepare.js @@ -118,7 +118,7 @@ function overwritePrivacyManifest (manifest, locations) { // Set default privacy manifest const defaultPrivacyManifest = path.join(__dirname, '..', 'templates', 'project', '__PROJECT_NAME__', 'PrivacyInfo.xcprivacy'); const xmlString = fs.readFileSync(defaultPrivacyManifest, 'utf8'); - fs.writeFileSync(privacyManifestDest, xmlString); + fs.writeFileSync(privacyManifestDest, xmlString, 'utf-8'); } /** diff --git a/tests/spec/unit/fixtures/prepare/no-privacy-manifest.xml b/tests/spec/unit/fixtures/prepare/no-privacy-manifest.xml new file mode 100644 index 000000000..98afac213 --- /dev/null +++ b/tests/spec/unit/fixtures/prepare/no-privacy-manifest.xml @@ -0,0 +1,23 @@ + + + + + SampleApp + diff --git a/tests/spec/unit/fixtures/prepare/privacy-manifest.xml b/tests/spec/unit/fixtures/prepare/privacy-manifest.xml new file mode 100644 index 000000000..510464a50 --- /dev/null +++ b/tests/spec/unit/fixtures/prepare/privacy-manifest.xml @@ -0,0 +1,56 @@ + + + + + SampleApp + + + NSPrivacyTracking + + NSPrivacyAccessedAPITypes + + NSPrivacyTrackingDomains + + NSPrivacyCollectedDataTypes + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + + + NSPrivacyCollectedDataTypeLinked + + + + NSPrivacyCollectedDataTypeTracking + + + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + + + diff --git a/tests/spec/unit/prepare.spec.js b/tests/spec/unit/prepare.spec.js index b51a9f6da..63cc8752b 100644 --- a/tests/spec/unit/prepare.spec.js +++ b/tests/spec/unit/prepare.spec.js @@ -28,6 +28,7 @@ const XcodeProject = xcode.project; const rewire = require('rewire'); const prepare = rewire('../../../lib/prepare'); const projectFile = require('../../../lib/projectFile'); +const { writeFileSync } = require('fs'); const FileUpdater = require('cordova-common').FileUpdater; const tmpDir = path.join(__dirname, '../../../tmp'); @@ -1504,6 +1505,45 @@ describe('prepare', () => { expect(plist.build.calls.mostRecent().args[0].CFBundleDisplayName).toEqual('MyApp'); }); }); + it('Test#021 : - should write out the privacy manifest ', () => { + plist.parse.and.callThrough(); + writeFileSyncSpy.and.callThrough(); + const projectRoot = iosProject; + const platformProjDir = path.join(projectRoot, 'platforms', 'ios', 'SampleApp'); + const PlatformConfigParser = require('../../../lib/PlatformConfigParser'); + const my_config = new PlatformConfigParser(path.join(FIXTURES, 'prepare', 'privacy-manifest.xml')); + const privacyManifest = my_config.getPrivacyManifest(); + const overwritePrivacyManifest = prepare.__get__('overwritePrivacyManifest'); + overwritePrivacyManifest(privacyManifest, p.locations); + const privacyManifestPathDest = path.join(platformProjDir, 'PrivacyInfo.xcprivacy') + expect(writeFileSyncSpy).toHaveBeenCalledWith(privacyManifestPathDest, jasmine.any(String), 'utf-8'); + const xml = writeFileSyncSpy.calls.all()[0].args[1]; + const json = plist.parse(xml); + expect(json['NSPrivacyTracking']).toBeTrue(); + expect(json['NSPrivacyAccessedAPITypes'].length).toBe(0); + expect(json['NSPrivacyTrackingDomains'].length).toBe(0); + expect(json['NSPrivacyCollectedDataTypes'].length).toBe(1); + }); + it('Test#022 : no - should write out the privacy manifest ', () => { + plist.parse.and.callThrough(); + writeFileSyncSpy.and.callThrough(); + const projectRoot = iosProject; + const platformProjDir = path.join(projectRoot, 'platforms', 'ios', 'SampleApp'); + const PlatformConfigParser = require('../../../lib/PlatformConfigParser'); + const my_config = new PlatformConfigParser(path.join(FIXTURES, 'prepare', 'no-privacy-manifest.xml')); + const privacyManifest = my_config.getPrivacyManifest(); + const overwritePrivacyManifest = prepare.__get__('overwritePrivacyManifest'); + overwritePrivacyManifest(privacyManifest, p.locations); + const privacyManifestPathDest = path.join(platformProjDir, 'PrivacyInfo.xcprivacy') + expect(writeFileSyncSpy).toHaveBeenCalledWith(privacyManifestPathDest, jasmine.any(String), 'utf-8'); + const xml = writeFileSyncSpy.calls.all()[0].args[1]; + const json = plist.parse(xml); + expect(json['NSPrivacyTracking']).toBeFalse(); + expect(json['NSPrivacyAccessedAPITypes'].length).toBe(0); + expect(json['NSPrivacyTrackingDomains'].length).toBe(0); + expect(json['NSPrivacyCollectedDataTypes'].length).toBe(0); + }); + }); describe(' tests', () => { From 450fcc8073b39b0cded510736c66921fbb6cbe5e Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Fri, 8 Mar 2024 15:01:26 +0900 Subject: [PATCH 07/10] refactor: Modified to match Linter. --- tests/spec/unit/prepare.spec.js | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/tests/spec/unit/prepare.spec.js b/tests/spec/unit/prepare.spec.js index 63cc8752b..235c0e2d2 100644 --- a/tests/spec/unit/prepare.spec.js +++ b/tests/spec/unit/prepare.spec.js @@ -28,7 +28,6 @@ const XcodeProject = xcode.project; const rewire = require('rewire'); const prepare = rewire('../../../lib/prepare'); const projectFile = require('../../../lib/projectFile'); -const { writeFileSync } = require('fs'); const FileUpdater = require('cordova-common').FileUpdater; const tmpDir = path.join(__dirname, '../../../tmp'); @@ -1515,14 +1514,14 @@ describe('prepare', () => { const privacyManifest = my_config.getPrivacyManifest(); const overwritePrivacyManifest = prepare.__get__('overwritePrivacyManifest'); overwritePrivacyManifest(privacyManifest, p.locations); - const privacyManifestPathDest = path.join(platformProjDir, 'PrivacyInfo.xcprivacy') + const privacyManifestPathDest = path.join(platformProjDir, 'PrivacyInfo.xcprivacy'); expect(writeFileSyncSpy).toHaveBeenCalledWith(privacyManifestPathDest, jasmine.any(String), 'utf-8'); const xml = writeFileSyncSpy.calls.all()[0].args[1]; const json = plist.parse(xml); - expect(json['NSPrivacyTracking']).toBeTrue(); - expect(json['NSPrivacyAccessedAPITypes'].length).toBe(0); - expect(json['NSPrivacyTrackingDomains'].length).toBe(0); - expect(json['NSPrivacyCollectedDataTypes'].length).toBe(1); + expect(json.NSPrivacyTracking).toBeTrue(); + expect(json.NSPrivacyAccessedAPITypes.length).toBe(0); + expect(json.NSPrivacyTrackingDomains.length).toBe(0); + expect(json.NSPrivacyCollectedDataTypes.length).toBe(1); }); it('Test#022 : no - should write out the privacy manifest ', () => { plist.parse.and.callThrough(); @@ -1534,14 +1533,14 @@ describe('prepare', () => { const privacyManifest = my_config.getPrivacyManifest(); const overwritePrivacyManifest = prepare.__get__('overwritePrivacyManifest'); overwritePrivacyManifest(privacyManifest, p.locations); - const privacyManifestPathDest = path.join(platformProjDir, 'PrivacyInfo.xcprivacy') + const privacyManifestPathDest = path.join(platformProjDir, 'PrivacyInfo.xcprivacy'); expect(writeFileSyncSpy).toHaveBeenCalledWith(privacyManifestPathDest, jasmine.any(String), 'utf-8'); const xml = writeFileSyncSpy.calls.all()[0].args[1]; const json = plist.parse(xml); - expect(json['NSPrivacyTracking']).toBeFalse(); - expect(json['NSPrivacyAccessedAPITypes'].length).toBe(0); - expect(json['NSPrivacyTrackingDomains'].length).toBe(0); - expect(json['NSPrivacyCollectedDataTypes'].length).toBe(0); + expect(json.NSPrivacyTracking).toBeFalse(); + expect(json.NSPrivacyAccessedAPITypes.length).toBe(0); + expect(json.NSPrivacyTrackingDomains.length).toBe(0); + expect(json.NSPrivacyCollectedDataTypes.length).toBe(0); }); }); From 8f3100cf1af6d329c0237ba81b1c9c6f61281d72 Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Fri, 8 Mar 2024 15:14:34 +0900 Subject: [PATCH 08/10] refac: improve PlatformConfigParser --- lib/PlatformConfigParser.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/PlatformConfigParser.js b/lib/PlatformConfigParser.js index f6cf2584c..0d0bb27fa 100644 --- a/lib/PlatformConfigParser.js +++ b/lib/PlatformConfigParser.js @@ -22,13 +22,12 @@ const ConfigParser = require('cordova-common').ConfigParser; class PlatformConfigParser extends ConfigParser { - /** getPrivacyManifest */ + /** + * Returns the privacy manifest node, if available. + * Otherwise `null` is returned. + */ getPrivacyManifest () { - const platform_manifest = this.doc.find('./platform[@name="ios"]/privacy-manifest'); - if (platform_manifest != null) { - return platform_manifest; - } - return null; + return this.doc.find('./platform[@name="ios"]/privacy-manifest'); } } From debc7e3c5ed1c9dde7dc8774df799e38f9d18c80 Mon Sep 17 00:00:00 2001 From: knaito-asial Date: Mon, 11 Mar 2024 17:29:26 +0900 Subject: [PATCH 09/10] refac: remove unnecessary blank line --- tests/spec/unit/prepare.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/spec/unit/prepare.spec.js b/tests/spec/unit/prepare.spec.js index 235c0e2d2..2ec83531f 100644 --- a/tests/spec/unit/prepare.spec.js +++ b/tests/spec/unit/prepare.spec.js @@ -1542,7 +1542,6 @@ describe('prepare', () => { expect(json.NSPrivacyTrackingDomains.length).toBe(0); expect(json.NSPrivacyCollectedDataTypes.length).toBe(0); }); - }); describe(' tests', () => { From e655949ec2ed6782447ced3ac50ac8246a8b08ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=A8=E3=83=AA=E3=82=B9?= Date: Tue, 12 Mar 2024 16:38:47 +0900 Subject: [PATCH 10/10] chore: remove use strict --- lib/PlatformConfigParser.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/PlatformConfigParser.js b/lib/PlatformConfigParser.js index 0d0bb27fa..675287c62 100644 --- a/lib/PlatformConfigParser.js +++ b/lib/PlatformConfigParser.js @@ -17,8 +17,6 @@ under the License. */ -'use strict'; - const ConfigParser = require('cordova-common').ConfigParser; class PlatformConfigParser extends ConfigParser {