packtory 0.0.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/artifacts/artifacts-builder.d.ts +20 -0
  3. package/artifacts/artifacts-builder.d.ts.map +1 -0
  4. package/artifacts/artifacts-builder.js +43 -0
  5. package/artifacts/artifacts-builder.js.map +1 -0
  6. package/artifacts/file-manager.d.ts +18 -0
  7. package/artifacts/file-manager.d.ts.map +1 -0
  8. package/artifacts/file-manager.js +35 -0
  9. package/artifacts/file-manager.js.map +1 -0
  10. package/bundler/bundle-build-options.d.ts +19 -0
  11. package/bundler/bundle-build-options.d.ts.map +1 -0
  12. package/bundler/bundle-build-options.js +25 -0
  13. package/bundler/bundle-build-options.js.map +1 -0
  14. package/bundler/bundle-description.d.ts +27 -0
  15. package/bundler/bundle-description.d.ts.map +1 -0
  16. package/bundler/bundler.d.ts +11 -0
  17. package/bundler/bundler.d.ts.map +1 -0
  18. package/bundler/bundler.js +98 -0
  19. package/bundler/bundler.js.map +1 -0
  20. package/bundler/content.js +53 -0
  21. package/bundler/content.js.map +1 -0
  22. package/bundler/substitute-bundles.js +73 -0
  23. package/bundler/substitute-bundles.js.map +1 -0
  24. package/config/additional-files.d.ts +13 -0
  25. package/config/additional-files.d.ts.map +1 -0
  26. package/config/additional-files.js +8 -0
  27. package/config/additional-files.js.map +1 -0
  28. package/config/base-validations.d.ts +5 -0
  29. package/config/base-validations.d.ts.map +1 -0
  30. package/config/base-validations.js +3 -0
  31. package/config/base-validations.js.map +1 -0
  32. package/config/config.d.ts +470 -0
  33. package/config/config.d.ts.map +1 -0
  34. package/config/config.js +65 -0
  35. package/config/config.js.map +1 -0
  36. package/config/entry-point.d.ts +13 -0
  37. package/config/entry-point.d.ts.map +1 -0
  38. package/config/entry-point.js +8 -0
  39. package/config/entry-point.js.map +1 -0
  40. package/config/package-json.d.ts +33 -0
  41. package/config/package-json.d.ts.map +1 -0
  42. package/config/package-json.js +34 -0
  43. package/config/package-json.js.map +1 -0
  44. package/config/registry-settings.d.ts +13 -0
  45. package/config/registry-settings.d.ts.map +1 -0
  46. package/config/registry-settings.js +8 -0
  47. package/config/registry-settings.js.map +1 -0
  48. package/config/validation.d.ts +13 -0
  49. package/config/validation.d.ts.map +1 -0
  50. package/config/validation.js +99 -0
  51. package/config/validation.js.map +1 -0
  52. package/config/versioning-settings.d.ts +23 -0
  53. package/config/versioning-settings.d.ts.map +1 -0
  54. package/config/versioning-settings.js +15 -0
  55. package/config/versioning-settings.js.map +1 -0
  56. package/dependency-scanner/dependency-graph.d.ts +33 -0
  57. package/dependency-scanner/dependency-graph.d.ts.map +1 -0
  58. package/dependency-scanner/dependency-graph.js +60 -0
  59. package/dependency-scanner/dependency-graph.js.map +1 -0
  60. package/dependency-scanner/scanner.d.ts +34 -0
  61. package/dependency-scanner/scanner.d.ts.map +1 -0
  62. package/dependency-scanner/scanner.js +131 -0
  63. package/dependency-scanner/scanner.js.map +1 -0
  64. package/dependency-scanner/source-file-references.js +68 -0
  65. package/dependency-scanner/source-file-references.js.map +1 -0
  66. package/dependency-scanner/source-map-file-locator.d.ts +10 -0
  67. package/dependency-scanner/source-map-file-locator.d.ts.map +1 -0
  68. package/dependency-scanner/source-map-file-locator.js +23 -0
  69. package/dependency-scanner/source-map-file-locator.js.map +1 -0
  70. package/dependency-scanner/typescript-file-host.d.ts +10 -0
  71. package/dependency-scanner/typescript-file-host.d.ts.map +1 -0
  72. package/dependency-scanner/typescript-file-host.js +50 -0
  73. package/dependency-scanner/typescript-file-host.js.map +1 -0
  74. package/dependency-scanner/typescript-project-analyzer.d.ts +23 -0
  75. package/dependency-scanner/typescript-project-analyzer.d.ts.map +1 -0
  76. package/dependency-scanner/typescript-project-analyzer.js +64 -0
  77. package/dependency-scanner/typescript-project-analyzer.js.map +1 -0
  78. package/directed-graph/graph.d.ts +27 -0
  79. package/directed-graph/graph.d.ts.map +1 -0
  80. package/directed-graph/graph.js +183 -0
  81. package/directed-graph/graph.js.map +1 -0
  82. package/file-description/compare.js +18 -0
  83. package/file-description/compare.js.map +1 -0
  84. package/file-description/equal.js +4 -0
  85. package/file-description/equal.js.map +1 -0
  86. package/file-description/file-description.d.ts +5 -0
  87. package/file-description/file-description.d.ts.map +1 -0
  88. package/file-description/sort.js +13 -0
  89. package/file-description/sort.js.map +1 -0
  90. package/package-json.js +33 -0
  91. package/package-json.js.map +1 -0
  92. package/package.json +48 -0
  93. package/packages/bundler/bundler.entry-point.js +21 -0
  94. package/packages/bundler/bundler.entry-point.js.map +1 -0
  95. package/packages/packtory/packtory.entry-point.d.ts +7 -0
  96. package/packages/packtory/packtory.entry-point.d.ts.map +1 -0
  97. package/packages/packtory/packtory.entry-point.js +32 -0
  98. package/packages/packtory/packtory.entry-point.js.map +1 -0
  99. package/packtory/map-config.js +55 -0
  100. package/packtory/map-config.js.map +1 -0
  101. package/packtory/normalize-paths.js +26 -0
  102. package/packtory/normalize-paths.js.map +1 -0
  103. package/packtory/packtory.d.ts +25 -0
  104. package/packtory/packtory.d.ts.map +1 -0
  105. package/packtory/packtory.js +30 -0
  106. package/packtory/packtory.js.map +1 -0
  107. package/packtory/scheduler.d.ts +18 -0
  108. package/packtory/scheduler.d.ts.map +1 -0
  109. package/packtory/scheduler.js +74 -0
  110. package/packtory/scheduler.js.map +1 -0
  111. package/progress/progress-broadcaster.d.ts +40 -0
  112. package/progress/progress-broadcaster.d.ts.map +1 -0
  113. package/progress/progress-broadcaster.js +16 -0
  114. package/progress/progress-broadcaster.js.map +1 -0
  115. package/publisher/extract-package-tarball.js +12 -0
  116. package/publisher/extract-package-tarball.js.map +1 -0
  117. package/publisher/publisher.d.ts +40 -0
  118. package/publisher/publisher.d.ts.map +1 -0
  119. package/publisher/publisher.js +73 -0
  120. package/publisher/publisher.js.map +1 -0
  121. package/publisher/registry-client.d.ts +24 -0
  122. package/publisher/registry-client.d.ts.map +1 -0
  123. package/publisher/registry-client.js +90 -0
  124. package/publisher/registry-client.js.map +1 -0
  125. package/publisher/version.js +35 -0
  126. package/publisher/version.js.map +1 -0
  127. package/readme.md +38 -0
  128. package/source-modifier/import-paths.js +17 -0
  129. package/source-modifier/import-paths.js.map +1 -0
  130. package/tar/extract-tar.js +17 -0
  131. package/tar/extract-tar.js.map +1 -0
  132. package/tar/tarball-builder.d.ts +7 -0
  133. package/tar/tarball-builder.d.ts.map +1 -0
  134. package/tar/tarball-builder.js +35 -0
  135. package/tar/tarball-builder.js.map +1 -0
  136. package/validation/capitalize.js +7 -0
  137. package/validation/capitalize.js.map +1 -0
  138. package/validation/formatting/ast.js +113 -0
  139. package/validation/formatting/ast.js.map +1 -0
  140. package/validation/formatting.js +98 -0
  141. package/validation/formatting.js.map +1 -0
  142. package/validation/validate.js +17 -0
  143. package/validation/validate.js.map +1 -0
