@platforma-sdk/package-builder-lib 1.1.0 → 1.2.0
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/dist/core/archive.cjs +3 -3
- package/dist/core/archive.cjs.map +1 -1
- package/dist/core/archive.js.map +1 -1
- package/dist/core/conda/builder.cjs +9 -4
- package/dist/core/conda/builder.cjs.map +1 -1
- package/dist/core/conda/builder.js +5 -1
- package/dist/core/conda/builder.js.map +1 -1
- package/dist/core/conda/validate-spec.cjs +2 -2
- package/dist/core/conda/validate-spec.cjs.map +1 -1
- package/dist/core/conda/validate-spec.js.map +1 -1
- package/dist/core/core.cjs +29 -8
- package/dist/core/core.cjs.map +1 -1
- package/dist/core/core.d.ts +6 -1
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core/core.js +27 -6
- package/dist/core/core.js.map +1 -1
- package/dist/core/docker-conda.cjs +2 -2
- package/dist/core/docker-conda.cjs.map +1 -1
- package/dist/core/docker-conda.js.map +1 -1
- package/dist/core/docker-python.cjs +3 -2
- package/dist/core/docker-python.cjs.map +1 -1
- package/dist/core/docker-python.js +1 -1
- package/dist/core/docker-python.js.map +1 -1
- package/dist/core/docker.cjs +3 -3
- package/dist/core/docker.cjs.map +1 -1
- package/dist/core/docker.js.map +1 -1
- package/dist/core/envs.cjs +34 -0
- package/dist/core/envs.cjs.map +1 -1
- package/dist/core/envs.d.ts +8 -2
- package/dist/core/envs.d.ts.map +1 -1
- package/dist/core/envs.js +13 -1
- package/dist/core/envs.js.map +1 -1
- package/dist/core/package-info.cjs +59 -5
- package/dist/core/package-info.cjs.map +1 -1
- package/dist/core/package-info.d.ts +11 -2
- package/dist/core/package-info.d.ts.map +1 -1
- package/dist/core/package-info.js +60 -6
- package/dist/core/package-info.js.map +1 -1
- package/dist/core/paths.cjs +1 -1
- package/dist/core/paths.cjs.map +1 -1
- package/dist/core/paths.js +1 -1
- package/dist/core/paths.js.map +1 -1
- package/dist/core/resolver.cjs +7 -2
- package/dist/core/resolver.cjs.map +1 -1
- package/dist/core/resolver.js +1 -1
- package/dist/core/resolver.js.map +1 -1
- package/dist/core/schemas/artifacts.cjs +7 -1
- package/dist/core/schemas/artifacts.cjs.map +1 -1
- package/dist/core/schemas/artifacts.d.ts +1 -1
- package/dist/core/schemas/artifacts.d.ts.map +1 -1
- package/dist/core/schemas/artifacts.js +1 -1
- package/dist/core/schemas/artifacts.js.map +1 -1
- package/dist/core/schemas/entrypoints.cjs +4 -1
- package/dist/core/schemas/entrypoints.cjs.map +1 -1
- package/dist/core/schemas/entrypoints.d.ts +1 -1
- package/dist/core/schemas/entrypoints.d.ts.map +1 -1
- package/dist/core/schemas/entrypoints.js +1 -1
- package/dist/core/schemas/entrypoints.js.map +1 -1
- package/dist/core/schemas/sw-json.cjs +16 -1
- package/dist/core/schemas/sw-json.cjs.map +1 -1
- package/dist/core/schemas/sw-json.js +1 -1
- package/dist/core/schemas/sw-json.js.map +1 -1
- package/dist/core/storage.cjs +6 -2
- package/dist/core/storage.cjs.map +1 -1
- package/dist/core/storage.js +4 -1
- package/dist/core/storage.js.map +1 -1
- package/dist/core/sw-json-render.cjs +38 -7
- package/dist/core/sw-json-render.cjs.map +1 -1
- package/dist/core/sw-json-render.js +37 -8
- package/dist/core/sw-json-render.js.map +1 -1
- package/dist/core/util.cjs +33 -12
- package/dist/core/util.cjs.map +1 -1
- package/dist/core/util.d.ts +12 -7
- package/dist/core/util.d.ts.map +1 -1
- package/dist/core/util.js +17 -8
- package/dist/core/util.js.map +1 -1
- package/dist/defaults.cjs +18 -1
- package/dist/defaults.cjs.map +1 -1
- package/dist/defaults.d.ts +9 -3
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +13 -2
- package/dist/defaults.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/core/core.test.ts +17 -0
- package/src/core/core.ts +48 -8
- package/src/core/envs.ts +8 -0
- package/src/core/package-info.test.ts +162 -3
- package/src/core/package-info.ts +88 -3
- package/src/core/schemas/test-artifacts.ts +1 -1
- package/src/core/sw-json-render.test.ts +23 -0
- package/src/core/sw-json-render.ts +30 -2
- package/src/core/util.test.ts +52 -0
- package/src/core/util.ts +27 -7
- package/src/defaults.ts +19 -1
- package/src/index.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-info.js","names":["entrypoints.entrypointListSchema","defaults.BIN_REGISTRY_NAME","defaults.BIN_REGISTRY_DOWNLOAD_URL","util.findPackageRoot","path","util.packageJsonName","fs","util.CLIError","util.formatZodIssues","docker.entrypointName","entrypoints.EnyrypointReferencePattern","pythonDockerOptions","condaDockerOptions","util.currentArch","util.trimPrefix","envs.PL_PKG_VERSION","util.currentPlatform","artifacts.isCrossPlatform","util.splitPlatform","util.softwareConfigName","artifacts.isBuildable"],"sources":["../../src/core/package-info.ts"],"sourcesContent":["import * as path from \"node:path\";\nimport * as fs from \"node:fs\";\nimport type winston from \"winston\";\nimport { z } from \"zod/v4\";\n\nimport * as defaults from \"../defaults\";\nimport * as util from \"./util\";\nimport * as envs from \"./envs\";\nimport * as artifacts from \"./schemas/artifacts\";\nimport * as entrypoints from \"./schemas/entrypoints\";\nimport { tryResolve } from \"@milaboratories/resolve-helper\";\nimport * as docker from \"./docker\";\nimport { prepareDockerOptions as pythonDockerOptions } from \"./docker-python\";\nimport { prepareDockerOptions as condaDockerOptions } from \"./docker-conda\";\n\nconst storagePresetSchema = z.object({\n downloadURL: z.string().optional(),\n storageURL: z.string().optional(),\n});\ntype storagePreset = z.infer<typeof storagePresetSchema>;\n\nconst binaryRegistryPresetsSchema = z.record(z.string(), storagePresetSchema);\ntype binaryRegistryPresets = z.infer<typeof binaryRegistryPresetsSchema>;\n\nconst packageJsonSchema = z.object({\n name: z.string(),\n version: z.string(),\n private: z.boolean().optional(),\n\n \"block-software\": z.object({\n registries: z\n .object({\n binary: binaryRegistryPresetsSchema.optional(),\n })\n .optional(),\n\n artifacts: artifacts.artifactIndexSchema.optional(),\n entrypoints: entrypoints.entrypointListSchema,\n }),\n});\ntype packageJson = z.infer<typeof packageJsonSchema>;\n\nconst wellKnownRegistries: Record<string, storagePreset> = {\n [defaults.BIN_REGISTRY_NAME]: {\n downloadURL: defaults.BIN_REGISTRY_DOWNLOAD_URL,\n },\n};\n\n/*\n * package.json -> block-software structure example:\n * {\n * \"block-software\": {\n * \"registries\": {\n * \"binary\": {\n * \"default\": { \"uploadURL\": \"s3://<bucket>/<some-prefix>?region=<region-name>\" }\n * }\n * },\n *\n * \"artifacts\": {\n * \"pkg-1\": {\n * \"type\": \"binary\",\n * \"roots\": {\n * \"linux-x64\": \"./linux-x64/src\",\n * \"linux-aarch64\": \"./linux-aarch/src\",\n * \"...and so on...\": \"platform-dependant roots\",\n * }\n * }\n * }\n *\n * \"entrypoints\": {\n * \"script1\": {\n * \"software\": {\n * \"artifact\": \"pkg-1\",\n * \"cmd\": [ \"{pkg}/script1\" ]\n * }\n * }\n * }\n * }\n * }\n */\nexport class PackageInfo {\n public readonly packageRoot: string;\n public readonly packageName: string;\n\n private readonly pkgJson: packageJson;\n private _versionOverride: string | undefined;\n\n constructor(\n private logger: winston.Logger,\n options?: {\n packageRoot?: string;\n pkgJsonData?: string;\n },\n ) {\n this.logger.debug(\"Reading package information...\");\n\n this.packageRoot = options?.packageRoot ?? util.findPackageRoot(logger);\n\n let pkgJsonData: string;\n if (options?.pkgJsonData) {\n pkgJsonData = options.pkgJsonData;\n } else {\n const pkgJsonPath = path.resolve(this.packageRoot, util.packageJsonName);\n\n this.logger.debug(` - loading '${pkgJsonPath}'`);\n if (!fs.existsSync(pkgJsonPath)) {\n this.logger.error(`no '${util.packageJsonName}' file found at '${this.packageRoot}'`);\n throw util.CLIError(\"not a platform software package directory\");\n }\n\n pkgJsonData = fs.readFileSync(pkgJsonPath, \"utf8\");\n }\n\n const result = parsePackageJson(pkgJsonData);\n if (!result.success) {\n throw util.CLIError(`\\n` + util.formatZodIssues(result.error.issues));\n }\n this.pkgJson = result.data;\n this.logger.debug(\" \" + JSON.stringify(this.pkgJson));\n\n this.validateConfig();\n\n this.packageName = this.pkgJson.name;\n\n logger.debug(\" package information loaded successfully.\");\n }\n\n get isPrivate(): boolean {\n return this.pkgJson.private ?? false;\n }\n\n get binaryRegistries(): binaryRegistryPresets {\n return this.pkgJson[\"block-software\"].registries?.binary ?? {};\n }\n\n get entrypoints(): Map<string, entrypoints.Entrypoint> {\n const list = new Map<string, entrypoints.Entrypoint>();\n\n for (const [epName, ep] of Object.entries(this.pkgJson[\"block-software\"].entrypoints)) {\n if (ep.docker) {\n const artifactID = typeof ep.docker.artifact === \"string\" ? ep.docker.artifact : epName;\n const artifact = this.getArtifact(artifactID, \"docker\");\n\n // will mix docker to separate entrypoint\n // render function have to merge\n list.set(docker.entrypointName(epName), {\n type: \"software\",\n name: epName,\n artifact: artifact,\n cmd: ep.docker.cmd ?? [],\n env: ep.docker.envVars ?? [],\n });\n }\n\n if (ep.reference) {\n list.set(epName, {\n type: \"reference\",\n name: epName,\n reference: ep.reference,\n });\n continue;\n }\n\n if (ep.binary || ep.conda) {\n const swOptions: entrypoints.softwareOptionsType = ep.binary ? ep.binary : ep.conda!;\n const artifactOrRef = ep.binary ? ep.binary.artifact : ep.conda!.artifact;\n const artifactID = typeof artifactOrRef === \"string\" ? artifactOrRef : epName;\n const artifact = this.getArtifact(artifactID, \"any\");\n if (artifact.type === \"asset\") {\n throw util.CLIError(`binary entrypoint cannot point to asset artifact: ${epName}`);\n }\n if (artifact.type === \"environment\") {\n throw util.CLIError(`binary entrypoint cannot point to environment artifact: ${epName}`);\n }\n\n list.set(epName, {\n type: \"software\",\n name: epName,\n artifact: artifact,\n cmd: swOptions.cmd,\n env: swOptions.envVars ?? [],\n });\n\n if (!ep.docker) {\n if (artifacts.dockerAutogenTypes.includes(artifact.type)) {\n switch (artifact.type) {\n case \"conda\":\n case \"python\":\n list.set(docker.entrypointName(epName), {\n type: \"software\",\n name: epName,\n artifact: this.generateDockerPackage(artifact),\n cmd: swOptions.cmd,\n env: swOptions.envVars ?? [],\n });\n continue;\n default: {\n throw new Error(`docker autogeneration is not defined for type: ${artifact.type}`);\n }\n }\n }\n }\n }\n\n if (ep.environment) {\n const packageID =\n typeof ep.environment.artifact === \"string\" ? ep.environment.artifact : epName;\n list.set(epName, {\n type: \"environment\",\n name: epName,\n artifact: this.getArtifact(packageID, \"environment\"),\n env: ep.environment.envVars ?? [],\n });\n continue;\n }\n\n if (ep.asset) {\n const packageID = typeof ep.asset === \"string\" ? ep.asset : epName;\n list.set(epName, {\n type: \"asset\",\n name: epName,\n artifact: this.getArtifact(packageID, \"asset\"),\n });\n continue;\n }\n\n if (list.size === 0) {\n throw util.CLIError(\n `entrypoint '${epName}' type is not supported by current platforma package builder`,\n );\n }\n }\n\n return list;\n }\n\n // Get not docker entrypoint if exists.\n // If only docker entrypoint exists, return it.\n public getMainEntrypoint(name: string): entrypoints.Entrypoint {\n const ep = this.entrypoints.get(name);\n if (ep) {\n return ep;\n }\n\n return this.entrypoints.get(docker.entrypointName(name))!;\n }\n\n /**\n * Resolves entrypoint reference to full entrypoint file path and type\n */\n public resolveReference(epName: string, ep: entrypoints.ReferenceEntrypoint): string {\n this.logger.debug(\n `resolving entrypoint '${epName}' reference '${ep.reference}'. packageRoot='${this.packageRoot}'`,\n );\n\n const refInfo = ep.reference.match(entrypoints.EnyrypointReferencePattern)?.groups;\n\n if (!refInfo) {\n this.logger.error(\n `entrypoint reference '${epName}' has incorrect reference format. <full package name>/<path to entrypoint> is expected`,\n );\n throw util.CLIError(`invalid entrypoint '${epName}' reference format`);\n }\n\n const refPath = tryResolve(this.packageRoot, ep.reference);\n if (!refPath) {\n this.logger.error(`entrypoint reference '${epName}' cannot be resolved into file path`);\n throw util.CLIError(`invalid entrypoint '${epName}' reference`);\n }\n\n return refPath;\n }\n\n // Packages are buildable artifacts with entrypoints\n get packages(): Map<string, artifacts.withId<artifacts.anyArtifactType>> {\n const result = new Map<string, artifacts.withId<artifacts.anyArtifactType>>();\n\n for (const ep of this.entrypoints.values()) {\n if (ep.type === \"reference\") {\n // Entrypoint references are not buildable\n continue;\n }\n\n if (!result.has(ep.artifact.id)) {\n result.set(ep.artifact.id, ep.artifact);\n }\n }\n\n return result;\n }\n\n public artifactInfoLocation(\n pkgID: string,\n artifactType: \"docker\",\n platform: util.ArchType,\n ): string;\n public artifactInfoLocation(\n pkgID: string,\n artifactType: \"archive\",\n platform?: util.PlatformType,\n ): string;\n public artifactInfoLocation(\n pkgID: string,\n artifactType: \"archive\" | \"docker\",\n platform?: util.PlatformType | util.ArchType,\n ): string {\n const platformPart = platform ? `_${platform}` : \"\";\n return path.resolve(\n this.packageRoot,\n \"dist\",\n \"artifacts\",\n pkgID,\n `${artifactType}${platformPart}.json`,\n );\n }\n\n private generateDockerPackage(\n artifact: artifacts.withId<artifacts.pythonType | artifacts.condaType>,\n ): artifacts.withId<artifacts.dockerType> {\n switch (artifact.type) {\n case \"python\": {\n const options = pythonDockerOptions(\n this.logger,\n this.packageRoot,\n this.packageName,\n artifact.id,\n artifact,\n );\n\n return {\n id: artifact.id,\n type: \"docker\",\n registry: artifact[\"docker-registry\"],\n ...options,\n };\n }\n case \"conda\": {\n const options = condaDockerOptions(\n this.logger,\n this.packageRoot,\n artifact.id,\n artifact,\n util.currentArch(),\n );\n\n return {\n id: artifact.id,\n type: \"docker\",\n registry: artifact[\"docker-registry\"],\n ...options,\n };\n }\n default: {\n util.assertNever(artifact);\n throw new Error(\"calm down the linter\");\n }\n }\n }\n\n public getArtifact(\n id: string,\n type: \"asset\",\n ): artifacts.withId<artifacts.withType<\"asset\", artifacts.assetType>>;\n public getArtifact(id: string, type: \"environment\"): artifacts.withId<artifacts.environmentType>;\n public getArtifact(id: string, type: \"binary\"): artifacts.withId<artifacts.binaryType>;\n public getArtifact(id: string, type: \"java\"): artifacts.withId<artifacts.javaType>;\n public getArtifact(id: string, type: \"python\"): artifacts.withId<artifacts.pythonType>;\n public getArtifact(id: string, type: \"R\"): artifacts.withId<artifacts.rType>;\n public getArtifact(id: string, type: \"docker\"): artifacts.withId<artifacts.dockerType>;\n public getArtifact(id: string, type: \"conda\"): artifacts.withId<artifacts.condaType>;\n public getArtifact(id: string, type: \"any\"): artifacts.withId<artifacts.anyArtifactType>;\n public getArtifact(\n id: string,\n type: artifacts.artifactType | \"any\",\n ): artifacts.withId<artifacts.anyArtifactType> {\n const artifacts = this.pkgJson[\"block-software\"].artifacts ?? {};\n const entrypoints = this.pkgJson[\"block-software\"].entrypoints;\n\n let artifact: artifacts.anyArtifactType | undefined;\n let errMsg = \"\";\n if (artifacts[id]) {\n artifact = artifacts[id];\n } else {\n const ep = entrypoints[id];\n if (!ep) {\n throw util.CLIError(\n `artifact with id '${id}' not found neither in 'entrypoints', nor in 'artifacts'`,\n );\n }\n\n errMsg = `incorrect artifact reference in entrypoint '${id}'`;\n\n if (ep.asset) {\n artifact =\n typeof ep.asset === \"string\"\n ? artifacts[ep.asset]\n : ({ type: \"asset\", ...ep.asset } as artifacts.assetType);\n } else if (ep.binary && type !== \"docker\") {\n // single entrypoint can keep both binary and docker\n const a = ep.binary.artifact;\n artifact = typeof a === \"string\" ? artifacts[a] : a;\n } else if (ep.conda && type !== \"docker\") {\n // single entrypoint can keep both conda and docker\n const a = ep.conda.artifact;\n artifact =\n typeof a === \"string\" ? artifacts[a] : ({ type: \"conda\", ...a } as artifacts.condaType);\n } else if (ep.environment) {\n const a = ep.environment.artifact;\n artifact =\n typeof a === \"string\"\n ? artifacts[a]\n : ({ type: \"environment\", ...a } as artifacts.environmentType);\n } else if (ep.docker) {\n const a = ep.docker.artifact;\n artifact =\n typeof a === \"string\" ? artifacts[a] : ({ type: \"docker\", ...a } as artifacts.dockerType);\n }\n }\n\n if (!artifact) {\n throw util.CLIError(\n `artifact '${id}' not found neither in 'entrypoints', nor in 'artifacts'`,\n );\n }\n\n switch (type) {\n case \"docker\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"docker\", errMsg),\n };\n }\n case \"asset\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"asset\", errMsg),\n };\n }\n case \"environment\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"environment\", errMsg),\n };\n }\n case \"binary\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"binary\", errMsg),\n };\n }\n case \"java\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"java\", errMsg),\n };\n }\n case \"python\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"python\", errMsg),\n };\n }\n case \"R\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"R\", errMsg),\n };\n }\n case \"conda\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"conda\", errMsg),\n };\n }\n case \"any\": {\n return {\n id: id,\n ...artifact,\n };\n }\n default: {\n util.assertNever(type);\n throw util.CLIError(`invalid artifact type`); // calm down the linter\n }\n }\n }\n\n public set version(v: string | undefined) {\n this._versionOverride = v;\n }\n\n public artifactName(artifact: artifacts.withId<artifacts.anyArtifactType>): string {\n if (artifact.type !== \"docker\") {\n if (artifact.name) {\n return artifact.name;\n }\n }\n\n return util.trimPrefix(this.pkgJson.name, \"@\") + \"/\" + artifact.id;\n }\n\n public artifactVersion(artifact: artifacts.anyArtifactType): string {\n if (this._versionOverride) {\n return this._versionOverride;\n }\n\n if (process.env[envs.PL_PKG_VERSION]) {\n return process.env[envs.PL_PKG_VERSION];\n }\n\n if (artifact.type !== \"docker\" && artifact.version) {\n return artifact.version;\n }\n\n return this.pkgJson.version;\n }\n\n public artifactRegistrySettings(artifact: artifacts.anyArtifactType): artifacts.registry {\n if (artifact.type === \"docker\") {\n return {\n name: artifact.registry,\n };\n }\n\n const registry = artifact.registry;\n const registries = this.binaryRegistries;\n\n const result: artifacts.registry = {\n name: \"default\",\n downloadURL: registries.default?.downloadURL,\n storageURL: registries.default?.storageURL,\n };\n\n if (registry) {\n if (typeof registry === \"string\") {\n result.name = registry;\n const regDefault = wellKnownRegistries[result.name];\n result.downloadURL = registries[result.name]?.downloadURL ?? regDefault?.downloadURL;\n result.storageURL = registries[result.name]?.storageURL ?? regDefault?.storageURL;\n } else {\n result.name = registry.name;\n const regDefault = wellKnownRegistries[result.name];\n result.downloadURL =\n registry.downloadURL ?? registries[result.name]?.downloadURL ?? regDefault?.downloadURL;\n result.storageURL =\n registry.storageURL ?? registries[result.name]?.storageURL ?? regDefault?.storageURL;\n }\n }\n\n const regNameUpper = result.name.toUpperCase().replaceAll(/[^A-Z0-9_]/g, \"_\");\n\n const uploadTo = process.env[`PL_REGISTRY_${regNameUpper}_UPLOAD_URL`];\n if (uploadTo) {\n result.storageURL = uploadTo;\n }\n\n const downloadFrom = process.env[`PL_REGISTRY_${regNameUpper}_DOWNLOAD_URL`];\n if (downloadFrom) {\n result.downloadURL = downloadFrom;\n }\n\n if (result.downloadURL) {\n const u = new URL(result.downloadURL, \"file:/nonexistent\"); // check download URL is valid URL\n if (![\"https:\", \"http:\"].includes(u.protocol)) {\n throw util.CLIError(\n `registry ${result.name} download URL is not valid. Only 'https://' and 'http://' schemes are supported for now`,\n );\n }\n }\n\n return result;\n }\n\n public artifactContentRoot(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n platform: util.PlatformType,\n ): string {\n if (\"root\" in artifact && artifact.root) {\n return path.resolve(this.packageRoot, artifact.root);\n }\n if (\"roots\" in artifact && artifact.roots[platform]) {\n return path.resolve(this.packageRoot, artifact.roots[platform]);\n }\n\n throw util.CLIError(\n `root path of software archive on ${platform} is undefined for binary package`,\n );\n }\n\n public artifactPlatforms(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n ): util.PlatformType[] {\n if (artifact.type === \"docker\") {\n return [util.currentPlatform()];\n }\n\n if (\"root\" in artifact && artifact.root) {\n return [util.currentPlatform()];\n }\n\n if (\"roots\" in artifact) {\n return Object.keys(artifact.roots) as util.PlatformType[];\n }\n\n throw util.CLIError(\n `no platforms are defined as supported for artifact '${artifact.id}' in binary mode ` +\n `(no 'roots' are defined)`,\n );\n }\n\n public artifactArchiveFullName(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n platform: util.PlatformType,\n ): string {\n const group = artifact.type === \"asset\" ? \"assets\" : \"software\";\n const extension = artifact.type === \"asset\" ? \"zip\" : \"tgz\";\n const name = this.artifactName(artifact);\n const version = this.artifactVersion(artifact);\n\n if (artifacts.isCrossPlatform(artifact.type)) {\n return `${group}/${name}/${version}.${extension}`;\n }\n\n const { os, arch } = util.splitPlatform(platform);\n return `${group}/${name}/${version}-${os}-${arch}.${extension}`;\n }\n\n public artifactArchiveAddressPattern(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n ): string {\n const group = artifact.type === \"asset\" ? \"assets\" : \"software\";\n const extension = artifact.type === \"asset\" ? \"zip\" : \"tgz\";\n const name = this.artifactName(artifact);\n const version = this.artifactVersion(artifact);\n\n if (artifacts.isCrossPlatform(artifact.type)) {\n return `${group}/${name}/${version}.${extension}`;\n }\n\n return `${group}/${name}/${version}-{os}-{arch}.${extension}`;\n }\n\n private validateConfig() {\n let hasErrors: boolean = false;\n\n const blockSoftware = this.pkgJson[\"block-software\"];\n\n const as = blockSoftware.artifacts ?? {};\n const entrypoints = blockSoftware.entrypoints ?? {};\n\n for (const [epName, ep] of Object.entries(entrypoints)) {\n if (ep.binary) {\n const artifactID = typeof ep.binary.artifact === \"string\" ? ep.binary.artifact : epName;\n const artifact = this.getArtifact(artifactID, \"any\");\n\n if (!artifact) {\n this.logger.error(\n `entrypoint '${epName}' refers to artifact '${artifactID}' which is not defined in '${util.softwareConfigName}'`,\n );\n hasErrors = true;\n }\n\n if (!this.validateArtifact(artifactID, artifact)) {\n hasErrors = true;\n }\n\n if (!artifacts.isBuildable(artifact.type)) {\n this.logger.error(\n `entrypoint '${epName}' artifact type '${artifact.type}' is not buildable to binary package`,\n );\n hasErrors = true;\n }\n\n if (artifact.type === \"environment\") {\n this.logger.error(\n `entrypoint '${epName}' artifact type '${artifact.type}' cannot be build into software pacakge. Use 'environment' entrypoint`,\n );\n hasErrors = true;\n }\n }\n\n if (ep.environment) {\n const artifactID =\n typeof ep.environment.artifact === \"string\" ? ep.environment.artifact : epName;\n const artifact = this.getArtifact(artifactID, \"any\");\n\n if (!artifact) {\n this.logger.error(\n `entrypoint '${epName}' refers to artifact '${artifactID}' which is not defined in '${util.softwareConfigName}'`,\n );\n hasErrors = true;\n }\n\n if (!this.validateArtifact(artifactID, artifact)) {\n hasErrors = true;\n }\n\n if (artifact.type !== \"environment\") {\n this.logger.error(\n `entrypoint '${epName}' with 'environment' settings should refer to 'environment' artifact type`,\n );\n hasErrors = true;\n }\n }\n\n // TODO: add docker validation here\n // TODO(rfiskov)[MILAB-3163]: Carefully handle docker artifacts, as some (e.g., for Python) may be autogenerated dynamically rather than explicitly defined.\n }\n\n const uniquePackageNames = new Set<string>();\n\n for (const [artifactID, artifact] of Object.entries(as)) {\n if (!artifacts.isBuildable(artifact.type)) {\n continue;\n }\n\n if (!this.validateArtifact(artifactID, artifact)) {\n hasErrors = true;\n }\n\n const name = this.artifactName({ id: artifactID, ...artifact });\n const version = this.artifactVersion(artifact);\n const uniqueName = `${name}-${version}`;\n if (uniquePackageNames.has(uniqueName)) {\n this.logger.error(\n `found two packages with the same name '${name}' and version '${version}'`,\n );\n hasErrors = true;\n }\n\n uniquePackageNames.add(uniqueName);\n }\n\n if (hasErrors) {\n throw util.CLIError(\n `${util.softwareConfigName} has xconfiguration errors in 'block-software' section. See error log messages above for details`,\n );\n }\n }\n\n private validateArtifact(artifactName: string, artifact: artifacts.anyArtifactType): boolean {\n if (artifacts.isBuildable(artifact.type)) {\n // Validate that root is not equal to package root\n const resolvedRoots: string[] = [];\n const aType = artifact.type;\n switch (aType) {\n case \"asset\":\n case \"java\":\n case \"R\":\n case \"python\": {\n resolvedRoots.push(path.resolve(this.packageRoot, artifact.root));\n break;\n }\n case \"docker\": {\n resolvedRoots.push(path.resolve(this.packageRoot, artifact.context));\n break;\n }\n case \"environment\":\n case \"conda\":\n case \"binary\": {\n resolvedRoots.push(\n ...Object.values(artifact.roots).map((root) => path.resolve(this.packageRoot, root)),\n );\n break;\n }\n default:\n util.assertNever(aType);\n }\n\n for (const root of resolvedRoots) {\n if (root === this.packageRoot) {\n this.logger.error(\n `Invalid configuration: '${artifact.type}' artifact '${artifactName}' has 'root' set to the package root, which is not allowed`,\n );\n return false;\n }\n }\n }\n\n return true;\n }\n}\n\nfunction parsePackageJson(data: string): z.ZodSafeParseResult<packageJson> {\n const parsedData: unknown = JSON.parse(data);\n return packageJsonSchema.safeParse(parsedData);\n}\n\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"asset\",\n errMsg: string,\n): artifacts.withType<\"asset\", artifacts.assetType>;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"environment\",\n errMsg: string,\n): artifacts.environmentType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"java\",\n errMsg: string,\n): artifacts.javaType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"python\",\n errMsg: string,\n): artifacts.pythonType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"R\",\n errMsg: string,\n): artifacts.rType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"binary\",\n errMsg: string,\n): artifacts.binaryType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"docker\",\n errMsg: string,\n): artifacts.dockerType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"conda\",\n errMsg: string,\n): artifacts.condaType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: artifacts.artifactType,\n errMsg: string,\n): artifacts.anyArtifactType {\n if (artifact.type === type) {\n return artifact;\n }\n\n if (errMsg) {\n errMsg = `${errMsg}: `;\n }\n\n throw util.CLIError(`${errMsg}wrong artifact type: expected '${type}', got '${artifact.type}'`);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"package-info.js","names":["entrypoints.entrypointListSchema","defaults.BIN_REGISTRY_NAME","defaults.BIN_REGISTRY_DOWNLOAD_URL","util.findPackageRoot","path","util.packageJsonName","fs","util.CLIError","util.formatZodIssues","docker.entrypointName","entrypoints.EnyrypointReferencePattern","pythonDockerOptions","condaDockerOptions","util.currentArch","util.trimPrefix","util.isDevMode","envs.PL_PKG_VERSION","envs.PL_DEV_BINARY_UPLOAD_URL","defaults.DEV_BIN_REGISTRY_NAME","envs.PL_RELEASE_BINARY_UPLOAD_URL","util.currentPlatform","artifacts.isCrossPlatform","util.splitPlatform","util.softwareConfigName","artifacts.isBuildable"],"sources":["../../src/core/package-info.ts"],"sourcesContent":["import * as path from \"node:path\";\nimport * as fs from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport type winston from \"winston\";\nimport { z } from \"zod/v4\";\n\nimport * as defaults from \"../defaults\";\nimport * as util from \"./util\";\nimport * as envs from \"./envs\";\nimport * as artifacts from \"./schemas/artifacts\";\nimport * as entrypoints from \"./schemas/entrypoints\";\nimport { tryResolve } from \"@milaboratories/resolve-helper\";\nimport * as docker from \"./docker\";\nimport { prepareDockerOptions as pythonDockerOptions } from \"./docker-python\";\nimport { prepareDockerOptions as condaDockerOptions } from \"./docker-conda\";\n\nconst storagePresetSchema = z.object({\n downloadURL: z.string().optional(),\n storageURL: z.string().optional(),\n});\ntype storagePreset = z.infer<typeof storagePresetSchema>;\n\nconst binaryRegistryPresetsSchema = z.record(z.string(), storagePresetSchema);\ntype binaryRegistryPresets = z.infer<typeof binaryRegistryPresetsSchema>;\n\nconst packageJsonSchema = z.object({\n name: z.string(),\n version: z.string(),\n private: z.boolean().optional(),\n\n \"block-software\": z.object({\n registries: z\n .object({\n binary: binaryRegistryPresetsSchema.optional(),\n })\n .optional(),\n\n artifacts: artifacts.artifactIndexSchema.optional(),\n entrypoints: entrypoints.entrypointListSchema,\n }),\n});\ntype packageJson = z.infer<typeof packageJsonSchema>;\n\nconst wellKnownRegistries: Record<string, storagePreset> = {\n [defaults.BIN_REGISTRY_NAME]: {\n downloadURL: defaults.BIN_REGISTRY_DOWNLOAD_URL,\n },\n};\n\n/*\n * package.json -> block-software structure example:\n * {\n * \"block-software\": {\n * \"registries\": {\n * \"binary\": {\n * \"default\": { \"uploadURL\": \"s3://<bucket>/<some-prefix>?region=<region-name>\" }\n * }\n * },\n *\n * \"artifacts\": {\n * \"pkg-1\": {\n * \"type\": \"binary\",\n * \"roots\": {\n * \"linux-x64\": \"./linux-x64/src\",\n * \"linux-aarch64\": \"./linux-aarch/src\",\n * \"...and so on...\": \"platform-dependant roots\",\n * }\n * }\n * }\n *\n * \"entrypoints\": {\n * \"script1\": {\n * \"software\": {\n * \"artifact\": \"pkg-1\",\n * \"cmd\": [ \"{pkg}/script1\" ]\n * }\n * }\n * }\n * }\n * }\n */\nexport class PackageInfo {\n public readonly packageRoot: string;\n public readonly packageName: string;\n\n private readonly pkgJson: packageJson;\n private _versionOverride: string | undefined;\n\n /** Backing store for `Core.buildMode` (Core delegates its accessor here); gates content-addressable dev naming. */\n public buildMode: util.BuildMode = \"release\";\n\n constructor(\n private logger: winston.Logger,\n options?: {\n packageRoot?: string;\n pkgJsonData?: string;\n },\n ) {\n this.logger.debug(\"Reading package information...\");\n\n this.packageRoot = options?.packageRoot ?? util.findPackageRoot(logger);\n\n let pkgJsonData: string;\n if (options?.pkgJsonData) {\n pkgJsonData = options.pkgJsonData;\n } else {\n const pkgJsonPath = path.resolve(this.packageRoot, util.packageJsonName);\n\n this.logger.debug(` - loading '${pkgJsonPath}'`);\n if (!fs.existsSync(pkgJsonPath)) {\n this.logger.error(`no '${util.packageJsonName}' file found at '${this.packageRoot}'`);\n throw util.CLIError(\"not a platform software package directory\");\n }\n\n pkgJsonData = fs.readFileSync(pkgJsonPath, \"utf8\");\n }\n\n const result = parsePackageJson(pkgJsonData);\n if (!result.success) {\n throw util.CLIError(`\\n` + util.formatZodIssues(result.error.issues));\n }\n this.pkgJson = result.data;\n this.logger.debug(\" \" + JSON.stringify(this.pkgJson));\n\n this.validateConfig();\n\n this.packageName = this.pkgJson.name;\n\n logger.debug(\" package information loaded successfully.\");\n }\n\n get isPrivate(): boolean {\n return this.pkgJson.private ?? false;\n }\n\n get binaryRegistries(): binaryRegistryPresets {\n return this.pkgJson[\"block-software\"].registries?.binary ?? {};\n }\n\n get entrypoints(): Map<string, entrypoints.Entrypoint> {\n const list = new Map<string, entrypoints.Entrypoint>();\n\n for (const [epName, ep] of Object.entries(this.pkgJson[\"block-software\"].entrypoints)) {\n if (ep.docker) {\n const artifactID = typeof ep.docker.artifact === \"string\" ? ep.docker.artifact : epName;\n const artifact = this.getArtifact(artifactID, \"docker\");\n\n // will mix docker to separate entrypoint\n // render function have to merge\n list.set(docker.entrypointName(epName), {\n type: \"software\",\n name: epName,\n artifact: artifact,\n cmd: ep.docker.cmd ?? [],\n env: ep.docker.envVars ?? [],\n });\n }\n\n if (ep.reference) {\n list.set(epName, {\n type: \"reference\",\n name: epName,\n reference: ep.reference,\n });\n continue;\n }\n\n if (ep.binary || ep.conda) {\n const swOptions: entrypoints.softwareOptionsType = ep.binary ? ep.binary : ep.conda!;\n const artifactOrRef = ep.binary ? ep.binary.artifact : ep.conda!.artifact;\n const artifactID = typeof artifactOrRef === \"string\" ? artifactOrRef : epName;\n const artifact = this.getArtifact(artifactID, \"any\");\n if (artifact.type === \"asset\") {\n throw util.CLIError(`binary entrypoint cannot point to asset artifact: ${epName}`);\n }\n if (artifact.type === \"environment\") {\n throw util.CLIError(`binary entrypoint cannot point to environment artifact: ${epName}`);\n }\n\n list.set(epName, {\n type: \"software\",\n name: epName,\n artifact: artifact,\n cmd: swOptions.cmd,\n env: swOptions.envVars ?? [],\n });\n\n if (!ep.docker) {\n if (artifacts.dockerAutogenTypes.includes(artifact.type)) {\n switch (artifact.type) {\n case \"conda\":\n case \"python\":\n list.set(docker.entrypointName(epName), {\n type: \"software\",\n name: epName,\n artifact: this.generateDockerPackage(artifact),\n cmd: swOptions.cmd,\n env: swOptions.envVars ?? [],\n });\n continue;\n default: {\n throw new Error(`docker autogeneration is not defined for type: ${artifact.type}`);\n }\n }\n }\n }\n }\n\n if (ep.environment) {\n const packageID =\n typeof ep.environment.artifact === \"string\" ? ep.environment.artifact : epName;\n list.set(epName, {\n type: \"environment\",\n name: epName,\n artifact: this.getArtifact(packageID, \"environment\"),\n env: ep.environment.envVars ?? [],\n });\n continue;\n }\n\n if (ep.asset) {\n const packageID = typeof ep.asset === \"string\" ? ep.asset : epName;\n list.set(epName, {\n type: \"asset\",\n name: epName,\n artifact: this.getArtifact(packageID, \"asset\"),\n });\n continue;\n }\n\n if (list.size === 0) {\n throw util.CLIError(\n `entrypoint '${epName}' type is not supported by current platforma package builder`,\n );\n }\n }\n\n return list;\n }\n\n // Get not docker entrypoint if exists.\n // If only docker entrypoint exists, return it.\n public getMainEntrypoint(name: string): entrypoints.Entrypoint {\n const ep = this.entrypoints.get(name);\n if (ep) {\n return ep;\n }\n\n return this.entrypoints.get(docker.entrypointName(name))!;\n }\n\n /**\n * Resolves entrypoint reference to full entrypoint file path and type\n */\n public resolveReference(epName: string, ep: entrypoints.ReferenceEntrypoint): string {\n this.logger.debug(\n `resolving entrypoint '${epName}' reference '${ep.reference}'. packageRoot='${this.packageRoot}'`,\n );\n\n const refInfo = ep.reference.match(entrypoints.EnyrypointReferencePattern)?.groups;\n\n if (!refInfo) {\n this.logger.error(\n `entrypoint reference '${epName}' has incorrect reference format. <full package name>/<path to entrypoint> is expected`,\n );\n throw util.CLIError(`invalid entrypoint '${epName}' reference format`);\n }\n\n const refPath = tryResolve(this.packageRoot, ep.reference);\n if (!refPath) {\n this.logger.error(`entrypoint reference '${epName}' cannot be resolved into file path`);\n throw util.CLIError(`invalid entrypoint '${epName}' reference`);\n }\n\n return refPath;\n }\n\n // Packages are buildable artifacts with entrypoints\n get packages(): Map<string, artifacts.withId<artifacts.anyArtifactType>> {\n const result = new Map<string, artifacts.withId<artifacts.anyArtifactType>>();\n\n for (const ep of this.entrypoints.values()) {\n if (ep.type === \"reference\") {\n // Entrypoint references are not buildable\n continue;\n }\n\n if (!result.has(ep.artifact.id)) {\n result.set(ep.artifact.id, ep.artifact);\n }\n }\n\n return result;\n }\n\n public artifactInfoLocation(\n pkgID: string,\n artifactType: \"docker\",\n platform: util.ArchType,\n ): string;\n public artifactInfoLocation(\n pkgID: string,\n artifactType: \"archive\",\n platform?: util.PlatformType,\n ): string;\n public artifactInfoLocation(\n pkgID: string,\n artifactType: \"archive\" | \"docker\",\n platform?: util.PlatformType | util.ArchType,\n ): string {\n const platformPart = platform ? `_${platform}` : \"\";\n return path.resolve(\n this.packageRoot,\n \"dist\",\n \"artifacts\",\n pkgID,\n `${artifactType}${platformPart}.json`,\n );\n }\n\n private generateDockerPackage(\n artifact: artifacts.withId<artifacts.pythonType | artifacts.condaType>,\n ): artifacts.withId<artifacts.dockerType> {\n switch (artifact.type) {\n case \"python\": {\n const options = pythonDockerOptions(\n this.logger,\n this.packageRoot,\n this.packageName,\n artifact.id,\n artifact,\n );\n\n return {\n id: artifact.id,\n type: \"docker\",\n registry: artifact[\"docker-registry\"],\n ...options,\n };\n }\n case \"conda\": {\n const options = condaDockerOptions(\n this.logger,\n this.packageRoot,\n artifact.id,\n artifact,\n util.currentArch(),\n );\n\n return {\n id: artifact.id,\n type: \"docker\",\n registry: artifact[\"docker-registry\"],\n ...options,\n };\n }\n default: {\n util.assertNever(artifact);\n throw new Error(\"calm down the linter\");\n }\n }\n }\n\n public getArtifact(\n id: string,\n type: \"asset\",\n ): artifacts.withId<artifacts.withType<\"asset\", artifacts.assetType>>;\n public getArtifact(id: string, type: \"environment\"): artifacts.withId<artifacts.environmentType>;\n public getArtifact(id: string, type: \"binary\"): artifacts.withId<artifacts.binaryType>;\n public getArtifact(id: string, type: \"java\"): artifacts.withId<artifacts.javaType>;\n public getArtifact(id: string, type: \"python\"): artifacts.withId<artifacts.pythonType>;\n public getArtifact(id: string, type: \"R\"): artifacts.withId<artifacts.rType>;\n public getArtifact(id: string, type: \"docker\"): artifacts.withId<artifacts.dockerType>;\n public getArtifact(id: string, type: \"conda\"): artifacts.withId<artifacts.condaType>;\n public getArtifact(id: string, type: \"any\"): artifacts.withId<artifacts.anyArtifactType>;\n public getArtifact(\n id: string,\n type: artifacts.artifactType | \"any\",\n ): artifacts.withId<artifacts.anyArtifactType> {\n const artifacts = this.pkgJson[\"block-software\"].artifacts ?? {};\n const entrypoints = this.pkgJson[\"block-software\"].entrypoints;\n\n let artifact: artifacts.anyArtifactType | undefined;\n let errMsg = \"\";\n if (artifacts[id]) {\n artifact = artifacts[id];\n } else {\n const ep = entrypoints[id];\n if (!ep) {\n throw util.CLIError(\n `artifact with id '${id}' not found neither in 'entrypoints', nor in 'artifacts'`,\n );\n }\n\n errMsg = `incorrect artifact reference in entrypoint '${id}'`;\n\n if (ep.asset) {\n artifact =\n typeof ep.asset === \"string\"\n ? artifacts[ep.asset]\n : ({ type: \"asset\", ...ep.asset } as artifacts.assetType);\n } else if (ep.binary && type !== \"docker\") {\n // single entrypoint can keep both binary and docker\n const a = ep.binary.artifact;\n artifact = typeof a === \"string\" ? artifacts[a] : a;\n } else if (ep.conda && type !== \"docker\") {\n // single entrypoint can keep both conda and docker\n const a = ep.conda.artifact;\n artifact =\n typeof a === \"string\" ? artifacts[a] : ({ type: \"conda\", ...a } as artifacts.condaType);\n } else if (ep.environment) {\n const a = ep.environment.artifact;\n artifact =\n typeof a === \"string\"\n ? artifacts[a]\n : ({ type: \"environment\", ...a } as artifacts.environmentType);\n } else if (ep.docker) {\n const a = ep.docker.artifact;\n artifact =\n typeof a === \"string\" ? artifacts[a] : ({ type: \"docker\", ...a } as artifacts.dockerType);\n }\n }\n\n if (!artifact) {\n throw util.CLIError(\n `artifact '${id}' not found neither in 'entrypoints', nor in 'artifacts'`,\n );\n }\n\n switch (type) {\n case \"docker\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"docker\", errMsg),\n };\n }\n case \"asset\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"asset\", errMsg),\n };\n }\n case \"environment\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"environment\", errMsg),\n };\n }\n case \"binary\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"binary\", errMsg),\n };\n }\n case \"java\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"java\", errMsg),\n };\n }\n case \"python\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"python\", errMsg),\n };\n }\n case \"R\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"R\", errMsg),\n };\n }\n case \"conda\": {\n return {\n id: id,\n ...requireArtifactType(artifact, \"conda\", errMsg),\n };\n }\n case \"any\": {\n return {\n id: id,\n ...artifact,\n };\n }\n default: {\n util.assertNever(type);\n throw util.CLIError(`invalid artifact type`); // calm down the linter\n }\n }\n }\n\n public set version(v: string | undefined) {\n this._versionOverride = v;\n }\n\n public artifactName(artifact: artifacts.withId<artifacts.anyArtifactType>): string {\n if (artifact.type !== \"docker\") {\n if (artifact.name) {\n return artifact.name;\n }\n }\n\n return util.trimPrefix(this.pkgJson.name, \"@\") + \"/\" + artifact.id;\n }\n\n public artifactVersion(artifact: artifacts.withId<artifacts.anyArtifactType>): string {\n const base = this.baseArtifactVersion(artifact);\n\n if (util.isDevMode(this.buildMode) && artifact.type !== \"docker\") {\n const hash = this.devContentHash(artifact);\n if (hash) {\n return `${base}-${hash}`;\n }\n }\n\n return base;\n }\n\n private baseArtifactVersion(artifact: artifacts.withId<artifacts.anyArtifactType>): string {\n if (this._versionOverride) {\n return this._versionOverride;\n }\n\n if (process.env[envs.PL_PKG_VERSION]) {\n return process.env[envs.PL_PKG_VERSION];\n }\n\n if (artifact.type !== \"docker\" && artifact.version) {\n return artifact.version;\n }\n\n return this.pkgJson.version;\n }\n\n /**\n * Short content hash of the artifact's content root(s), used as the dev version suffix.\n */\n private readonly devContentHashCache = new Map<string, string | undefined>();\n\n private devContentHash(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n ): string | undefined {\n // Content roots are stable for the lifetime of this builder, so hash each artifact once.\n if (this.devContentHashCache.has(artifact.id)) {\n return this.devContentHashCache.get(artifact.id);\n }\n\n const hash = this.computeDevContentHash(artifact);\n this.devContentHashCache.set(artifact.id, hash);\n return hash;\n }\n\n private computeDevContentHash(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n ): string | undefined {\n const hasher = createHash(\"sha256\");\n let hashedAny = false;\n\n let platforms: util.PlatformType[];\n try {\n // Sorted so the hash is independent of package.json root-key order.\n platforms = this.artifactPlatforms(artifact).toSorted();\n } catch {\n return undefined; // no content roots at all — leave the version without a suffix\n }\n\n for (const platform of platforms) {\n let root: string;\n try {\n root = this.artifactContentRoot(artifact, platform);\n } catch {\n continue; // platform without a defined/present root — skip\n }\n if (!fs.existsSync(root)) {\n continue;\n }\n // Hash the platform name too, so the same files under a different platform yield a different\n // hash.\n hasher.update(platform);\n util.hashDirSync(root, hasher);\n hashedAny = true;\n }\n\n return hashedAny ? hasher.digest(\"hex\").slice(0, 12) : undefined;\n }\n\n public artifactRegistrySettings(artifact: artifacts.anyArtifactType): artifacts.registry {\n if (artifact.type === \"docker\") {\n return {\n name: artifact.registry,\n };\n }\n\n const registry = artifact.registry;\n const registries = this.binaryRegistries;\n\n const result: artifacts.registry = {\n name: \"default\",\n downloadURL: registries.default?.downloadURL,\n storageURL: registries.default?.storageURL,\n };\n\n if (registry) {\n if (typeof registry === \"string\") {\n result.name = registry;\n const regDefault = wellKnownRegistries[result.name];\n result.downloadURL = registries[result.name]?.downloadURL ?? regDefault?.downloadURL;\n result.storageURL = registries[result.name]?.storageURL ?? regDefault?.storageURL;\n } else {\n result.name = registry.name;\n const regDefault = wellKnownRegistries[result.name];\n result.downloadURL =\n registry.downloadURL ?? registries[result.name]?.downloadURL ?? regDefault?.downloadURL;\n result.storageURL =\n registry.storageURL ?? registries[result.name]?.storageURL ?? regDefault?.storageURL;\n }\n }\n\n const regNameUpper = result.name.toUpperCase().replaceAll(/[^A-Z0-9_]/g, \"_\");\n\n const uploadTo = process.env[`PL_REGISTRY_${regNameUpper}_UPLOAD_URL`];\n if (uploadTo) {\n result.storageURL = uploadTo;\n }\n\n const downloadFrom = process.env[`PL_REGISTRY_${regNameUpper}_DOWNLOAD_URL`];\n if (downloadFrom) {\n result.downloadURL = downloadFrom;\n }\n\n // Dev channel: the embedded binary registry is the built-in `midev` uploading to its built-in\n // endpoint, flipping to `dev` and `PL_DEV_BINARY_UPLOAD_URL` when that is set.\n if (util.isDevMode(this.buildMode)) {\n const devUpload = process.env[envs.PL_DEV_BINARY_UPLOAD_URL];\n result.name = devUpload\n ? defaults.DEV_BIN_REGISTRY_NAME_OVERRIDDEN\n : defaults.DEV_BIN_REGISTRY_NAME;\n result.storageURL = devUpload ?? defaults.DEV_BINARY_UPLOAD_TARGET;\n } else {\n const releaseUpload = process.env[envs.PL_RELEASE_BINARY_UPLOAD_URL];\n if (releaseUpload) {\n result.storageURL = releaseUpload;\n }\n }\n\n if (result.downloadURL) {\n const u = new URL(result.downloadURL, \"file:/nonexistent\"); // check download URL is valid URL\n if (![\"https:\", \"http:\"].includes(u.protocol)) {\n throw util.CLIError(\n `registry ${result.name} download URL is not valid. Only 'https://' and 'http://' schemes are supported for now`,\n );\n }\n }\n\n return result;\n }\n\n public artifactContentRoot(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n platform: util.PlatformType,\n ): string {\n if (\"root\" in artifact && artifact.root) {\n return path.resolve(this.packageRoot, artifact.root);\n }\n if (\"roots\" in artifact && artifact.roots[platform]) {\n return path.resolve(this.packageRoot, artifact.roots[platform]);\n }\n\n throw util.CLIError(\n `root path of software archive on ${platform} is undefined for binary package`,\n );\n }\n\n public artifactPlatforms(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n ): util.PlatformType[] {\n if (artifact.type === \"docker\") {\n return [util.currentPlatform()];\n }\n\n if (\"root\" in artifact && artifact.root) {\n return [util.currentPlatform()];\n }\n\n if (\"roots\" in artifact) {\n return Object.keys(artifact.roots) as util.PlatformType[];\n }\n\n throw util.CLIError(\n `no platforms are defined as supported for artifact '${artifact.id}' in binary mode ` +\n `(no 'roots' are defined)`,\n );\n }\n\n public artifactArchiveFullName(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n platform: util.PlatformType,\n ): string {\n const group = artifact.type === \"asset\" ? \"assets\" : \"software\";\n const extension = artifact.type === \"asset\" ? \"zip\" : \"tgz\";\n const name = this.artifactName(artifact);\n const version = this.artifactVersion(artifact);\n\n if (artifacts.isCrossPlatform(artifact.type)) {\n return `${group}/${name}/${version}.${extension}`;\n }\n\n const { os, arch } = util.splitPlatform(platform);\n return `${group}/${name}/${version}-${os}-${arch}.${extension}`;\n }\n\n public artifactArchiveAddressPattern(\n artifact: artifacts.withId<artifacts.anyArtifactType>,\n ): string {\n const group = artifact.type === \"asset\" ? \"assets\" : \"software\";\n const extension = artifact.type === \"asset\" ? \"zip\" : \"tgz\";\n const name = this.artifactName(artifact);\n const version = this.artifactVersion(artifact);\n\n if (artifacts.isCrossPlatform(artifact.type)) {\n return `${group}/${name}/${version}.${extension}`;\n }\n\n return `${group}/${name}/${version}-{os}-{arch}.${extension}`;\n }\n\n private validateConfig() {\n let hasErrors: boolean = false;\n\n const blockSoftware = this.pkgJson[\"block-software\"];\n\n const as = blockSoftware.artifacts ?? {};\n const entrypoints = blockSoftware.entrypoints ?? {};\n\n for (const [epName, ep] of Object.entries(entrypoints)) {\n if (ep.binary) {\n const artifactID = typeof ep.binary.artifact === \"string\" ? ep.binary.artifact : epName;\n const artifact = this.getArtifact(artifactID, \"any\");\n\n if (!artifact) {\n this.logger.error(\n `entrypoint '${epName}' refers to artifact '${artifactID}' which is not defined in '${util.softwareConfigName}'`,\n );\n hasErrors = true;\n }\n\n if (!this.validateArtifact(artifactID, artifact)) {\n hasErrors = true;\n }\n\n if (!artifacts.isBuildable(artifact.type)) {\n this.logger.error(\n `entrypoint '${epName}' artifact type '${artifact.type}' is not buildable to binary package`,\n );\n hasErrors = true;\n }\n\n if (artifact.type === \"environment\") {\n this.logger.error(\n `entrypoint '${epName}' artifact type '${artifact.type}' cannot be build into software pacakge. Use 'environment' entrypoint`,\n );\n hasErrors = true;\n }\n }\n\n if (ep.environment) {\n const artifactID =\n typeof ep.environment.artifact === \"string\" ? ep.environment.artifact : epName;\n const artifact = this.getArtifact(artifactID, \"any\");\n\n if (!artifact) {\n this.logger.error(\n `entrypoint '${epName}' refers to artifact '${artifactID}' which is not defined in '${util.softwareConfigName}'`,\n );\n hasErrors = true;\n }\n\n if (!this.validateArtifact(artifactID, artifact)) {\n hasErrors = true;\n }\n\n if (artifact.type !== \"environment\") {\n this.logger.error(\n `entrypoint '${epName}' with 'environment' settings should refer to 'environment' artifact type`,\n );\n hasErrors = true;\n }\n }\n\n // TODO: add docker validation here\n // TODO(rfiskov)[MILAB-3163]: Carefully handle docker artifacts, as some (e.g., for Python) may be autogenerated dynamically rather than explicitly defined.\n }\n\n const uniquePackageNames = new Set<string>();\n\n for (const [artifactID, artifact] of Object.entries(as)) {\n if (!artifacts.isBuildable(artifact.type)) {\n continue;\n }\n\n if (!this.validateArtifact(artifactID, artifact)) {\n hasErrors = true;\n }\n\n const withId = { id: artifactID, ...artifact };\n const name = this.artifactName(withId);\n const version = this.artifactVersion(withId);\n const uniqueName = `${name}-${version}`;\n if (uniquePackageNames.has(uniqueName)) {\n this.logger.error(\n `found two packages with the same name '${name}' and version '${version}'`,\n );\n hasErrors = true;\n }\n\n uniquePackageNames.add(uniqueName);\n }\n\n if (hasErrors) {\n throw util.CLIError(\n `${util.softwareConfigName} has xconfiguration errors in 'block-software' section. See error log messages above for details`,\n );\n }\n }\n\n private validateArtifact(artifactName: string, artifact: artifacts.anyArtifactType): boolean {\n if (artifacts.isBuildable(artifact.type)) {\n // Validate that root is not equal to package root\n const resolvedRoots: string[] = [];\n const aType = artifact.type;\n switch (aType) {\n case \"asset\":\n case \"java\":\n case \"R\":\n case \"python\": {\n resolvedRoots.push(path.resolve(this.packageRoot, artifact.root));\n break;\n }\n case \"docker\": {\n resolvedRoots.push(path.resolve(this.packageRoot, artifact.context));\n break;\n }\n case \"environment\":\n case \"conda\":\n case \"binary\": {\n resolvedRoots.push(\n ...Object.values(artifact.roots).map((root) => path.resolve(this.packageRoot, root)),\n );\n break;\n }\n default:\n util.assertNever(aType);\n }\n\n for (const root of resolvedRoots) {\n if (root === this.packageRoot) {\n this.logger.error(\n `Invalid configuration: '${artifact.type}' artifact '${artifactName}' has 'root' set to the package root, which is not allowed`,\n );\n return false;\n }\n }\n }\n\n return true;\n }\n}\n\nfunction parsePackageJson(data: string): z.ZodSafeParseResult<packageJson> {\n const parsedData: unknown = JSON.parse(data);\n return packageJsonSchema.safeParse(parsedData);\n}\n\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"asset\",\n errMsg: string,\n): artifacts.withType<\"asset\", artifacts.assetType>;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"environment\",\n errMsg: string,\n): artifacts.environmentType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"java\",\n errMsg: string,\n): artifacts.javaType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"python\",\n errMsg: string,\n): artifacts.pythonType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"R\",\n errMsg: string,\n): artifacts.rType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"binary\",\n errMsg: string,\n): artifacts.binaryType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"docker\",\n errMsg: string,\n): artifacts.dockerType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: \"conda\",\n errMsg: string,\n): artifacts.condaType;\nfunction requireArtifactType(\n artifact: artifacts.anyArtifactType,\n type: artifacts.artifactType,\n errMsg: string,\n): artifacts.anyArtifactType {\n if (artifact.type === type) {\n return artifact;\n }\n\n if (errMsg) {\n errMsg = `${errMsg}: `;\n }\n\n throw util.CLIError(`${errMsg}wrong artifact type: expected '${type}', got '${artifact.type}'`);\n}\n"],"mappings":"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"}
|
package/dist/core/paths.cjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
let node_path = require("node:path");
|
|
3
2
|
let node_url = require("node:url");
|
|
4
3
|
//#region src/core/paths.ts
|
|
@@ -11,5 +10,6 @@ function assets(...p) {
|
|
|
11
10
|
}
|
|
12
11
|
//#endregion
|
|
13
12
|
exports.assets = assets;
|
|
13
|
+
exports.path = path;
|
|
14
14
|
|
|
15
15
|
//# sourceMappingURL=paths.cjs.map
|
package/dist/core/paths.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.cjs","names":["__dirname"],"sources":["../../src/core/paths.ts"],"sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", \"..\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"paths.cjs","names":["__dirname"],"sources":["../../src/core/paths.ts"],"sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", \"..\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n"],"mappings":";;;AAGA,MAAMA,eAAAA,GAAAA,UAAAA,QAAAA,EAAAA,GAAAA,SAAAA,cAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,IAAiD,CAAC;AAExD,SAAgB,KAAK,GAAG,GAAqB;CAC3C,QAAA,GAAA,UAAA,QAAA,CAAeA,aAAW,MAAM,MAAM,GAAG,CAAC;AAC5C;AAEA,SAAgB,OAAO,GAAG,GAAqB;CAC7C,OAAO,KAAK,UAAU,GAAG,CAAC;AAC5B"}
|
package/dist/core/paths.js
CHANGED
package/dist/core/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","names":["path"],"sources":["../../src/core/paths.ts"],"sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", \"..\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n"],"mappings":";;;AAGA,MAAM,YAAY,QAAQ,cAAc,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"paths.js","names":["path"],"sources":["../../src/core/paths.ts"],"sourcesContent":["import { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", \"..\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n"],"mappings":";;;AAGA,MAAM,YAAY,QAAQ,cAAc,OAAO,KAAK,GAAG,CAAC;AAExD,SAAgBA,OAAK,GAAG,GAAqB;CAC3C,OAAO,QAAQ,WAAW,MAAM,MAAM,GAAG,CAAC;AAC5C;AAEA,SAAgB,OAAO,GAAG,GAAqB;CAC7C,OAAOA,OAAK,UAAU,GAAG,CAAC;AAC5B"}
|
package/dist/core/resolver.cjs
CHANGED
|
@@ -2,9 +2,9 @@ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
|
2
2
|
const require_util = require("./util.cjs");
|
|
3
3
|
const require_sw_json = require("./schemas/sw-json.cjs");
|
|
4
4
|
let node_fs = require("node:fs");
|
|
5
|
-
node_fs = require_runtime.__toESM(node_fs);
|
|
5
|
+
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
6
6
|
let node_path = require("node:path");
|
|
7
|
-
node_path = require_runtime.__toESM(node_path);
|
|
7
|
+
node_path = require_runtime.__toESM(node_path, 1);
|
|
8
8
|
//#region src/core/resolver.ts
|
|
9
9
|
const compiledSoftwareSuffix = ".sw.json";
|
|
10
10
|
const compiledAssetSuffix = ".as.json";
|
|
@@ -93,7 +93,12 @@ function resolveRunEnvironment(logger, packageRoot, packageName, envName, requir
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
//#endregion
|
|
96
|
+
exports.compiledAssetSuffix = compiledAssetSuffix;
|
|
97
|
+
exports.compiledSoftwareSuffix = compiledSoftwareSuffix;
|
|
96
98
|
exports.descriptorFilePath = descriptorFilePath;
|
|
99
|
+
exports.readDescriptorFile = readDescriptorFile;
|
|
100
|
+
exports.readSwJsonFile = readSwJsonFile;
|
|
101
|
+
exports.resolveDependency = resolveDependency;
|
|
97
102
|
exports.resolveRunEnvironment = resolveRunEnvironment;
|
|
98
103
|
|
|
99
104
|
//# sourceMappingURL=resolver.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.cjs","names":["path","fs"],"sources":["../../src/core/resolver.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\nimport type winston from \"winston\";\n\nimport * as swJson from \"./schemas/sw-json\";\nimport type * as artifacts from \"./schemas/artifacts\";\nimport type * as entrypoint from \"./schemas/entrypoints\";\nimport * as util from \"./util\";\n\nexport const compiledSoftwareSuffix = \".sw.json\";\nexport const compiledAssetSuffix = \".as.json\";\n\nexport function descriptorFilePath(\n packageRoot: string,\n entrypointType: Extract<entrypoint.EntrypointType, \"software\" | \"asset\">,\n entrypointName?: string,\n): string {\n const typeSuffix = entrypointType === \"software\" ? compiledSoftwareSuffix : compiledAssetSuffix;\n\n if (!entrypointName) {\n return path.resolve(packageRoot, \"dist\", \"tengo\", entrypointType);\n }\n\n return path.resolve(\n packageRoot,\n \"dist\",\n \"tengo\",\n entrypointType,\n `${entrypointName}${typeSuffix}`,\n );\n}\n\n/**\n * Read and parse 'sw.json' descriptor file from given path.\n *\n * @param packageRoot: string - root directory of the package that contains software descriptor\n * @param packageName: string - name of the package from <packageRoot>/package.json\n * @param entrypointName: string - name of entrypoint with software descriptor\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readSwJsonFile(\n packageRoot: string,\n packageName: string,\n entrypointName: string,\n): swJson.swJsonType {\n const filePath = descriptorFilePath(packageRoot, \"software\", entrypointName);\n return readDescriptorFile(packageName, entrypointName, filePath);\n}\n\n/**\n * Read 'sw.json' or 'as.json' descriptor file from given path and provide it along with metadata of where it came from\n *\n * @param packageNameForDescriptor: string - name of the package that contains this descriptor\n * @param entrypointForDescriptor: string - name of entrypoint that contains this descriptor inside given package\n * @param descriptorFilePath: string - path to the descriptor file\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readDescriptorFile(\n packageNameForDescriptor: string,\n entrypointForDescriptor: string,\n descriptorFilePath: string,\n): swJson.swJsonType {\n if (!fs.existsSync(descriptorFilePath)) {\n throw util.CLIError(\n `entrypoint '${entrypointForDescriptor}' not found in '${descriptorFilePath}'`,\n );\n }\n\n const swJsonContent = fs.readFileSync(descriptorFilePath);\n const result = swJson.swJsonSchema.safeParse(JSON.parse(swJsonContent.toString()));\n\n if (!result.success) {\n throw util.CLIError(util.formatZodIssues(result.error.issues));\n }\n\n return {\n id: {\n package: packageNameForDescriptor,\n name: entrypointForDescriptor,\n },\n ...result.data,\n };\n}\n\n/**\n * Resolve package dependency and read software descriptor from it.\n *\n * @param logger: winston.Logger - logger instance\n * @param currentPackageRoot: string - root directory of the current package\n * @param dependencyPackageName: string - name of the dependency to search\n * @param dependencyEntrypointName: string - name of the entrypooint inside dependency package\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function resolveDependency(\n logger: winston.Logger,\n currentPackageRoot: string,\n dependencyPackageName: string,\n dependencyEntrypointName: string,\n): swJson.swJsonType {\n const dependencyPath = util.findInstalledModule(\n logger,\n dependencyPackageName,\n currentPackageRoot,\n );\n return readSwJsonFile(dependencyPath, dependencyPackageName, dependencyEntrypointName);\n}\n\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"java\",\n): swJson.runEnvDependencyJava;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"python\",\n): swJson.runEnvDependencyPython;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"R\",\n): swJson.runEnvDependencyR;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: artifacts.runEnvironmentType,\n): swJson.runEnvDependency {\n const [pkgName, id] = util.rSplit(envName, \":\", 2);\n const swDescriptor =\n pkgName === \"\"\n ? readSwJsonFile(packageRoot, packageName, id)\n : resolveDependency(logger, packageRoot, pkgName, id);\n\n if (!swDescriptor.runEnv) {\n throw util.CLIError(\n `software '${envName}' cannot be used as run environment (no 'runEnv' section in entrypoint descriptor)`,\n );\n }\n\n const runEnv = swDescriptor.runEnv;\n\n if (runEnv.type !== requireType) {\n logger.error(\n `run environment '${envName}' type '${runEnv.type}' differs from declared package type '${requireType}'`,\n );\n throw util.CLIError(\n `incompatible environment: env type '${runEnv.type}' != package type '${requireType}'`,\n );\n }\n\n switch (runEnv.type) {\n case \"python\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"python\",\n [\"python-version\"]: runEnv[\"python-version\"] ?? \"\",\n };\n }\n case \"R\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"R\",\n [\"r-version\"]: runEnv[\"r-version\"] ?? \"\",\n };\n }\n case \"java\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"java\",\n [\"java-version\"]: runEnv[\"java-version\"] ?? \"\",\n };\n }\n default:\n util.assertNever(runEnv.type);\n throw new Error(\n \"renderer logic error: resolveRunEnvironment does not cover all run environment types\",\n ); // calm down the linter\n }\n}\n"],"mappings":";;;;;;;;AASA,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AAEnC,SAAgB,mBACd,aACA,gBACA,gBACQ;CACR,MAAM,aAAa,mBAAmB,aAAa,yBAAyB;
|
|
1
|
+
{"version":3,"file":"resolver.cjs","names":["path","fs"],"sources":["../../src/core/resolver.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\nimport type winston from \"winston\";\n\nimport * as swJson from \"./schemas/sw-json\";\nimport type * as artifacts from \"./schemas/artifacts\";\nimport type * as entrypoint from \"./schemas/entrypoints\";\nimport * as util from \"./util\";\n\nexport const compiledSoftwareSuffix = \".sw.json\";\nexport const compiledAssetSuffix = \".as.json\";\n\nexport function descriptorFilePath(\n packageRoot: string,\n entrypointType: Extract<entrypoint.EntrypointType, \"software\" | \"asset\">,\n entrypointName?: string,\n): string {\n const typeSuffix = entrypointType === \"software\" ? compiledSoftwareSuffix : compiledAssetSuffix;\n\n if (!entrypointName) {\n return path.resolve(packageRoot, \"dist\", \"tengo\", entrypointType);\n }\n\n return path.resolve(\n packageRoot,\n \"dist\",\n \"tengo\",\n entrypointType,\n `${entrypointName}${typeSuffix}`,\n );\n}\n\n/**\n * Read and parse 'sw.json' descriptor file from given path.\n *\n * @param packageRoot: string - root directory of the package that contains software descriptor\n * @param packageName: string - name of the package from <packageRoot>/package.json\n * @param entrypointName: string - name of entrypoint with software descriptor\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readSwJsonFile(\n packageRoot: string,\n packageName: string,\n entrypointName: string,\n): swJson.swJsonType {\n const filePath = descriptorFilePath(packageRoot, \"software\", entrypointName);\n return readDescriptorFile(packageName, entrypointName, filePath);\n}\n\n/**\n * Read 'sw.json' or 'as.json' descriptor file from given path and provide it along with metadata of where it came from\n *\n * @param packageNameForDescriptor: string - name of the package that contains this descriptor\n * @param entrypointForDescriptor: string - name of entrypoint that contains this descriptor inside given package\n * @param descriptorFilePath: string - path to the descriptor file\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readDescriptorFile(\n packageNameForDescriptor: string,\n entrypointForDescriptor: string,\n descriptorFilePath: string,\n): swJson.swJsonType {\n if (!fs.existsSync(descriptorFilePath)) {\n throw util.CLIError(\n `entrypoint '${entrypointForDescriptor}' not found in '${descriptorFilePath}'`,\n );\n }\n\n const swJsonContent = fs.readFileSync(descriptorFilePath);\n const result = swJson.swJsonSchema.safeParse(JSON.parse(swJsonContent.toString()));\n\n if (!result.success) {\n throw util.CLIError(util.formatZodIssues(result.error.issues));\n }\n\n return {\n id: {\n package: packageNameForDescriptor,\n name: entrypointForDescriptor,\n },\n ...result.data,\n };\n}\n\n/**\n * Resolve package dependency and read software descriptor from it.\n *\n * @param logger: winston.Logger - logger instance\n * @param currentPackageRoot: string - root directory of the current package\n * @param dependencyPackageName: string - name of the dependency to search\n * @param dependencyEntrypointName: string - name of the entrypooint inside dependency package\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function resolveDependency(\n logger: winston.Logger,\n currentPackageRoot: string,\n dependencyPackageName: string,\n dependencyEntrypointName: string,\n): swJson.swJsonType {\n const dependencyPath = util.findInstalledModule(\n logger,\n dependencyPackageName,\n currentPackageRoot,\n );\n return readSwJsonFile(dependencyPath, dependencyPackageName, dependencyEntrypointName);\n}\n\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"java\",\n): swJson.runEnvDependencyJava;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"python\",\n): swJson.runEnvDependencyPython;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"R\",\n): swJson.runEnvDependencyR;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: artifacts.runEnvironmentType,\n): swJson.runEnvDependency {\n const [pkgName, id] = util.rSplit(envName, \":\", 2);\n const swDescriptor =\n pkgName === \"\"\n ? readSwJsonFile(packageRoot, packageName, id)\n : resolveDependency(logger, packageRoot, pkgName, id);\n\n if (!swDescriptor.runEnv) {\n throw util.CLIError(\n `software '${envName}' cannot be used as run environment (no 'runEnv' section in entrypoint descriptor)`,\n );\n }\n\n const runEnv = swDescriptor.runEnv;\n\n if (runEnv.type !== requireType) {\n logger.error(\n `run environment '${envName}' type '${runEnv.type}' differs from declared package type '${requireType}'`,\n );\n throw util.CLIError(\n `incompatible environment: env type '${runEnv.type}' != package type '${requireType}'`,\n );\n }\n\n switch (runEnv.type) {\n case \"python\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"python\",\n [\"python-version\"]: runEnv[\"python-version\"] ?? \"\",\n };\n }\n case \"R\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"R\",\n [\"r-version\"]: runEnv[\"r-version\"] ?? \"\",\n };\n }\n case \"java\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"java\",\n [\"java-version\"]: runEnv[\"java-version\"] ?? \"\",\n };\n }\n default:\n util.assertNever(runEnv.type);\n throw new Error(\n \"renderer logic error: resolveRunEnvironment does not cover all run environment types\",\n ); // calm down the linter\n }\n}\n"],"mappings":";;;;;;;;AASA,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AAEnC,SAAgB,mBACd,aACA,gBACA,gBACQ;CACR,MAAM,aAAa,mBAAmB,aAAa,yBAAyB;CAE5E,IAAI,CAAC,gBACH,OAAOA,UAAAA,QAAK,QAAQ,aAAa,QAAQ,SAAS,cAAc;CAGlE,OAAOA,UAAAA,QAAK,QACV,aACA,QACA,SACA,gBACA,GAAG,iBAAiB,YACtB;AACF;;;;;;;;;;AAWA,SAAgB,eACd,aACA,aACA,gBACmB;CAEnB,OAAO,mBAAmB,aAAa,gBADtB,mBAAmB,aAAa,YAAY,cACC,CAAC;AACjE;;;;;;;;;AAUA,SAAgB,mBACd,0BACA,yBACA,oBACmB;CACnB,IAAI,CAACC,QAAAA,QAAG,WAAW,kBAAkB,GACnC,MAAA,aAAA,SACE,eAAe,wBAAwB,kBAAkB,mBAAmB,EAC9E;CAGF,MAAM,gBAAgBA,QAAAA,QAAG,aAAa,kBAAkB;CACxD,MAAM,SAAA,gBAAA,aAA6B,UAAU,KAAK,MAAM,cAAc,SAAS,CAAC,CAAC;CAEjF,IAAI,CAAC,OAAO,SACV,MAAA,aAAA,SAAA,aAAA,gBAAyC,OAAO,MAAM,MAAM,CAAC;CAG/D,OAAO;EACL,IAAI;GACF,SAAS;GACT,MAAM;EACR;EACA,GAAG,OAAO;CACZ;AACF;;;;;;;;;;;AAYA,SAAgB,kBACd,QACA,oBACA,uBACA,0BACmB;CAMnB,OAAO,eAAA,aAAA,oBAJL,QACA,uBACA,kBAEiC,GAAG,uBAAuB,wBAAwB;AACvF;AAuBA,SAAgB,sBACd,QACA,aACA,aACA,SACA,aACyB;CACzB,MAAM,CAAC,SAAS,MAAA,aAAA,OAAkB,SAAS,KAAK,CAAC;CACjD,MAAM,eACJ,YAAY,KACR,eAAe,aAAa,aAAa,EAAE,IAC3C,kBAAkB,QAAQ,aAAa,SAAS,EAAE;CAExD,IAAI,CAAC,aAAa,QAChB,MAAA,aAAA,SACE,aAAa,QAAQ,mFACvB;CAGF,MAAM,SAAS,aAAa;CAE5B,IAAI,OAAO,SAAS,aAAa;EAC/B,OAAO,MACL,oBAAoB,QAAQ,UAAU,OAAO,KAAK,wCAAwC,YAAY,EACxG;EACA,MAAA,aAAA,SACE,uCAAuC,OAAO,KAAK,qBAAqB,YAAY,EACtF;CACF;CAEA,QAAQ,OAAO,MAAf;EACE,KAAK,UACH,OAAO;GACL,MAAM;GACN,GAAG;GAEH,MAAM;IACL,mBAAmB,OAAO,qBAAqB;EAClD;EAEF,KAAK,KACH,OAAO;GACL,MAAM;GACN,GAAG;GAEH,MAAM;IACL,cAAc,OAAO,gBAAgB;EACxC;EAEF,KAAK,QACH,OAAO;GACL,MAAM;GACN,GAAG;GAEH,MAAM;IACL,iBAAiB,OAAO,mBAAmB;EAC9C;EAEF;GACE,aAAA,YAAiB,OAAO,IAAI;GAC5B,MAAM,IAAI,MACR,sFACF;CACJ;AACF"}
|
package/dist/core/resolver.js
CHANGED
|
@@ -90,6 +90,6 @@ function resolveRunEnvironment(logger, packageRoot, packageName, envName, requir
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
//#endregion
|
|
93
|
-
export { descriptorFilePath, resolveRunEnvironment };
|
|
93
|
+
export { compiledAssetSuffix, compiledSoftwareSuffix, descriptorFilePath, readDescriptorFile, readSwJsonFile, resolveDependency, resolveRunEnvironment };
|
|
94
94
|
|
|
95
95
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","names":["util.CLIError","util.formatZodIssues","util.findInstalledModule","util.rSplit"],"sources":["../../src/core/resolver.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\nimport type winston from \"winston\";\n\nimport * as swJson from \"./schemas/sw-json\";\nimport type * as artifacts from \"./schemas/artifacts\";\nimport type * as entrypoint from \"./schemas/entrypoints\";\nimport * as util from \"./util\";\n\nexport const compiledSoftwareSuffix = \".sw.json\";\nexport const compiledAssetSuffix = \".as.json\";\n\nexport function descriptorFilePath(\n packageRoot: string,\n entrypointType: Extract<entrypoint.EntrypointType, \"software\" | \"asset\">,\n entrypointName?: string,\n): string {\n const typeSuffix = entrypointType === \"software\" ? compiledSoftwareSuffix : compiledAssetSuffix;\n\n if (!entrypointName) {\n return path.resolve(packageRoot, \"dist\", \"tengo\", entrypointType);\n }\n\n return path.resolve(\n packageRoot,\n \"dist\",\n \"tengo\",\n entrypointType,\n `${entrypointName}${typeSuffix}`,\n );\n}\n\n/**\n * Read and parse 'sw.json' descriptor file from given path.\n *\n * @param packageRoot: string - root directory of the package that contains software descriptor\n * @param packageName: string - name of the package from <packageRoot>/package.json\n * @param entrypointName: string - name of entrypoint with software descriptor\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readSwJsonFile(\n packageRoot: string,\n packageName: string,\n entrypointName: string,\n): swJson.swJsonType {\n const filePath = descriptorFilePath(packageRoot, \"software\", entrypointName);\n return readDescriptorFile(packageName, entrypointName, filePath);\n}\n\n/**\n * Read 'sw.json' or 'as.json' descriptor file from given path and provide it along with metadata of where it came from\n *\n * @param packageNameForDescriptor: string - name of the package that contains this descriptor\n * @param entrypointForDescriptor: string - name of entrypoint that contains this descriptor inside given package\n * @param descriptorFilePath: string - path to the descriptor file\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readDescriptorFile(\n packageNameForDescriptor: string,\n entrypointForDescriptor: string,\n descriptorFilePath: string,\n): swJson.swJsonType {\n if (!fs.existsSync(descriptorFilePath)) {\n throw util.CLIError(\n `entrypoint '${entrypointForDescriptor}' not found in '${descriptorFilePath}'`,\n );\n }\n\n const swJsonContent = fs.readFileSync(descriptorFilePath);\n const result = swJson.swJsonSchema.safeParse(JSON.parse(swJsonContent.toString()));\n\n if (!result.success) {\n throw util.CLIError(util.formatZodIssues(result.error.issues));\n }\n\n return {\n id: {\n package: packageNameForDescriptor,\n name: entrypointForDescriptor,\n },\n ...result.data,\n };\n}\n\n/**\n * Resolve package dependency and read software descriptor from it.\n *\n * @param logger: winston.Logger - logger instance\n * @param currentPackageRoot: string - root directory of the current package\n * @param dependencyPackageName: string - name of the dependency to search\n * @param dependencyEntrypointName: string - name of the entrypooint inside dependency package\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function resolveDependency(\n logger: winston.Logger,\n currentPackageRoot: string,\n dependencyPackageName: string,\n dependencyEntrypointName: string,\n): swJson.swJsonType {\n const dependencyPath = util.findInstalledModule(\n logger,\n dependencyPackageName,\n currentPackageRoot,\n );\n return readSwJsonFile(dependencyPath, dependencyPackageName, dependencyEntrypointName);\n}\n\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"java\",\n): swJson.runEnvDependencyJava;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"python\",\n): swJson.runEnvDependencyPython;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"R\",\n): swJson.runEnvDependencyR;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: artifacts.runEnvironmentType,\n): swJson.runEnvDependency {\n const [pkgName, id] = util.rSplit(envName, \":\", 2);\n const swDescriptor =\n pkgName === \"\"\n ? readSwJsonFile(packageRoot, packageName, id)\n : resolveDependency(logger, packageRoot, pkgName, id);\n\n if (!swDescriptor.runEnv) {\n throw util.CLIError(\n `software '${envName}' cannot be used as run environment (no 'runEnv' section in entrypoint descriptor)`,\n );\n }\n\n const runEnv = swDescriptor.runEnv;\n\n if (runEnv.type !== requireType) {\n logger.error(\n `run environment '${envName}' type '${runEnv.type}' differs from declared package type '${requireType}'`,\n );\n throw util.CLIError(\n `incompatible environment: env type '${runEnv.type}' != package type '${requireType}'`,\n );\n }\n\n switch (runEnv.type) {\n case \"python\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"python\",\n [\"python-version\"]: runEnv[\"python-version\"] ?? \"\",\n };\n }\n case \"R\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"R\",\n [\"r-version\"]: runEnv[\"r-version\"] ?? \"\",\n };\n }\n case \"java\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"java\",\n [\"java-version\"]: runEnv[\"java-version\"] ?? \"\",\n };\n }\n default:\n util.assertNever(runEnv.type);\n throw new Error(\n \"renderer logic error: resolveRunEnvironment does not cover all run environment types\",\n ); // calm down the linter\n }\n}\n"],"mappings":";;;;;AASA,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AAEnC,SAAgB,mBACd,aACA,gBACA,gBACQ;CACR,MAAM,aAAa,mBAAmB,aAAa,yBAAyB;
|
|
1
|
+
{"version":3,"file":"resolver.js","names":["util.CLIError","util.formatZodIssues","util.findInstalledModule","util.rSplit"],"sources":["../../src/core/resolver.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\nimport type winston from \"winston\";\n\nimport * as swJson from \"./schemas/sw-json\";\nimport type * as artifacts from \"./schemas/artifacts\";\nimport type * as entrypoint from \"./schemas/entrypoints\";\nimport * as util from \"./util\";\n\nexport const compiledSoftwareSuffix = \".sw.json\";\nexport const compiledAssetSuffix = \".as.json\";\n\nexport function descriptorFilePath(\n packageRoot: string,\n entrypointType: Extract<entrypoint.EntrypointType, \"software\" | \"asset\">,\n entrypointName?: string,\n): string {\n const typeSuffix = entrypointType === \"software\" ? compiledSoftwareSuffix : compiledAssetSuffix;\n\n if (!entrypointName) {\n return path.resolve(packageRoot, \"dist\", \"tengo\", entrypointType);\n }\n\n return path.resolve(\n packageRoot,\n \"dist\",\n \"tengo\",\n entrypointType,\n `${entrypointName}${typeSuffix}`,\n );\n}\n\n/**\n * Read and parse 'sw.json' descriptor file from given path.\n *\n * @param packageRoot: string - root directory of the package that contains software descriptor\n * @param packageName: string - name of the package from <packageRoot>/package.json\n * @param entrypointName: string - name of entrypoint with software descriptor\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readSwJsonFile(\n packageRoot: string,\n packageName: string,\n entrypointName: string,\n): swJson.swJsonType {\n const filePath = descriptorFilePath(packageRoot, \"software\", entrypointName);\n return readDescriptorFile(packageName, entrypointName, filePath);\n}\n\n/**\n * Read 'sw.json' or 'as.json' descriptor file from given path and provide it along with metadata of where it came from\n *\n * @param packageNameForDescriptor: string - name of the package that contains this descriptor\n * @param entrypointForDescriptor: string - name of entrypoint that contains this descriptor inside given package\n * @param descriptorFilePath: string - path to the descriptor file\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function readDescriptorFile(\n packageNameForDescriptor: string,\n entrypointForDescriptor: string,\n descriptorFilePath: string,\n): swJson.swJsonType {\n if (!fs.existsSync(descriptorFilePath)) {\n throw util.CLIError(\n `entrypoint '${entrypointForDescriptor}' not found in '${descriptorFilePath}'`,\n );\n }\n\n const swJsonContent = fs.readFileSync(descriptorFilePath);\n const result = swJson.swJsonSchema.safeParse(JSON.parse(swJsonContent.toString()));\n\n if (!result.success) {\n throw util.CLIError(util.formatZodIssues(result.error.issues));\n }\n\n return {\n id: {\n package: packageNameForDescriptor,\n name: entrypointForDescriptor,\n },\n ...result.data,\n };\n}\n\n/**\n * Resolve package dependency and read software descriptor from it.\n *\n * @param logger: winston.Logger - logger instance\n * @param currentPackageRoot: string - root directory of the current package\n * @param dependencyPackageName: string - name of the dependency to search\n * @param dependencyEntrypointName: string - name of the entrypooint inside dependency package\n *\n * @returns swJson.entrypoint - parsed descriptor with meta information of where it came from\n */\nexport function resolveDependency(\n logger: winston.Logger,\n currentPackageRoot: string,\n dependencyPackageName: string,\n dependencyEntrypointName: string,\n): swJson.swJsonType {\n const dependencyPath = util.findInstalledModule(\n logger,\n dependencyPackageName,\n currentPackageRoot,\n );\n return readSwJsonFile(dependencyPath, dependencyPackageName, dependencyEntrypointName);\n}\n\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"java\",\n): swJson.runEnvDependencyJava;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"python\",\n): swJson.runEnvDependencyPython;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: \"R\",\n): swJson.runEnvDependencyR;\nexport function resolveRunEnvironment(\n logger: winston.Logger,\n packageRoot: string,\n packageName: string,\n envName: string,\n requireType: artifacts.runEnvironmentType,\n): swJson.runEnvDependency {\n const [pkgName, id] = util.rSplit(envName, \":\", 2);\n const swDescriptor =\n pkgName === \"\"\n ? readSwJsonFile(packageRoot, packageName, id)\n : resolveDependency(logger, packageRoot, pkgName, id);\n\n if (!swDescriptor.runEnv) {\n throw util.CLIError(\n `software '${envName}' cannot be used as run environment (no 'runEnv' section in entrypoint descriptor)`,\n );\n }\n\n const runEnv = swDescriptor.runEnv;\n\n if (runEnv.type !== requireType) {\n logger.error(\n `run environment '${envName}' type '${runEnv.type}' differs from declared package type '${requireType}'`,\n );\n throw util.CLIError(\n `incompatible environment: env type '${runEnv.type}' != package type '${requireType}'`,\n );\n }\n\n switch (runEnv.type) {\n case \"python\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"python\",\n [\"python-version\"]: runEnv[\"python-version\"] ?? \"\",\n };\n }\n case \"R\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"R\",\n [\"r-version\"]: runEnv[\"r-version\"] ?? \"\",\n };\n }\n case \"java\": {\n return {\n name: envName,\n ...runEnv,\n\n type: \"java\",\n [\"java-version\"]: runEnv[\"java-version\"] ?? \"\",\n };\n }\n default:\n util.assertNever(runEnv.type);\n throw new Error(\n \"renderer logic error: resolveRunEnvironment does not cover all run environment types\",\n ); // calm down the linter\n }\n}\n"],"mappings":";;;;;AASA,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AAEnC,SAAgB,mBACd,aACA,gBACA,gBACQ;CACR,MAAM,aAAa,mBAAmB,aAAa,yBAAyB;CAE5E,IAAI,CAAC,gBACH,OAAO,KAAK,QAAQ,aAAa,QAAQ,SAAS,cAAc;CAGlE,OAAO,KAAK,QACV,aACA,QACA,SACA,gBACA,GAAG,iBAAiB,YACtB;AACF;;;;;;;;;;AAWA,SAAgB,eACd,aACA,aACA,gBACmB;CAEnB,OAAO,mBAAmB,aAAa,gBADtB,mBAAmB,aAAa,YAAY,cACC,CAAC;AACjE;;;;;;;;;AAUA,SAAgB,mBACd,0BACA,yBACA,oBACmB;CACnB,IAAI,CAAC,GAAG,WAAW,kBAAkB,GACnC,MAAMA,SACJ,eAAe,wBAAwB,kBAAkB,mBAAmB,EAC9E;CAGF,MAAM,gBAAgB,GAAG,aAAa,kBAAkB;CACxD,MAAM,SAAA,aAA6B,UAAU,KAAK,MAAM,cAAc,SAAS,CAAC,CAAC;CAEjF,IAAI,CAAC,OAAO,SACV,MAAMA,SAAcC,gBAAqB,OAAO,MAAM,MAAM,CAAC;CAG/D,OAAO;EACL,IAAI;GACF,SAAS;GACT,MAAM;EACR;EACA,GAAG,OAAO;CACZ;AACF;;;;;;;;;;;AAYA,SAAgB,kBACd,QACA,oBACA,uBACA,0BACmB;CAMnB,OAAO,eALgBC,oBACrB,QACA,uBACA,kBAEiC,GAAG,uBAAuB,wBAAwB;AACvF;AAuBA,SAAgB,sBACd,QACA,aACA,aACA,SACA,aACyB;CACzB,MAAM,CAAC,SAAS,MAAMC,OAAY,SAAS,KAAK,CAAC;CACjD,MAAM,eACJ,YAAY,KACR,eAAe,aAAa,aAAa,EAAE,IAC3C,kBAAkB,QAAQ,aAAa,SAAS,EAAE;CAExD,IAAI,CAAC,aAAa,QAChB,MAAMH,SACJ,aAAa,QAAQ,mFACvB;CAGF,MAAM,SAAS,aAAa;CAE5B,IAAI,OAAO,SAAS,aAAa;EAC/B,OAAO,MACL,oBAAoB,QAAQ,UAAU,OAAO,KAAK,wCAAwC,YAAY,EACxG;EACA,MAAMA,SACJ,uCAAuC,OAAO,KAAK,qBAAqB,YAAY,EACtF;CACF;CAEA,QAAQ,OAAO,MAAf;EACE,KAAK,UACH,OAAO;GACL,MAAM;GACN,GAAG;GAEH,MAAM;IACL,mBAAmB,OAAO,qBAAqB;EAClD;EAEF,KAAK,KACH,OAAO;GACL,MAAM;GACN,GAAG;GAEH,MAAM;IACL,cAAc,OAAO,gBAAgB;EACxC;EAEF,KAAK,QACH,OAAO;GACL,MAAM;GACN,GAAG;GAEH,MAAM;IACL,iBAAiB,OAAO,mBAAmB;EAC9C;EAEF;GACE,YAAiB,OAAO,IAAI;GAC5B,MAAM,IAAI,MACR,sFACF;CACJ;AACF"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_defaults = require("../../defaults.cjs");
|
|
3
2
|
const require_util = require("../util.cjs");
|
|
4
3
|
let zod_v4 = require("zod/v4");
|
|
@@ -118,11 +117,15 @@ const anyArtifactSchema = zod_v4.z.discriminatedUnion("type", [
|
|
|
118
117
|
]);
|
|
119
118
|
const artifactIndexSchema = zod_v4.z.record(zod_v4.z.string(), anyArtifactSchema);
|
|
120
119
|
//#endregion
|
|
120
|
+
exports.anyArtifactSchema = anyArtifactSchema;
|
|
121
121
|
exports.archiveArtifactTypes = archiveArtifactTypes;
|
|
122
|
+
exports.artifactIDSchema = artifactIDSchema;
|
|
122
123
|
exports.artifactIndexSchema = artifactIndexSchema;
|
|
124
|
+
exports.artifactTypes = artifactTypes;
|
|
123
125
|
exports.assetSchema = assetSchema;
|
|
124
126
|
exports.binarySchema = binarySchema;
|
|
125
127
|
exports.condaSchema = condaSchema;
|
|
128
|
+
exports.crossplatformTypes = crossplatformTypes;
|
|
126
129
|
exports.dockerAutogenTypes = dockerAutogenTypes;
|
|
127
130
|
exports.dockerSchema = dockerSchema;
|
|
128
131
|
exports.environmentSchema = environmentSchema;
|
|
@@ -130,7 +133,10 @@ exports.isBuildable = isBuildable;
|
|
|
130
133
|
exports.isCrossPlatform = isCrossPlatform;
|
|
131
134
|
exports.javaSchema = javaSchema;
|
|
132
135
|
exports.pythonSchema = pythonSchema;
|
|
136
|
+
exports.pythonToolsetSchema = pythonToolsetSchema;
|
|
133
137
|
exports.rSchema = rSchema;
|
|
138
|
+
exports.registryOrRef = registryOrRef;
|
|
139
|
+
exports.registrySchema = registrySchema;
|
|
134
140
|
exports.runEnvironmentTypes = runEnvironmentTypes;
|
|
135
141
|
|
|
136
142
|
//# sourceMappingURL=artifacts.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.cjs","names":["z"],"sources":["../../../src/core/schemas/artifacts.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport * as defaults from \"../../defaults\";\nimport * as util from \"../util\";\n\n// All known artifact types\nexport const artifactTypes = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"docker\",\n \"conda\",\n] as const;\nexport type artifactType = (typeof artifactTypes)[number];\n\n// TODO: change these to type definitions, not arrays. This will simplify type narrowing logic throughout the code.\nexport const archiveArtifactTypes: artifactType[] = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"conda\",\n] as const;\nexport const crossplatformTypes: artifactType[] = [\"asset\", \"java\", \"python\", \"R\"] as const;\nexport const dockerAutogenTypes: artifactType[] = [\"python\", \"conda\"] as const;\nexport const dockerArchitectures: util.ArchType[] = [\"x64\"] as const;\n\nexport function isBuildable(aType: artifactType): boolean {\n // All known artifact types are buildable. No exceptions so far.\n return artifactTypes.includes(aType);\n}\n\nexport function isCrossPlatform(aType: artifactType): boolean {\n return crossplatformTypes.includes(aType);\n}\n\nexport const runEnvironmentTypes = [\"java\", \"python\", \"R\"] as const;\nexport type runEnvironmentType = (typeof runEnvironmentTypes)[number];\n\nexport const pythonToolsets = [\"pip\"] as const;\nexport type pythonToolsetName = (typeof pythonToolsets)[number];\n\nexport const registrySchema = z.strictObject({\n name: z.string(),\n downloadURL: z.string().optional(),\n storageURL: z.string().optional(),\n});\nexport type registry = z.infer<typeof registrySchema>;\n\nexport const registryOrRef = z.union([z.string(), registrySchema]);\n\n// common fields for all buildable artifacts\n// TODO: create new type for binary packages\nconst archiveRulesSchema = z.object({\n registry: registryOrRef.default({\n name: defaults.BIN_REGISTRY_NAME,\n downloadURL: defaults.BIN_REGISTRY_DOWNLOAD_URL,\n }),\n\n name: z.string().optional(),\n version: z.string().optional(),\n\n root: z.string(\"package archive content directory is required\"),\n roots: z\n .partialRecord(\n z.enum(\n util.AllPlatforms as [\n (typeof util.AllPlatforms)[number],\n ...(typeof util.AllPlatforms)[number][],\n ],\n ),\n z.string(\"path to package archive content directory cannot be empty\").min(1),\n {\n error: (iss) => {\n if (iss.input === undefined) {\n return (\n \"list of supported platforms is required: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \")\n );\n }\n return null;\n },\n },\n )\n .refine((val) => Object.keys(val).length > 0, {\n message:\n \"specify at least one platform supported by this software in format: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \"),\n })\n .describe(\n \"please, provide settings only for supported platforms: \" + util.AllPlatforms.join(\", \"),\n ),\n});\nexport type archiveRules = z.infer<typeof archiveRulesSchema>;\n\nconst dockerRulesSchema = z.object({\n [\"docker-registry\"]: z\n .string(\n \"python software is also automatically shipped as docker image. Docker registry cannot be empty\",\n )\n .min(1)\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry to use for pushing autogenerated docker image\"),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe(\n '{pkg} placeholder value to be used in \"cmd\" and arguments (for docker autogeneration)',\n ),\n});\n\nexport const artifactIDSchema = z\n .string()\n .regex(/:/, {\n message:\n \"tengo artifact ID must have <npmPackage>:<artifactName> format, e.g @milaboratory/runenv-java-corretto:21.2.0.4.1\",\n })\n .describe(\"ID of tengo build artifact\");\n\nexport type artifactIDString = z.infer<typeof artifactIDSchema>;\n\nexport const assetSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend({ type: z.literal(\"asset\") })\n .strict();\nexport type assetType = z.infer<typeof assetSchema>;\n\nexport const environmentSchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"environment\"),\n\n runtime: z\n .enum(runEnvironmentTypes)\n .describe(\"type of runtime this run environment provides: 'java', 'python' and so on\"),\n\n [\"r-version\"]: z.string().optional(),\n [\"python-version\"]: z.string().optional(),\n [\"java-version\"]: z.string().optional(),\n\n envVars: z\n .array(\n z\n .string()\n .regex(\n /=/,\n \"environment variable should be specified in format: <var-name>=<var-value>, i.e.: MY_ENV=value\",\n ),\n )\n .optional(),\n\n binDir: z\n .string()\n .describe(\n \"path to 'bin' directory to be added to PATH when software uses this run environment\",\n ),\n});\n\nexport type environmentType = z.infer<typeof environmentSchema>;\n\nexport const binarySchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"binary\"),\n});\nexport type binaryType = z.infer<typeof binarySchema>;\n\nexport const javaSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"java\"),\n environment: artifactIDSchema,\n});\nexport type javaType = z.infer<typeof javaSchema>;\n\nconst pipToolsetSchema = z.strictObject({\n toolset: z.literal(\"pip\"),\n requirements: z.string().describe(\"path to requrements.txt inside package archive\"),\n});\n\nexport const pythonToolsetSchema = z.discriminatedUnion(\"toolset\", [pipToolsetSchema]);\n\nexport const pythonSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"python\"),\n\n environment: artifactIDSchema,\n dependencies: pythonToolsetSchema.optional(),\n });\nexport type pythonType = z.infer<typeof pythonSchema>;\n\nexport const rSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"R\"),\n environment: artifactIDSchema,\n});\nexport type rType = z.infer<typeof rSchema>;\n\nexport const condaSchema = archiveRulesSchema\n .omit({ root: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"conda\"),\n\n [\"micromamba-version\"]: z\n .string()\n .default(defaults.CONDA_MICROMAMBA_VERSION)\n .describe(\"version of micromamba to be used to operate with conda environments\"),\n [\"conda-root-dir\"]: z\n .string()\n .default(defaults.CONDA_DATA_LOCATION)\n .describe(\"root directory of conda environment inside package root\"),\n\n spec: z\n .string()\n .default(defaults.CONDA_SOURCE_ENV_SPEC_FILE)\n .describe(`path to conda environment yaml specification relative to package.json`),\n });\nexport type condaType = z.infer<typeof condaSchema>;\n\nexport const dockerSchema = z.object({\n type: z.literal(\"docker\"),\n\n registry: z\n .string()\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry+repository URL to use for pulling this image\"),\n\n // build from custom Dockerfile\n context: z\n .string()\n .refine((val) => val !== \"./\" && val !== \".\", {\n message:\n 'Context cannot be \"./\" or \".\" - use absolute path or relative path without \"./\" prefix',\n })\n .describe(\n 'relative path to context directory from folder where command is executed or absolute path to context folder (cannot be \"./\" or \".\")',\n ),\n\n dockerfile: z\n .string()\n .default(defaults.DOCKER_DOCKERFILE)\n .describe(\n \"relative path to 'Dockerfile' file from folder where command is executed or absolute path to the file\",\n ),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe('{pkg} placeholder value to be used in \"cmd\" and arguments'),\n\n // import existing image\n // entrypoint: z\n // .array(z.string())\n // .optional()\n // .describe('replace image\\'s ENTRYPOINT with this value when running container'),\n});\nexport type dockerType = z.infer<typeof dockerSchema>;\n\nexport const anyArtifactSchema = z.discriminatedUnion(\"type\", [\n assetSchema,\n environmentSchema,\n binarySchema,\n javaSchema,\n pythonSchema,\n rSchema,\n condaSchema,\n dockerSchema,\n]);\n\nexport type anyArtifactType = z.infer<typeof anyArtifactSchema>;\n\nexport const artifactIndexSchema = z.record(z.string(), anyArtifactSchema);\nexport type artifactIndexType = z.infer<typeof artifactIndexSchema>;\n\nexport type withType<Typ, Orig> = Orig & { type: Typ };\nexport type withId<T> = T & { id: string };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifacts.cjs","names":["z"],"sources":["../../../src/core/schemas/artifacts.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport * as defaults from \"../../defaults\";\nimport * as util from \"../util\";\n\n// All known artifact types\nexport const artifactTypes = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"docker\",\n \"conda\",\n] as const;\nexport type artifactType = (typeof artifactTypes)[number];\n\n// TODO: change these to type definitions, not arrays. This will simplify type narrowing logic throughout the code.\nexport const archiveArtifactTypes: artifactType[] = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"conda\",\n] as const;\nexport const crossplatformTypes: artifactType[] = [\"asset\", \"java\", \"python\", \"R\"] as const;\nexport const dockerAutogenTypes: artifactType[] = [\"python\", \"conda\"] as const;\nexport const dockerArchitectures: util.ArchType[] = [\"x64\"] as const;\n\nexport function isBuildable(aType: artifactType): boolean {\n // All known artifact types are buildable. No exceptions so far.\n return artifactTypes.includes(aType);\n}\n\nexport function isCrossPlatform(aType: artifactType): boolean {\n return crossplatformTypes.includes(aType);\n}\n\nexport const runEnvironmentTypes = [\"java\", \"python\", \"R\"] as const;\nexport type runEnvironmentType = (typeof runEnvironmentTypes)[number];\n\nexport const pythonToolsets = [\"pip\"] as const;\nexport type pythonToolsetName = (typeof pythonToolsets)[number];\n\nexport const registrySchema = z.strictObject({\n name: z.string(),\n downloadURL: z.string().optional(),\n storageURL: z.string().optional(),\n});\nexport type registry = z.infer<typeof registrySchema>;\n\nexport const registryOrRef = z.union([z.string(), registrySchema]);\n\n// common fields for all buildable artifacts\n// TODO: create new type for binary packages\nconst archiveRulesSchema = z.object({\n registry: registryOrRef.default({\n name: defaults.BIN_REGISTRY_NAME,\n downloadURL: defaults.BIN_REGISTRY_DOWNLOAD_URL,\n }),\n\n name: z.string().optional(),\n version: z.string().optional(),\n\n root: z.string(\"package archive content directory is required\"),\n roots: z\n .partialRecord(\n z.enum(\n util.AllPlatforms as [\n (typeof util.AllPlatforms)[number],\n ...(typeof util.AllPlatforms)[number][],\n ],\n ),\n z.string(\"path to package archive content directory cannot be empty\").min(1),\n {\n error: (iss) => {\n if (iss.input === undefined) {\n return (\n \"list of supported platforms is required: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \")\n );\n }\n return null;\n },\n },\n )\n .refine((val) => Object.keys(val).length > 0, {\n message:\n \"specify at least one platform supported by this software in format: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \"),\n })\n .describe(\n \"please, provide settings only for supported platforms: \" + util.AllPlatforms.join(\", \"),\n ),\n});\nexport type archiveRules = z.infer<typeof archiveRulesSchema>;\n\nconst dockerRulesSchema = z.object({\n [\"docker-registry\"]: z\n .string(\n \"python software is also automatically shipped as docker image. Docker registry cannot be empty\",\n )\n .min(1)\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry to use for pushing autogenerated docker image\"),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe(\n '{pkg} placeholder value to be used in \"cmd\" and arguments (for docker autogeneration)',\n ),\n});\n\nexport const artifactIDSchema = z\n .string()\n .regex(/:/, {\n message:\n \"tengo artifact ID must have <npmPackage>:<artifactName> format, e.g @milaboratory/runenv-java-corretto:21.2.0.4.1\",\n })\n .describe(\"ID of tengo build artifact\");\n\nexport type artifactIDString = z.infer<typeof artifactIDSchema>;\n\nexport const assetSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend({ type: z.literal(\"asset\") })\n .strict();\nexport type assetType = z.infer<typeof assetSchema>;\n\nexport const environmentSchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"environment\"),\n\n runtime: z\n .enum(runEnvironmentTypes)\n .describe(\"type of runtime this run environment provides: 'java', 'python' and so on\"),\n\n [\"r-version\"]: z.string().optional(),\n [\"python-version\"]: z.string().optional(),\n [\"java-version\"]: z.string().optional(),\n\n envVars: z\n .array(\n z\n .string()\n .regex(\n /=/,\n \"environment variable should be specified in format: <var-name>=<var-value>, i.e.: MY_ENV=value\",\n ),\n )\n .optional(),\n\n binDir: z\n .string()\n .describe(\n \"path to 'bin' directory to be added to PATH when software uses this run environment\",\n ),\n});\n\nexport type environmentType = z.infer<typeof environmentSchema>;\n\nexport const binarySchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"binary\"),\n});\nexport type binaryType = z.infer<typeof binarySchema>;\n\nexport const javaSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"java\"),\n environment: artifactIDSchema,\n});\nexport type javaType = z.infer<typeof javaSchema>;\n\nconst pipToolsetSchema = z.strictObject({\n toolset: z.literal(\"pip\"),\n requirements: z.string().describe(\"path to requrements.txt inside package archive\"),\n});\n\nexport const pythonToolsetSchema = z.discriminatedUnion(\"toolset\", [pipToolsetSchema]);\n\nexport const pythonSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"python\"),\n\n environment: artifactIDSchema,\n dependencies: pythonToolsetSchema.optional(),\n });\nexport type pythonType = z.infer<typeof pythonSchema>;\n\nexport const rSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"R\"),\n environment: artifactIDSchema,\n});\nexport type rType = z.infer<typeof rSchema>;\n\nexport const condaSchema = archiveRulesSchema\n .omit({ root: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"conda\"),\n\n [\"micromamba-version\"]: z\n .string()\n .default(defaults.CONDA_MICROMAMBA_VERSION)\n .describe(\"version of micromamba to be used to operate with conda environments\"),\n [\"conda-root-dir\"]: z\n .string()\n .default(defaults.CONDA_DATA_LOCATION)\n .describe(\"root directory of conda environment inside package root\"),\n\n spec: z\n .string()\n .default(defaults.CONDA_SOURCE_ENV_SPEC_FILE)\n .describe(`path to conda environment yaml specification relative to package.json`),\n });\nexport type condaType = z.infer<typeof condaSchema>;\n\nexport const dockerSchema = z.object({\n type: z.literal(\"docker\"),\n\n registry: z\n .string()\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry+repository URL to use for pulling this image\"),\n\n // build from custom Dockerfile\n context: z\n .string()\n .refine((val) => val !== \"./\" && val !== \".\", {\n message:\n 'Context cannot be \"./\" or \".\" - use absolute path or relative path without \"./\" prefix',\n })\n .describe(\n 'relative path to context directory from folder where command is executed or absolute path to context folder (cannot be \"./\" or \".\")',\n ),\n\n dockerfile: z\n .string()\n .default(defaults.DOCKER_DOCKERFILE)\n .describe(\n \"relative path to 'Dockerfile' file from folder where command is executed or absolute path to the file\",\n ),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe('{pkg} placeholder value to be used in \"cmd\" and arguments'),\n\n // import existing image\n // entrypoint: z\n // .array(z.string())\n // .optional()\n // .describe('replace image\\'s ENTRYPOINT with this value when running container'),\n});\nexport type dockerType = z.infer<typeof dockerSchema>;\n\nexport const anyArtifactSchema = z.discriminatedUnion(\"type\", [\n assetSchema,\n environmentSchema,\n binarySchema,\n javaSchema,\n pythonSchema,\n rSchema,\n condaSchema,\n dockerSchema,\n]);\n\nexport type anyArtifactType = z.infer<typeof anyArtifactSchema>;\n\nexport const artifactIndexSchema = z.record(z.string(), anyArtifactSchema);\nexport type artifactIndexType = z.infer<typeof artifactIndexSchema>;\n\nexport type withType<Typ, Orig> = Orig & { type: Typ };\nexport type withId<T> = T & { id: string };\n"],"mappings":"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"}
|
|
@@ -276,5 +276,5 @@ type withId<T> = T & {
|
|
|
276
276
|
id: string;
|
|
277
277
|
};
|
|
278
278
|
//#endregion
|
|
279
|
-
export { anyArtifactType, artifactType, assetType, binaryType, condaType, dockerType, environmentType, javaType, pythonType, rType, registry, withId, withType };
|
|
279
|
+
export { anyArtifactSchema, anyArtifactType, artifactType, artifactTypes, assetSchema, assetType, binarySchema, binaryType, condaSchema, condaType, dockerSchema, dockerType, environmentSchema, environmentType, javaSchema, javaType, pythonSchema, pythonType, rSchema, rType, registry, registrySchema, withId, withType };
|
|
280
280
|
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","names":[],"sources":["../../../src/core/schemas/artifacts.ts"],"mappings":";;;cAKa,aAAA;AAAA,KAUD,YAAA,WAAuB,
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","names":[],"sources":["../../../src/core/schemas/artifacts.ts"],"mappings":";;;cAKa,aAAA;AAAA,KAUD,YAAA,WAAuB,aAAa;AAAA,cA+BnC,cAAA,EAAc,CAAA,CAAA,SAAA;;;;;KAKf,QAAA,GAAW,CAAA,CAAE,KAAK,QAAQ,cAAA;AAAA,cA6EzB,WAAA,EAAW,CAAA,CAAA,SAAA;;;;;;;;;;;KAIZ,SAAA,GAAY,CAAA,CAAE,KAAK,QAAQ,WAAA;AAAA,cAE1B,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6BlB,eAAA,GAAkB,CAAA,CAAE,KAAK,QAAQ,iBAAA;AAAA,cAEhC,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;KAGb,UAAA,GAAa,CAAA,CAAE,KAAK,QAAQ,YAAA;AAAA,cAE3B,UAAA,EAAU,CAAA,CAAA,SAAA;;;;;;;;;;;;KAIX,QAAA,GAAW,CAAA,CAAE,KAAK,QAAQ,UAAA;AAAA,cASzB,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;KASb,UAAA,GAAa,CAAA,CAAE,KAAK,QAAQ,YAAA;AAAA,cAE3B,OAAA,EAAO,CAAA,CAAA,SAAA;;;;;;;;;;;;KAIR,KAAA,GAAQ,CAAA,CAAE,KAAK,QAAQ,OAAA;AAAA,cAEtB,WAAA,EAAW,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;KAoBZ,SAAA,GAAY,CAAA,CAAE,KAAK,QAAQ,WAAA;AAAA,cAE1B,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;KAqCb,UAAA,GAAa,CAAA,CAAE,KAAK,QAAQ,YAAA;AAAA,cAE3B,iBAAA,EAAiB,CAAA,CAAA,qBAAA,EAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAWlB,eAAA,GAAkB,CAAA,CAAE,KAAK,QAAQ,iBAAA;AAAA,KAKjC,QAAA,cAAsB,IAAA;EAAS,IAAA,EAAM,GAAG;AAAA;AAAA,KACxC,MAAA,MAAY,CAAC;EAAK,EAAA;AAAA"}
|
|
@@ -117,6 +117,6 @@ const anyArtifactSchema = z.discriminatedUnion("type", [
|
|
|
117
117
|
]);
|
|
118
118
|
const artifactIndexSchema = z.record(z.string(), anyArtifactSchema);
|
|
119
119
|
//#endregion
|
|
120
|
-
export { archiveArtifactTypes, artifactIndexSchema, assetSchema, binarySchema, condaSchema, dockerAutogenTypes, dockerSchema, environmentSchema, isBuildable, isCrossPlatform, javaSchema, pythonSchema, rSchema, runEnvironmentTypes };
|
|
120
|
+
export { anyArtifactSchema, archiveArtifactTypes, artifactIDSchema, artifactIndexSchema, artifactTypes, assetSchema, binarySchema, condaSchema, crossplatformTypes, dockerAutogenTypes, dockerSchema, environmentSchema, isBuildable, isCrossPlatform, javaSchema, pythonSchema, pythonToolsetSchema, rSchema, registryOrRef, registrySchema, runEnvironmentTypes };
|
|
121
121
|
|
|
122
122
|
//# sourceMappingURL=artifacts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","names":["defaults.BIN_REGISTRY_NAME","defaults.BIN_REGISTRY_DOWNLOAD_URL","util.AllPlatforms","defaults.DOCKER_REGISTRY","defaults.DOCKER_PLACEHOLDER_PKG","defaults.CONDA_MICROMAMBA_VERSION","defaults.CONDA_DATA_LOCATION","defaults.CONDA_SOURCE_ENV_SPEC_FILE","defaults.DOCKER_DOCKERFILE"],"sources":["../../../src/core/schemas/artifacts.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport * as defaults from \"../../defaults\";\nimport * as util from \"../util\";\n\n// All known artifact types\nexport const artifactTypes = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"docker\",\n \"conda\",\n] as const;\nexport type artifactType = (typeof artifactTypes)[number];\n\n// TODO: change these to type definitions, not arrays. This will simplify type narrowing logic throughout the code.\nexport const archiveArtifactTypes: artifactType[] = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"conda\",\n] as const;\nexport const crossplatformTypes: artifactType[] = [\"asset\", \"java\", \"python\", \"R\"] as const;\nexport const dockerAutogenTypes: artifactType[] = [\"python\", \"conda\"] as const;\nexport const dockerArchitectures: util.ArchType[] = [\"x64\"] as const;\n\nexport function isBuildable(aType: artifactType): boolean {\n // All known artifact types are buildable. No exceptions so far.\n return artifactTypes.includes(aType);\n}\n\nexport function isCrossPlatform(aType: artifactType): boolean {\n return crossplatformTypes.includes(aType);\n}\n\nexport const runEnvironmentTypes = [\"java\", \"python\", \"R\"] as const;\nexport type runEnvironmentType = (typeof runEnvironmentTypes)[number];\n\nexport const pythonToolsets = [\"pip\"] as const;\nexport type pythonToolsetName = (typeof pythonToolsets)[number];\n\nexport const registrySchema = z.strictObject({\n name: z.string(),\n downloadURL: z.string().optional(),\n storageURL: z.string().optional(),\n});\nexport type registry = z.infer<typeof registrySchema>;\n\nexport const registryOrRef = z.union([z.string(), registrySchema]);\n\n// common fields for all buildable artifacts\n// TODO: create new type for binary packages\nconst archiveRulesSchema = z.object({\n registry: registryOrRef.default({\n name: defaults.BIN_REGISTRY_NAME,\n downloadURL: defaults.BIN_REGISTRY_DOWNLOAD_URL,\n }),\n\n name: z.string().optional(),\n version: z.string().optional(),\n\n root: z.string(\"package archive content directory is required\"),\n roots: z\n .partialRecord(\n z.enum(\n util.AllPlatforms as [\n (typeof util.AllPlatforms)[number],\n ...(typeof util.AllPlatforms)[number][],\n ],\n ),\n z.string(\"path to package archive content directory cannot be empty\").min(1),\n {\n error: (iss) => {\n if (iss.input === undefined) {\n return (\n \"list of supported platforms is required: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \")\n );\n }\n return null;\n },\n },\n )\n .refine((val) => Object.keys(val).length > 0, {\n message:\n \"specify at least one platform supported by this software in format: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \"),\n })\n .describe(\n \"please, provide settings only for supported platforms: \" + util.AllPlatforms.join(\", \"),\n ),\n});\nexport type archiveRules = z.infer<typeof archiveRulesSchema>;\n\nconst dockerRulesSchema = z.object({\n [\"docker-registry\"]: z\n .string(\n \"python software is also automatically shipped as docker image. Docker registry cannot be empty\",\n )\n .min(1)\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry to use for pushing autogenerated docker image\"),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe(\n '{pkg} placeholder value to be used in \"cmd\" and arguments (for docker autogeneration)',\n ),\n});\n\nexport const artifactIDSchema = z\n .string()\n .regex(/:/, {\n message:\n \"tengo artifact ID must have <npmPackage>:<artifactName> format, e.g @milaboratory/runenv-java-corretto:21.2.0.4.1\",\n })\n .describe(\"ID of tengo build artifact\");\n\nexport type artifactIDString = z.infer<typeof artifactIDSchema>;\n\nexport const assetSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend({ type: z.literal(\"asset\") })\n .strict();\nexport type assetType = z.infer<typeof assetSchema>;\n\nexport const environmentSchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"environment\"),\n\n runtime: z\n .enum(runEnvironmentTypes)\n .describe(\"type of runtime this run environment provides: 'java', 'python' and so on\"),\n\n [\"r-version\"]: z.string().optional(),\n [\"python-version\"]: z.string().optional(),\n [\"java-version\"]: z.string().optional(),\n\n envVars: z\n .array(\n z\n .string()\n .regex(\n /=/,\n \"environment variable should be specified in format: <var-name>=<var-value>, i.e.: MY_ENV=value\",\n ),\n )\n .optional(),\n\n binDir: z\n .string()\n .describe(\n \"path to 'bin' directory to be added to PATH when software uses this run environment\",\n ),\n});\n\nexport type environmentType = z.infer<typeof environmentSchema>;\n\nexport const binarySchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"binary\"),\n});\nexport type binaryType = z.infer<typeof binarySchema>;\n\nexport const javaSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"java\"),\n environment: artifactIDSchema,\n});\nexport type javaType = z.infer<typeof javaSchema>;\n\nconst pipToolsetSchema = z.strictObject({\n toolset: z.literal(\"pip\"),\n requirements: z.string().describe(\"path to requrements.txt inside package archive\"),\n});\n\nexport const pythonToolsetSchema = z.discriminatedUnion(\"toolset\", [pipToolsetSchema]);\n\nexport const pythonSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"python\"),\n\n environment: artifactIDSchema,\n dependencies: pythonToolsetSchema.optional(),\n });\nexport type pythonType = z.infer<typeof pythonSchema>;\n\nexport const rSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"R\"),\n environment: artifactIDSchema,\n});\nexport type rType = z.infer<typeof rSchema>;\n\nexport const condaSchema = archiveRulesSchema\n .omit({ root: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"conda\"),\n\n [\"micromamba-version\"]: z\n .string()\n .default(defaults.CONDA_MICROMAMBA_VERSION)\n .describe(\"version of micromamba to be used to operate with conda environments\"),\n [\"conda-root-dir\"]: z\n .string()\n .default(defaults.CONDA_DATA_LOCATION)\n .describe(\"root directory of conda environment inside package root\"),\n\n spec: z\n .string()\n .default(defaults.CONDA_SOURCE_ENV_SPEC_FILE)\n .describe(`path to conda environment yaml specification relative to package.json`),\n });\nexport type condaType = z.infer<typeof condaSchema>;\n\nexport const dockerSchema = z.object({\n type: z.literal(\"docker\"),\n\n registry: z\n .string()\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry+repository URL to use for pulling this image\"),\n\n // build from custom Dockerfile\n context: z\n .string()\n .refine((val) => val !== \"./\" && val !== \".\", {\n message:\n 'Context cannot be \"./\" or \".\" - use absolute path or relative path without \"./\" prefix',\n })\n .describe(\n 'relative path to context directory from folder where command is executed or absolute path to context folder (cannot be \"./\" or \".\")',\n ),\n\n dockerfile: z\n .string()\n .default(defaults.DOCKER_DOCKERFILE)\n .describe(\n \"relative path to 'Dockerfile' file from folder where command is executed or absolute path to the file\",\n ),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe('{pkg} placeholder value to be used in \"cmd\" and arguments'),\n\n // import existing image\n // entrypoint: z\n // .array(z.string())\n // .optional()\n // .describe('replace image\\'s ENTRYPOINT with this value when running container'),\n});\nexport type dockerType = z.infer<typeof dockerSchema>;\n\nexport const anyArtifactSchema = z.discriminatedUnion(\"type\", [\n assetSchema,\n environmentSchema,\n binarySchema,\n javaSchema,\n pythonSchema,\n rSchema,\n condaSchema,\n dockerSchema,\n]);\n\nexport type anyArtifactType = z.infer<typeof anyArtifactSchema>;\n\nexport const artifactIndexSchema = z.record(z.string(), anyArtifactSchema);\nexport type artifactIndexType = z.infer<typeof artifactIndexSchema>;\n\nexport type withType<Typ, Orig> = Orig & { type: Typ };\nexport type withId<T> = T & { id: string };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifacts.js","names":["defaults.BIN_REGISTRY_NAME","defaults.BIN_REGISTRY_DOWNLOAD_URL","util.AllPlatforms","defaults.DOCKER_REGISTRY","defaults.DOCKER_PLACEHOLDER_PKG","defaults.CONDA_MICROMAMBA_VERSION","defaults.CONDA_DATA_LOCATION","defaults.CONDA_SOURCE_ENV_SPEC_FILE","defaults.DOCKER_DOCKERFILE"],"sources":["../../../src/core/schemas/artifacts.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport * as defaults from \"../../defaults\";\nimport * as util from \"../util\";\n\n// All known artifact types\nexport const artifactTypes = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"docker\",\n \"conda\",\n] as const;\nexport type artifactType = (typeof artifactTypes)[number];\n\n// TODO: change these to type definitions, not arrays. This will simplify type narrowing logic throughout the code.\nexport const archiveArtifactTypes: artifactType[] = [\n \"asset\",\n \"environment\",\n \"binary\",\n \"java\",\n \"python\",\n \"R\",\n \"conda\",\n] as const;\nexport const crossplatformTypes: artifactType[] = [\"asset\", \"java\", \"python\", \"R\"] as const;\nexport const dockerAutogenTypes: artifactType[] = [\"python\", \"conda\"] as const;\nexport const dockerArchitectures: util.ArchType[] = [\"x64\"] as const;\n\nexport function isBuildable(aType: artifactType): boolean {\n // All known artifact types are buildable. No exceptions so far.\n return artifactTypes.includes(aType);\n}\n\nexport function isCrossPlatform(aType: artifactType): boolean {\n return crossplatformTypes.includes(aType);\n}\n\nexport const runEnvironmentTypes = [\"java\", \"python\", \"R\"] as const;\nexport type runEnvironmentType = (typeof runEnvironmentTypes)[number];\n\nexport const pythonToolsets = [\"pip\"] as const;\nexport type pythonToolsetName = (typeof pythonToolsets)[number];\n\nexport const registrySchema = z.strictObject({\n name: z.string(),\n downloadURL: z.string().optional(),\n storageURL: z.string().optional(),\n});\nexport type registry = z.infer<typeof registrySchema>;\n\nexport const registryOrRef = z.union([z.string(), registrySchema]);\n\n// common fields for all buildable artifacts\n// TODO: create new type for binary packages\nconst archiveRulesSchema = z.object({\n registry: registryOrRef.default({\n name: defaults.BIN_REGISTRY_NAME,\n downloadURL: defaults.BIN_REGISTRY_DOWNLOAD_URL,\n }),\n\n name: z.string().optional(),\n version: z.string().optional(),\n\n root: z.string(\"package archive content directory is required\"),\n roots: z\n .partialRecord(\n z.enum(\n util.AllPlatforms as [\n (typeof util.AllPlatforms)[number],\n ...(typeof util.AllPlatforms)[number][],\n ],\n ),\n z.string(\"path to package archive content directory cannot be empty\").min(1),\n {\n error: (iss) => {\n if (iss.input === undefined) {\n return (\n \"list of supported platforms is required: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \")\n );\n }\n return null;\n },\n },\n )\n .refine((val) => Object.keys(val).length > 0, {\n message:\n \"specify at least one platform supported by this software in format: { <platform>: <dir> }\\n\" +\n \"supported platforms:\\n \" +\n util.AllPlatforms.join(\"\\n \"),\n })\n .describe(\n \"please, provide settings only for supported platforms: \" + util.AllPlatforms.join(\", \"),\n ),\n});\nexport type archiveRules = z.infer<typeof archiveRulesSchema>;\n\nconst dockerRulesSchema = z.object({\n [\"docker-registry\"]: z\n .string(\n \"python software is also automatically shipped as docker image. Docker registry cannot be empty\",\n )\n .min(1)\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry to use for pushing autogenerated docker image\"),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe(\n '{pkg} placeholder value to be used in \"cmd\" and arguments (for docker autogeneration)',\n ),\n});\n\nexport const artifactIDSchema = z\n .string()\n .regex(/:/, {\n message:\n \"tengo artifact ID must have <npmPackage>:<artifactName> format, e.g @milaboratory/runenv-java-corretto:21.2.0.4.1\",\n })\n .describe(\"ID of tengo build artifact\");\n\nexport type artifactIDString = z.infer<typeof artifactIDSchema>;\n\nexport const assetSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend({ type: z.literal(\"asset\") })\n .strict();\nexport type assetType = z.infer<typeof assetSchema>;\n\nexport const environmentSchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"environment\"),\n\n runtime: z\n .enum(runEnvironmentTypes)\n .describe(\"type of runtime this run environment provides: 'java', 'python' and so on\"),\n\n [\"r-version\"]: z.string().optional(),\n [\"python-version\"]: z.string().optional(),\n [\"java-version\"]: z.string().optional(),\n\n envVars: z\n .array(\n z\n .string()\n .regex(\n /=/,\n \"environment variable should be specified in format: <var-name>=<var-value>, i.e.: MY_ENV=value\",\n ),\n )\n .optional(),\n\n binDir: z\n .string()\n .describe(\n \"path to 'bin' directory to be added to PATH when software uses this run environment\",\n ),\n});\n\nexport type environmentType = z.infer<typeof environmentSchema>;\n\nexport const binarySchema = archiveRulesSchema.omit({ root: true }).extend({\n type: z.literal(\"binary\"),\n});\nexport type binaryType = z.infer<typeof binarySchema>;\n\nexport const javaSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"java\"),\n environment: artifactIDSchema,\n});\nexport type javaType = z.infer<typeof javaSchema>;\n\nconst pipToolsetSchema = z.strictObject({\n toolset: z.literal(\"pip\"),\n requirements: z.string().describe(\"path to requrements.txt inside package archive\"),\n});\n\nexport const pythonToolsetSchema = z.discriminatedUnion(\"toolset\", [pipToolsetSchema]);\n\nexport const pythonSchema = archiveRulesSchema\n .omit({ roots: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"python\"),\n\n environment: artifactIDSchema,\n dependencies: pythonToolsetSchema.optional(),\n });\nexport type pythonType = z.infer<typeof pythonSchema>;\n\nexport const rSchema = archiveRulesSchema.omit({ roots: true }).extend({\n type: z.literal(\"R\"),\n environment: artifactIDSchema,\n});\nexport type rType = z.infer<typeof rSchema>;\n\nexport const condaSchema = archiveRulesSchema\n .omit({ root: true })\n .extend(dockerRulesSchema.shape)\n .extend({\n type: z.literal(\"conda\"),\n\n [\"micromamba-version\"]: z\n .string()\n .default(defaults.CONDA_MICROMAMBA_VERSION)\n .describe(\"version of micromamba to be used to operate with conda environments\"),\n [\"conda-root-dir\"]: z\n .string()\n .default(defaults.CONDA_DATA_LOCATION)\n .describe(\"root directory of conda environment inside package root\"),\n\n spec: z\n .string()\n .default(defaults.CONDA_SOURCE_ENV_SPEC_FILE)\n .describe(`path to conda environment yaml specification relative to package.json`),\n });\nexport type condaType = z.infer<typeof condaSchema>;\n\nexport const dockerSchema = z.object({\n type: z.literal(\"docker\"),\n\n registry: z\n .string()\n .default(defaults.DOCKER_REGISTRY)\n .describe(\"registry+repository URL to use for pulling this image\"),\n\n // build from custom Dockerfile\n context: z\n .string()\n .refine((val) => val !== \"./\" && val !== \".\", {\n message:\n 'Context cannot be \"./\" or \".\" - use absolute path or relative path without \"./\" prefix',\n })\n .describe(\n 'relative path to context directory from folder where command is executed or absolute path to context folder (cannot be \"./\" or \".\")',\n ),\n\n dockerfile: z\n .string()\n .default(defaults.DOCKER_DOCKERFILE)\n .describe(\n \"relative path to 'Dockerfile' file from folder where command is executed or absolute path to the file\",\n ),\n\n pkg: z\n .string()\n .default(defaults.DOCKER_PLACEHOLDER_PKG)\n .describe('{pkg} placeholder value to be used in \"cmd\" and arguments'),\n\n // import existing image\n // entrypoint: z\n // .array(z.string())\n // .optional()\n // .describe('replace image\\'s ENTRYPOINT with this value when running container'),\n});\nexport type dockerType = z.infer<typeof dockerSchema>;\n\nexport const anyArtifactSchema = z.discriminatedUnion(\"type\", [\n assetSchema,\n environmentSchema,\n binarySchema,\n javaSchema,\n pythonSchema,\n rSchema,\n condaSchema,\n dockerSchema,\n]);\n\nexport type anyArtifactType = z.infer<typeof anyArtifactSchema>;\n\nexport const artifactIndexSchema = z.record(z.string(), anyArtifactSchema);\nexport type artifactIndexType = z.infer<typeof artifactIndexSchema>;\n\nexport type withType<Typ, Orig> = Orig & { type: Typ };\nexport type withId<T> = T & { id: string };\n"],"mappings":";;;;AAKA,MAAa,gBAAgB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAIA,MAAa,uBAAuC;CAClD;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,MAAa,qBAAqC;CAAC;CAAS;CAAQ;CAAU;AAAG;AACjF,MAAa,qBAAqC,CAAC,UAAU,OAAO;AAGpE,SAAgB,YAAY,OAA8B;CAExD,OAAO,cAAc,SAAS,KAAK;AACrC;AAEA,SAAgB,gBAAgB,OAA8B;CAC5D,OAAO,mBAAmB,SAAS,KAAK;AAC1C;AAEA,MAAa,sBAAsB;CAAC;CAAQ;CAAU;AAAG;AAMzD,MAAa,iBAAiB,EAAE,aAAa;CAC3C,MAAM,EAAE,OAAO;CACf,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;CACjC,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS;AAClC,CAAC;AAGD,MAAa,gBAAgB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;AAIjE,MAAM,qBAAqB,EAAE,OAAO;CAClC,UAAU,cAAc,QAAQ;EAC9B,MAAMA;EACN,aAAaC;CACf,CAAC;CAED,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAE7B,MAAM,EAAE,OAAO,+CAA+C;CAC9D,OAAO,EACJ,cACC,EAAE,KACAC,YAIF,GACA,EAAE,OAAO,2DAA2D,CAAC,CAAC,IAAI,CAAC,GAC3E,EACE,QAAQ,QAAQ;EACd,IAAI,IAAI,UAAU,KAAA,GAChB,OACE,6FAAA,aAEkB,KAAK,MAAM;EAGjC,OAAO;CACT,EACF,CACF,CAAC,CACA,QAAQ,QAAQ,OAAO,KAAK,GAAG,CAAC,CAAC,SAAS,GAAG,EAC5C,SACE,wHAAA,aAEkB,KAAK,MAAM,EACjC,CAAC,CAAC,CACD,SACC,4DAAA,aAA8E,KAAK,IAAI,CACzF;AACJ,CAAC;AAGD,MAAM,oBAAoB,EAAE,OAAO;EAChC,oBAAoB,EAClB,OACC,gGACF,CAAC,CACA,IAAI,CAAC,CAAC,CACN,QAAQC,eAAwB,CAAC,CACjC,SAAS,wDAAwD;CAEpE,KAAK,EACF,OAAO,CAAC,CACR,QAAQC,sBAA+B,CAAC,CACxC,SACC,yFACF;AACJ,CAAC;AAED,MAAa,mBAAmB,EAC7B,OAAO,CAAC,CACR,MAAM,KAAK,EACV,SACE,oHACJ,CAAC,CAAC,CACD,SAAS,4BAA4B;AAIxC,MAAa,cAAc,mBACxB,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CACrB,OAAO,EAAE,MAAM,EAAE,QAAQ,OAAO,EAAE,CAAC,CAAC,CACpC,OAAO;AAGV,MAAa,oBAAoB,mBAAmB,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO;CAC9E,MAAM,EAAE,QAAQ,aAAa;CAE7B,SAAS,EACN,KAAK,mBAAmB,CAAC,CACzB,SAAS,2EAA2E;EAEtF,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;EAClC,mBAAmB,EAAE,OAAO,CAAC,CAAC,SAAS;EACvC,iBAAiB,EAAE,OAAO,CAAC,CAAC,SAAS;CAEtC,SAAS,EACN,MACC,EACG,OAAO,CAAC,CACR,MACC,KACA,gGACF,CACJ,CAAC,CACA,SAAS;CAEZ,QAAQ,EACL,OAAO,CAAC,CACR,SACC,qFACF;AACJ,CAAC;AAID,MAAa,eAAe,mBAAmB,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,EACzE,MAAM,EAAE,QAAQ,QAAQ,EAC1B,CAAC;AAGD,MAAa,aAAa,mBAAmB,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO;CACxE,MAAM,EAAE,QAAQ,MAAM;CACtB,aAAa;AACf,CAAC;AAGD,MAAM,mBAAmB,EAAE,aAAa;CACtC,SAAS,EAAE,QAAQ,KAAK;CACxB,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS,gDAAgD;AACpF,CAAC;AAED,MAAa,sBAAsB,EAAE,mBAAmB,WAAW,CAAC,gBAAgB,CAAC;AAErF,MAAa,eAAe,mBACzB,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CACrB,OAAO,kBAAkB,KAAK,CAAC,CAC/B,OAAO;CACN,MAAM,EAAE,QAAQ,QAAQ;CAExB,aAAa;CACb,cAAc,oBAAoB,SAAS;AAC7C,CAAC;AAGH,MAAa,UAAU,mBAAmB,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO;CACrE,MAAM,EAAE,QAAQ,GAAG;CACnB,aAAa;AACf,CAAC;AAGD,MAAa,cAAc,mBACxB,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CACpB,OAAO,kBAAkB,KAAK,CAAC,CAC/B,OAAO;CACN,MAAM,EAAE,QAAQ,OAAO;EAEtB,uBAAuB,EACrB,OAAO,CAAC,CACR,QAAQC,wBAAiC,CAAC,CAC1C,SAAS,qEAAqE;EAChF,mBAAmB,EACjB,OAAO,CAAC,CACR,QAAQC,mBAA4B,CAAC,CACrC,SAAS,yDAAyD;CAErE,MAAM,EACH,OAAO,CAAC,CACR,QAAQC,0BAAmC,CAAC,CAC5C,SAAS,uEAAuE;AACrF,CAAC;AAGH,MAAa,eAAe,EAAE,OAAO;CACnC,MAAM,EAAE,QAAQ,QAAQ;CAExB,UAAU,EACP,OAAO,CAAC,CACR,QAAQJ,eAAwB,CAAC,CACjC,SAAS,uDAAuD;CAGnE,SAAS,EACN,OAAO,CAAC,CACR,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,KAAK,EAC5C,SACE,+FACJ,CAAC,CAAC,CACD,SACC,yIACF;CAEF,YAAY,EACT,OAAO,CAAC,CACR,QAAQK,iBAA0B,CAAC,CACnC,SACC,uGACF;CAEF,KAAK,EACF,OAAO,CAAC,CACR,QAAQJ,sBAA+B,CAAC,CACxC,SAAS,6DAA2D;AAOzE,CAAC;AAGD,MAAa,oBAAoB,EAAE,mBAAmB,QAAQ;CAC5D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAID,MAAa,sBAAsB,EAAE,OAAO,EAAE,OAAO,GAAG,iBAAiB"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_util = require("../util.cjs");
|
|
3
2
|
const require_artifacts = require("./artifacts.cjs");
|
|
4
3
|
let zod_v4 = require("zod/v4");
|
|
@@ -39,5 +38,9 @@ const entrypointListSchema = zod_v4.z.record(zod_v4.z.string().regex(/[-_a-z0-9.
|
|
|
39
38
|
//#endregion
|
|
40
39
|
exports.EnyrypointReferencePattern = EnyrypointReferencePattern;
|
|
41
40
|
exports.entrypointListSchema = entrypointListSchema;
|
|
41
|
+
exports.entrypointSchema = entrypointSchema;
|
|
42
|
+
exports.environmentOptionsSchema = environmentOptionsSchema;
|
|
43
|
+
exports.referenceSchema = referenceSchema;
|
|
44
|
+
exports.softwareOptionsSchema = softwareOptionsSchema;
|
|
42
45
|
|
|
43
46
|
//# sourceMappingURL=entrypoints.cjs.map
|