packtory 0.0.10 → 0.0.11
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/artifacts/artifacts-builder.d.ts +0 -14
- package/artifacts/artifacts-builder.d.ts.map +1 -1
- package/artifacts/artifacts-builder.js +75 -0
- package/artifacts/artifacts-builder.js.map +1 -1
- package/bundle-emitter/emitter.d.ts +0 -30
- package/bundle-emitter/emitter.d.ts.map +1 -1
- package/bundle-emitter/emitter.js +34 -0
- package/bundle-emitter/emitter.js.map +1 -1
- package/bundle-emitter/extract-package-tarball.js +11 -0
- package/bundle-emitter/extract-package-tarball.js.map +1 -1
- package/bundle-emitter/registry-client.d.ts +0 -21
- package/bundle-emitter/registry-client.d.ts.map +1 -1
- package/bundle-emitter/registry-client.js +261 -0
- package/bundle-emitter/registry-client.js.map +1 -1
- package/bundle-emitter/repository-url-normalizer.js +36 -0
- package/bundle-emitter/repository-url-normalizer.js.map +1 -1
- package/checks/check-runner.js +5 -0
- package/checks/check-runner.js.map +1 -1
- package/checks/rules/registry.js +9 -0
- package/checks/rules/registry.js.map +1 -1
- package/common/clock.d.ts +0 -6
- package/common/clock.d.ts.map +1 -1
- package/common/code-files.js +4 -0
- package/common/code-files.js.map +1 -1
- package/config/additional-files.js +4 -0
- package/config/additional-files.js.map +1 -1
- package/config/automatic-versioning-settings.js +4 -0
- package/config/automatic-versioning-settings.js.map +1 -1
- package/config/config.js +2 -0
- package/config/config.js.map +1 -1
- package/config/dead-code-elimination-settings.d.ts +0 -1
- package/config/dead-code-elimination-settings.d.ts.map +1 -1
- package/config/dead-code-elimination-settings.js +19 -0
- package/config/dead-code-elimination-settings.js.map +1 -1
- package/config/dependency-policy.js +3 -0
- package/config/dependency-policy.js.map +1 -1
- package/config/main-package-json-schema.js +1 -0
- package/config/main-package-json-schema.js.map +1 -1
- package/config/manual-versioning-settings.js +4 -0
- package/config/manual-versioning-settings.js.map +1 -1
- package/config/package-config.js +6 -0
- package/config/package-config.js.map +1 -1
- package/config/package-interface.js +26 -0
- package/config/package-interface.js.map +1 -1
- package/config/package-json.d.ts +0 -1
- package/config/package-json.d.ts.map +1 -1
- package/config/package-json.js +16 -0
- package/config/package-json.js.map +1 -1
- package/config/packtory-config-schema.js +3 -0
- package/config/packtory-config-schema.js.map +1 -1
- package/config/publish-settings.js +22 -0
- package/config/publish-settings.js.map +1 -1
- package/config/registry-settings.d.ts +0 -18
- package/config/registry-settings.d.ts.map +1 -1
- package/config/registry-settings.js +38 -0
- package/config/registry-settings.js.map +1 -1
- package/config/root.js +4 -0
- package/config/root.js.map +1 -1
- package/config/sbom-settings.js +3 -0
- package/config/sbom-settings.js.map +1 -1
- package/config/validation.d.ts +0 -18
- package/config/validation.d.ts.map +1 -1
- package/config/validation.js +254 -0
- package/config/validation.js.map +1 -1
- package/config/versioning-settings.js +1 -0
- package/config/versioning-settings.js.map +1 -1
- package/dead-code-eliminator/analyzed-bundle.d.ts +0 -9
- package/dead-code-eliminator/analyzed-bundle.d.ts.map +1 -1
- package/dead-code-eliminator/analyzed-bundle.js +7 -0
- package/dead-code-eliminator/analyzed-bundle.js.map +1 -1
- package/dead-code-eliminator/eliminator.js +12 -1
- package/dead-code-eliminator/eliminator.js.map +1 -1
- package/dead-code-eliminator/load-bundle.js +10 -5
- package/dead-code-eliminator/load-bundle.js.map +1 -1
- package/dead-code-eliminator/reachability/binding-extractor.js +20 -7
- package/dead-code-eliminator/reachability/binding-extractor.js.map +1 -1
- package/dead-code-eliminator/reachability/reachability.js +1 -1
- package/dead-code-eliminator/reachability/reachability.js.map +1 -1
- package/dead-code-eliminator/transform/declaration-remover.js +3 -2
- package/dead-code-eliminator/transform/declaration-remover.js.map +1 -1
- package/dead-code-eliminator/variable-declaration-bindings.js +34 -0
- package/dead-code-eliminator/variable-declaration-bindings.js.map +1 -0
- package/dependency-scanner/dependency-graph.d.ts +0 -27
- package/dependency-scanner/dependency-graph.d.ts.map +1 -1
- package/dependency-scanner/dependency-graph.js +73 -0
- package/dependency-scanner/dependency-graph.js.map +1 -1
- package/dependency-scanner/external-dependencies.js +16 -0
- package/dependency-scanner/external-dependencies.js.map +1 -1
- package/dependency-scanner/scanner.d.ts +0 -13
- package/dependency-scanner/scanner.d.ts.map +1 -1
- package/dependency-scanner/scanner.js +69 -0
- package/dependency-scanner/scanner.js.map +1 -1
- package/dependency-scanner/source-file-references.js +10 -0
- package/dependency-scanner/source-file-references.js.map +1 -1
- package/dependency-scanner/source-map-file-locator.d.ts +0 -7
- package/dependency-scanner/source-map-file-locator.d.ts.map +1 -1
- package/dependency-scanner/source-map-file-locator.js +27 -0
- package/dependency-scanner/source-map-file-locator.js.map +1 -1
- package/dependency-scanner/typescript-file-host.d.ts +0 -9
- package/dependency-scanner/typescript-file-host.d.ts.map +1 -1
- package/dependency-scanner/typescript-file-host.js +114 -0
- package/dependency-scanner/typescript-file-host.js.map +1 -1
- package/dependency-scanner/typescript-project-analyzer.d.ts +0 -17
- package/dependency-scanner/typescript-project-analyzer.d.ts.map +1 -1
- package/dependency-scanner/typescript-project-analyzer.js +52 -0
- package/dependency-scanner/typescript-project-analyzer.js.map +1 -1
- package/directed-graph/graph.d.ts +0 -26
- package/directed-graph/graph.d.ts.map +1 -1
- package/directed-graph/graph.js +229 -0
- package/directed-graph/graph.js.map +1 -1
- package/file-manager/compare.js +17 -0
- package/file-manager/compare.js.map +1 -1
- package/file-manager/equal.js +5 -0
- package/file-manager/equal.js.map +1 -1
- package/file-manager/file-manager.d.ts +0 -15
- package/file-manager/file-manager.d.ts.map +1 -1
- package/file-manager/file-manager.js +52 -0
- package/file-manager/file-manager.js.map +1 -1
- package/file-manager/permissions.js +26 -0
- package/file-manager/permissions.js.map +1 -1
- package/linker/linker.d.ts +0 -8
- package/linker/linker.d.ts.map +1 -1
- package/linker/linker.js +23 -0
- package/linker/linker.js.map +1 -1
- package/linker/resource-graph.js +25 -0
- package/linker/resource-graph.js.map +1 -1
- package/linker/source-modifier/import-paths.js +22 -0
- package/linker/source-modifier/import-paths.js.map +1 -1
- package/linker/substitute-bundles.js +84 -0
- package/linker/substitute-bundles.js.map +1 -1
- package/linker/substituted-resource-graph.js +72 -0
- package/linker/substituted-resource-graph.js.map +1 -1
- package/package-surface/modules.js +232 -5
- package/package-surface/modules.js.map +1 -1
- package/package-surface/surface.d.ts +0 -1
- package/package-surface/surface.d.ts.map +1 -1
- package/package-surface/surface.js +15 -0
- package/package-surface/surface.js.map +1 -1
- package/package.json +1 -1
- package/packtory/map-config.d.ts +0 -10
- package/packtory/map-config.d.ts.map +1 -1
- package/packtory/map-config.js +14 -0
- package/packtory/map-config.js.map +1 -1
- package/packtory/normalize-paths.js +24 -0
- package/packtory/normalize-paths.js.map +1 -1
- package/packtory/package-processor-build.js +72 -0
- package/packtory/package-processor-build.js.map +1 -1
- package/packtory/package-processor-publish.d.ts +0 -5
- package/packtory/package-processor-publish.d.ts.map +1 -1
- package/packtory/package-processor-publish.js +133 -0
- package/packtory/package-processor-publish.js.map +1 -1
- package/packtory/package-processor.d.ts +0 -17
- package/packtory/package-processor.d.ts.map +1 -1
- package/packtory/package-processor.js +8 -0
- package/packtory/package-processor.js.map +1 -1
- package/packtory/packtory-results.d.ts +0 -10
- package/packtory/packtory-results.d.ts.map +1 -1
- package/packtory/packtory-results.js +15 -0
- package/packtory/packtory-results.js.map +1 -1
- package/packtory/packtory.d.ts +0 -8
- package/packtory/packtory.d.ts.map +1 -1
- package/packtory/prepare-package-options.d.ts +0 -2
- package/packtory/prepare-package-options.d.ts.map +1 -1
- package/packtory/prepare-package-options.js +122 -0
- package/packtory/prepare-package-options.js.map +1 -1
- package/packtory/resolved-package.d.ts +0 -2
- package/packtory/resolved-package.d.ts.map +1 -1
- package/packtory/resolved-package.js +31 -0
- package/packtory/resolved-package.js.map +1 -1
- package/packtory/scheduler.d.ts +0 -37
- package/packtory/scheduler.d.ts.map +1 -1
- package/progress/progress-broadcaster.d.ts +0 -13
- package/progress/progress-broadcaster.d.ts.map +1 -1
- package/progress/progress-broadcaster.js +45 -0
- package/progress/progress-broadcaster.js.map +1 -1
- package/report/artifact-entry-merger.js +20 -0
- package/report/artifact-entry-merger.js.map +1 -1
- package/report/inspectors.js +73 -0
- package/report/inspectors.js.map +1 -1
- package/report/report-aggregator.d.ts +0 -5
- package/report/report-aggregator.d.ts.map +1 -1
- package/report/report-aggregator.js +185 -0
- package/report/report-aggregator.js.map +1 -1
- package/resource-resolver/content.js +53 -0
- package/resource-resolver/content.js.map +1 -1
- package/resource-resolver/resolved-bundle.d.ts +0 -10
- package/resource-resolver/resolved-bundle.d.ts.map +1 -1
- package/resource-resolver/resource-resolve-options.d.ts +0 -4
- package/resource-resolver/resource-resolve-options.d.ts.map +1 -1
- package/resource-resolver/resource-resolve-options.js +12 -0
- package/resource-resolver/resource-resolve-options.js.map +1 -1
- package/resource-resolver/resource-resolver.d.ts +0 -8
- package/resource-resolver/resource-resolver.d.ts.map +1 -1
- package/resource-resolver/resource-resolver.js +78 -0
- package/resource-resolver/resource-resolver.js.map +1 -1
- package/sbom/extract-license.js +10 -0
- package/sbom/extract-license.js.map +1 -1
- package/sbom/license-resolver.d.ts +0 -11
- package/sbom/license-resolver.d.ts.map +1 -1
- package/sbom/license-resolver.js +19 -0
- package/sbom/license-resolver.js.map +1 -1
- package/sbom/sbom-file.d.ts +0 -12
- package/sbom/sbom-file.d.ts.map +1 -1
- package/sbom/sbom-file.js +54 -0
- package/sbom/sbom-file.js.map +1 -1
- package/sbom/sbom-serializer.d.ts +0 -4
- package/sbom/sbom-serializer.d.ts.map +1 -1
- package/sbom/sbom-serializer.js +9 -0
- package/sbom/sbom-serializer.js.map +1 -1
- package/tar/extract-tar.js +38 -0
- package/tar/extract-tar.js.map +1 -1
- package/tar/tarball-builder.d.ts +0 -4
- package/tar/tarball-builder.d.ts.map +1 -1
- package/version-manager/manager.d.ts +0 -4
- package/version-manager/manager.d.ts.map +1 -1
- package/version-manager/manager.js +46 -0
- package/version-manager/manager.js.map +1 -1
- package/version-manager/manifest/builder.js +56 -0
- package/version-manager/manifest/builder.js.map +1 -1
- package/version-manager/manifest/serialize.js +46 -0
- package/version-manager/manifest/serialize.js.map +1 -1
- package/version-manager/manifest/sort-values.js +16 -0
- package/version-manager/manifest/sort-values.js.map +1 -1
- package/version-manager/specifier-classifier.js +33 -0
- package/version-manager/specifier-classifier.js.map +1 -1
- package/version-manager/specifier-errors.js +43 -0
- package/version-manager/specifier-errors.js.map +1 -1
- package/version-manager/versioned-bundle-dependencies.js +107 -0
- package/version-manager/versioned-bundle-dependencies.js.map +1 -1
- package/version-manager/versioned-bundle-imports.js +72 -0
- package/version-manager/versioned-bundle-imports.js.map +1 -1
- package/version-manager/versioned-bundle.js +60 -0
- package/version-manager/versioned-bundle.js.map +1 -1
- package/sbom.cdx.json +0 -390
|
@@ -3,19 +3,5 @@ import type { FileManager } from '../file-manager/file-manager.ts';
|
|
|
3
3
|
import type { ProgressBroadcastProvider } from '../progress/progress-broadcaster.ts';
|
|
4
4
|
import type { VersionedBundleWithManifest } from '../version-manager/versioned-bundle.ts';
|
|
5
5
|
import type { TarballBuilder } from '../tar/tarball-builder.ts';
|
|
6
|
-
export type ArtifactsBuilderDependencies = {
|
|
7
|
-
readonly fileManager: FileManager;
|
|
8
|
-
readonly tarballBuilder: TarballBuilder;
|
|
9
|
-
readonly progressBroadcaster: ProgressBroadcastProvider;
|
|
10
|
-
};
|
|
11
|
-
type TarballArtifact = {
|
|
12
|
-
readonly tarData: Buffer;
|
|
13
|
-
};
|
|
14
|
-
export type ArtifactsBuilder = {
|
|
15
|
-
collectContents: (bundle: VersionedBundleWithManifest, prefix?: string, extraFiles?: readonly FileDescription[]) => readonly FileDescription[];
|
|
16
|
-
buildTarball: (bundle: VersionedBundleWithManifest, extraFiles?: readonly FileDescription[]) => Promise<TarballArtifact>;
|
|
17
|
-
buildFolder: (bundle: VersionedBundleWithManifest, targetFolder: string, extraFiles?: readonly FileDescription[]) => Promise<void>;
|
|
18
|
-
};
|
|
19
|
-
export declare function createArtifactsBuilder(artifactsBuilderDependencies: ArtifactsBuilderDependencies): ArtifactsBuilder;
|
|
20
6
|
export {};
|
|
21
7
|
//# sourceMappingURL=artifacts-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts-builder.d.ts","sourceRoot":"","sources":["../../../../source/artifacts/artifacts-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC
|
|
1
|
+
{"version":3,"file":"artifacts-builder.d.ts","sourceRoot":"","sources":["../../../../source/artifacts/artifacts-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC;AAEpF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wCAAwC;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B"}
|
|
@@ -1,3 +1,78 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { inspectArtifactSizes } from "../report/inspectors.js";
|
|
3
|
+
export function createArtifactsBuilder(artifactsBuilderDependencies) {
|
|
4
|
+
const { fileManager, tarballBuilder, progressBroadcaster } = artifactsBuilderDependencies;
|
|
5
|
+
function applyPrefix(filePath, prefix) {
|
|
6
|
+
return prefix === undefined ? filePath : path.join(prefix, filePath);
|
|
7
|
+
}
|
|
8
|
+
function collectContents(bundle, prefix, extraFiles = []) {
|
|
9
|
+
const artifactContents = [
|
|
10
|
+
{
|
|
11
|
+
...bundle.manifestFile,
|
|
12
|
+
filePath: applyPrefix(bundle.manifestFile.filePath, prefix)
|
|
13
|
+
}
|
|
14
|
+
];
|
|
15
|
+
for (const entry of bundle.contents) {
|
|
16
|
+
artifactContents.push({
|
|
17
|
+
filePath: applyPrefix(entry.fileDescription.targetFilePath, prefix),
|
|
18
|
+
content: entry.fileDescription.content,
|
|
19
|
+
isExecutable: entry.fileDescription.isExecutable
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
for (const extraFile of extraFiles) {
|
|
23
|
+
artifactContents.push({
|
|
24
|
+
filePath: applyPrefix(extraFile.filePath, prefix),
|
|
25
|
+
content: extraFile.content,
|
|
26
|
+
isExecutable: extraFile.isExecutable
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (progressBroadcaster.hasSubscribers('artifactsCollected')) {
|
|
30
|
+
progressBroadcaster.emit('artifactsCollected', {
|
|
31
|
+
packageName: bundle.name,
|
|
32
|
+
entries: inspectArtifactSizes([
|
|
33
|
+
{
|
|
34
|
+
...bundle.manifestFile,
|
|
35
|
+
filePath: applyPrefix(bundle.manifestFile.filePath, prefix)
|
|
36
|
+
},
|
|
37
|
+
...bundle.contents.map((entry) => {
|
|
38
|
+
return {
|
|
39
|
+
filePath: applyPrefix(entry.fileDescription.targetFilePath, prefix),
|
|
40
|
+
content: entry.fileDescription.content,
|
|
41
|
+
isExecutable: entry.fileDescription.isExecutable,
|
|
42
|
+
sourceFilePath: entry.fileDescription.sourceFilePath,
|
|
43
|
+
isSubstituted: entry.isSubstituted
|
|
44
|
+
};
|
|
45
|
+
}),
|
|
46
|
+
...extraFiles.map((entry) => {
|
|
47
|
+
return {
|
|
48
|
+
...entry,
|
|
49
|
+
filePath: applyPrefix(entry.filePath, prefix)
|
|
50
|
+
};
|
|
51
|
+
})
|
|
52
|
+
])
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return artifactContents;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
collectContents,
|
|
59
|
+
async buildTarball(bundle, extraFiles) {
|
|
60
|
+
const contents = collectContents(bundle, 'package', extraFiles);
|
|
61
|
+
const tarData = await tarballBuilder.build(contents);
|
|
62
|
+
return { tarData };
|
|
63
|
+
},
|
|
64
|
+
async buildFolder(bundle, targetFolder, extraFiles) {
|
|
65
|
+
const readability = await fileManager.checkReadability(targetFolder);
|
|
66
|
+
if (readability.isReadable) {
|
|
67
|
+
throw new Error(`Folder ${targetFolder} already exists`);
|
|
68
|
+
}
|
|
69
|
+
const contents = collectContents(bundle, undefined, extraFiles);
|
|
70
|
+
for (const entry of contents) {
|
|
71
|
+
const targetFilePath = path.join(targetFolder, entry.filePath);
|
|
72
|
+
await fileManager.writeFile(targetFilePath, entry.content);
|
|
73
|
+
await fileManager.setExecutable(targetFilePath, entry.isExecutable);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
3
78
|
//# sourceMappingURL=artifacts-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts-builder.js","sourceRoot":"","sources":["../../../../source/artifacts/artifacts-builder.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW;
|
|
1
|
+
{"version":3,"file":"artifacts-builder.js","sourceRoot":"","sources":["../../../../source/artifacts/artifacts-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,35 +6,5 @@ import type { VersioningSettings } from '../config/versioning-settings.ts';
|
|
|
6
6
|
import type { FileDescription } from '../file-manager/file-description.ts';
|
|
7
7
|
import type { VersionedBundleWithManifest } from '../version-manager/versioned-bundle.ts';
|
|
8
8
|
import type { RegistryClient } from './registry-client.ts';
|
|
9
|
-
export type BundleEmitterDependencies = {
|
|
10
|
-
readonly artifactsBuilder: ArtifactsBuilder;
|
|
11
|
-
readonly registryClient: RegistryClient;
|
|
12
|
-
readonly ciRepositoryUrl: string | undefined;
|
|
13
|
-
};
|
|
14
|
-
type PublishOptions = {
|
|
15
|
-
readonly bundle: VersionedBundleWithManifest;
|
|
16
|
-
readonly registrySettings: RegistrySettings;
|
|
17
|
-
readonly publishSettings: PublishSettings;
|
|
18
|
-
readonly extraFiles?: readonly FileDescription[];
|
|
19
|
-
};
|
|
20
|
-
type AlreadyPublishedCheckOptions = {
|
|
21
|
-
readonly bundle: VersionedBundleWithManifest;
|
|
22
|
-
readonly registrySettings: RegistrySettings;
|
|
23
|
-
readonly extraFiles?: readonly FileDescription[];
|
|
24
|
-
};
|
|
25
|
-
type CurrentVersionLookupOptions = {
|
|
26
|
-
readonly name: string;
|
|
27
|
-
readonly registrySettings: RegistrySettings;
|
|
28
|
-
readonly versioning: VersioningSettings;
|
|
29
|
-
};
|
|
30
|
-
type BundlePublishedCheckResult = {
|
|
31
|
-
readonly alreadyPublishedAsLatest: boolean;
|
|
32
|
-
};
|
|
33
|
-
export type BundleEmitter = {
|
|
34
|
-
publish: (options: PublishOptions) => Promise<void>;
|
|
35
|
-
determineCurrentVersion: (options: CurrentVersionLookupOptions) => Promise<Maybe<string>>;
|
|
36
|
-
checkBundleAlreadyPublished: (options: AlreadyPublishedCheckOptions) => Promise<BundlePublishedCheckResult>;
|
|
37
|
-
};
|
|
38
|
-
export declare function createBundleEmitter(dependencies: BundleEmitterDependencies): BundleEmitter;
|
|
39
9
|
export {};
|
|
40
10
|
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../../source/bundle-emitter/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../../source/bundle-emitter/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC;AAE1E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wCAAwC;AAEzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB"}
|
|
@@ -3,4 +3,38 @@ import { Maybe } from 'true-myth';
|
|
|
3
3
|
import { compareFileDescriptions } from "../file-manager/compare.js";
|
|
4
4
|
import { extractPackageTarball } from "./extract-package-tarball.js";
|
|
5
5
|
import { assertRepositoryCoherence } from "./repository-coherence.js";
|
|
6
|
+
export function createBundleEmitter(dependencies) {
|
|
7
|
+
const { artifactsBuilder, registryClient, ciRepositoryUrl } = dependencies;
|
|
8
|
+
return {
|
|
9
|
+
async determineCurrentVersion(options) {
|
|
10
|
+
const { versioning, registrySettings, name } = options;
|
|
11
|
+
if (versioning.automatic) {
|
|
12
|
+
const latestVersion = await registryClient.fetchLatestVersion(name, registrySettings);
|
|
13
|
+
return latestVersion.map((version) => {
|
|
14
|
+
return version.version;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return Maybe.just(versioning.version);
|
|
18
|
+
},
|
|
19
|
+
async checkBundleAlreadyPublished(options) {
|
|
20
|
+
const { bundle, registrySettings, extraFiles } = options;
|
|
21
|
+
const latestVersion = await registryClient.fetchLatestVersion(bundle.name, registrySettings);
|
|
22
|
+
if (latestVersion.isNothing) {
|
|
23
|
+
return { alreadyPublishedAsLatest: false };
|
|
24
|
+
}
|
|
25
|
+
const artifactContents = artifactsBuilder.collectContents(bundle, 'package', extraFiles);
|
|
26
|
+
const tarball = await registryClient.fetchTarball(latestVersion.value.tarballUrl, registrySettings);
|
|
27
|
+
const latestVersionArtifactContents = await extractPackageTarball(tarball);
|
|
28
|
+
const result = compareFileDescriptions(artifactContents, latestVersionArtifactContents);
|
|
29
|
+
return { alreadyPublishedAsLatest: result.status === 'equal' };
|
|
30
|
+
},
|
|
31
|
+
async publish(options) {
|
|
32
|
+
if (options.publishSettings.access === 'public' && options.publishSettings.provenance?.type === 'auto') {
|
|
33
|
+
assertRepositoryCoherence(options.bundle.packageJson, ciRepositoryUrl);
|
|
34
|
+
}
|
|
35
|
+
const tarball = await artifactsBuilder.buildTarball(options.bundle, options.extraFiles);
|
|
36
|
+
await registryClient.publishPackage(options.bundle.packageJson, tarball.tarData, options.registrySettings, options.publishSettings);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
6
40
|
//# sourceMappingURL=emitter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/emitter.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/emitter.ts"],"names":[],"mappings":"AAAA,wJAAwJ;AACxJ,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAMlC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAqCtE,MAAM,UAAU,mBAAmB,CAAC,YAAuC;IACvE,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC;IAE3E,OAAO;QACH,KAAK,CAAC,uBAAuB,CAAC,OAAO;YACjC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YAEvD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACvB,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACtF,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;oBACjC,OAAO,OAAO,CAAC,OAAO,CAAC;gBAC3B,CAAC,CAAC,CAAC;YACP,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,2BAA2B,CAAC,OAAO;YACrC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YACzD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAC7F,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC1B,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC;YAC/C,CAAC;YAED,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YACzF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YACpG,MAAM,6BAA6B,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAC;YACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACnE,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,OAAO;YACjB,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBACrG,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAExF,MAAM,cAAc,CAAC,cAAc,CAC/B,OAAO,CAAC,MAAM,CAAC,WAAW,EAC1B,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,gBAAgB,EACxB,OAAO,CAAC,eAAe,CAC1B,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
import { isExecutableFileMode } from "../file-manager/permissions.js";
|
|
2
2
|
import { extractTarEntries } from "../tar/extract-tar.js";
|
|
3
|
+
function tarEntryToFileDescription(tarEntry) {
|
|
4
|
+
return {
|
|
5
|
+
filePath: tarEntry.header.name,
|
|
6
|
+
content: tarEntry.content,
|
|
7
|
+
isExecutable: isExecutableFileMode(Number(tarEntry.header.mode))
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export async function extractPackageTarball(tarball) {
|
|
11
|
+
const tarEntries = await extractTarEntries(tarball);
|
|
12
|
+
return tarEntries.map(tarEntryToFileDescription);
|
|
13
|
+
}
|
|
3
14
|
//# sourceMappingURL=extract-package-tarball.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-package-tarball.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/extract-package-tarball.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC;
|
|
1
|
+
{"version":3,"file":"extract-package-tarball.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/extract-package-tarball.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,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;QACzB,YAAY,EAAE,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACnE,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"}
|
|
@@ -5,26 +5,5 @@ import type { Clock } from '../common/clock.ts';
|
|
|
5
5
|
import type { PublishSettings } from '../config/publish-settings.ts';
|
|
6
6
|
import type { PublishAuthStrategy, RegistrySettings } from '../config/registry-settings.ts';
|
|
7
7
|
import type { BundlePackageJson } from '../version-manager/versioned-bundle.ts';
|
|
8
|
-
type PublishFunction = typeof _publish;
|
|
9
|
-
export type RegistryClientDependencies = {
|
|
10
|
-
readonly npmFetch: typeof _npmFetch;
|
|
11
|
-
readonly publish: PublishFunction;
|
|
12
|
-
readonly fetch: typeof globalThis.fetch;
|
|
13
|
-
readonly clock: Clock;
|
|
14
|
-
readonly resolveIdToken: (auth: Extract<PublishAuthStrategy, {
|
|
15
|
-
type: 'npm-oidc';
|
|
16
|
-
}>) => Promise<string>;
|
|
17
|
-
readonly promptForOneTimePassword?: (() => Promise<string | undefined>) | undefined;
|
|
18
|
-
};
|
|
19
|
-
export type RegistryClient = {
|
|
20
|
-
fetchLatestVersion: (packageName: string, config: RegistrySettings) => Promise<Maybe<PackageVersionDetails>>;
|
|
21
|
-
publishPackage: (manifest: Readonly<BundlePackageJson>, tarData: Buffer, config: RegistrySettings, publishSettings: PublishSettings) => Promise<void>;
|
|
22
|
-
fetchTarball: (tarballUrl: string, config: RegistrySettings) => Promise<Buffer>;
|
|
23
|
-
};
|
|
24
|
-
type PackageVersionDetails = {
|
|
25
|
-
readonly version: string;
|
|
26
|
-
readonly tarballUrl: string;
|
|
27
|
-
};
|
|
28
|
-
export declare function createRegistryClient(dependencies: Readonly<RegistryClientDependencies>): RegistryClient;
|
|
29
8
|
export {};
|
|
30
9
|
//# sourceMappingURL=registry-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../../../source/bundle-emitter/registry-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../../../source/bundle-emitter/registry-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,oBAAoB;AAC/C,OAAO,KAAK,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW;AAEjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B;AACpE,OAAO,KAAK,EAGR,mBAAmB,EACnB,gBAAgB,EACnB,MAAM,gCAAgC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC"}
|
|
@@ -1,4 +1,265 @@
|
|
|
1
1
|
import { Maybe } from 'true-myth';
|
|
2
2
|
import { z } from 'zod/mini';
|
|
3
3
|
import { buildPublishOptionsForPublishSettings, remapPublishError } from "./publish-settings-bridge.js";
|
|
4
|
+
const notFoundStatusCode = 404;
|
|
5
|
+
const unauthorizedStatusCode = 401;
|
|
6
|
+
const forbiddenStatusCode = 403;
|
|
7
|
+
const npmRegistryUrl = 'https://registry.npmjs.org/';
|
|
8
|
+
const oidcExchangeRefreshThresholdInMilliseconds = 60_000;
|
|
9
|
+
const packageVersionDetailsSchema = z.object({
|
|
10
|
+
dist: z.object({
|
|
11
|
+
tarball: z.string()
|
|
12
|
+
})
|
|
13
|
+
});
|
|
14
|
+
const abbreviatedPackageResponseSchema = z.object({
|
|
15
|
+
name: z.string(),
|
|
16
|
+
'dist-tags': z.object({
|
|
17
|
+
latest: z.optional(z.string())
|
|
18
|
+
}),
|
|
19
|
+
versions: z.record(z.string(), packageVersionDetailsSchema)
|
|
20
|
+
});
|
|
21
|
+
const oidcExchangeResponseSchema = z.object({
|
|
22
|
+
token_type: z.string(),
|
|
23
|
+
token: z.string(),
|
|
24
|
+
created: z.string(),
|
|
25
|
+
expires: z.string()
|
|
26
|
+
});
|
|
27
|
+
function encodePackageName(name) {
|
|
28
|
+
return name.replace('/', '%2F');
|
|
29
|
+
}
|
|
30
|
+
function isRecord(value) {
|
|
31
|
+
return value instanceof Object;
|
|
32
|
+
}
|
|
33
|
+
function parseAbbreviatedPackageResponse(response) {
|
|
34
|
+
const result = abbreviatedPackageResponseSchema.safeParse(response);
|
|
35
|
+
return result.success ? result.data : undefined;
|
|
36
|
+
}
|
|
37
|
+
function toPublishManifest(manifest) {
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- libnpmpublish expects @npm/types PackageJson, which is structurally compatible with our validated manifest
|
|
39
|
+
return manifest;
|
|
40
|
+
}
|
|
41
|
+
function resolveRegistryUrl(registrySettings) {
|
|
42
|
+
return registrySettings.registryUrl;
|
|
43
|
+
}
|
|
44
|
+
function isNpmRegistry(registry) {
|
|
45
|
+
return new URL(registry ?? npmRegistryUrl).href === npmRegistryUrl;
|
|
46
|
+
}
|
|
47
|
+
function normalizeAuthConfig(registrySettings) {
|
|
48
|
+
if ('type' in registrySettings.auth) {
|
|
49
|
+
return {
|
|
50
|
+
publish: registrySettings.auth,
|
|
51
|
+
metadata: undefined
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
publish: registrySettings.auth.publish,
|
|
56
|
+
metadata: registrySettings.auth.metadata
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function resolvePublishAuth(registrySettings) {
|
|
60
|
+
return normalizeAuthConfig(registrySettings).publish;
|
|
61
|
+
}
|
|
62
|
+
function createBaseOptions(registrySettings) {
|
|
63
|
+
return {
|
|
64
|
+
alwaysAuth: true,
|
|
65
|
+
registry: resolveRegistryUrl(registrySettings)
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function buildAuthOptions(auth, registrySettings) {
|
|
69
|
+
const registry = resolveRegistryUrl(registrySettings);
|
|
70
|
+
const options = createBaseOptions(registrySettings);
|
|
71
|
+
if (auth.type === 'bearer-token') {
|
|
72
|
+
return {
|
|
73
|
+
allowsAutomaticRetry: false,
|
|
74
|
+
registry,
|
|
75
|
+
options: {
|
|
76
|
+
...options,
|
|
77
|
+
forceAuth: {
|
|
78
|
+
token: auth.token
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
allowsAutomaticRetry: false,
|
|
85
|
+
registry,
|
|
86
|
+
options: {
|
|
87
|
+
...options,
|
|
88
|
+
forceAuth: {
|
|
89
|
+
_auth: Buffer.from(`${auth.username}:${auth.password}`).toString('base64')
|
|
90
|
+
},
|
|
91
|
+
...(auth.email === undefined ? {} : { email: auth.email })
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function createAnonymousAuthResolution(registrySettings) {
|
|
96
|
+
return {
|
|
97
|
+
allowsAutomaticRetry: false,
|
|
98
|
+
registry: resolveRegistryUrl(registrySettings),
|
|
99
|
+
options: createBaseOptions(registrySettings)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function parseOidcExchangeResponse(response) {
|
|
103
|
+
const result = oidcExchangeResponseSchema.safeParse(response);
|
|
104
|
+
return result.success ? result.data : undefined;
|
|
105
|
+
}
|
|
106
|
+
async function parseJsonResponse(response) {
|
|
107
|
+
return response.json();
|
|
108
|
+
}
|
|
109
|
+
export function createRegistryClient(dependencies) {
|
|
110
|
+
const { npmFetch, publish, fetch: fetchImplementation, clock, promptForOneTimePassword, resolveIdToken } = dependencies;
|
|
111
|
+
const oidcExchangeTokenCache = new Map();
|
|
112
|
+
async function exchangeOidcToken(packageName, registrySettings, auth) {
|
|
113
|
+
const cacheKey = `${resolveRegistryUrl(registrySettings) ?? npmRegistryUrl}::${packageName}`;
|
|
114
|
+
const cachedToken = oidcExchangeTokenCache.get(cacheKey);
|
|
115
|
+
const currentTime = clock.getCurrentTimeInMilliseconds();
|
|
116
|
+
if (cachedToken !== undefined &&
|
|
117
|
+
cachedToken.expiresAt - currentTime > oidcExchangeRefreshThresholdInMilliseconds) {
|
|
118
|
+
return cachedToken.token;
|
|
119
|
+
}
|
|
120
|
+
if (!isNpmRegistry(resolveRegistryUrl(registrySettings))) {
|
|
121
|
+
throw new Error('npm-oidc auth is only supported with the npmjs.org registry');
|
|
122
|
+
}
|
|
123
|
+
const idToken = await resolveIdToken(auth);
|
|
124
|
+
const exchangeResponse = await fetchImplementation(`${npmRegistryUrl}-/npm/v1/oidc/token/exchange/package/${encodePackageName(packageName)}`, {
|
|
125
|
+
method: 'POST',
|
|
126
|
+
headers: { Authorization: `Bearer ${idToken}` }
|
|
127
|
+
});
|
|
128
|
+
if (!exchangeResponse.ok) {
|
|
129
|
+
throw new Error(`OIDC token exchange failed with status ${exchangeResponse.status}`);
|
|
130
|
+
}
|
|
131
|
+
const body = parseOidcExchangeResponse(await parseJsonResponse(exchangeResponse));
|
|
132
|
+
if (body === undefined) {
|
|
133
|
+
throw new TypeError('OIDC token exchange returned an invalid response');
|
|
134
|
+
}
|
|
135
|
+
const expiresAt = Date.parse(body.expires);
|
|
136
|
+
if (!Number.isFinite(expiresAt)) {
|
|
137
|
+
throw new TypeError('OIDC token exchange returned an invalid expiry timestamp');
|
|
138
|
+
}
|
|
139
|
+
oidcExchangeTokenCache.set(cacheKey, {
|
|
140
|
+
token: body.token,
|
|
141
|
+
expiresAt
|
|
142
|
+
});
|
|
143
|
+
return body.token;
|
|
144
|
+
}
|
|
145
|
+
async function resolveWriteAuthOptions(packageName, registrySettings) {
|
|
146
|
+
const auth = resolvePublishAuth(registrySettings);
|
|
147
|
+
if (auth.type !== 'npm-oidc') {
|
|
148
|
+
return buildAuthOptions(auth, registrySettings).options;
|
|
149
|
+
}
|
|
150
|
+
const token = await exchangeOidcToken(packageName, registrySettings, auth);
|
|
151
|
+
return {
|
|
152
|
+
...createBaseOptions(registrySettings),
|
|
153
|
+
forceAuth: {
|
|
154
|
+
token
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function resolveMetadataAuthOptions(registrySettings) {
|
|
159
|
+
const { metadata: metadataMode, publish: publishAuth } = normalizeAuthConfig(registrySettings);
|
|
160
|
+
if (metadataMode === undefined || metadataMode === 'inherit-publish-auth') {
|
|
161
|
+
if (publishAuth.type === 'npm-oidc') {
|
|
162
|
+
return createAnonymousAuthResolution(registrySettings);
|
|
163
|
+
}
|
|
164
|
+
return buildAuthOptions(publishAuth, registrySettings);
|
|
165
|
+
}
|
|
166
|
+
if (metadataMode === 'auto') {
|
|
167
|
+
return {
|
|
168
|
+
...createAnonymousAuthResolution(registrySettings),
|
|
169
|
+
allowsAutomaticRetry: true
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
if (typeof metadataMode !== 'object') {
|
|
173
|
+
return createAnonymousAuthResolution(registrySettings);
|
|
174
|
+
}
|
|
175
|
+
return buildAuthOptions(metadataMode, registrySettings);
|
|
176
|
+
}
|
|
177
|
+
async function retryAutoMetadataAuth(registrySettings, auth, run) {
|
|
178
|
+
try {
|
|
179
|
+
return await run(auth.options);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
const statusCode = isRecord(error) ? error.statusCode : undefined;
|
|
183
|
+
if (!auth.allowsAutomaticRetry ||
|
|
184
|
+
(statusCode !== forbiddenStatusCode && statusCode !== unauthorizedStatusCode)) {
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
const publishAuth = resolvePublishAuth(registrySettings);
|
|
188
|
+
if (publishAuth.type === 'npm-oidc') {
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
return run(buildAuthOptions(publishAuth, registrySettings).options);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async function fetchRegistryEndpoint(endpoint, registrySettings) {
|
|
195
|
+
const acceptHeaderForFetchingAbbreviatedResponse = 'application/vnd.npm.install-v1+json';
|
|
196
|
+
const auth = resolveMetadataAuthOptions(registrySettings);
|
|
197
|
+
return retryAutoMetadataAuth(registrySettings, auth, async (options) => {
|
|
198
|
+
return npmFetch.json(endpoint, {
|
|
199
|
+
...options,
|
|
200
|
+
headers: { accept: acceptHeaderForFetchingAbbreviatedResponse }
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
async function fetchPackage(packageName, registrySettings) {
|
|
205
|
+
const endpointUri = `/${encodePackageName(packageName)}`;
|
|
206
|
+
try {
|
|
207
|
+
const response = await fetchRegistryEndpoint(endpointUri, registrySettings);
|
|
208
|
+
const result = parseAbbreviatedPackageResponse(response);
|
|
209
|
+
if (result === undefined) {
|
|
210
|
+
throw new Error('Got an invalid response from registry API');
|
|
211
|
+
}
|
|
212
|
+
return Maybe.just(result);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
const statusCode = isRecord(error) ? error.statusCode : undefined;
|
|
216
|
+
if (statusCode === notFoundStatusCode || statusCode === forbiddenStatusCode) {
|
|
217
|
+
return Maybe.nothing();
|
|
218
|
+
}
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
async fetchTarball(tarballUrl, registrySettings) {
|
|
224
|
+
const auth = resolveMetadataAuthOptions(registrySettings);
|
|
225
|
+
const response = await retryAutoMetadataAuth(registrySettings, auth, async (options) => {
|
|
226
|
+
return npmFetch(tarballUrl, options);
|
|
227
|
+
});
|
|
228
|
+
return response.buffer();
|
|
229
|
+
},
|
|
230
|
+
async publishPackage(manifest, tarData, registrySettings, publishSettings) {
|
|
231
|
+
const authOptions = await resolveWriteAuthOptions(manifest.name, registrySettings);
|
|
232
|
+
const publishOptionsFromSettings = buildPublishOptionsForPublishSettings(publishSettings);
|
|
233
|
+
try {
|
|
234
|
+
await publish(toPublishManifest(manifest), tarData, {
|
|
235
|
+
defaultTag: 'latest',
|
|
236
|
+
...authOptions,
|
|
237
|
+
...publishOptionsFromSettings,
|
|
238
|
+
...(promptForOneTimePassword === undefined ? {} : { otpPrompt: promptForOneTimePassword })
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
throw remapPublishError(error, publishSettings);
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
async fetchLatestVersion(packageName, registrySettings) {
|
|
246
|
+
const packageResponse = await fetchPackage(packageName, registrySettings);
|
|
247
|
+
if (packageResponse.isNothing) {
|
|
248
|
+
return Maybe.nothing();
|
|
249
|
+
}
|
|
250
|
+
const latestVersion = packageResponse.value['dist-tags'].latest;
|
|
251
|
+
if (latestVersion !== undefined) {
|
|
252
|
+
const versionData = packageResponse.value.versions[latestVersion];
|
|
253
|
+
if (versionData === undefined) {
|
|
254
|
+
throw new Error(`Version "${latestVersion}" for package "${packageName}" has no entry in the registry response`);
|
|
255
|
+
}
|
|
256
|
+
return Maybe.just({
|
|
257
|
+
version: latestVersion,
|
|
258
|
+
tarballUrl: versionData.dist.tarball
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
return Maybe.nothing();
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
}
|
|
4
265
|
//# sourceMappingURL=registry-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/registry-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW;
|
|
1
|
+
{"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/registry-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,38 @@
|
|
|
1
1
|
import HostedGitInfo from 'hosted-git-info';
|
|
2
|
+
function isNonEmptyString(value) {
|
|
3
|
+
return typeof value === 'string' && value.length > 0;
|
|
4
|
+
}
|
|
5
|
+
function isRecord(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function extractRawUrl(input) {
|
|
9
|
+
if (isNonEmptyString(input)) {
|
|
10
|
+
return input;
|
|
11
|
+
}
|
|
12
|
+
if (isRecord(input) && isNonEmptyString(input.url)) {
|
|
13
|
+
return input.url;
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
function manualNormalize(url) {
|
|
18
|
+
let normalized = url.startsWith('git+') ? url.slice('git+'.length) : url;
|
|
19
|
+
if (normalized.endsWith('.git')) {
|
|
20
|
+
normalized = normalized.slice(0, -'.git'.length);
|
|
21
|
+
}
|
|
22
|
+
if (normalized.endsWith('/')) {
|
|
23
|
+
normalized = normalized.slice(0, -1);
|
|
24
|
+
}
|
|
25
|
+
return normalized.toLowerCase();
|
|
26
|
+
}
|
|
27
|
+
export function normalizeRepositoryUrl(input) {
|
|
28
|
+
const rawUrl = extractRawUrl(input);
|
|
29
|
+
if (rawUrl === undefined) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const hosted = HostedGitInfo.fromUrl(rawUrl);
|
|
33
|
+
if (hosted !== undefined) {
|
|
34
|
+
return manualNormalize(hosted.https({ noCommittish: true }));
|
|
35
|
+
}
|
|
36
|
+
return manualNormalize(rawUrl);
|
|
37
|
+
}
|
|
2
38
|
//# sourceMappingURL=repository-url-normalizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-url-normalizer.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/repository-url-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB"}
|
|
1
|
+
{"version":3,"file":"repository-url-normalizer.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/repository-url-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,SAAS,gBAAgB,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACjC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,GAAG,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAChC,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
package/checks/check-runner.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-runner.js","sourceRoot":"","sources":["../../../../source/checks/check-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB"}
|
|
1
|
+
{"version":3,"file":"check-runner.js","sourceRoot":"","sources":["../../../../source/checks/check-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAS/C,MAAM,UAAU,SAAS,CAAC,MAAyB;IAC/C,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/checks/rules/registry.js
CHANGED
|
@@ -5,4 +5,13 @@ import { noSideEffectsRule } from "./no-side-effects.js";
|
|
|
5
5
|
import { noUnusedBundleDependenciesRule } from "./no-unused-bundle-dependencies.js";
|
|
6
6
|
import { requiredFilesRule } from "./required-files.js";
|
|
7
7
|
import { uniqueTargetPathsRule } from "./unique-target-paths.js";
|
|
8
|
+
export const allRules = [
|
|
9
|
+
noDuplicatedFilesRule,
|
|
10
|
+
requiredFilesRule,
|
|
11
|
+
maxBundleSizeRule,
|
|
12
|
+
noUnusedBundleDependenciesRule,
|
|
13
|
+
noDevDependencyImportsRule,
|
|
14
|
+
uniqueTargetPathsRule,
|
|
15
|
+
noSideEffectsRule
|
|
16
|
+
];
|
|
8
17
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../source/checks/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../source/checks/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,qBAAqB;IACrB,iBAAiB;IACjB,iBAAiB;IACjB,8BAA8B;IAC9B,0BAA0B;IAC1B,qBAAqB;IACrB,iBAAiB;CACX,CAAC"}
|
package/common/clock.d.ts
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
export type Clock = {
|
|
2
|
-
readonly getCurrentTimeInMilliseconds: () => number;
|
|
3
|
-
readonly setTimeout: <Arguments extends readonly unknown[]>(handler: (...args: Arguments) => void, delayInMilliseconds: number, ...args: Arguments) => ReturnType<typeof globalThis.setTimeout>;
|
|
4
|
-
readonly clearTimeout: (id: ReturnType<typeof globalThis.setTimeout>) => void;
|
|
5
|
-
};
|
|
6
|
-
export declare function createClock(): Clock;
|
|
7
1
|
//# sourceMappingURL=clock.d.ts.map
|