UNPKG

3.68 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const fs_extra_1 = __importDefault(require("fs-extra"));
7const xml2js_1 = require("xml2js");
8const os_1 = require("os");
9const path_1 = __importDefault(require("path"));
10function logManifest(doc) {
11 const builder = new xml2js_1.Builder();
12 const xmlInput = builder.buildObject(doc);
13 console.log(xmlInput);
14}
15exports.logManifest = logManifest;
16const stringTimesN = (n, char) => Array(n + 1).join(char);
17function format(manifest, { indentLevel = 2, newline = os_1.EOL } = {}) {
18 let xmlInput;
19 if (typeof manifest === 'string') {
20 xmlInput = manifest;
21 }
22 else if (manifest.toString) {
23 const builder = new xml2js_1.Builder({ headless: true });
24 xmlInput = builder.buildObject(manifest);
25 return xmlInput;
26 }
27 else {
28 throw new Error(`@expo/android-manifest: invalid manifest value passed in: ${manifest}`);
29 }
30 const indentString = stringTimesN(indentLevel, ' ');
31 let formatted = '';
32 const regex = /(>)(<)(\/*)/g;
33 const xml = xmlInput.replace(regex, `$1${newline}$2$3`);
34 let pad = 0;
35 xml
36 .split(/\r?\n/)
37 .map((line) => line.trim())
38 .forEach((line) => {
39 let indent = 0;
40 if (line.match(/.+<\/\w[^>]*>$/)) {
41 indent = 0;
42 }
43 else if (line.match(/^<\/\w/)) {
44 // Somehow istanbul doesn't see the else case as covered, although it is. Skip it.
45 /* istanbul ignore else */
46 if (pad !== 0) {
47 pad -= 1;
48 }
49 }
50 else if (line.match(/^<\w([^>]*[^\/])?>.*$/)) {
51 indent = 1;
52 }
53 else {
54 indent = 0;
55 }
56 const padding = stringTimesN(pad, indentString);
57 formatted += padding + line + newline; // eslint-disable-line prefer-template
58 pad += indent;
59 });
60 return formatted.trim();
61}
62exports.format = format;
63async function writeAndroidManifestAsync(manifestPath, manifest) {
64 const manifestXml = format(manifest);
65 await fs_extra_1.default.ensureDir(path_1.default.dirname(manifestPath));
66 await fs_extra_1.default.writeFile(manifestPath, manifestXml);
67}
68exports.writeAndroidManifestAsync = writeAndroidManifestAsync;
69async function getProjectAndroidManifestPathAsync(projectDir) {
70 try {
71 const shellPath = path_1.default.join(projectDir, 'android');
72 if ((await fs_extra_1.default.stat(shellPath)).isDirectory()) {
73 const manifestPath = path_1.default.join(shellPath, 'app/src/main/AndroidManifest.xml');
74 if ((await fs_extra_1.default.stat(manifestPath)).isFile()) {
75 return manifestPath;
76 }
77 }
78 }
79 catch (error) { }
80 return null;
81}
82exports.getProjectAndroidManifestPathAsync = getProjectAndroidManifestPathAsync;
83async function readAndroidManifestAsync(manifestPath) {
84 const contents = await fs_extra_1.default.readFile(manifestPath, { encoding: 'utf8', flag: 'r' });
85 const parser = new xml2js_1.Parser();
86 const manifest = parser.parseStringPromise(contents);
87 return manifest;
88}
89exports.readAndroidManifestAsync = readAndroidManifestAsync;
90async function getPackageAsync(manifest) {
91 var _a, _b, _c;
92 return _c = (_b = (_a = manifest.manifest) === null || _a === void 0 ? void 0 : _a['$']) === null || _b === void 0 ? void 0 : _b.package, (_c !== null && _c !== void 0 ? _c : null);
93}
94exports.getPackageAsync = getPackageAsync;
95//# sourceMappingURL=Manifest.js.map
\No newline at end of file