@rock-js/provider-s3 0.8.13
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/README.md +92 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/providerS3.d.ts +80 -0
- package/dist/src/lib/providerS3.d.ts.map +1 -0
- package/dist/src/lib/providerS3.js +172 -0
- package/dist/src/lib/providerS3.js.map +1 -0
- package/dist/src/lib/templateIndexHtml.d.ts +6 -0
- package/dist/src/lib/templateIndexHtml.d.ts.map +1 -0
- package/dist/src/lib/templateIndexHtml.js +189 -0
- package/dist/src/lib/templateIndexHtml.js.map +1 -0
- package/dist/src/lib/templateManifestPlist.d.ts +8 -0
- package/dist/src/lib/templateManifestPlist.d.ts.map +1 -0
- package/dist/src/lib/templateManifestPlist.js +36 -0
- package/dist/src/lib/templateManifestPlist.js.map +1 -0
- package/package.json +31 -0
package/README.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# @rock-js/provider-s3
|
|
2
|
+
|
|
3
|
+
AWS S3 remote cache provider for Rock (Rock). This package is part of the Rock ecosystem.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Compatible with AWS S3 and Cloudflare R2
|
|
8
|
+
- Supports custom endpoints for self-hosted S3-compatible storage
|
|
9
|
+
- Secure credential handling
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
The provider accepts the following configuration options:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
type ProviderConfig = {
|
|
17
|
+
/**
|
|
18
|
+
* Optional endpoint, necessary for self-hosted S3 servers or Cloudflare R2 integration
|
|
19
|
+
*/
|
|
20
|
+
endpoint?: string;
|
|
21
|
+
/**
|
|
22
|
+
* The bucket name to use for the S3 server
|
|
23
|
+
*/
|
|
24
|
+
bucket: string;
|
|
25
|
+
/**
|
|
26
|
+
* The region of the S3 server
|
|
27
|
+
*/
|
|
28
|
+
region: string;
|
|
29
|
+
/**
|
|
30
|
+
* The access key ID for the S3 server
|
|
31
|
+
*/
|
|
32
|
+
accessKeyId: string;
|
|
33
|
+
/**
|
|
34
|
+
* The secret access key for the S3 server
|
|
35
|
+
*/
|
|
36
|
+
secretAccessKey: string;
|
|
37
|
+
/**
|
|
38
|
+
* The directory to store artifacts in the S3 server.
|
|
39
|
+
*/
|
|
40
|
+
directory?: string;
|
|
41
|
+
/**
|
|
42
|
+
* The display name of the provider
|
|
43
|
+
*/
|
|
44
|
+
name?: string;
|
|
45
|
+
/**
|
|
46
|
+
* The time in seconds for the presigned URL to expire. By default, it is 24 hours.
|
|
47
|
+
*/
|
|
48
|
+
linkExpirationTime?: number;
|
|
49
|
+
};
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Usage Examples
|
|
53
|
+
|
|
54
|
+
### AWS S3
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
// rock.config.mjs
|
|
58
|
+
import { providerS3 } from '@rock-js/provider-s3';
|
|
59
|
+
|
|
60
|
+
export default {
|
|
61
|
+
// ...
|
|
62
|
+
remoteCacheProvider: providerS3({
|
|
63
|
+
bucket: 'your-bucket',
|
|
64
|
+
region: 'your-region',
|
|
65
|
+
accessKeyId: 'access-key',
|
|
66
|
+
secretAccessKey: 'secret-key',
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Cloudflare R2
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
// rock.config.mjs
|
|
75
|
+
import { providerS3 } from '@rock-js/provider-s3';
|
|
76
|
+
|
|
77
|
+
export default {
|
|
78
|
+
// ...
|
|
79
|
+
remoteCacheProvider: providerS3({
|
|
80
|
+
name: 'R2' // optional to display R2 instead of S3
|
|
81
|
+
endpoint: 'https://${ACCOUNT_ID}.r2.cloudflarestorage.com',
|
|
82
|
+
bucket: 'your-bucket',
|
|
83
|
+
region: 'your-region',
|
|
84
|
+
accessKeyId: 'access-key',
|
|
85
|
+
secretAccessKey: 'secret-key',
|
|
86
|
+
}),
|
|
87
|
+
};
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Documentation
|
|
91
|
+
|
|
92
|
+
For detailed documentation about Rock and its tools, visit [Rock Documentation](https://rockjs.dev)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { providerS3 } from './lib/providerS3.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as clientS3 from '@aws-sdk/client-s3';
|
|
2
|
+
import type { RemoteArtifact, RemoteBuildCache } from '@rock-js/tools';
|
|
3
|
+
type ProviderConfig = {
|
|
4
|
+
/**
|
|
5
|
+
* Optional endpoint, necessary for self-hosted S3 servers or Cloudflare R2 integration.
|
|
6
|
+
*/
|
|
7
|
+
endpoint?: string;
|
|
8
|
+
/**
|
|
9
|
+
* The bucket name to use for the S3 server.
|
|
10
|
+
*/
|
|
11
|
+
bucket: string;
|
|
12
|
+
/**
|
|
13
|
+
* The region of the S3 server.
|
|
14
|
+
*/
|
|
15
|
+
region: string;
|
|
16
|
+
/**
|
|
17
|
+
* The access key ID for the S3 server. Not required when using IAM roles or other auth methods.
|
|
18
|
+
*/
|
|
19
|
+
accessKeyId?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The secret access key for the S3 server. Not required when using IAM roles or other auth methods.
|
|
22
|
+
*/
|
|
23
|
+
secretAccessKey?: string;
|
|
24
|
+
/**
|
|
25
|
+
* The directory to store artifacts in the S3 server.
|
|
26
|
+
*/
|
|
27
|
+
directory?: string;
|
|
28
|
+
/**
|
|
29
|
+
* The display name of the provider
|
|
30
|
+
*/
|
|
31
|
+
name?: string;
|
|
32
|
+
/**
|
|
33
|
+
* The time in seconds for the presigned URL to expire. By default, it is 24 hours.
|
|
34
|
+
*/
|
|
35
|
+
linkExpirationTime?: number;
|
|
36
|
+
/**
|
|
37
|
+
* AWS profile name to use for authentication. Useful for local development.
|
|
38
|
+
*/
|
|
39
|
+
profile?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Role ARN to assume for authentication. Useful for cross-account access.
|
|
42
|
+
*/
|
|
43
|
+
roleArn?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Session name when assuming a role.
|
|
46
|
+
*/
|
|
47
|
+
roleSessionName?: string;
|
|
48
|
+
/**
|
|
49
|
+
* External ID when assuming a role (for additional security).
|
|
50
|
+
*/
|
|
51
|
+
externalId?: string;
|
|
52
|
+
};
|
|
53
|
+
export declare class S3BuildCache implements RemoteBuildCache {
|
|
54
|
+
name: string;
|
|
55
|
+
directory: string;
|
|
56
|
+
s3: clientS3.S3Client;
|
|
57
|
+
bucket: string;
|
|
58
|
+
config: ProviderConfig;
|
|
59
|
+
linkExpirationTime: number;
|
|
60
|
+
constructor(config: ProviderConfig);
|
|
61
|
+
private uploadFileWithProgress;
|
|
62
|
+
list({ artifactName, }: {
|
|
63
|
+
artifactName?: string;
|
|
64
|
+
}): Promise<RemoteArtifact[]>;
|
|
65
|
+
download({ artifactName, }: {
|
|
66
|
+
artifactName: string;
|
|
67
|
+
}): Promise<Response>;
|
|
68
|
+
delete({ artifactName, skipLatest, }: {
|
|
69
|
+
artifactName: string;
|
|
70
|
+
skipLatest?: boolean;
|
|
71
|
+
}): Promise<RemoteArtifact[]>;
|
|
72
|
+
upload({ artifactName, uploadArtifactName, }: {
|
|
73
|
+
artifactName: string;
|
|
74
|
+
uploadArtifactName?: string;
|
|
75
|
+
}): Promise<RemoteArtifact & {
|
|
76
|
+
getResponse: (buffer: Buffer | ((baseUrl: string) => Buffer), contentType?: string) => Response;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
export declare const providerS3: (options: ProviderConfig) => () => RemoteBuildCache;
|
|
80
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerS3.d.ts","sourceRoot":"","sources":["../../../src/lib/providerS3.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAkBpE,KAAK,cAAc,GAAG;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,qBAAa,YAAa,YAAW,gBAAgB;IACnD,IAAI,SAAQ;IACZ,SAAS,SAAoB;IAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;gBAEf,MAAM,EAAE,cAAc;YAkBpB,UAAU;IAmBlB,IAAI,CAAC,EACT,YAAY,GACb,EAAE;QACD,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAiCvB,QAAQ,CAAC,EACb,YAAY,GACb,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAcf,MAAM,CAAC,EACX,YAAY,EACZ,UAAU,GACX,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAmBvB,MAAM,CAAC,EACX,YAAY,EACZ,MAAM,GACP,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,cAAc,CAAC;IAerB,YAAY,CAAC,EACjB,YAAY,EACZ,UAAU,EACV,KAAK,GACN,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GAAG,OAAO,CAAC,cAAc,CAAC;CA4H5B;AAED,eAAO,MAAM,UAAU,YAAa,cAAc,WAAS,gBAChC,CAAC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import * as clientS3 from '@aws-sdk/client-s3';
|
|
2
|
+
import { fromIni } from '@aws-sdk/credential-provider-ini';
|
|
3
|
+
import { fromTemporaryCredentials } from '@aws-sdk/credential-providers';
|
|
4
|
+
import { Upload } from '@aws-sdk/lib-storage';
|
|
5
|
+
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
6
|
+
function toWebStream(stream) {
|
|
7
|
+
return new ReadableStream({
|
|
8
|
+
start(controller) {
|
|
9
|
+
stream.on('data', (chunk) => controller.enqueue(chunk));
|
|
10
|
+
stream.on('end', () => controller.close());
|
|
11
|
+
stream.on('error', (err) => controller.error(err));
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export class S3BuildCache {
|
|
16
|
+
name = 'S3';
|
|
17
|
+
directory = 'rock-artifacts';
|
|
18
|
+
s3;
|
|
19
|
+
bucket;
|
|
20
|
+
config;
|
|
21
|
+
linkExpirationTime;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
const s3Config = {
|
|
25
|
+
endpoint: config.endpoint,
|
|
26
|
+
region: config.region,
|
|
27
|
+
};
|
|
28
|
+
if (config.accessKeyId && config.secretAccessKey) {
|
|
29
|
+
s3Config.credentials = {
|
|
30
|
+
accessKeyId: config.accessKeyId,
|
|
31
|
+
secretAccessKey: config.secretAccessKey,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
else if (config.roleArn) {
|
|
35
|
+
// Use STS to assume a role
|
|
36
|
+
s3Config.credentials = fromTemporaryCredentials({
|
|
37
|
+
params: {
|
|
38
|
+
RoleArn: config.roleArn,
|
|
39
|
+
RoleSessionName: config.roleSessionName ?? 's3-build-cache-session',
|
|
40
|
+
ExternalId: config.externalId,
|
|
41
|
+
},
|
|
42
|
+
// Optional: use named profile as source credentials
|
|
43
|
+
masterCredentials: config.profile
|
|
44
|
+
? fromIni({ profile: config.profile })
|
|
45
|
+
: undefined,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
else if (config.profile) {
|
|
49
|
+
// Use shared config file (e.g. ~/.aws/credentials) with a profile
|
|
50
|
+
s3Config.credentials = fromIni({ profile: config.profile });
|
|
51
|
+
}
|
|
52
|
+
this.s3 = new clientS3.S3Client(s3Config);
|
|
53
|
+
const awsBucket = config.bucket ?? '';
|
|
54
|
+
const bucketTokens = awsBucket.split('/');
|
|
55
|
+
this.bucket = bucketTokens.shift();
|
|
56
|
+
this.directory = config.directory ?? this.directory;
|
|
57
|
+
this.name = config.name ?? this.name;
|
|
58
|
+
this.linkExpirationTime = config.linkExpirationTime ?? 3600 * 24;
|
|
59
|
+
}
|
|
60
|
+
async uploadFileWithProgress(key, buffer, contentType, onProgress) {
|
|
61
|
+
const upload = new Upload({
|
|
62
|
+
client: this.s3,
|
|
63
|
+
params: {
|
|
64
|
+
Bucket: this.bucket,
|
|
65
|
+
Key: key,
|
|
66
|
+
Body: buffer,
|
|
67
|
+
ContentType: contentType || 'application/octet-stream',
|
|
68
|
+
Metadata: {
|
|
69
|
+
createdAt: new Date().toISOString(),
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
upload.on('httpUploadProgress', (progress) => {
|
|
74
|
+
if (progress.loaded !== undefined && progress.total !== undefined) {
|
|
75
|
+
onProgress(progress.loaded, progress.total);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return upload.done();
|
|
79
|
+
}
|
|
80
|
+
async list({ artifactName, }) {
|
|
81
|
+
const artifacts = await this.s3.send(new clientS3.ListObjectsV2Command({
|
|
82
|
+
Bucket: this.bucket,
|
|
83
|
+
Prefix: artifactName
|
|
84
|
+
? `${this.directory}/${artifactName}.zip`
|
|
85
|
+
: `${this.directory}/`,
|
|
86
|
+
}));
|
|
87
|
+
const results = [];
|
|
88
|
+
for (const artifact of artifacts.Contents ?? []) {
|
|
89
|
+
if (!artifact.Key)
|
|
90
|
+
continue;
|
|
91
|
+
const name = artifactName ?? artifact.Key.split('/').pop() ?? '';
|
|
92
|
+
const presignedUrl = await getSignedUrl(this.s3, new clientS3.GetObjectCommand({
|
|
93
|
+
Bucket: this.bucket,
|
|
94
|
+
Key: artifact.Key,
|
|
95
|
+
}), { expiresIn: this.linkExpirationTime });
|
|
96
|
+
results.push({ name, url: presignedUrl });
|
|
97
|
+
}
|
|
98
|
+
return results;
|
|
99
|
+
}
|
|
100
|
+
async download({ artifactName, }) {
|
|
101
|
+
const res = await this.s3.send(new clientS3.GetObjectCommand({
|
|
102
|
+
Bucket: this.bucket,
|
|
103
|
+
Key: `${this.directory}/${artifactName}.zip`,
|
|
104
|
+
}));
|
|
105
|
+
return new Response(toWebStream(res.Body), {
|
|
106
|
+
headers: {
|
|
107
|
+
'content-length': String(res.ContentLength),
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async delete({ artifactName, skipLatest, }) {
|
|
112
|
+
if (skipLatest) {
|
|
113
|
+
// Artifacts on S3 are unique by name, so skipping latest means we don't delete anything
|
|
114
|
+
// @todo revisit with bucket versioning
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
await this.s3.send(new clientS3.DeleteObjectCommand({
|
|
118
|
+
Bucket: this.bucket,
|
|
119
|
+
Key: `${this.directory}/${artifactName}.zip`,
|
|
120
|
+
}));
|
|
121
|
+
return [
|
|
122
|
+
{
|
|
123
|
+
name: artifactName,
|
|
124
|
+
url: `${this.bucket}/${this.directory}/${artifactName}.zip`,
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
async upload({ artifactName, uploadArtifactName, }) {
|
|
129
|
+
const key = uploadArtifactName
|
|
130
|
+
? `${this.directory}/${uploadArtifactName}`
|
|
131
|
+
: `${this.directory}/${artifactName}.zip`;
|
|
132
|
+
const presignedUrl = await getSignedUrl(this.s3, new clientS3.GetObjectCommand({ Bucket: this.bucket, Key: key }), { expiresIn: this.linkExpirationTime });
|
|
133
|
+
return {
|
|
134
|
+
name: artifactName,
|
|
135
|
+
url: presignedUrl,
|
|
136
|
+
getResponse: (buffer, contentType) => {
|
|
137
|
+
const bufferToUpload = typeof buffer === 'function'
|
|
138
|
+
? buffer(presignedUrl.split('?')[0])
|
|
139
|
+
: buffer;
|
|
140
|
+
const readable = new ReadableStream({
|
|
141
|
+
start: (controller) => {
|
|
142
|
+
let lastEmittedBytes = 0;
|
|
143
|
+
try {
|
|
144
|
+
this.uploadFileWithProgress(key, bufferToUpload, contentType, (loaded, total) => {
|
|
145
|
+
const newBytes = loaded - lastEmittedBytes;
|
|
146
|
+
if (newBytes > 0) {
|
|
147
|
+
const chunk = bufferToUpload.subarray(lastEmittedBytes, loaded);
|
|
148
|
+
controller.enqueue(chunk);
|
|
149
|
+
lastEmittedBytes = loaded;
|
|
150
|
+
if (loaded >= total) {
|
|
151
|
+
controller.close();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
controller.error(error);
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
return new Response(readable, {
|
|
162
|
+
headers: {
|
|
163
|
+
'content-length': String(bufferToUpload.length),
|
|
164
|
+
'content-type': contentType || 'application/octet-stream',
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export const providerS3 = (options) => () => new S3BuildCache(options);
|
|
172
|
+
//# sourceMappingURL=providerS3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerS3.js","sourceRoot":"","sources":["../../../src/lib/providerS3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,SAAS,WAAW,CAAC,MAAgB;IACnC,OAAO,IAAI,cAAc,CAAC;QACxB,KAAK,CAAC,UAAU;YACd,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAqDD,MAAM,OAAO,YAAY;IACvB,IAAI,GAAG,IAAI,CAAC;IACZ,SAAS,GAAG,gBAAgB,CAAC;IAC7B,EAAE,CAAoB;IACtB,MAAM,CAAS;IACf,MAAM,CAAiB;IACvB,kBAAkB,CAAS;IAE3B,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,QAAQ,GAA4B;YACxC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;QAEF,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACjD,QAAQ,CAAC,WAAW,GAAG;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1B,2BAA2B;YAC3B,QAAQ,CAAC,WAAW,GAAG,wBAAwB,CAAC;gBAC9C,MAAM,EAAE;oBACN,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,wBAAwB;oBACnE,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B;gBACD,oDAAoD;gBACpD,iBAAiB,EAAE,MAAM,CAAC,OAAO;oBAC/B,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACtC,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1B,kEAAkE;YAClE,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,EAAY,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,IAAI,GAAG,EAAE,CAAC;IACnE,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,GAAW,EACX,MAAc,EACd,WAA+B,EAC/B,UAAmD;QAEnD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,WAAW,IAAI,0BAA0B;gBACtD,QAAQ,EAAE;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC3C,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAClE,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EACT,YAAY,GAGb;QACC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAClC,IAAI,QAAQ,CAAC,oBAAoB,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,YAAY;gBAClB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,MAAM;gBACzC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG;SACzB,CAAC,CACH,CAAC;QAEF,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,GAAG;gBAAE,SAAS;YAE5B,MAAM,IAAI,GAAG,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAEjE,MAAM,YAAY,GAAG,MAAM,YAAY,CACrC,IAAI,CAAC,EAAE,EACP,IAAI,QAAQ,CAAC,gBAAgB,CAAC;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;aAClB,CAAC,EACF,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,CACvC,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EACb,YAAY,GAGb;QACC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAC5B,IAAI,QAAQ,CAAC,gBAAgB,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,MAAM;SAC7C,CAAC,CACH,CAAC;QACF,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAgB,CAAC,EAAE;YACrD,OAAO,EAAE;gBACP,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;aAC5C;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EACX,YAAY,EACZ,UAAU,GAIX;QACC,IAAI,UAAU,EAAE,CAAC;YACf,wFAAwF;YACxF,uCAAuC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAChB,IAAI,QAAQ,CAAC,mBAAmB,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,MAAM;SAC7C,CAAC,CACH,CAAC;QACF,OAAO;YACL;gBACE,IAAI,EAAE,YAAY;gBAClB,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,YAAY,MAAM;aAC5D;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EACX,YAAY,EACZ,kBAAkB,GAInB;QAQC,MAAM,GAAG,GAAG,kBAAkB;YAC5B,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,EAAE;YAC3C,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,MAAM,CAAC;QAE5C,MAAM,YAAY,GAAG,MAAM,YAAY,CACrC,IAAI,CAAC,EAAE,EACP,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAChE,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,CACvC,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,YAAY;YACjB,WAAW,EAAE,CACX,MAA8C,EAC9C,WAAoB,EACpB,EAAE;gBACF,MAAM,cAAc,GAClB,OAAO,MAAM,KAAK,UAAU;oBAC1B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpC,CAAC,CAAC,MAAM,CAAC;gBAEb,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC;oBAClC,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;wBACpB,IAAI,gBAAgB,GAAG,CAAC,CAAC;wBAEzB,IAAI,CAAC;4BACH,IAAI,CAAC,sBAAsB,CACzB,GAAG,EACH,cAAc,EACd,WAAW,EACX,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gCAChB,MAAM,QAAQ,GAAG,MAAM,GAAG,gBAAgB,CAAC;gCAC3C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oCACjB,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CACnC,gBAAgB,EAChB,MAAM,CACP,CAAC;oCACF,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oCAC1B,gBAAgB,GAAG,MAAM,CAAC;oCAE1B,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;wCACpB,UAAU,CAAC,KAAK,EAAE,CAAC;oCACrB,CAAC;gCACH,CAAC;4BACH,CAAC,CACF,CAAC;wBACJ,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC1B,CAAC;oBACH,CAAC;iBACF,CAAC,CAAC;gBAEH,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE;oBAC5B,OAAO,EAAE;wBACP,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;wBAC/C,cAAc,EAAE,WAAW,IAAI,0BAA0B;qBAC1D;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAuB,EAAE,EAAE,CAAC,GAAqB,EAAE,CAC5E,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateIndexHtml.d.ts","sourceRoot":"","sources":["../../../src/lib/templateIndexHtml.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,8DAKjC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,WA2LA,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
export const templateIndexHtmlPlugin = ({ appName, version, bundleIdentifier, manifestPlistUrl, }) => {
|
|
2
|
+
return `<!DOCTYPE html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>Download iOS App</title>
|
|
8
|
+
<style>
|
|
9
|
+
* {
|
|
10
|
+
margin: 0;
|
|
11
|
+
padding: 0;
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
body {
|
|
16
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
|
|
17
|
+
Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
18
|
+
min-height: 100vh;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
padding: 20px;
|
|
23
|
+
font-size: 16px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.container {
|
|
27
|
+
text-align: center;
|
|
28
|
+
max-width: 500px;
|
|
29
|
+
width: 100%;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.app-icon {
|
|
33
|
+
width: 100px;
|
|
34
|
+
height: 100px;
|
|
35
|
+
margin: 0 auto 15px;
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
font-size: 48px;
|
|
40
|
+
color: white;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
h1 {
|
|
44
|
+
color: #1d1d1f;
|
|
45
|
+
font-size: 28px;
|
|
46
|
+
font-weight: 600;
|
|
47
|
+
margin-bottom: 15px;
|
|
48
|
+
overflow-wrap: break-word;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.subtitle {
|
|
52
|
+
color: #86868b;
|
|
53
|
+
font-size: 16px;
|
|
54
|
+
line-height: 1.5;
|
|
55
|
+
margin-bottom: 30px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.version {
|
|
59
|
+
color: #1d1d1f;
|
|
60
|
+
font-size: 16px;
|
|
61
|
+
line-height: 1.5;
|
|
62
|
+
margin-bottom: 10px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.download-button {
|
|
66
|
+
background: #8232ff;
|
|
67
|
+
color: white;
|
|
68
|
+
border: none;
|
|
69
|
+
padding: 16px 32px;
|
|
70
|
+
border-radius: 2px;
|
|
71
|
+
font-size: 14px;
|
|
72
|
+
cursor: pointer;
|
|
73
|
+
transition: all 0.3s ease;
|
|
74
|
+
text-decoration: none;
|
|
75
|
+
display: inline-block;
|
|
76
|
+
margin-bottom: 20px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.download-button:hover {
|
|
80
|
+
transform: translateY(-2px);
|
|
81
|
+
box-shadow: 0 10px 25px rgba(0, 122, 255, 0.3);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.download-button:active {
|
|
85
|
+
transform: translateY(0);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.instructions {
|
|
89
|
+
background: #f5f5f7;
|
|
90
|
+
border-radius: 2px;
|
|
91
|
+
padding: 20px;
|
|
92
|
+
margin-top: 20px;
|
|
93
|
+
text-align: left;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.instructions h3 {
|
|
97
|
+
color: #1d1d1f;
|
|
98
|
+
font-size: 16px;
|
|
99
|
+
margin-bottom: 10px;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.instructions ol {
|
|
103
|
+
color: #86868b;
|
|
104
|
+
font-size: 14px;
|
|
105
|
+
line-height: 1.6;
|
|
106
|
+
padding-left: 20px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.instructions li {
|
|
110
|
+
margin-bottom: 8px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.adhoc-info {
|
|
114
|
+
text-align: left;
|
|
115
|
+
margin-top: 20px;
|
|
116
|
+
padding: 1em 2em;
|
|
117
|
+
border-left: 2px solid #8232ff;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.adhoc-info-title {
|
|
121
|
+
font-weight: 600;
|
|
122
|
+
margin-bottom: 10px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.adhoc-info-text {
|
|
126
|
+
color: #1d1d1f;
|
|
127
|
+
margin: 0;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.footer {
|
|
131
|
+
text-align: center;
|
|
132
|
+
margin-top: 40px;
|
|
133
|
+
font-size: 12px;
|
|
134
|
+
color: #86868b;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.link {
|
|
138
|
+
color: #8232ff;
|
|
139
|
+
text-decoration: none;
|
|
140
|
+
}
|
|
141
|
+
</style>
|
|
142
|
+
</head>
|
|
143
|
+
<body>
|
|
144
|
+
<div class="container">
|
|
145
|
+
<div class="app-icon">📱</div>
|
|
146
|
+
|
|
147
|
+
<h1>${appName}</h1>
|
|
148
|
+
<p class="version">${bundleIdentifier} (${version})</p>
|
|
149
|
+
<p class="subtitle">
|
|
150
|
+
Download and install the latest version of our iOS app directly to your
|
|
151
|
+
device.
|
|
152
|
+
</p>
|
|
153
|
+
|
|
154
|
+
<a
|
|
155
|
+
href="itms-services://?action=download-manifest&url=${manifestPlistUrl}"
|
|
156
|
+
class="download-button">
|
|
157
|
+
Download App
|
|
158
|
+
</a>
|
|
159
|
+
|
|
160
|
+
<div class="instructions">
|
|
161
|
+
<h3>Installation Instructions:</h3>
|
|
162
|
+
<ol>
|
|
163
|
+
<li>Tap the "Download App" button above</li>
|
|
164
|
+
<li>If prompted, tap "Install" in the popup dialog</li>
|
|
165
|
+
<li>Go to Settings > General > VPN & Device Management</li>
|
|
166
|
+
<li>Find your developer certificate and tap "Trust"</li>
|
|
167
|
+
<li>The app will now be available on your home screen</li>
|
|
168
|
+
</ol>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
<div class="adhoc-info">
|
|
172
|
+
<p class="adhoc-info-title">Ad-hoc build notice</p>
|
|
173
|
+
<p class="adhoc-info-text">
|
|
174
|
+
This is an ad-hoc build for testing purposes. Make sure you're using a
|
|
175
|
+
device that's registered in the provisioning profile.
|
|
176
|
+
</p>
|
|
177
|
+
</div>
|
|
178
|
+
<div class="footer">
|
|
179
|
+
<p>
|
|
180
|
+
Generated with <a class="link" href="https://rnef.dev">RNEF</a> by
|
|
181
|
+
<a class="link" href="https://callstack.com">Callstack</a>
|
|
182
|
+
</p>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
</body>
|
|
186
|
+
</html>
|
|
187
|
+
`;
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=templateIndexHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateIndexHtml.js","sourceRoot":"","sources":["../../../src/lib/templateIndexHtml.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACtC,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,gBAAgB,GAMjB,EAAE,EAAE;IACH,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAiJG,OAAO;2BACQ,gBAAgB,KAAK,OAAO;;;;;;;8DAOO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC7E,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const templateManifestPlistPlugin: ({ baseUrl, ipaName, bundleIdentifier, version, appName, platformIdentifier, }: {
|
|
2
|
+
baseUrl: string;
|
|
3
|
+
ipaName: string;
|
|
4
|
+
bundleIdentifier: string;
|
|
5
|
+
version: string;
|
|
6
|
+
appName: string;
|
|
7
|
+
platformIdentifier: string;
|
|
8
|
+
}) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateManifestPlist.d.ts","sourceRoot":"","sources":["../../../src/lib/templateManifestPlist.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,kFAOrC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,WAoCA,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const templateManifestPlistPlugin = ({ baseUrl, ipaName, bundleIdentifier, version, appName, platformIdentifier, }) => {
|
|
2
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
3
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
4
|
+
<plist version="1.0">
|
|
5
|
+
<dict>
|
|
6
|
+
<key>items</key>
|
|
7
|
+
<array>
|
|
8
|
+
<dict>
|
|
9
|
+
<key>assets</key>
|
|
10
|
+
<array>
|
|
11
|
+
<dict>
|
|
12
|
+
<key>kind</key>
|
|
13
|
+
<string>software-package</string>
|
|
14
|
+
<key>url</key>
|
|
15
|
+
<string>${baseUrl}/${ipaName}</string>
|
|
16
|
+
</dict>
|
|
17
|
+
</array>
|
|
18
|
+
<key>metadata</key>
|
|
19
|
+
<dict>
|
|
20
|
+
<key>bundle-identifier</key>
|
|
21
|
+
<string>${bundleIdentifier}</string>
|
|
22
|
+
<key>bundle-version</key>
|
|
23
|
+
<string>${version}</string>
|
|
24
|
+
<key>kind</key>
|
|
25
|
+
<string>software</string>
|
|
26
|
+
<key>platform-identifier</key>
|
|
27
|
+
<string>${platformIdentifier ?? 'com.apple.platform.iphoneos'}</string>
|
|
28
|
+
<key>title</key>
|
|
29
|
+
<string>${appName}</string>
|
|
30
|
+
</dict>
|
|
31
|
+
</dict>
|
|
32
|
+
</array>
|
|
33
|
+
</dict>
|
|
34
|
+
</plist>`;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=templateManifestPlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateManifestPlist.js","sourceRoot":"","sources":["../../../src/lib/templateManifestPlist.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,EAC1C,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,kBAAkB,GAQnB,EAAE,EAAE;IACH,OAAO;;;;;;;;;;;;;8BAaqB,OAAO,IAAI,OAAO;;;;;;0BAMtB,gBAAgB;;0BAEhB,OAAO;;;;0BAKf,kBAAkB,IAAI,6BACxB;;0BAEU,OAAO;;;;;WAKtB,CAAC;AACZ,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rock-js/provider-s3",
|
|
3
|
+
"version": "0.8.13",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "./dist/src/index.d.ts",
|
|
6
|
+
"exports": {
|
|
7
|
+
"types": "./dist/src/index.d.ts",
|
|
8
|
+
"default": "./dist/src/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc -p tsconfig.lib.json",
|
|
15
|
+
"dev": "tsc -p tsconfig.lib.json --watch",
|
|
16
|
+
"publish:npm": "npm publish --access public",
|
|
17
|
+
"publish:verdaccio": "npm publish --registry http://localhost:4873 --userconfig ../../.npmrc"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@aws-sdk/client-s3": "^3.830.0",
|
|
21
|
+
"@aws-sdk/credential-provider-ini": "^3.830.0",
|
|
22
|
+
"@aws-sdk/credential-providers": "^3.830.0",
|
|
23
|
+
"@aws-sdk/lib-storage": "^3.830.0",
|
|
24
|
+
"@aws-sdk/s3-request-presigner": "^3.830.0",
|
|
25
|
+
"@rock-js/tools": "^0.8.13",
|
|
26
|
+
"tslib": "^2.3.0"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
}
|
|
31
|
+
}
|