1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const fs_extra_1 = __importDefault(require("fs-extra"));
|
7 | const xml2js_1 = require("xml2js");
|
8 | const os_1 = require("os");
|
9 | const path_1 = __importDefault(require("path"));
|
10 | function logManifest(doc) {
|
11 | const builder = new xml2js_1.Builder();
|
12 | const xmlInput = builder.buildObject(doc);
|
13 | console.log(xmlInput);
|
14 | }
|
15 | exports.logManifest = logManifest;
|
16 | const stringTimesN = (n, char) => Array(n + 1).join(char);
|
17 | function 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 |
|
45 |
|
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;
|
58 | pad += indent;
|
59 | });
|
60 | return formatted.trim();
|
61 | }
|
62 | exports.format = format;
|
63 | async 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 | }
|
68 | exports.writeAndroidManifestAsync = writeAndroidManifestAsync;
|
69 | async 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 | }
|
82 | exports.getProjectAndroidManifestPathAsync = getProjectAndroidManifestPathAsync;
|
83 | async 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 | }
|
89 | exports.readAndroidManifestAsync = readAndroidManifestAsync;
|
90 | async 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 | }
|
94 | exports.getPackageAsync = getPackageAsync;
|
95 |
|
\ | No newline at end of file |