@interfere/build 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/config.d.cts +8 -0
- package/dist/config.d.mts +8 -0
- package/dist/release-request.cjs +1 -1
- package/dist/release-request.d.cts +7 -1
- package/dist/release-request.d.mts +7 -1
- package/dist/release-request.mjs +1 -1
- package/dist/service-name.cjs +1 -1
- package/dist/service-name.d.cts +2 -3
- package/dist/service-name.d.mts +2 -3
- package/dist/service-name.mjs +1 -1
- package/dist/source-maps/upload-source-map-chunks.cjs +1 -1
- package/dist/source-maps/upload-source-map-chunks.d.cts +1 -1
- package/dist/source-maps/upload-source-map-chunks.d.mts +1 -1
- package/dist/source-maps/upload-source-map-chunks.mjs +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -8,7 +8,6 @@ chunk uploads, and local artifact cleanup. Framework integrations own the sequen
|
|
|
8
8
|
of API calls and only delete source maps after the server accepts the full batch.
|
|
9
9
|
|
|
10
10
|
Source-map uploads use 20 concurrent workers by default. Set
|
|
11
|
-
`INTERFERE_SOURCEMAP_UPLOAD_CONCURRENCY` to a positive integer to change the limit;
|
|
12
11
|
the `uploadSourceMapChunks` `concurrency` option takes precedence. Next.js and Vite
|
|
13
12
|
share this setting. Pass the variable through your build runner when it filters
|
|
14
13
|
environment variables, such as Turborepo's strict environment mode.
|
|
@@ -26,8 +25,7 @@ unless they opt in; Next.js and Vite configure both automatically.
|
|
|
26
25
|
|
|
27
26
|
`resolveBuildServiceName` from `@interfere/build/service-name` supplies the same
|
|
28
27
|
service identity policy to Next.js and Vite: an explicit plugin option, then
|
|
29
|
-
`OTEL_SERVICE_NAME`, then the app's unscoped `package.json` name.
|
|
30
|
-
its legacy `VITE_INTERFERE_SERVICE_NAME` variable before the package fallback.
|
|
28
|
+
`OTEL_SERVICE_NAME`, then the app's unscoped `package.json` name.
|
|
31
29
|
Blank values are skipped; a missing or invalid package name leaves the default
|
|
32
30
|
unset. Each framework injects this value into its browser and server entry points,
|
|
33
31
|
where explicit runtime service names still take precedence.
|
package/dist/config.d.cts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
//#region src/config.d.ts
|
|
2
2
|
export declare function createBuildConfigResolver(observe?: (result: Awaited<ReturnType<typeof fetchBuildConfig>>) => void): (apiUrl: string, publicKey: string, buildScope?: string) => Promise<{
|
|
3
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
4
|
+
backendHosts?: string[] | undefined;
|
|
3
5
|
ingestUrl?: string | undefined;
|
|
4
6
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
5
7
|
platform?: "cloudflare" | "vercel" | undefined;
|
|
@@ -13,6 +15,8 @@ export declare function createBuildConfigResolver(observe?: (result: Awaited<Ret
|
|
|
13
15
|
} | undefined;
|
|
14
16
|
serverTracing?: "drain" | "full" | undefined;
|
|
15
17
|
} | {
|
|
18
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
19
|
+
backendHosts?: string[] | undefined;
|
|
16
20
|
ingestUrl?: string | undefined;
|
|
17
21
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
18
22
|
plugins?: {
|
|
@@ -28,6 +32,8 @@ export declare function createBuildConfigResolver(observe?: (result: Awaited<Ret
|
|
|
28
32
|
}>;
|
|
29
33
|
declare function fetchBuildConfig(apiUrl: string, publicKey: string): Promise<{
|
|
30
34
|
config: {
|
|
35
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
36
|
+
backendHosts?: string[] | undefined;
|
|
31
37
|
ingestUrl?: string | undefined;
|
|
32
38
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
33
39
|
plugins?: {
|
|
@@ -44,6 +50,8 @@ declare function fetchBuildConfig(apiUrl: string, publicKey: string): Promise<{
|
|
|
44
50
|
status: "fallback" | "fetched";
|
|
45
51
|
} | {
|
|
46
52
|
config: {
|
|
53
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
54
|
+
backendHosts?: string[] | undefined;
|
|
47
55
|
ingestUrl?: string | undefined;
|
|
48
56
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
49
57
|
platform?: "cloudflare" | "vercel" | undefined;
|
package/dist/config.d.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
//#region src/config.d.ts
|
|
2
2
|
export declare function createBuildConfigResolver(observe?: (result: Awaited<ReturnType<typeof fetchBuildConfig>>) => void): (apiUrl: string, publicKey: string, buildScope?: string) => Promise<{
|
|
3
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
4
|
+
backendHosts?: string[] | undefined;
|
|
3
5
|
ingestUrl?: string | undefined;
|
|
4
6
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
5
7
|
platform?: "cloudflare" | "vercel" | undefined;
|
|
@@ -13,6 +15,8 @@ export declare function createBuildConfigResolver(observe?: (result: Awaited<Ret
|
|
|
13
15
|
} | undefined;
|
|
14
16
|
serverTracing?: "drain" | "full" | undefined;
|
|
15
17
|
} | {
|
|
18
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
19
|
+
backendHosts?: string[] | undefined;
|
|
16
20
|
ingestUrl?: string | undefined;
|
|
17
21
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
18
22
|
plugins?: {
|
|
@@ -28,6 +32,8 @@ export declare function createBuildConfigResolver(observe?: (result: Awaited<Ret
|
|
|
28
32
|
}>;
|
|
29
33
|
declare function fetchBuildConfig(apiUrl: string, publicKey: string): Promise<{
|
|
30
34
|
config: {
|
|
35
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
36
|
+
backendHosts?: string[] | undefined;
|
|
31
37
|
ingestUrl?: string | undefined;
|
|
32
38
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
33
39
|
plugins?: {
|
|
@@ -44,6 +50,8 @@ declare function fetchBuildConfig(apiUrl: string, publicKey: string): Promise<{
|
|
|
44
50
|
status: "fallback" | "fetched";
|
|
45
51
|
} | {
|
|
46
52
|
config: {
|
|
53
|
+
anonymousReplayPolicy?: "always" | "never" | "on_error" | undefined;
|
|
54
|
+
backendHosts?: string[] | undefined;
|
|
47
55
|
ingestUrl?: string | undefined;
|
|
48
56
|
logSourcing?: "drain" | "sdk" | undefined;
|
|
49
57
|
platform?: "cloudflare" | "vercel" | undefined;
|
package/dist/release-request.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_destinations_cloudflare_destination=require("./destinations/cloudflare-destination.cjs"),require_destinations_vercel_destination=require("./destinations/vercel-destination.cjs");let _interfere_types_integrations=require("@interfere/types/integrations"),_interfere_types_sdk_cli_destination=require("@interfere/types/sdk/cli-destination"),_interfere_types_sdk_deploy_environment=require("@interfere/types/sdk/deploy-environment"),_interfere_types_sdk_github_source=require("@interfere/types/sdk/github-source"),node_child_process=require("node:child_process");function git(command){try{return(0,node_child_process.execSync)(command,{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim()||null}catch{return null}}function resolveReleaseRequest(input){if(!_interfere_types_integrations.configuredSourceProviderSchema.safeParse(input.config.surface.sourceProvider).success)return{ok:!1,reason:`missing_source_provider`};let provider=_interfere_types_integrations.releaseDestinationProviderSchema.safeParse(input.config.surface.destinationProvider);if(!provider.success)return{ok:!1,reason:`missing_destination_provider`};let destinations={cli:()=>(0,_interfere_types_sdk_cli_destination.resolveCliReleaseDestination)(process.env,input.releaseSlug),cloudflare:require_destinations_cloudflare_destination.resolve,vercel:require_destinations_vercel_destination.resolve};return{ok:!0,request:{buildId:input.buildId,destination:(0,_interfere_types_sdk_deploy_environment.applyDeployEnvironment)(destinations[provider.data](),input.environment),producerVersion:input.producerVersion,slug:input.releaseSlug,source:(0,_interfere_types_sdk_github_source.resolveGithubReleaseSource)(process.env,git)}}}exports.resolveReleaseRequest=resolveReleaseRequest;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_destinations_cloudflare_destination=require("./destinations/cloudflare-destination.cjs"),require_destinations_vercel_destination=require("./destinations/vercel-destination.cjs");let zod=require("zod"),_interfere_types_integrations=require("@interfere/types/integrations"),_interfere_types_sdk_cli_destination=require("@interfere/types/sdk/cli-destination"),_interfere_types_sdk_deploy_environment=require("@interfere/types/sdk/deploy-environment"),_interfere_types_sdk_github_source=require("@interfere/types/sdk/github-source"),node_child_process=require("node:child_process");function git(command){try{return(0,node_child_process.execSync)(command,{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim()||null}catch{return null}}function resolveReleaseRequest(input){if(!_interfere_types_integrations.configuredSourceProviderSchema.safeParse(input.config.surface.sourceProvider).success)return{ok:!1,reason:`missing_source_provider`};let provider=_interfere_types_integrations.releaseDestinationProviderSchema.safeParse(input.config.surface.destinationProvider);if(!provider.success)return{ok:!1,reason:`missing_destination_provider`};let destinations={cli:()=>(0,_interfere_types_sdk_cli_destination.resolveCliReleaseDestination)(process.env,input.releaseSlug),cloudflare:require_destinations_cloudflare_destination.resolve,vercel:require_destinations_vercel_destination.resolve};return{ok:!0,request:{buildId:input.buildId,destination:(0,_interfere_types_sdk_deploy_environment.applyDeployEnvironment)(destinations[provider.data](),input.environment),producerVersion:input.producerVersion,slug:input.releaseSlug,source:(0,_interfere_types_sdk_github_source.resolveGithubReleaseSource)(process.env,git)}}}const releaseBindingSchema=zod.z.object({org:zod.z.object({id:zod.z.string(),slug:zod.z.string().min(1)}),surface:zod.z.object({id:zod.z.string(),slug:zod.z.string().min(1),sourceProvider:zod.z.string().nullable(),destinationProvider:zod.z.string().nullable()})});async function preflightReleaseBinding(client){try{let config=await client.releases.getReleasesConfig({abortSignal:AbortSignal.timeout(1e4)});return releaseBindingSchema.safeParse(config).success?config:null}catch{return null}}function missingReleaseBinding(config){let source=_interfere_types_integrations.configuredSourceProviderSchema.safeParse(config.surface.sourceProvider),destination=_interfere_types_integrations.releaseDestinationProviderSchema.safeParse(config.surface.destinationProvider);return source.success&&destination.success?null:`Interfere is disabled for this build: configure the surface's ${source.success?`deployment target`:`version control provider`} at https://interfere.com/~/${config.org.slug}/apps/${config.surface.slug}`}exports.missingReleaseBinding=missingReleaseBinding,exports.preflightReleaseBinding=preflightReleaseBinding,exports.resolveReleaseRequest=resolveReleaseRequest;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Interfere } from "@interfere/javascript";
|
|
1
|
+
import { Interfere, InterfereClient } from "@interfere/javascript";
|
|
2
2
|
import { ReleaseSlug } from "@interfere/types/releases/slug";
|
|
3
3
|
//#region src/release-request.d.ts
|
|
4
4
|
export declare function resolveReleaseRequest(input: {
|
|
@@ -49,6 +49,8 @@ export declare function resolveReleaseRequest(input: {
|
|
|
49
49
|
producerVersion?: string | undefined;
|
|
50
50
|
slug?: string | undefined;
|
|
51
51
|
source: {
|
|
52
|
+
authorLogin?: string | null | undefined;
|
|
53
|
+
authorAvatarUrl?: string | null | undefined;
|
|
52
54
|
branch: string;
|
|
53
55
|
commitMessage: string;
|
|
54
56
|
commitSha: string | null;
|
|
@@ -70,4 +72,8 @@ export declare function resolveReleaseRequest(input: {
|
|
|
70
72
|
};
|
|
71
73
|
};
|
|
72
74
|
};
|
|
75
|
+
/** Fetch release bindings before compilation, retaining runtime capture when lookup is unavailable. */
|
|
76
|
+
export declare function preflightReleaseBinding(client: InterfereClient): Promise<Interfere.ReleasesConfigResponse | null>;
|
|
77
|
+
/** Describe a confirmed incomplete surface without exposing credentials. */
|
|
78
|
+
export declare function missingReleaseBinding(config: Interfere.ReleasesConfigResponse): string | null;
|
|
73
79
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Interfere } from "@interfere/javascript";
|
|
1
|
+
import { Interfere, InterfereClient } from "@interfere/javascript";
|
|
2
2
|
import { ReleaseSlug } from "@interfere/types/releases/slug";
|
|
3
3
|
//#region src/release-request.d.ts
|
|
4
4
|
export declare function resolveReleaseRequest(input: {
|
|
@@ -49,6 +49,8 @@ export declare function resolveReleaseRequest(input: {
|
|
|
49
49
|
producerVersion?: string | undefined;
|
|
50
50
|
slug?: string | undefined;
|
|
51
51
|
source: {
|
|
52
|
+
authorLogin?: string | null | undefined;
|
|
53
|
+
authorAvatarUrl?: string | null | undefined;
|
|
52
54
|
branch: string;
|
|
53
55
|
commitMessage: string;
|
|
54
56
|
commitSha: string | null;
|
|
@@ -70,4 +72,8 @@ export declare function resolveReleaseRequest(input: {
|
|
|
70
72
|
};
|
|
71
73
|
};
|
|
72
74
|
};
|
|
75
|
+
/** Fetch release bindings before compilation, retaining runtime capture when lookup is unavailable. */
|
|
76
|
+
export declare function preflightReleaseBinding(client: InterfereClient): Promise<Interfere.ReleasesConfigResponse | null>;
|
|
77
|
+
/** Describe a confirmed incomplete surface without exposing credentials. */
|
|
78
|
+
export declare function missingReleaseBinding(config: Interfere.ReleasesConfigResponse): string | null;
|
|
73
79
|
//#endregion
|
package/dist/release-request.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolve}from"./destinations/cloudflare-destination.mjs";import{resolve as resolve$1}from"./destinations/vercel-destination.mjs";import{configuredSourceProviderSchema,releaseDestinationProviderSchema}from"@interfere/types/integrations";import{resolveCliReleaseDestination}from"@interfere/types/sdk/cli-destination";import{applyDeployEnvironment}from"@interfere/types/sdk/deploy-environment";import{resolveGithubReleaseSource}from"@interfere/types/sdk/github-source";import{execSync}from"node:child_process";function git(command){try{return execSync(command,{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim()||null}catch{return null}}function resolveReleaseRequest(input){if(!configuredSourceProviderSchema.safeParse(input.config.surface.sourceProvider).success)return{ok:!1,reason:`missing_source_provider`};let provider=releaseDestinationProviderSchema.safeParse(input.config.surface.destinationProvider);if(!provider.success)return{ok:!1,reason:`missing_destination_provider`};let destinations={cli:()=>resolveCliReleaseDestination(process.env,input.releaseSlug),cloudflare:resolve,vercel:resolve$1};return{ok:!0,request:{buildId:input.buildId,destination:applyDeployEnvironment(destinations[provider.data](),input.environment),producerVersion:input.producerVersion,slug:input.releaseSlug,source:resolveGithubReleaseSource(process.env,git)}}}export{resolveReleaseRequest};
|
|
1
|
+
import{resolve}from"./destinations/cloudflare-destination.mjs";import{resolve as resolve$1}from"./destinations/vercel-destination.mjs";import{z}from"zod";import{configuredSourceProviderSchema,releaseDestinationProviderSchema}from"@interfere/types/integrations";import{resolveCliReleaseDestination}from"@interfere/types/sdk/cli-destination";import{applyDeployEnvironment}from"@interfere/types/sdk/deploy-environment";import{resolveGithubReleaseSource}from"@interfere/types/sdk/github-source";import{execSync}from"node:child_process";function git(command){try{return execSync(command,{encoding:`utf8`,stdio:[`ignore`,`pipe`,`ignore`]}).trim()||null}catch{return null}}function resolveReleaseRequest(input){if(!configuredSourceProviderSchema.safeParse(input.config.surface.sourceProvider).success)return{ok:!1,reason:`missing_source_provider`};let provider=releaseDestinationProviderSchema.safeParse(input.config.surface.destinationProvider);if(!provider.success)return{ok:!1,reason:`missing_destination_provider`};let destinations={cli:()=>resolveCliReleaseDestination(process.env,input.releaseSlug),cloudflare:resolve,vercel:resolve$1};return{ok:!0,request:{buildId:input.buildId,destination:applyDeployEnvironment(destinations[provider.data](),input.environment),producerVersion:input.producerVersion,slug:input.releaseSlug,source:resolveGithubReleaseSource(process.env,git)}}}const releaseBindingSchema=z.object({org:z.object({id:z.string(),slug:z.string().min(1)}),surface:z.object({id:z.string(),slug:z.string().min(1),sourceProvider:z.string().nullable(),destinationProvider:z.string().nullable()})});async function preflightReleaseBinding(client){try{let config=await client.releases.getReleasesConfig({abortSignal:AbortSignal.timeout(1e4)});return releaseBindingSchema.safeParse(config).success?config:null}catch{return null}}function missingReleaseBinding(config){let source=configuredSourceProviderSchema.safeParse(config.surface.sourceProvider),destination=releaseDestinationProviderSchema.safeParse(config.surface.destinationProvider);return source.success&&destination.success?null:`Interfere is disabled for this build: configure the surface's ${source.success?`deployment target`:`version control provider`} at https://interfere.com/~/${config.org.slug}/apps/${config.surface.slug}`}export{missingReleaseBinding,preflightReleaseBinding,resolveReleaseRequest};
|
package/dist/service-name.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let _interfere_types_sdk_runtime=require("@interfere/types/sdk/runtime"),node_fs=require("node:fs"),node_path=require("node:path");const SCOPE_PREFIX=/^@[^/]+\//u;function nonEmpty(value){return value?.trim()||void 0}function packageServiceName(root){let manifest;try{manifest=JSON.parse((0,node_fs.readFileSync)((0,node_path.join)(root,`package.json`),`utf8`))}catch{return}if(typeof manifest==`object`&&manifest&&`name`in manifest)return typeof manifest.name==`string`?nonEmpty(manifest.name.trim().replace(SCOPE_PREFIX,``)):void 0}function resolveBuildServiceName({root,option,env=(0,_interfere_types_sdk_runtime.readProcessEnv)()??{}
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let _interfere_types_sdk_runtime=require("@interfere/types/sdk/runtime"),node_fs=require("node:fs"),node_path=require("node:path");const SCOPE_PREFIX=/^@[^/]+\//u;function nonEmpty(value){return value?.trim()||void 0}function packageServiceName(root){let manifest;try{manifest=JSON.parse((0,node_fs.readFileSync)((0,node_path.join)(root,`package.json`),`utf8`))}catch{return}if(typeof manifest==`object`&&manifest&&`name`in manifest)return typeof manifest.name==`string`?nonEmpty(manifest.name.trim().replace(SCOPE_PREFIX,``)):void 0}function resolveBuildServiceName({root,option,env=(0,_interfere_types_sdk_runtime.readProcessEnv)()??{}}){return nonEmpty(option)??nonEmpty(env.OTEL_SERVICE_NAME)??packageServiceName(root)}exports.resolveBuildServiceName=resolveBuildServiceName;
|
package/dist/service-name.d.cts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
//#region src/service-name.d.ts
|
|
2
|
-
/** Resolve a build's service name from an option, OTEL_SERVICE_NAME,
|
|
3
|
-
export declare function resolveBuildServiceName({ root, option, env
|
|
2
|
+
/** Resolve a build's service name from an option, OTEL_SERVICE_NAME, or its unscoped app package name. */
|
|
3
|
+
export declare function resolveBuildServiceName({ root, option, env }: {
|
|
4
4
|
root: string;
|
|
5
5
|
option?: string | undefined;
|
|
6
6
|
env?: Readonly<Record<string, string | undefined>>;
|
|
7
|
-
legacyEnvName?: string;
|
|
8
7
|
}): string | undefined;
|
|
9
8
|
//#endregion
|
package/dist/service-name.d.mts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
//#region src/service-name.d.ts
|
|
2
|
-
/** Resolve a build's service name from an option, OTEL_SERVICE_NAME,
|
|
3
|
-
export declare function resolveBuildServiceName({ root, option, env
|
|
2
|
+
/** Resolve a build's service name from an option, OTEL_SERVICE_NAME, or its unscoped app package name. */
|
|
3
|
+
export declare function resolveBuildServiceName({ root, option, env }: {
|
|
4
4
|
root: string;
|
|
5
5
|
option?: string | undefined;
|
|
6
6
|
env?: Readonly<Record<string, string | undefined>>;
|
|
7
|
-
legacyEnvName?: string;
|
|
8
7
|
}): string | undefined;
|
|
9
8
|
//#endregion
|
package/dist/service-name.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readProcessEnv}from"@interfere/types/sdk/runtime";import{readFileSync}from"node:fs";import{join}from"node:path";const SCOPE_PREFIX=/^@[^/]+\//u;function nonEmpty(value){return value?.trim()||void 0}function packageServiceName(root){let manifest;try{manifest=JSON.parse(readFileSync(join(root,`package.json`),`utf8`))}catch{return}if(typeof manifest==`object`&&manifest&&`name`in manifest)return typeof manifest.name==`string`?nonEmpty(manifest.name.trim().replace(SCOPE_PREFIX,``)):void 0}function resolveBuildServiceName({root,option,env=readProcessEnv()??{}
|
|
1
|
+
import{readProcessEnv}from"@interfere/types/sdk/runtime";import{readFileSync}from"node:fs";import{join}from"node:path";const SCOPE_PREFIX=/^@[^/]+\//u;function nonEmpty(value){return value?.trim()||void 0}function packageServiceName(root){let manifest;try{manifest=JSON.parse(readFileSync(join(root,`package.json`),`utf8`))}catch{return}if(typeof manifest==`object`&&manifest&&`name`in manifest)return typeof manifest.name==`string`?nonEmpty(manifest.name.trim().replace(SCOPE_PREFIX,``)):void 0}function resolveBuildServiceName({root,option,env=readProcessEnv()??{}}){return nonEmpty(option)??nonEmpty(env.OTEL_SERVICE_NAME)??packageServiceName(root)}export{resolveBuildServiceName};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_source_maps_upload_source_map_batch=require("./upload-source-map-batch.cjs"),require_source_maps_upload_source_map_request=require("./upload-source-map-request.cjs");let _interfere_types_data_source_map_upload_batch=require("@interfere/types/data/source-map-upload-batch");async function uploadSourceMapChunks(options){let{client,environment,files,releaseSlug,signed}=options,concurrency=options.concurrency??
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const require_source_maps_upload_source_map_batch=require("./upload-source-map-batch.cjs"),require_source_maps_upload_source_map_request=require("./upload-source-map-request.cjs");let _interfere_types_data_source_map_upload_batch=require("@interfere/types/data/source-map-upload-batch");async function uploadSourceMapChunks(options){let{client,environment,files,releaseSlug,signed}=options,concurrency=options.concurrency??20;if(!Number.isSafeInteger(concurrency)||concurrency<1)throw Error(`Source-map upload concurrency must be a positive integer`);let capability=_interfere_types_data_source_map_upload_batch.sourceMapBatchCapability.safeParse(signed.batchUpload),supportsGzip=capability.success&&capability.data.compression===`gzip`,chunkBytes=supportsGzip?8388608:524288,headers=options.compression===`gzip`&&supportsGzip?{"content-encoding":`gzip`}:void 0,controller=new AbortController;try{let sessionDeadlineMs=signed.expiresAt*1e3,assertSessionOpen=()=>{if(!Number.isFinite(sessionDeadlineMs)||Date.now()>=sessionDeadlineMs)throw Error(`Source-map upload session expired`)};assertSessionOpen();let abortSignal=AbortSignal.any([controller.signal,AbortSignal.timeout(sessionDeadlineMs-Date.now())]),expected=new Set(files.map(file=>file.path));if(signed.uploads.length!==files.length||new Set(signed.uploads.map(file=>file.path)).size!==files.length||signed.uploads.some(file=>!expected.has(file.path)))throw Error(`Source-map server returned a different batch`);let jobs=require_source_maps_upload_source_map_batch.sourceMapUploadJobs(files,signed.batchUpload),totalBytes=0;return await Promise.all(Array.from({length:Math.min(concurrency,files.length)},async()=>{for(let job of jobs){if(abortSignal.throwIfAborted(),assertSessionOpen(),job.chunks){await require_source_maps_upload_source_map_request.uploadSourceMapRequest(async()=>await client.releases.uploadSourceMapBatch({releaseSlug,environment,chunks:job.chunks},{abortSignal,headers}),abortSignal),totalBytes+=job.rawBytes;continue}let{file}=job,bytes=new TextEncoder().encode(file.content);for(let offset=0;offset<bytes.byteLength;offset+=chunkBytes){assertSessionOpen();let chunk=new Blob([bytes.subarray(offset,offset+chunkBytes)]);await require_source_maps_upload_source_map_request.uploadSourceMapRequest(async()=>await client.releases.uploadSourceMap(chunk,releaseSlug,{environment,path:file.path,offset},{abortSignal,headers:{...headers,"x-interfere-source-map-size":String(chunk.size)}}),abortSignal)}totalBytes+=bytes.byteLength}})),assertSessionOpen(),totalBytes}finally{controller.abort()}}exports.uploadSourceMapChunks=uploadSourceMapChunks;
|
|
@@ -5,7 +5,7 @@ export declare function uploadSourceMapChunks(options: {
|
|
|
5
5
|
releaseSlug: string;
|
|
6
6
|
environment?: string | undefined;
|
|
7
7
|
signed: Interfere.SourceMapUploadSessionResponse;
|
|
8
|
-
concurrency?: number;
|
|
8
|
+
concurrency?: number | undefined;
|
|
9
9
|
/** Requires sourceMapUploadFetch on the client; defaults to identity. */
|
|
10
10
|
compression?: "gzip";
|
|
11
11
|
files: readonly (Interfere.CompleteSourceMapFile & {
|
|
@@ -5,7 +5,7 @@ export declare function uploadSourceMapChunks(options: {
|
|
|
5
5
|
releaseSlug: string;
|
|
6
6
|
environment?: string | undefined;
|
|
7
7
|
signed: Interfere.SourceMapUploadSessionResponse;
|
|
8
|
-
concurrency?: number;
|
|
8
|
+
concurrency?: number | undefined;
|
|
9
9
|
/** Requires sourceMapUploadFetch on the client; defaults to identity. */
|
|
10
10
|
compression?: "gzip";
|
|
11
11
|
files: readonly (Interfere.CompleteSourceMapFile & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{sourceMapUploadJobs}from"./upload-source-map-batch.mjs";import{uploadSourceMapRequest}from"./upload-source-map-request.mjs";import{sourceMapBatchCapability}from"@interfere/types/data/source-map-upload-batch";async function uploadSourceMapChunks(options){let{client,environment,files,releaseSlug,signed}=options,concurrency=options.concurrency??
|
|
1
|
+
import{sourceMapUploadJobs}from"./upload-source-map-batch.mjs";import{uploadSourceMapRequest}from"./upload-source-map-request.mjs";import{sourceMapBatchCapability}from"@interfere/types/data/source-map-upload-batch";async function uploadSourceMapChunks(options){let{client,environment,files,releaseSlug,signed}=options,concurrency=options.concurrency??20;if(!Number.isSafeInteger(concurrency)||concurrency<1)throw Error(`Source-map upload concurrency must be a positive integer`);let capability=sourceMapBatchCapability.safeParse(signed.batchUpload),supportsGzip=capability.success&&capability.data.compression===`gzip`,chunkBytes=supportsGzip?8388608:524288,headers=options.compression===`gzip`&&supportsGzip?{"content-encoding":`gzip`}:void 0,controller=new AbortController;try{let sessionDeadlineMs=signed.expiresAt*1e3,assertSessionOpen=()=>{if(!Number.isFinite(sessionDeadlineMs)||Date.now()>=sessionDeadlineMs)throw Error(`Source-map upload session expired`)};assertSessionOpen();let abortSignal=AbortSignal.any([controller.signal,AbortSignal.timeout(sessionDeadlineMs-Date.now())]),expected=new Set(files.map(file=>file.path));if(signed.uploads.length!==files.length||new Set(signed.uploads.map(file=>file.path)).size!==files.length||signed.uploads.some(file=>!expected.has(file.path)))throw Error(`Source-map server returned a different batch`);let jobs=sourceMapUploadJobs(files,signed.batchUpload),totalBytes=0;return await Promise.all(Array.from({length:Math.min(concurrency,files.length)},async()=>{for(let job of jobs){if(abortSignal.throwIfAborted(),assertSessionOpen(),job.chunks){await uploadSourceMapRequest(async()=>await client.releases.uploadSourceMapBatch({releaseSlug,environment,chunks:job.chunks},{abortSignal,headers}),abortSignal),totalBytes+=job.rawBytes;continue}let{file}=job,bytes=new TextEncoder().encode(file.content);for(let offset=0;offset<bytes.byteLength;offset+=chunkBytes){assertSessionOpen();let chunk=new Blob([bytes.subarray(offset,offset+chunkBytes)]);await uploadSourceMapRequest(async()=>await client.releases.uploadSourceMap(chunk,releaseSlug,{environment,path:file.path,offset},{abortSignal,headers:{...headers,"x-interfere-source-map-size":String(chunk.size)}}),abortSignal)}totalBytes+=bytes.byteLength}})),assertSessionOpen(),totalBytes}finally{controller.abort()}}export{uploadSourceMapChunks};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interfere/build",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Release preparation for Interfere build integrations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"build",
|
|
@@ -103,8 +103,9 @@
|
|
|
103
103
|
"typecheck": "bun check"
|
|
104
104
|
},
|
|
105
105
|
"dependencies": {
|
|
106
|
-
"@interfere/javascript": "^0.3.
|
|
107
|
-
"@interfere/types": "^10.6.
|
|
106
|
+
"@interfere/javascript": "^0.3.2",
|
|
107
|
+
"@interfere/types": "^10.6.2",
|
|
108
|
+
"zod": "4.6.6"
|
|
108
109
|
},
|
|
109
110
|
"devDependencies": {
|
|
110
111
|
"@interfere/typescript-config": "^9.0.2",
|