@diquattro/cfnassets 0.6.1

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.
Files changed (178) hide show
  1. package/README.md +55 -0
  2. package/lib/cli/build.d.ts +3 -0
  3. package/lib/cli/build.d.ts.map +1 -0
  4. package/lib/cli/build.js +77 -0
  5. package/lib/cli/build.js.map +1 -0
  6. package/lib/cli/cfnassets.d.ts +3 -0
  7. package/lib/cli/cfnassets.d.ts.map +1 -0
  8. package/lib/cli/cfnassets.js +7 -0
  9. package/lib/cli/cfnassets.js.map +1 -0
  10. package/lib/core/rollup/makeRollupPackageStream.d.ts +16 -0
  11. package/lib/core/rollup/makeRollupPackageStream.d.ts.map +1 -0
  12. package/lib/core/rollup/makeRollupPackageStream.js +27 -0
  13. package/lib/core/rollup/makeRollupPackageStream.js.map +1 -0
  14. package/lib/core/rollup/rollupPackageDir.d.ts +14 -0
  15. package/lib/core/rollup/rollupPackageDir.d.ts.map +1 -0
  16. package/lib/core/rollup/rollupPackageDir.js +36 -0
  17. package/lib/core/rollup/rollupPackageDir.js.map +1 -0
  18. package/lib/core/rollup/rollupPackageEntries.d.ts +5 -0
  19. package/lib/core/rollup/rollupPackageEntries.d.ts.map +1 -0
  20. package/lib/core/rollup/rollupPackageEntries.js +35 -0
  21. package/lib/core/rollup/rollupPackageEntries.js.map +1 -0
  22. package/lib/core/zip/ZipAssetEntry.d.ts +9 -0
  23. package/lib/core/zip/ZipAssetEntry.d.ts.map +1 -0
  24. package/lib/core/zip/ZipAssetEntry.js +2 -0
  25. package/lib/core/zip/ZipAssetEntry.js.map +1 -0
  26. package/lib/core/zip/getFolderEntries.d.ts +8 -0
  27. package/lib/core/zip/getFolderEntries.d.ts.map +1 -0
  28. package/lib/core/zip/getFolderEntries.js +32 -0
  29. package/lib/core/zip/getFolderEntries.js.map +1 -0
  30. package/lib/core/zip/getPackageEntries.d.ts +12 -0
  31. package/lib/core/zip/getPackageEntries.d.ts.map +1 -0
  32. package/lib/core/zip/getPackageEntries.js +73 -0
  33. package/lib/core/zip/getPackageEntries.js.map +1 -0
  34. package/lib/core/zip/makeZipPackageStream.d.ts +5 -0
  35. package/lib/core/zip/makeZipPackageStream.d.ts.map +1 -0
  36. package/lib/core/zip/makeZipPackageStream.js +29 -0
  37. package/lib/core/zip/makeZipPackageStream.js.map +1 -0
  38. package/lib/core/zip/zipDir.d.ts +8 -0
  39. package/lib/core/zip/zipDir.d.ts.map +1 -0
  40. package/lib/core/zip/zipDir.js +24 -0
  41. package/lib/core/zip/zipDir.js.map +1 -0
  42. package/lib/index.d.ts +25 -0
  43. package/lib/index.d.ts.map +1 -0
  44. package/lib/index.js +26 -0
  45. package/lib/index.js.map +1 -0
  46. package/lib/internal/HashStream.d.ts +13 -0
  47. package/lib/internal/HashStream.d.ts.map +1 -0
  48. package/lib/internal/HashStream.js +28 -0
  49. package/lib/internal/HashStream.js.map +1 -0
  50. package/lib/internal/ProgressStream.d.ts +11 -0
  51. package/lib/internal/ProgressStream.d.ts.map +1 -0
  52. package/lib/internal/ProgressStream.js +25 -0
  53. package/lib/internal/ProgressStream.js.map +1 -0
  54. package/lib/internal/addBundleInfoToPackageJson.d.ts +6 -0
  55. package/lib/internal/addBundleInfoToPackageJson.d.ts.map +1 -0
  56. package/lib/internal/addBundleInfoToPackageJson.js +36 -0
  57. package/lib/internal/addBundleInfoToPackageJson.js.map +1 -0
  58. package/lib/internal/getPackagePath.d.ts +2 -0
  59. package/lib/internal/getPackagePath.d.ts.map +1 -0
  60. package/lib/internal/getPackagePath.js +11 -0
  61. package/lib/internal/getPackagePath.js.map +1 -0
  62. package/lib/internal/hash.d.ts +3 -0
  63. package/lib/internal/hash.d.ts.map +1 -0
  64. package/lib/internal/hash.js +9 -0
  65. package/lib/internal/hash.js.map +1 -0
  66. package/lib/internal/readDotIgnoreFile.d.ts +2 -0
  67. package/lib/internal/readDotIgnoreFile.d.ts.map +1 -0
  68. package/lib/internal/readDotIgnoreFile.js +13 -0
  69. package/lib/internal/readDotIgnoreFile.js.map +1 -0
  70. package/lib/internal/readDotIgnoreForFolder.d.ts +2 -0
  71. package/lib/internal/readDotIgnoreForFolder.d.ts.map +1 -0
  72. package/lib/internal/readDotIgnoreForFolder.js +6 -0
  73. package/lib/internal/readDotIgnoreForFolder.js.map +1 -0
  74. package/lib/internal/tryStat.d.ts +4 -0
  75. package/lib/internal/tryStat.d.ts.map +1 -0
  76. package/lib/internal/tryStat.js +13 -0
  77. package/lib/internal/tryStat.js.map +1 -0
  78. package/lib/template/AssetAttributes.d.ts +5 -0
  79. package/lib/template/AssetAttributes.d.ts.map +1 -0
  80. package/lib/template/AssetAttributes.js +2 -0
  81. package/lib/template/AssetAttributes.js.map +1 -0
  82. package/lib/template/AssetBase.d.ts +14 -0
  83. package/lib/template/AssetBase.d.ts.map +1 -0
  84. package/lib/template/AssetBase.js +34 -0
  85. package/lib/template/AssetBase.js.map +1 -0
  86. package/lib/template/AssetBuilder.d.ts +6 -0
  87. package/lib/template/AssetBuilder.d.ts.map +1 -0
  88. package/lib/template/AssetBuilder.js +2 -0
  89. package/lib/template/AssetBuilder.js.map +1 -0
  90. package/lib/template/AssetContext.d.ts +7 -0
  91. package/lib/template/AssetContext.d.ts.map +1 -0
  92. package/lib/template/AssetContext.js +12 -0
  93. package/lib/template/AssetContext.js.map +1 -0
  94. package/lib/template/AssetDefinition.d.ts +8 -0
  95. package/lib/template/AssetDefinition.d.ts.map +1 -0
  96. package/lib/template/AssetDefinition.js +2 -0
  97. package/lib/template/AssetDefinition.js.map +1 -0
  98. package/lib/template/AssetGenerator.d.ts +5 -0
  99. package/lib/template/AssetGenerator.d.ts.map +1 -0
  100. package/lib/template/AssetGenerator.js +2 -0
  101. package/lib/template/AssetGenerator.js.map +1 -0
  102. package/lib/template/AssetManifest.d.ts +13 -0
  103. package/lib/template/AssetManifest.d.ts.map +1 -0
  104. package/lib/template/AssetManifest.js +12 -0
  105. package/lib/template/AssetManifest.js.map +1 -0
  106. package/lib/template/AssetOutput.d.ts +7 -0
  107. package/lib/template/AssetOutput.d.ts.map +1 -0
  108. package/lib/template/AssetOutput.js +2 -0
  109. package/lib/template/AssetOutput.js.map +1 -0
  110. package/lib/template/AssetRef.d.ts +5 -0
  111. package/lib/template/AssetRef.d.ts.map +1 -0
  112. package/lib/template/AssetRef.js +2 -0
  113. package/lib/template/AssetRef.js.map +1 -0
  114. package/lib/template/CustomAsset.d.ts +7 -0
  115. package/lib/template/CustomAsset.d.ts.map +1 -0
  116. package/lib/template/CustomAsset.js +9 -0
  117. package/lib/template/CustomAsset.js.map +1 -0
  118. package/lib/template/DeploymentBundle.d.ts +16 -0
  119. package/lib/template/DeploymentBundle.d.ts.map +1 -0
  120. package/lib/template/DeploymentBundle.js +2 -0
  121. package/lib/template/DeploymentBundle.js.map +1 -0
  122. package/lib/template/FileSystemDeploymentBundle.d.ts +20 -0
  123. package/lib/template/FileSystemDeploymentBundle.d.ts.map +1 -0
  124. package/lib/template/FileSystemDeploymentBundle.js +72 -0
  125. package/lib/template/FileSystemDeploymentBundle.js.map +1 -0
  126. package/lib/template/ProgressStats.d.ts +6 -0
  127. package/lib/template/ProgressStats.d.ts.map +1 -0
  128. package/lib/template/ProgressStats.js +2 -0
  129. package/lib/template/ProgressStats.js.map +1 -0
  130. package/lib/template/makeAsset.d.ts +5 -0
  131. package/lib/template/makeAsset.d.ts.map +1 -0
  132. package/lib/template/makeAsset.js +6 -0
  133. package/lib/template/makeAsset.js.map +1 -0
  134. package/lib/template/makeAssetFromPackage.d.ts +12 -0
  135. package/lib/template/makeAssetFromPackage.d.ts.map +1 -0
  136. package/lib/template/makeAssetFromPackage.js +29 -0
  137. package/lib/template/makeAssetFromPackage.js.map +1 -0
  138. package/lib/template/processAssets.d.ts +4 -0
  139. package/lib/template/processAssets.d.ts.map +1 -0
  140. package/lib/template/processAssets.js +24 -0
  141. package/lib/template/processAssets.js.map +1 -0
  142. package/package.json +71 -0
  143. package/src/cli/build.ts +131 -0
  144. package/src/cli/cfnassets.ts +9 -0
  145. package/src/core/rollup/makeRollupPackageStream.ts +55 -0
  146. package/src/core/rollup/rollupPackageDir.ts +64 -0
  147. package/src/core/rollup/rollupPackageEntries.ts +46 -0
  148. package/src/core/zip/ZipAssetEntry.ts +11 -0
  149. package/src/core/zip/getFolderEntries.ts +47 -0
  150. package/src/core/zip/getPackageEntries.ts +104 -0
  151. package/src/core/zip/makeZipPackageStream.ts +41 -0
  152. package/src/core/zip/zipDir.ts +43 -0
  153. package/src/index.ts +25 -0
  154. package/src/internal/HashStream.ts +36 -0
  155. package/src/internal/ProgressStream.ts +32 -0
  156. package/src/internal/addBundleInfoToPackageJson.ts +52 -0
  157. package/src/internal/getPackagePath.ts +13 -0
  158. package/src/internal/hash.ts +9 -0
  159. package/src/internal/readDotIgnoreFile.ts +15 -0
  160. package/src/internal/readDotIgnoreForFolder.ts +8 -0
  161. package/src/internal/tryStat.ts +12 -0
  162. package/src/template/AssetAttributes.ts +5 -0
  163. package/src/template/AssetBase.ts +60 -0
  164. package/src/template/AssetBuilder.ts +8 -0
  165. package/src/template/AssetContext.ts +15 -0
  166. package/src/template/AssetDefinition.ts +8 -0
  167. package/src/template/AssetGenerator.ts +5 -0
  168. package/src/template/AssetManifest.ts +25 -0
  169. package/src/template/AssetOutput.ts +6 -0
  170. package/src/template/AssetRef.ts +4 -0
  171. package/src/template/CustomAsset.ts +11 -0
  172. package/src/template/DeploymentBundle.ts +20 -0
  173. package/src/template/FileSystemDeploymentBundle.ts +112 -0
  174. package/src/template/ProgressStats.ts +5 -0
  175. package/src/template/makeAsset.ts +12 -0
  176. package/src/template/makeAssetFromPackage.ts +42 -0
  177. package/src/template/processAssets.ts +40 -0
  178. package/src/types/loadConfigFile.d.ts +20 -0