@@ -0,0 +1,55 @@
1
+ import { map } from 'effect/ReadonlyArray';
2
+ import { normalizeAdditionalFile, normalizeEntryPoint } from './normalize-paths.js';
3
+ function dependencyNamesToBundles(dependencyNames, bundles) {
4
+ return dependencyNames.map((dependencyName) => {
5
+ const matchingBundle = bundles.find((bundle) => {
6
+ return bundle.packageJson.name === dependencyName;
7
+ });
8
+ if (matchingBundle === undefined) {
9
+ throw new Error(`Dependent bundle "${dependencyName}" not found`);
10
+ }
11
+ return matchingBundle;
12
+ });
13
+ }
14
+ function mergeAdditionalFiles(firstFiles = [], secondFiles = []) {
15
+ const filesWithUniqueTargetPath = new Map();
16
+ for (const file of firstFiles) {
17
+ filesWithUniqueTargetPath.set(file.targetFilePath, file);
18
+ }
19
+ for (const file of secondFiles) {
20
+ filesWithUniqueTargetPath.set(file.targetFilePath, file);
21
+ }
22
+ return Array.from(filesWithUniqueTargetPath.values());
23
+ }
24
+ export function configToBuildAndPublishOptions(packageName, packageConfigs, packtoryConfig, existingBundles) {
25
+ const packageConfig = packageConfigs.get(packageName);
26
+ if (packageConfig === undefined) {
27
+ throw new Error(`Config for package "${packageName}" is missing`);
28
+ }
29
+ const { sourcesFolder: sourcesFolderFromPackageConfig, mainPackageJson: mainPackageJsonFromPackageConfig, bundleDependencies = [], bundlePeerDependencies = [], entryPoints, additionalFiles, includeSourceMapFiles = packtoryConfig.commonPackageSettings?.includeSourceMapFiles, additionalPackageJsonAttributes = {}, ...remainingPackageConfig } = packageConfig;
30
+ const mainPackageJson = (packtoryConfig.commonPackageSettings?.mainPackageJson ??
31
+ mainPackageJsonFromPackageConfig);
32
+ const sourcesFolder = (packtoryConfig.commonPackageSettings?.sourcesFolder ??
33
+ sourcesFolderFromPackageConfig);
34
+ const uniqueAdditionalFiles = mergeAdditionalFiles(packtoryConfig.commonPackageSettings?.additionalFiles, additionalFiles);
35
+ return {
36
+ ...remainingPackageConfig,
37
+ additionalPackageJsonAttributes: {
38
+ ...packtoryConfig.commonPackageSettings?.additionalPackageJsonAttributes,
39
+ ...additionalPackageJsonAttributes
40
+ },
41
+ registrySettings: packtoryConfig.registrySettings,
42
+ includeSourceMapFiles,
43
+ entryPoints: map(entryPoints, (entryPoint) => {
44
+ return normalizeEntryPoint(entryPoint, sourcesFolder);
45
+ }),
46
+ additionalFiles: uniqueAdditionalFiles.map((additionalFile) => {
47
+ return normalizeAdditionalFile(additionalFile, sourcesFolder);
48
+ }),
49
+ mainPackageJson,
50
+ sourcesFolder,
51
+ bundleDependencies: dependencyNamesToBundles(bundleDependencies, existingBundles),
52
+ bundlePeerDependencies: dependencyNamesToBundles(bundlePeerDependencies, existingBundles)
53
+ };
54
+ }
55
+ //# sourceMappingURL=map-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-config.js","sourceRoot":"","sources":["../../../../source/packtory/map-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import path from 'node:path';
2
+ function ensureAbsolutePath(filePath, folder) {
3
+ if (path.isAbsolute(filePath)) {
4
+ return filePath;
5
+ }
6
+ return path.join(folder, filePath);
7
+ }
8
+ export function normalizeEntryPoint(entryPoint, sourceFolder) {
9
+ const { js, declarationFile } = entryPoint;
10
+ if (declarationFile !== undefined) {
11
+ return {
12
+ js: ensureAbsolutePath(js, sourceFolder),
13
+ declarationFile: ensureAbsolutePath(declarationFile, sourceFolder)
14
+ };
15
+ }
16
+ return {
17
+ js: ensureAbsolutePath(js, sourceFolder)
18
+ };
19
+ }
20
+ export function normalizeAdditionalFile(additionalFile, sourceFolder) {
21
+ return {
22
+ sourceFilePath: ensureAbsolutePath(additionalFile.sourceFilePath, sourceFolder),
23
+ targetFilePath: additionalFile.targetFilePath
24
+ };
25
+ }
26
+ //# sourceMappingURL=normalize-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-paths.js","sourceRoot":"","sources":["../../../../source/packtory/normalize-paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,SAAS,kBAAkB,CAAC,QAAgB,EAAE,MAAc;IACxD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE,YAAoB;IAC5E,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;IAE3C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO;YACH,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,YAAY,CAAC;YACxC,eAAe,EAAE,kBAAkB,CAAC,eAAe,EAAE,YAAY,CAAC;SACrE,CAAC;IACN,CAAC;IAED,OAAO;QACH,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,YAAY,CAAC;KAC3C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,cAAyC,EACzC,YAAoB;IAEpB,OAAO;QACH,cAAc,EAAE,kBAAkB,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,CAAC;QAC/E,cAAc,EAAE,cAAc,CAAC,cAAc;KAChD,CAAC;AACN,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Result } from 'true-myth';
2
+ import type { PacktoryConfig } from '../config/config.js';
3
+ import type { PublishResult, Publisher } from '../publisher/publisher.js';
4
+ import type { Scheduler, PartialError } from './scheduler.js';
5
+ type Options = {
6
+ readonly dryRun: boolean;
7
+ };
8
+ type ConfigError = {
9
+ type: 'config';
10
+ issues: readonly string[];
11
+ };
12
+ export type PublishFailure = ConfigError | (PartialError & {
13
+ type: 'partial';
14
+ });
15
+ export type PublishAllResult = Result<readonly PublishResult[], PublishFailure>;
16
+ export type Packtory = {
17
+ buildAndPublishAll(config: PacktoryConfig | unknown, options: Options): Promise<PublishAllResult>;
18
+ };
19
+ type PacktoryDependencies = {
20
+ readonly publisher: Publisher;
21
+ readonly scheduler: Scheduler;
22
+ };
23
+ export declare function createPacktory(dependencies: PacktoryDependencies): Packtory;
24
+ export {};
25
+ //# sourceMappingURL=packtory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packtory.d.ts","sourceRoot":"","sources":["../../../../source/packtory/packtory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9D,KAAK,OAAO,GAAG;IACX,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAChF,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,aAAa,EAAE,EAAE,cAAc,CAAC,CAAC;AAEhF,MAAM,MAAM,QAAQ,GAAG;IACnB,kBAAkB,CAEd,MAAM,EAAE,cAAc,GAAG,OAAO,EAChC,OAAO,EAAE,OAAO,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAChC,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CACjC,CAAC;AACF,wBAAgB,cAAc,CAAC,YAAY,EAAE,oBAAoB,GAAG,QAAQ,CA8B3E"}
@@ -0,0 +1,30 @@
1
+ import { Result } from 'true-myth';
2
+ import { validateConfig } from '../config/validation.js';
3
+ export function createPacktory(dependencies) {
4
+ const { publisher, scheduler } = dependencies;
5
+ return {
6
+ async buildAndPublishAll(config, options) {
7
+ const result = validateConfig(config);
8
+ if (result.isErr) {
9
+ return Result.err({
10
+ type: 'config',
11
+ issues: result.error
12
+ });
13
+ }
14
+ const runResult = await scheduler.runForEachScheduledPackage(result.value, async (buildOptions) => {
15
+ if (options.dryRun) {
16
+ return publisher.tryBuildAndPublish(buildOptions);
17
+ }
18
+ return publisher.buildAndPublish(buildOptions);
19
+ });
20
+ if (runResult.isErr) {
21
+ return Result.err({
22
+ type: 'partial',
23
+ ...runResult.error
24
+ });
25
+ }
26
+ return Result.ok(runResult.value);
27
+ }
28
+ };
29
+ }
30
+ //# sourceMappingURL=packtory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packtory.js","sourceRoot":"","sources":["../../../../source/packtory/packtory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AA4BzD,MAAM,UAAU,cAAc,CAAC,YAAkC;IAC7D,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;IAC9C,OAAO;QACH,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO;YACpC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,MAAM,CAAC,GAAG,CAAC;oBACd,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,MAAM,CAAC,KAAK;iBACvB,CAAC,CAAC;YACP,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,0BAA0B,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;gBAC9F,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,SAAS,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC,GAAG,CAAC;oBACd,IAAI,EAAE,SAAS;oBACf,GAAG,SAAS,CAAC,KAAK;iBACrB,CAAC,CAAC;YACP,CAAC;YAED,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Result } from 'true-myth';
2
+ import type { ValidConfigResult } from '../config/validation.js';
3
+ import type { BuildAndPublishOptions, PublishResult } from '../publisher/publisher.js';
4
+ import type { ProgressBroadcastProvider } from '../progress/progress-broadcaster.js';
5
+ type PackageOperationCallback = (options: BuildAndPublishOptions) => Promise<PublishResult>;
6
+ export type PartialError = {
7
+ readonly succeeded: readonly PublishResult[];
8
+ readonly failures: readonly Error[];
9
+ };
10
+ export type Scheduler = {
11
+ runForEachScheduledPackage(config: ValidConfigResult, callback: PackageOperationCallback): Promise<Result<readonly PublishResult[], PartialError>>;
12
+ };
13
+ type SchedulerDependencies = {
14
+ readonly progressBroadcastProvider: ProgressBroadcastProvider;
15
+ };
16
+ export declare function createScheduler(dependencies: SchedulerDependencies): Scheduler;
17
+ export {};
18
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../../source/packtory/scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAGrF,KAAK,wBAAwB,GAAG,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5F,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,KAAK,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACpB,0BAA0B,CACtB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,wBAAwB,GACnC,OAAO,CAAC,MAAM,CAAC,SAAS,aAAa,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;CACjE,CAAC;AAYF,wBAAgB,eAAe,CAAC,YAAY,EAAE,qBAAqB,GAAG,SAAS,CAkF9E"}
@@ -0,0 +1,74 @@
1
+ import { partition } from 'effect/ReadonlyArray';
2
+ import { get } from 'effect/Struct';
3
+ import { Result } from 'true-myth';
4
+ import { configToBuildAndPublishOptions } from './map-config.js';
5
+ function isFulfilledResult(result) {
6
+ return result.status === 'fulfilled';
7
+ }
8
+ const getValue = get('value');
9
+ const getBundle = get('bundle');
10
+ const getReason = get('reason');
11
+ export function createScheduler(dependencies) {
12
+ const { progressBroadcastProvider } = dependencies;
13
+ async function runForGeneration(packageNames, config, existingBundles, callback) {
14
+ const { packageConfigs, packtoryConfig } = config;
15
+ const results = await Promise.allSettled(packageNames.map(async (packageName) => {
16
+ try {
17
+ const options = configToBuildAndPublishOptions(packageName, packageConfigs, packtoryConfig, existingBundles);
18
+ const result = await callback(options);
19
+ progressBroadcastProvider.emit('done', {
20
+ packageName,
21
+ version: result.bundle.packageJson.version,
22
+ status: result.status
23
+ });
24
+ return result;
25
+ }
26
+ catch (error) {
27
+ if (error instanceof Error) {
28
+ progressBroadcastProvider.emit('error', { packageName, error });
29
+ }
30
+ else {
31
+ progressBroadcastProvider.emit('error', { packageName, error: new Error('Unknown error') });
32
+ }
33
+ throw error;
34
+ }
35
+ }));
36
+ const [rejectedResults, fulfilledResults] = partition(results, isFulfilledResult);
37
+ const succeeded = fulfilledResults.map(getValue);
38
+ if (rejectedResults.length > 0) {
39
+ return Result.err({
40
+ succeeded,
41
+ failures: rejectedResults.map(getReason)
42
+ });
43
+ }
44
+ return Result.ok(succeeded);
45
+ }
46
+ function emitScheduledEventForAllPackages(config) {
47
+ for (const packageConfig of config.packtoryConfig.packages) {
48
+ progressBroadcastProvider.emit('scheduled', { packageName: packageConfig.name });
49
+ }
50
+ }
51
+ function getExecutionPlan(config) {
52
+ return config.packageGraph.reverse().getTopologicalGenerations();
53
+ }
54
+ return {
55
+ async runForEachScheduledPackage(config, callback) {
56
+ emitScheduledEventForAllPackages(config);
57
+ const bundles = [];
58
+ const succeeded = [];
59
+ for (const generation of getExecutionPlan(config)) {
60
+ const generationResult = await runForGeneration(generation, config, bundles, callback);
61
+ if (generationResult.isErr) {
62
+ return Result.err({
63
+ succeeded: [...succeeded, ...generationResult.error.succeeded],
64
+ failures: generationResult.error.failures
65
+ });
66
+ }
67
+ bundles.push(...generationResult.value.map(getBundle));
68
+ succeeded.push(...generationResult.value);
69
+ }
70
+ return Result.ok(succeeded);
71
+ }
72
+ };
73
+ }
74
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../../source/packtory/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type Emitter } from 'mitt';
2
+ type ProgressEventPayload = {
3
+ readonly packageName: string;
4
+ readonly version: string;
5
+ };
6
+ type ScheduledEventPayload = {
7
+ readonly packageName: string;
8
+ };
9
+ type ErrorPayload = {
10
+ readonly packageName: string;
11
+ readonly error: Error;
12
+ };
13
+ type DonePayload = {
14
+ readonly packageName: string;
15
+ readonly version: string;
16
+ readonly status: 'already-published' | 'initial-version' | 'new-version';
17
+ };
18
+ type Events = {
19
+ readonly scheduled: ScheduledEventPayload;
20
+ readonly building: ProgressEventPayload;
21
+ readonly rebuilding: ProgressEventPayload;
22
+ readonly publishing: ProgressEventPayload;
23
+ readonly done: DonePayload;
24
+ readonly error: ErrorPayload;
25
+ };
26
+ type ProgressBroadcastEmitter = Emitter<Events>;
27
+ export type ProgressBroadcastProvider = {
28
+ readonly emit: ProgressBroadcastEmitter['emit'];
29
+ };
30
+ export type ProgressBroadcastConsumer = {
31
+ readonly on: ProgressBroadcastEmitter['on'];
32
+ readonly off: ProgressBroadcastEmitter['off'];
33
+ };
34
+ export type ProgressBroadcaster = {
35
+ readonly provider: ProgressBroadcastProvider;
36
+ readonly consumer: ProgressBroadcastConsumer;
37
+ };
38
+ export declare function createProgressBroadcaster(): ProgressBroadcaster;
39
+ export {};
40
+ //# sourceMappingURL=progress-broadcaster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-broadcaster.d.ts","sourceRoot":"","sources":["../../../../source/progress/progress-broadcaster.ts"],"names":[],"mappings":"AAAA,OAA4B,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAKzD,KAAK,oBAAoB,GAAG;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACzB,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,aAAa,CAAC;CAC5E,CAAC;AAEF,KAAK,MAAM,GAAG;IACV,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAChC,CAAC;AAEF,KAAK,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GAAG;IACpC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,QAAQ,CAAC,EAAE,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,GAAG,EAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;CAChD,CAAC;AAEF,wBAAgB,yBAAyB,IAAI,mBAAmB,CAY/D"}
@@ -0,0 +1,16 @@
1
+ import _createEventEmitter, {} from 'mitt';
2
+ // workaround for https://github.com/developit/mitt/issues/191
3
+ const createEventEmitter = _createEventEmitter;
4
+ export function createProgressBroadcaster() {
5
+ const emitter = createEventEmitter();
6
+ return {
7
+ provider: {
8
+ emit: emitter.emit
9
+ },
10
+ consumer: {
11
+ on: emitter.on,
12
+ off: emitter.off
13
+ }
14
+ };
15
+ }
16
+ //# sourceMappingURL=progress-broadcaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-broadcaster.js","sourceRoot":"","sources":["../../../../source/progress/progress-broadcaster.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,EAAE,EAAgB,MAAM,MAAM,CAAC;AAEzD,8DAA8D;AAC9D,MAAM,kBAAkB,GAAG,mBAAoE,CAAC;AA+ChG,MAAM,UAAU,yBAAyB;IACrC,MAAM,OAAO,GAAG,kBAAkB,EAAU,CAAC;IAE7C,OAAO;QACH,QAAQ,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,IAAI;SACrB;QACD,QAAQ,EAAE;YACN,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,GAAG,EAAE,OAAO,CAAC,GAAG;SACnB;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { extractTarEntries } from '../tar/extract-tar.js';
2
+ function tarEntryToFileDescription(tarEntry) {
3
+ return {
4
+ filePath: tarEntry.header.name,
5
+ content: tarEntry.content
6
+ };
7
+ }
8
+ export async function extractPackageTarball(tarball) {
9
+ const tarEntries = await extractTarEntries(tarball);
10
+ return tarEntries.map(tarEntryToFileDescription);
11
+ }
12
+ //# sourceMappingURL=extract-package-tarball.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-package-tarball.js","sourceRoot":"","sources":["../../../../source/publisher/extract-package-tarball.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,uBAAuB,CAAC;AAEzE,SAAS,yBAAyB,CAAC,QAAkB;IACjD,OAAO;QACH,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI;QAC9B,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC5B,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe;IACvD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,40 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import type { Except } from 'type-fest';
3
+ import type { ArtifactsBuilder } from '../artifacts/artifacts-builder.js';
4
+ import type { BundleBuildOptions } from '../bundler/bundle-build-options.js';
5
+ import type { BundleDescription } from '../bundler/bundle-description.js';
6
+ import type { Bundler } from '../bundler/bundler.js';
7
+ import type { VersioningSettings } from '../config/versioning-settings.js';
8
+ import type { RegistrySettings } from '../config/registry-settings.js';
9
+ import type { ProgressBroadcastProvider } from '../progress/progress-broadcaster.js';
10
+ import type { RegistryClient } from './registry-client.js';
11
+ export type PublisherDependencies = {
12
+ readonly artifactsBuilder: ArtifactsBuilder;
13
+ readonly registryClient: RegistryClient;
14
+ readonly bundler: Bundler;
15
+ readonly progressBroadcaster: ProgressBroadcastProvider;
16
+ };
17
+ type BuildOptions = Except<BundleBuildOptions, 'version'>;
18
+ export type BuildAndPublishOptions = BuildOptions & {
19
+ readonly versioning?: VersioningSettings;
20
+ readonly registrySettings: RegistrySettings;
21
+ };
22
+ type NewVersionToPublishResult = {
23
+ readonly status: 'initial-version' | 'new-version';
24
+ readonly bundle: BundleDescription;
25
+ readonly tarData: Buffer;
26
+ };
27
+ type LatestVersionAlreadyPublishedResult = {
28
+ readonly status: 'already-published';
29
+ readonly bundle: BundleDescription;
30
+ readonly tarData?: undefined;
31
+ };
32
+ type BuildResult = Readonly<LatestVersionAlreadyPublishedResult | NewVersionToPublishResult>;
33
+ export type PublishResult = Except<BuildResult, 'tarData'>;
34
+ export type Publisher = {
35
+ tryBuildAndPublish(options: BuildAndPublishOptions): Promise<BuildResult>;
36
+ buildAndPublish(options: BuildAndPublishOptions): Promise<PublishResult>;
37
+ };
38
+ export declare function createPublisher(dependencies: Readonly<PublisherDependencies>): Publisher;
39
+ export {};
40
+ //# sourceMappingURL=publisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../../source/publisher/publisher.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAErF,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKlF,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;CAC3D,CAAC;AAEF,KAAK,YAAY,GAAG,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC/C,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,mCAAmC,GAAG;IACvC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;CAChC,CAAC;AAEF,KAAK,WAAW,GAAG,QAAQ,CAAC,mCAAmC,GAAG,yBAAyB,CAAC,CAAC;AAG7F,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAE3D,MAAM,MAAM,SAAS,GAAG;IACpB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC5E,CAAC;AAMF,wBAAgB,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,SAAS,CA4GxF"}
@@ -0,0 +1,73 @@
1
+ import { compareFileDescriptions } from '../file-description/compare.js';
2
+ import { increaseVersion, replaceBundleVersion } from './version.js';
3
+ // eslint-disable-next-line import/max-dependencies -- needs to be fixed but I don’t have a good idea right now
4
+ import { extractPackageTarball } from './extract-package-tarball.js';
5
+ export function createPublisher(dependencies) {
6
+ const { artifactsBuilder, registryClient, bundler, progressBroadcaster } = dependencies;
7
+ async function checkBundleAlreadyPublished(bundle, latestVersion) {
8
+ const artifactContents = await artifactsBuilder.collectContents(bundle);
9
+ const tarball = await registryClient.fetchTarball(latestVersion.tarballUrl, latestVersion.shasum);
10
+ const latestVersionArtifactContents = await extractPackageTarball(tarball);
11
+ const result = compareFileDescriptions(artifactContents, latestVersionArtifactContents);
12
+ return { alreadyPublishedAsLatest: result.status === 'equal' };
13
+ }
14
+ async function buildVersion(buildOptions, version, status) {
15
+ const bundle = await bundler.build({ ...buildOptions, version });
16
+ const tarball = await artifactsBuilder.buildTarball(bundle);
17
+ return { status, tarData: tarball.tarData, bundle };
18
+ }
19
+ async function buildNewVersion(buildOptions, latestVersion, bundleWithLatestVersion, minimumVersion = '0.0.1') {
20
+ const newVersion = increaseVersion(latestVersion, minimumVersion);
21
+ progressBroadcaster.emit('rebuilding', { packageName: buildOptions.name, version: newVersion });
22
+ const bundleWithNewVersion = replaceBundleVersion(bundleWithLatestVersion, newVersion);
23
+ const tarballWithNewVersion = await artifactsBuilder.buildTarball(bundleWithNewVersion);
24
+ return {
25
+ status: 'new-version',
26
+ tarData: tarballWithNewVersion.tarData,
27
+ bundle: bundleWithNewVersion
28
+ };
29
+ }
30
+ async function buildWithAutomaticVersioning(buildOptions, latestVersion, minimumVersion = '0.0.1') {
31
+ if (latestVersion.isNothing) {
32
+ progressBroadcaster.emit('building', { packageName: buildOptions.name, version: minimumVersion });
33
+ return buildVersion(buildOptions, minimumVersion, 'initial-version');
34
+ }
35
+ progressBroadcaster.emit('building', { packageName: buildOptions.name, version: latestVersion.value.version });
36
+ const bundleWithLatestVersion = await bundler.build({ ...buildOptions, version: latestVersion.value.version });
37
+ const result = await checkBundleAlreadyPublished(bundleWithLatestVersion, latestVersion.value);
38
+ if (!result.alreadyPublishedAsLatest) {
39
+ return buildNewVersion(buildOptions, latestVersion.value.version, bundleWithLatestVersion, minimumVersion);
40
+ }
41
+ return { status: 'already-published', bundle: bundleWithLatestVersion };
42
+ }
43
+ async function buildWithManualVersioning(buildOptions, latestVersion, versionToPublish) {
44
+ if (latestVersion.isJust && latestVersion.value.version === versionToPublish) {
45
+ throw new Error(`Version ${versionToPublish} of package ${buildOptions.name} is already published`);
46
+ }
47
+ progressBroadcaster.emit('building', { packageName: buildOptions.name, version: versionToPublish });
48
+ return buildVersion(buildOptions, versionToPublish, 'new-version');
49
+ }
50
+ async function tryBuildAndPublish(options) {
51
+ const { versioning = { automatic: true }, registrySettings, ...buildOptions } = options;
52
+ const latestVersion = await registryClient.fetchLatestVersion(buildOptions.name, registrySettings);
53
+ if (versioning.automatic) {
54
+ return buildWithAutomaticVersioning(buildOptions, latestVersion, versioning.minimumVersion);
55
+ }
56
+ return buildWithManualVersioning(buildOptions, latestVersion, versioning.version);
57
+ }
58
+ return {
59
+ tryBuildAndPublish,
60
+ async buildAndPublish(options) {
61
+ const result = await tryBuildAndPublish(options);
62
+ if (result.status !== 'already-published') {
63
+ progressBroadcaster.emit('publishing', {
64
+ packageName: result.bundle.packageJson.name,
65
+ version: result.bundle.packageJson.version
66
+ });
67
+ await registryClient.publishPackage(result.bundle.packageJson, result.tarData, options.registrySettings);
68
+ }
69
+ return { status: result.status, bundle: result.bundle };
70
+ }
71
+ };
72
+ }
73
+ //# sourceMappingURL=publisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../../../source/publisher/publisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import type _npmFetch from 'npm-registry-fetch';
3
+ import type { publish as _publish } from 'libnpmpublish';
4
+ import { Maybe } from 'true-myth';
5
+ import type { BundlePackageJson } from '../bundler/bundle-description.js';
6
+ import type { RegistrySettings } from '../config/registry-settings.js';
7
+ type PublishFunction = typeof _publish;
8
+ export type RegistryClientDependencies = {
9
+ readonly npmFetch: typeof _npmFetch;
10
+ readonly publish: PublishFunction;
11
+ };
12
+ export type RegistryClient = {
13
+ fetchLatestVersion(packageName: string, config: RegistrySettings): Promise<Maybe<PackageVersionDetails>>;
14
+ publishPackage(manifest: Readonly<BundlePackageJson>, tarData: Buffer, config: RegistrySettings): Promise<void>;
15
+ fetchTarball(tarballUrl: string, shasum: string): Promise<Buffer>;
16
+ };
17
+ export type PackageVersionDetails = {
18
+ readonly version: string;
19
+ readonly shasum: string;
20
+ readonly tarballUrl: string;
21
+ };
22
+ export declare function createRegistryClient(dependencies: Readonly<RegistryClientDependencies>): RegistryClient;
23
+ export {};
24
+ //# sourceMappingURL=registry-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../../../source/publisher/registry-client.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,KAAK,eAAe,GAAG,OAAO,QAAQ,CAAC;AAEvC,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACzG,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACrE,CAAC;AAmCF,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B,CAAC;AAKF,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,QAAQ,CAAC,0BAA0B,CAAC,GAAG,cAAc,CAmFvG"}
@@ -0,0 +1,90 @@
1
+ import { Maybe } from 'true-myth';
2
+ import { struct, string, optional, record, is } from '@effect/schema/Schema';
3
+ function isFetchError(error) {
4
+ return typeof error === 'object' && error !== null && Object.hasOwn(error, 'statusCode');
5
+ }
6
+ function encodePackageName(name) {
7
+ return name.replace('/', '%2F');
8
+ }
9
+ const distTagsSchema = struct({
10
+ latest: optional(string, { exact: true })
11
+ });
12
+ const versionDataSchema = struct({
13
+ dist: struct({ shasum: string, tarball: string })
14
+ });
15
+ const abbreviatedPackageResponseSchema = struct({
16
+ name: string,
17
+ 'dist-tags': distTagsSchema,
18
+ versions: record(string, versionDataSchema)
19
+ });
20
+ const httpStatusCode = {
21
+ notFound: 404,
22
+ forbidden: 403
23
+ };
24
+ export function createRegistryClient(dependencies) {
25
+ const { npmFetch, publish } = dependencies;
26
+ async function fetchRegistryEndpoint(endpoint, registrySettings) {
27
+ const acceptHeaderForFetchingAbbreviatedResponse = 'application/vnd.npm.install-v1+json';
28
+ return npmFetch.json(endpoint, {
29
+ forceAuth: {
30
+ alwaysAuth: true,
31
+ token: registrySettings.token
32
+ },
33
+ registry: registrySettings.registryUrl,
34
+ headers: { accept: acceptHeaderForFetchingAbbreviatedResponse }
35
+ });
36
+ }
37
+ async function fetchPackage(packageName, registrySettings) {
38
+ const endpointUri = `/${encodePackageName(packageName)}`;
39
+ try {
40
+ const response = await fetchRegistryEndpoint(endpointUri, registrySettings);
41
+ if (!is(abbreviatedPackageResponseSchema)(response)) {
42
+ throw new Error('Got an invalid response from registry API');
43
+ }
44
+ return Maybe.just(response);
45
+ }
46
+ catch (error) {
47
+ if (isFetchError(error) &&
48
+ (error.statusCode === httpStatusCode.notFound || error.statusCode === httpStatusCode.forbidden)) {
49
+ return Maybe.nothing();
50
+ }
51
+ throw error;
52
+ }
53
+ }
54
+ return {
55
+ async fetchTarball(tarballUrl) {
56
+ const response = await npmFetch(tarballUrl);
57
+ return response.buffer();
58
+ },
59
+ async publishPackage(manifest, tarData, registrySettings) {
60
+ await publish(manifest, tarData, {
61
+ defaultTag: 'latest',
62
+ forceAuth: {
63
+ alwaysAuth: true,
64
+ token: registrySettings.token
65
+ },
66
+ registry: registrySettings.registryUrl
67
+ });
68
+ },
69
+ async fetchLatestVersion(packageName, registrySettings) {
70
+ const packageResponse = await fetchPackage(packageName, registrySettings);
71
+ if (packageResponse.isNothing) {
72
+ return Maybe.nothing();
73
+ }
74
+ const latestVersion = packageResponse.value['dist-tags'].latest;
75
+ if (latestVersion !== undefined) {
76
+ const versionData = packageResponse.value.versions[latestVersion];
77
+ if (versionData === undefined) {
78
+ throw new Error(`Version "${latestVersion}" for package "${packageName}" is missing a shasum`);
79
+ }
80
+ return Maybe.just({
81
+ version: latestVersion,
82
+ shasum: versionData.dist.shasum,
83
+ tarballUrl: versionData.dist.tarball
84
+ });
85
+ }
86
+ return Maybe.nothing();
87
+ }
88
+ };
89
+ }
90
+ //# sourceMappingURL=registry-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../../../source/publisher/registry-client.ts"],"names":[],"mappings":"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"}