package/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # @diquattro/cfnassets
2
+
3
+ > **Fork of [@awboost/cfnassets](https://github.com/awboost/cfnassets)** by Gordon Leigh.
4
+ > This fork adds pnpm support. Consider using the original package if/when this feature is merged upstream.
5
+
6
+ Build asset zip packages for deployment.
7
+
8
+ ## Quick Start
9
+
10
+ You need an assets config file:
11
+
12
+ ```jsonc
13
+ // cfnassets.config.json
14
+ {
15
+ "api": {
16
+ "type": "rollup",
17
+ "options": {
18
+ "entrypoint": "./core/lib/api/lambda.js",
19
+ "install": ["source-map-support"],
20
+ "packageFilePath": "package.json",
21
+ "packageInstallImage": "node:16-slim",
22
+ "packageLockPath": "package-lock.json"
23
+ }
24
+ },
25
+ "app-client": {
26
+ "type": "content",
27
+ "options": {
28
+ "source": "apps/client/build"
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ The `packageLockPath` option supports npm (`package-lock.json`), yarn (`yarn.lock`), and pnpm (`pnpm-lock.yaml`):
35
+
36
+ ```jsonc
37
+ // Example using pnpm
38
+ {
39
+ "api": {
40
+ "type": "rollup",
41
+ "options": {
42
+ "entrypoint": "./lib/lambda.js",
43
+ "install": ["source-map-support"],
44
+ "packageFilePath": "package.json",
45
+ "packageLockPath": "pnpm-lock.yaml"
46
+ }
47
+ }
48
+ }
49
+ ```
50
+
51
+ Then run:
52
+
53
+ ```
54
+ cfnassets build --config cfnassets.config.json
55
+ ```
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function addBuildCommand(program: Command): void;
3
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsDpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkEtD"}
@@ -0,0 +1,77 @@
1
+ import { array, assert, choose, is, object, optional, record, text, } from '@fmtk/decoders';
2
+ import fs from 'fs';
3
+ import { dirname, resolve } from 'path';
4
+ import { rollupPackageDir } from '../core/rollup/rollupPackageDir.js';
5
+ import { zipDir } from '../core/zip/zipDir.js';
6
+ import { getPackagePath } from '../internal/getPackagePath.js';
7
+ const decodeOptions = choose(object({
8
+ type: is('rollup'),
9
+ options: object({
10
+ entrypoint: text,
11
+ ignore: optional(array(text)),
12
+ install: optional(array(text)),
13
+ packageArch: optional(text),
14
+ packageFilePath: optional(text),
15
+ packagePlatform: optional(text),
16
+ packageLockPath: optional(text),
17
+ rollupConfigPath: optional(text),
18
+ }),
19
+ }), object({
20
+ type: is('content'),
21
+ options: object({
22
+ source: text,
23
+ ignore: optional(array(text)),
24
+ }),
25
+ }));
26
+ const decodeConfig = record(text, decodeOptions);
27
+ export function addBuildCommand(program) {
28
+ program
29
+ .command('build')
30
+ .description('create one or more packages based on a config file')
31
+ .requiredOption('-c, --config <name>', 'the config file')
32
+ .option('--only <name...>', 'only process the named asset(s)')
33
+ .option('-o, --output-dir <path>', 'the output directory')
34
+ .action(async (options) => {
35
+ const cfg = assert(decodeConfig, JSON.parse(fs.readFileSync(options.config, 'utf8')));
36
+ const source = dirname(resolve(options.config));
37
+ const filter = options.only && new Set(options.only);
38
+ for (const key in cfg) {
39
+ if (filter && !filter.has(key)) {
40
+ continue;
41
+ }
42
+ const item = cfg[key];
43
+ console.log(`Processing asset ${key}`);
44
+ switch (item.type) {
45
+ case 'content':
46
+ await zipDir(item.options.source, {
47
+ bundleName: key,
48
+ packagePath: await getPackagePath(item.options.source),
49
+ outputPath: options.outputDir,
50
+ ignorePaths: item.options.ignore,
51
+ });
52
+ break;
53
+ case 'rollup':
54
+ await rollupPackageDir(source, {
55
+ bundleName: key,
56
+ entrypoint: item.options.entrypoint,
57
+ ignorePaths: item.options.ignore,
58
+ installPackages: item.options.install,
59
+ outputPath: options.outputDir,
60
+ packageArch: item.options.packageArch,
61
+ packageFilePath: item.options.packageFilePath &&
62
+ resolve(source, item.options.packageFilePath),
63
+ packagePlatform: item.options.packagePlatform,
64
+ packageLockPath: item.options.packageLockPath &&
65
+ resolve(source, item.options.packageLockPath),
66
+ rollupConfigPath: item.options.rollupConfigPath &&
67
+ resolve(source, item.options.rollupConfigPath),
68
+ });
69
+ break;
70
+ default:
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ throw new Error(`unknown asset type ${item.type}`);
73
+ }
74
+ }
75
+ });
76
+ }
77
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cfnassets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfnassets.d.ts","sourceRoot":"","sources":["../../src/cli/cfnassets.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { addBuildCommand } from './build.js';
4
+ const program = new Command('deploy');
5
+ addBuildCommand(program);
6
+ await program.parseAsync();
7
+ //# sourceMappingURL=cfnassets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfnassets.js","sourceRoot":"","sources":["../../src/cli/cfnassets.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAY,CAAC;AAEjD,eAAe,CAAC,OAAO,CAAC,CAAC;AAEzB,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { MergedRollupOptions } from 'rollup';
3
+ import { BatchWarnings } from 'rollup/loadConfigFile';
4
+ import { Readable } from 'stream';
5
+ export interface RollupPackageOptions {
6
+ ignore?: string[];
7
+ installPackages?: string[];
8
+ options: MergedRollupOptions[];
9
+ packageArch?: string;
10
+ packageFilePath?: string;
11
+ packagePlatform?: string;
12
+ packageLockPath?: string;
13
+ warnings: BatchWarnings;
14
+ }
15
+ export declare function makeRollupPackageStream({ ignore, installPackages, options, packageArch, packageFilePath, packagePlatform, packageLockPath, warnings, }: RollupPackageOptions): Promise<Readable>;
16
+ //# sourceMappingURL=makeRollupPackageStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeRollupPackageStream.d.ts","sourceRoot":"","sources":["../../../src/core/rollup/makeRollupPackageStream.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAMlC,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,wBAAsB,uBAAuB,CAAC,EAC5C,MAAM,EACN,eAAe,EACf,OAAO,EACP,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EACf,QAAQ,GACT,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0B1C"}
@@ -0,0 +1,27 @@
1
+ import { getPackageEntries } from '../zip/getPackageEntries.js';
2
+ import { makeZipPackageStream } from '../zip/makeZipPackageStream.js';
3
+ import { rollupPackageEntries } from './rollupPackageEntries.js';
4
+ export async function makeRollupPackageStream({ ignore, installPackages, options, packageArch, packageFilePath, packagePlatform, packageLockPath, warnings, }) {
5
+ const entries = [];
6
+ for await (const entry of rollupPackageEntries(options, warnings)) {
7
+ entries.push(entry);
8
+ }
9
+ if (installPackages?.length) {
10
+ if (!packageFilePath || !packageLockPath) {
11
+ throw new Error(`must specify package lock path and package.json path when installing packages`);
12
+ }
13
+ const packageFiles = getPackageEntries({
14
+ ignorePaths: ignore,
15
+ packageArch,
16
+ packageFilePath,
17
+ packagePlatform,
18
+ packageLockPath,
19
+ packageNames: installPackages,
20
+ });
21
+ for await (const entry of packageFiles) {
22
+ entries.push(entry);
23
+ }
24
+ }
25
+ return makeZipPackageStream(entries);
26
+ }
27
+ //# sourceMappingURL=makeRollupPackageStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeRollupPackageStream.js","sourceRoot":"","sources":["../../../src/core/rollup/makeRollupPackageStream.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAajE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,EAC5C,MAAM,EACN,eAAe,EACf,OAAO,EACP,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EACf,QAAQ,GACa;IACrB,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;QACjE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrB;IACD,IAAI,eAAe,EAAE,MAAM,EAAE;QAC3B,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,EAAE;YACxC,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;SACH;QACD,MAAM,YAAY,GAAG,iBAAiB,CAAC;YACrC,WAAW,EAAE,MAAM;YACnB,WAAW;YACX,eAAe;YACf,eAAe;YACf,eAAe;YACf,YAAY,EAAE,eAAe;SAC9B,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,EAAE;YACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrB;KACF;IACD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface RollupPackageDirOptions {
2
+ bundleName?: string;
3
+ entrypoint?: string;
4
+ ignorePaths?: string[];
5
+ installPackages?: string[];
6
+ outputPath?: string;
7
+ packageArch?: string;
8
+ packageFilePath?: string;
9
+ packagePlatform?: string;
10
+ packageLockPath?: string;
11
+ rollupConfigPath?: string;
12
+ }
13
+ export declare function rollupPackageDir(dirPath: string, opts?: RollupPackageDirOptions): Promise<void>;
14
+ //# sourceMappingURL=rollupPackageDir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollupPackageDir.d.ts","sourceRoot":"","sources":["../../../src/core/rollup/rollupPackageDir.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,uBAAuB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -0,0 +1,36 @@
1
+ import { createWriteStream } from 'fs';
2
+ import { mkdir } from 'fs/promises';
3
+ import { dirname, resolve } from 'path';
4
+ import loadConfigFile from 'rollup/loadConfigFile';
5
+ import { pipeline } from 'stream/promises';
6
+ import { addBundleInfoToPackageJson } from '../../internal/addBundleInfoToPackageJson.js';
7
+ import { readDotIgnoreForFolder } from '../../internal/readDotIgnoreForFolder.js';
8
+ import { makeRollupPackageStream } from './makeRollupPackageStream.js';
9
+ export async function rollupPackageDir(dirPath, opts) {
10
+ const outputPath = opts?.outputPath || `dist/${opts?.bundleName || 'bundle'}.zip`;
11
+ const fullOutputPath = resolve(outputPath);
12
+ const installPackages = opts?.installPackages || [];
13
+ const ignorePaths = opts?.ignorePaths || [];
14
+ ignorePaths.push(...(await readDotIgnoreForFolder(dirPath)));
15
+ const rollupConfigPath = opts?.rollupConfigPath || 'rollup.config.js';
16
+ const { options, warnings } = await loadConfigFile(resolve(dirPath, rollupConfigPath));
17
+ const output = await makeRollupPackageStream({
18
+ ignore: ignorePaths,
19
+ installPackages,
20
+ options: opts?.entrypoint
21
+ ? options.map((x) => ({ ...x, input: opts.entrypoint }))
22
+ : options,
23
+ packageArch: opts?.packageArch,
24
+ packageFilePath: opts?.packageFilePath,
25
+ packagePlatform: opts?.packagePlatform,
26
+ packageLockPath: opts?.packageLockPath,
27
+ warnings,
28
+ });
29
+ await mkdir(dirname(fullOutputPath), { recursive: true });
30
+ await pipeline(output, createWriteStream(fullOutputPath));
31
+ await addBundleInfoToPackageJson(dirPath, {
32
+ name: opts?.bundleName,
33
+ path: outputPath,
34
+ });
35
+ }
36
+ //# sourceMappingURL=rollupPackageDir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollupPackageDir.js","sourceRoot":"","sources":["../../../src/core/rollup/rollupPackageDir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAevE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,IAA8B;IAE9B,MAAM,UAAU,GACd,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,EAAE,UAAU,IAAI,QAAQ,MAAM,CAAC;IACjE,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC;IAEpD,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;IAC5C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,gBAAgB,GAAG,IAAI,EAAE,gBAAgB,IAAI,kBAAkB,CAAC;IAEtE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAChD,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC,CACnC,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;QAC3C,MAAM,EAAE,WAAW;QACnB,eAAe;QACf,OAAO,EAAE,IAAI,EAAE,UAAU;YACvB,CAAC,CAAC,OAAO,CAAC,GAAG,CACT,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAC/D;YACH,CAAC,CAAC,OAAO;QACX,WAAW,EAAE,IAAI,EAAE,WAAW;QAC9B,eAAe,EAAE,IAAI,EAAE,eAAe;QACtC,eAAe,EAAE,IAAI,EAAE,eAAe;QACtC,eAAe,EAAE,IAAI,EAAE,eAAe;QACtC,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1D,MAAM,0BAA0B,CAAC,OAAO,EAAE;QACxC,IAAI,EAAE,IAAI,EAAE,UAAU;QACtB,IAAI,EAAE,UAAU;KACjB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { MergedRollupOptions } from 'rollup';
2
+ import { BatchWarnings } from 'rollup/loadConfigFile';
3
+ import { ZipAssetEntry } from '../zip/ZipAssetEntry.js';
4
+ export declare function rollupPackageEntries(options: MergedRollupOptions[], warnings: BatchWarnings): AsyncIterableIterator<ZipAssetEntry>;
5
+ //# sourceMappingURL=rollupPackageEntries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollupPackageEntries.d.ts","sourceRoot":"","sources":["../../../src/core/rollup/rollupPackageEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAU,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIxD,wBAAuB,oBAAoB,CACzC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,QAAQ,EAAE,aAAa,GACtB,qBAAqB,CAAC,aAAa,CAAC,CAoCtC"}
@@ -0,0 +1,35 @@
1
+ import { rollup } from 'rollup';
2
+ const SourceMapUrl = 'sourceMappingURL';
3
+ export async function* rollupPackageEntries(options, warnings) {
4
+ for (const inputOptions of options) {
5
+ const bundle = await rollup(inputOptions);
6
+ for (const outputOptions of inputOptions.output) {
7
+ const output = await bundle.generate(outputOptions);
8
+ for (const chunkOrAsset of output.output) {
9
+ let content;
10
+ if (chunkOrAsset.type === 'asset') {
11
+ content = Buffer.from(chunkOrAsset.source);
12
+ }
13
+ else if (chunkOrAsset.type === 'chunk') {
14
+ let code = chunkOrAsset.code;
15
+ if (chunkOrAsset.map) {
16
+ const url = `${chunkOrAsset.fileName}.map`;
17
+ yield {
18
+ archivePath: url,
19
+ content: chunkOrAsset.map.toString(),
20
+ };
21
+ code += `//# ${SourceMapUrl}=${url}\n`;
22
+ }
23
+ content = Buffer.from(code);
24
+ }
25
+ else {
26
+ continue;
27
+ }
28
+ yield { archivePath: chunkOrAsset.fileName, content };
29
+ warnings?.flush();
30
+ }
31
+ }
32
+ }
33
+ warnings?.flush();
34
+ }
35
+ //# sourceMappingURL=rollupPackageEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollupPackageEntries.js","sourceRoot":"","sources":["../../../src/core/rollup/rollupPackageEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrD,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,oBAAoB,CACzC,OAA8B,EAC9B,QAAuB;IAEvB,KAAK,MAAM,YAAY,IAAI,OAAO,EAAE;QAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAE1C,KAAK,MAAM,aAAa,IAAI,YAAY,CAAC,MAAM,EAAE;YAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAEpD,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE;gBACxC,IAAI,OAAe,CAAC;gBAEpB,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE;oBACjC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;iBAC5C;qBAAM,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE;oBACxC,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;oBAE7B,IAAI,YAAY,CAAC,GAAG,EAAE;wBACpB,MAAM,GAAG,GAAG,GAAG,YAAY,CAAC,QAAQ,MAAM,CAAC;wBAE3C,MAAM;4BACJ,WAAW,EAAE,GAAG;4BAChB,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE;yBACrC,CAAC;wBACF,IAAI,IAAI,OAAO,YAAY,IAAI,GAAG,IAAI,CAAC;qBACxC;oBAED,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC7B;qBAAM;oBACL,SAAS;iBACV;gBAED,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACtD,QAAQ,EAAE,KAAK,EAAE,CAAC;aACnB;SACF;KACF;IACD,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ import { Readable } from 'stream';
4
+ export type EntryContent = Readable | string | Buffer;
5
+ export interface ZipAssetEntry {
6
+ archivePath: string;
7
+ content: EntryContent | (() => EntryContent) | (() => PromiseLike<EntryContent>);
8
+ }
9
+ //# sourceMappingURL=ZipAssetEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZipAssetEntry.d.ts","sourceRoot":"","sources":["../../../src/core/zip/ZipAssetEntry.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EACH,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;CACvC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ZipAssetEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZipAssetEntry.js","sourceRoot":"","sources":["../../../src/core/zip/ZipAssetEntry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { ZipAssetEntry } from './ZipAssetEntry.js';
2
+ export interface FolderEntriesOptions {
3
+ archivePath?: string;
4
+ ignore?: string[];
5
+ source: string;
6
+ }
7
+ export declare function getFolderEntries({ archivePath: archiveBasePath, source, ignore: ignorePaths, }: FolderEntriesOptions): AsyncIterableIterator<ZipAssetEntry>;
8
+ //# sourceMappingURL=getFolderEntries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFolderEntries.d.ts","sourceRoot":"","sources":["../../../src/core/zip/getFolderEntries.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAuB,gBAAgB,CAAC,EACtC,WAAW,EAAE,eAAqB,EAClC,MAAM,EACN,MAAM,EAAE,WAAW,GACpB,EAAE,oBAAoB,GAAG,qBAAqB,CAAC,aAAa,CAAC,CA8B7D"}
@@ -0,0 +1,32 @@
1
+ import { createReadStream } from 'fs';
2
+ import { readdir } from 'fs/promises';
3
+ import ignore from 'ignore';
4
+ import { join, relative, resolve } from 'path';
5
+ export async function* getFolderEntries({ archivePath: archiveBasePath = '/', source, ignore: ignorePaths, }) {
6
+ const work = [resolve(source)];
7
+ const ig = ignore.default().add(ignorePaths || []);
8
+ while (work.length) {
9
+ const curr = work.pop();
10
+ const entries = await readdir(curr, { withFileTypes: true });
11
+ for (const entry of entries) {
12
+ const entryPath = join(curr, entry.name);
13
+ let archivePath = relative(source, entryPath);
14
+ if (entry.isDirectory()) {
15
+ archivePath += '/';
16
+ }
17
+ if (ig.ignores(archivePath)) {
18
+ continue;
19
+ }
20
+ if (entry.isDirectory()) {
21
+ work.push(entryPath);
22
+ }
23
+ else if (entry.isFile()) {
24
+ yield {
25
+ archivePath: join(archiveBasePath, archivePath),
26
+ content: () => createReadStream(entryPath),
27
+ };
28
+ }
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=getFolderEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFolderEntries.js","sourceRoot":"","sources":["../../../src/core/zip/getFolderEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAS/C,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,gBAAgB,CAAC,EACtC,WAAW,EAAE,eAAe,GAAG,GAAG,EAClC,MAAM,EACN,MAAM,EAAE,WAAW,GACE;IACrB,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAEnD,OAAO,IAAI,CAAC,MAAM,EAAE;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAY,CAAC;QAElC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;gBACvB,WAAW,IAAI,GAAG,CAAC;aACpB;YACD,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC3B,SAAS;aACV;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACtB;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;gBACzB,MAAM;oBACJ,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC;oBAC/C,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC;iBAC3C,CAAC;aACH;SACF;KACF;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { ZipAssetEntry } from './ZipAssetEntry.js';
2
+ export interface PackageEntriesOptions {
3
+ archivePath?: string;
4
+ ignorePaths?: string[];
5
+ packageArch?: string;
6
+ packageFilePath: string;
7
+ packagePlatform?: string;
8
+ packageLockPath: string;
9
+ packageNames: string[];
10
+ }
11
+ export declare function getPackageEntries({ archivePath, ignorePaths, packageLockPath, packageFilePath, packageArch, packagePlatform, packageNames, }: PackageEntriesOptions): AsyncIterableIterator<ZipAssetEntry>;
12
+ //# sourceMappingURL=getPackageEntries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPackageEntries.d.ts","sourceRoot":"","sources":["../../../src/core/zip/getPackageEntries.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAuB,iBAAiB,CAAC,EACvC,WAA4B,EAC5B,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,YAAY,GACb,EAAE,qBAAqB,GAAG,qBAAqB,CAAC,aAAa,CAAC,CA6E9D"}
@@ -0,0 +1,73 @@
1
+ import chalk from 'chalk';
2
+ import childProc from 'child_process';
3
+ import { copyFile, readFile, writeFile } from 'fs/promises';
4
+ import { basename, join } from 'path';
5
+ import { temporaryDirectory } from 'tempy';
6
+ import { getFolderEntries } from './getFolderEntries.js';
7
+ export async function* getPackageEntries({ archivePath = 'node_modules', ignorePaths, packageLockPath, packageFilePath, packageArch, packagePlatform, packageNames, }) {
8
+ let exec;
9
+ const npmConfig = [];
10
+ const lockBasename = basename(packageLockPath);
11
+ if (lockBasename === 'package-lock.json') {
12
+ exec = ['npm', 'ci'];
13
+ }
14
+ else if (lockBasename === 'yarn.lock') {
15
+ exec = ['yarn', '--frozen-lockfile'];
16
+ }
17
+ else if (lockBasename === 'pnpm-lock.yaml') {
18
+ exec = ['pnpm', 'install', '--frozen-lockfile'];
19
+ }
20
+ else {
21
+ throw new Error(`unknown lockfile type for path '${packageLockPath}'`);
22
+ }
23
+ const pkg = JSON.parse(await readFile(packageFilePath, 'utf-8'));
24
+ const newPackageJson = {
25
+ name: 'build',
26
+ private: true,
27
+ dependencies: {},
28
+ };
29
+ for (const dep of packageNames) {
30
+ const version = (pkg.dependencies && pkg.dependencies[dep]) ||
31
+ (pkg.devDependencies && pkg.devDependencies[dep]);
32
+ if (!version) {
33
+ throw new Error(`cannot find dependency ${dep} in ${packageFilePath}`);
34
+ }
35
+ newPackageJson.dependencies[dep] = version;
36
+ }
37
+ if (packageArch) {
38
+ npmConfig.push(`arch=${packageArch}`);
39
+ }
40
+ if (packagePlatform) {
41
+ npmConfig.push(`platform=${packagePlatform}`);
42
+ }
43
+ const outDir = temporaryDirectory();
44
+ await writeFile(join(outDir, 'package.json'), JSON.stringify(newPackageJson));
45
+ await copyFile(packageLockPath, join(outDir, lockBasename));
46
+ if (npmConfig.length) {
47
+ await writeFile(join(outDir, '.npmrc'), npmConfig.join('\n') + '\n');
48
+ }
49
+ const [cmd, ...args] = exec;
50
+ const flags = npmConfig.join(', ');
51
+ console.log(`\n${chalk.cyan.bold(`${cmd} install`)} ${chalk.gray(flags)}`);
52
+ const proc = childProc.spawn(cmd, args, {
53
+ cwd: outDir,
54
+ stdio: 'inherit',
55
+ });
56
+ await new Promise((resolve, reject) => {
57
+ proc.on('close', (code) => {
58
+ if (code === 0) {
59
+ resolve();
60
+ }
61
+ else {
62
+ reject(new Error(`npm exited with non-zero error code ${code}`));
63
+ }
64
+ });
65
+ });
66
+ console.log(`\n`);
67
+ yield* getFolderEntries({
68
+ source: join(outDir, 'node_modules'),
69
+ archivePath,
70
+ ignore: ignorePaths,
71
+ });
72
+ }
73
+ //# sourceMappingURL=getPackageEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPackageEntries.js","sourceRoot":"","sources":["../../../src/core/zip/getPackageEntries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import stream from 'stream';
3
+ import { ZipAssetEntry } from './ZipAssetEntry.js';
4
+ export declare function makeZipPackageStream(entries: AsyncIterable<ZipAssetEntry> | Iterable<ZipAssetEntry>): Promise<stream.Readable>;
5
+ //# sourceMappingURL=makeZipPackageStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeZipPackageStream.d.ts","sourceRoot":"","sources":["../../../src/core/zip/makeZipPackageStream.ts"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAkC1B"}
@@ -0,0 +1,29 @@
1
+ import archiver from 'archiver';
2
+ export async function makeZipPackageStream(entries) {
3
+ const zip = archiver('zip', { zlib: { level: 9 } });
4
+ let error;
5
+ zip.on('warning', (err) => {
6
+ console.error(`rollupPackage: WARN: `, err);
7
+ });
8
+ zip.on('error', (err) => {
9
+ error = err || new Error(`unknown error occurred`);
10
+ });
11
+ const sortedEntries = [];
12
+ for await (const entry of entries) {
13
+ sortedEntries.push(entry);
14
+ }
15
+ sortedEntries.sort((a, b) => a.archivePath.localeCompare(b.archivePath));
16
+ for await (const entry of sortedEntries) {
17
+ if (error) {
18
+ throw error;
19
+ }
20
+ const content = typeof entry.content === 'function'
21
+ ? await entry.content()
22
+ : entry.content;
23
+ zip.append(content, { name: entry.archivePath, date: new Date(0) });
24
+ }
25
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
26
+ zip.finalize();
27
+ return zip;
28
+ }
29
+ //# sourceMappingURL=makeZipPackageStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeZipPackageStream.js","sourceRoot":"","sources":["../../../src/core/zip/makeZipPackageStream.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA+D;IAE/D,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,KAAc,CAAC;IAEnB,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;QACjC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE;QAC/B,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAoB,EAAE,CAAC;IAC1C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE;QACjC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IACD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAEzE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,aAAa,EAAE;QACvC,IAAI,KAAK,EAAE;YACT,MAAM,KAAK,CAAC;SACb;QAED,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU;YACjC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE;YACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAEpB,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KACrE;IAED,mEAAmE;IACnE,GAAG,CAAC,QAAQ,EAAE,CAAC;IACf,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface ZipDirOptions {
2
+ bundleName?: string;
3
+ ignorePaths?: string[];
4
+ outputPath?: string;
5
+ packagePath?: string;
6
+ }
7
+ export declare function zipDir(dirname: string, opts?: ZipDirOptions): Promise<void>;
8
+ //# sourceMappingURL=zipDir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipDir.d.ts","sourceRoot":"","sources":["../../../src/core/zip/zipDir.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -0,0 +1,24 @@
1
+ import fs from 'fs';
2
+ import { mkdir } from 'fs/promises';
3
+ import path from 'path';
4
+ import { pipeline } from 'stream/promises';
5
+ import { addBundleInfoToPackageJson } from '../../internal/addBundleInfoToPackageJson.js';
6
+ import { readDotIgnoreForFolder } from '../../internal/readDotIgnoreForFolder.js';
7
+ import { getFolderEntries } from './getFolderEntries.js';
8
+ import { makeZipPackageStream } from './makeZipPackageStream.js';
9
+ export async function zipDir(dirname, opts) {
10
+ const outputPath = opts?.outputPath || `dist/${opts?.bundleName || 'bundle'}.zip`;
11
+ const fullOutputPath = path.resolve(outputPath);
12
+ const ignorePaths = opts?.ignorePaths || [];
13
+ ignorePaths.push(...(await readDotIgnoreForFolder(opts?.packagePath || dirname)));
14
+ const zip = await makeZipPackageStream(getFolderEntries({ source: dirname, ignore: ignorePaths }));
15
+ await mkdir(path.dirname(fullOutputPath), { recursive: true });
16
+ await pipeline(zip, fs.createWriteStream(fullOutputPath));
17
+ if (opts?.packagePath) {
18
+ await addBundleInfoToPackageJson(opts?.packagePath, {
19
+ name: opts?.bundleName,
20
+ path: outputPath,
21
+ });
22
+ }
23
+ }
24
+ //# sourceMappingURL=zipDir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipDir.js","sourceRoot":"","sources":["../../../src/core/zip/zipDir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AASjE,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAAe,EACf,IAAoB;IAEpB,MAAM,UAAU,GACd,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,EAAE,UAAU,IAAI,QAAQ,MAAM,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;IAC5C,WAAW,CAAC,IAAI,CACd,GAAG,CAAC,MAAM,sBAAsB,CAAC,IAAI,EAAE,WAAW,IAAI,OAAO,CAAC,CAAC,CAChE,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,oBAAoB,CACpC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAC3D,CAAC;IAEF,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1D,IAAI,IAAI,EAAE,WAAW,EAAE;QACrB,MAAM,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE;YAClD,IAAI,EAAE,IAAI,EAAE,UAAU;YACtB,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;KACJ;AACH,CAAC"}