@highstate/pulumi 0.9.18 → 0.9.19

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/secret.ts","../src/unit.ts","../src/utils.ts"],"names":["secret","pulumiSecret","instanceName","value","output","values","schema","HighstateSignature","secrets","array"],"mappings":"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","file":"index.js","sourcesContent":["import { HighstateSignature, type UnitSecretModel } from \"@highstate/contract\"\nimport { type Input, output, type Output, secret as pulumiSecret } from \"@pulumi/pulumi\"\n\nexport type UnitSecret<TValue> = Omit<UnitSecretModel, \"value\"> & {\n value: Output<TValue>\n}\n\nexport const updatedSecretValues: Record<string, unknown> = {}\n\n/**\n * Ensures that the provided secret contains a value.\n * If the secret value is undefined, it will create a new secret value using the provided create function.\n *\n * NOTE: This function mutates the internal state and affects the output of the unit.\n * Avoid calling this function multiple times for the same secret in a single unit execution.\n *\n * @param secret The secret to ensure a value for.\n * @param create The function to create a new secret value if the current value is undefined.\n * @return The secret with a guaranteed value.\n */\nexport function ensureSecretValue<TValue>(\n secret: UnitSecret<TValue>,\n create: () => Input<TValue>,\n): UnitSecret<NonNullable<TValue>> {\n return {\n [HighstateSignature.Secret]: true,\n id: secret.id,\n value: secret.value.apply(value => {\n if (value !== undefined) {\n return value\n }\n\n updatedSecretValues[secret.id] = pulumiSecret(create())\n return updatedSecretValues[secret.id]\n }) as Output<NonNullable<TValue>>,\n }\n}\n\n/**\n * Updates the value of the provided secret.\n * This function is used to store a new value for the secret regardless of its current value.\n *\n * NOTE: This function mutates the internal state and affects the output of the unit.\n * Avoid calling this function multiple times for the same secret in a single unit execution.\n *\n * @param secret The secret to update.\n * @param value The new value to store in the secret.\n * @returns The updated secret with the new value.\n */\nexport function updateSecretValue<TValue>(\n secret: UnitSecret<TValue>,\n value: Input<TValue>,\n): UnitSecret<TValue> {\n updatedSecretValues[secret.id] = pulumiSecret(value)\n\n return {\n [HighstateSignature.Secret]: true,\n id: secret.id,\n value: output(updatedSecretValues[secret.id]),\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { DeepInput, InputArray, InputMap } from \"./utils\"\nimport type { ComponentSecret } from \"../../contract/src/unit\"\nimport {\n type ComponentInputSpec,\n type EntityModel,\n type Unit,\n type ComponentInput,\n type InstanceInput,\n parseInstanceId,\n getInstanceId,\n type ComponentArgumentSpec,\n type ComponentArgumentSpecToStatic,\n HighstateSignature,\n camelCaseToHumanReadable,\n z,\n type UnitSecretModel,\n unitSecretSchema,\n unitArtifactSchema,\n} from \"@highstate/contract\"\nimport { mapValues, pickBy, pipe } from \"remeda\"\nimport {\n Config,\n getStack,\n Output,\n output,\n secret,\n StackReference,\n type Input,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { Ajv } from \"ajv\"\nimport { updatedSecretValues, type UnitSecret } from \"./secret\"\n\nconst ajv = new Ajv({ strict: false })\n\nexport type ObjectMeta = {\n title?: Input<string | undefined>\n description?: Input<string | undefined>\n icon?: Input<string | undefined>\n iconColor?: Input<string | undefined>\n}\n\nexport type InstanceFileMeta = {\n name: Input<string>\n contentType?: Input<string>\n size?: Input<number>\n isBinary?: Input<boolean>\n mode?: Input<number>\n}\n\nexport type UnitArtifact = {\n hash: Input<string>\n meta?: Input<ObjectMeta>\n}\n\nexport type InstanceFile = {\n meta: Input<InstanceFileMeta>\n content:\n | { type: \"embedded\"; value: Input<string> }\n | {\n type: \"artifact\"\n [HighstateSignature.Artifact]: UnitArtifact\n }\n}\n\nexport type InstanceTerminalSpec = {\n image: Input<string>\n command: InputArray<string>\n cwd?: Input<string | undefined>\n env?: InputMap<string | undefined>\n files?: InputMap<InstanceFile | string | undefined>\n}\n\nexport type InstanceTerminal = {\n name: Input<string>\n meta: Input<ObjectMeta>\n spec: Input<InstanceTerminalSpec>\n}\n\nexport type StatusFieldValue = string | number | boolean | string[]\n\nexport type StatusField<TArgName extends string = string> = {\n name: Input<string>\n meta?: Input<ObjectMeta>\n complementaryTo?: Input<TArgName | undefined>\n value?: Input<StatusFieldValue | undefined>\n}\n\nexport type InstancePageBlock =\n | { type: \"markdown\"; content: Input<string> }\n | { type: \"qr\"; content: Input<string>; showContent?: boolean; language?: string }\n | ({ type: \"file\" } & InstanceFile)\n\nexport type InstancePage = {\n name: Input<string>\n meta: Input<ObjectMeta>\n content: InputArray<InstancePageBlock>\n}\n\nexport type InstanceTriggerSpec =\n | {\n type: \"before-destroy\"\n }\n | {\n type: \"schedule\"\n schedule: string\n }\n\nexport type InstanceTrigger = {\n name: Input<string>\n title: Input<string>\n description?: Input<string>\n spec: Input<InstanceTriggerSpec>\n}\n\nexport type InstanceWorker = {\n name: Input<string>\n image: Input<string>\n params?: InputMap<unknown>\n}\n\nexport type ExtraOutputs<TArgName extends string = string> = {\n $statusFields?:\n | InputMap<Omit<StatusField<TArgName>, \"name\"> | StatusFieldValue | undefined>\n | InputArray<StatusField<TArgName> | undefined>\n\n $terminals?:\n | InputMap<Omit<InstanceTerminal, \"name\"> | undefined>\n | InputArray<InstanceTerminal | undefined>\n\n $pages?: InputMap<Omit<InstancePage, \"name\"> | undefined> | InputArray<InstancePage | undefined>\n\n $triggers?:\n | InputMap<Omit<InstanceTrigger, \"name\"> | undefined>\n | InputArray<InstanceTrigger | undefined>\n\n $workers?:\n | InputMap<Omit<InstanceWorker, \"name\"> | undefined>\n | InputArray<InstanceWorker | undefined>\n}\n\nexport type InstanceTriggerInvocation = {\n name: string\n}\n\ntype OutputMapToDeepInputMap<T extends Record<string, unknown>, TArgName extends string> =\n T extends Record<string, never>\n ? ExtraOutputs\n : { [K in keyof T]: DeepInput<T[K]> } & ExtraOutputs<TArgName>\n\nexport type SecretValueMapToSecretMap<T extends Record<string, unknown>> = {\n [K in keyof T]-?: UnitSecret<T[K]>\n}\n\nexport interface UnitContext<\n TArgs extends Record<string, unknown>,\n TInputs extends Record<string, unknown>,\n TOutputs extends Record<string, unknown>,\n TSecrets extends Record<string, unknown>,\n> {\n args: TArgs\n instanceId: string\n type: string\n name: string\n secrets: SecretValueMapToSecretMap<TSecrets>\n\n inputs: TInputs extends Record<string, never>\n ? never\n : {\n [K in keyof TInputs]: undefined extends TInputs[K]\n ? Output<NonNullable<TInputs[K]>> | undefined\n : Output<TInputs[K]>\n }\n\n invokedTriggers: InstanceTriggerInvocation[]\n\n outputs(\n this: void,\n outputs?: OutputMapToDeepInputMap<TOutputs, keyof TArgs & string>,\n ): Promise<unknown>\n}\n\ntype InputSpecToValue<T extends ComponentInputSpec> = T[2] extends true\n ? z.infer<T[0][\"schema\"]>[]\n : T[1] extends true\n ? z.infer<T[0][\"schema\"]>\n : z.infer<T[0][\"schema\"]> | undefined\n\ntype InputSpecMapToValueMap<T extends Record<string, ComponentInputSpec>> =\n T extends Record<string, never>\n ? Record<string, never>\n : { [K in keyof T]: InputSpecToValue<T[K]> }\n\nconst stackRefMap = new Map<string, StackReference>()\nconst [projectId, instanceName] = getStack().split(\"_\")\n\nlet instanceId: string | undefined\n\nexport function getUnitInstanceId(): string {\n if (!instanceId) {\n throw new Error(\"Instance id is not set. Did you call 'forUnit' function?\")\n }\n\n return instanceId\n}\n\nexport function getResourceComment(): string {\n return `Managed by Highstate Unit (${getUnitInstanceId()})`\n}\n\nexport function getUnitInstanceName(): string {\n return instanceName\n}\n\nfunction getStackRef(input: InstanceInput) {\n const [instanceType, instanceName] = parseInstanceId(input.instanceId)\n const key = `organization/${instanceType}/${projectId}_${instanceName}`\n\n if (!stackRefMap.has(key)) {\n stackRefMap.set(key, new StackReference(key))\n }\n\n return stackRefMap.get(key)!\n}\n\nfunction getOutput(unit: Unit, input: ComponentInput, refs: InstanceInput[]) {\n const entity = unit.entities.get(input.type)\n if (!entity) {\n throw new Error(`Entity '${input.type}' not found in the unit '${unit.model.type}'.`)\n }\n\n const _getOutput = (ref: InstanceInput) => {\n const value = getStackRef(ref).requireOutput(ref.output)\n\n return value.apply(value => {\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n if (!ajv.validate(entity.schema, item)) {\n throw new Error(`Invalid output for '${input.type}[${index}]': ${ajv.errorsText()}`)\n }\n }\n } else {\n if (!ajv.validate(entity.schema, value)) {\n throw new Error(`Invalid output for '${input.type}': ${ajv.errorsText()}`)\n }\n }\n\n if (Array.isArray(value)) {\n return value\n }\n\n return input.multiple ? [value] : value\n })\n }\n\n const values = output(refs.map(ref => _getOutput(ref))).apply(values => values.flat())\n\n if (!input.multiple) {\n return values.apply(values => values[0])\n }\n\n return values\n}\n\nfunction isAnyOfSchema(schema: z.core.JSONSchema.BaseSchema, itemType: string): boolean {\n if (schema.anyOf) {\n return Object.values(schema.anyOf).every(schema => isAnyOfSchema(schema, itemType))\n }\n\n return schema.type === itemType\n}\n\nfunction isStringSchema(schema: z.core.JSONSchema.BaseSchema): boolean {\n if (schema.type === \"string\") {\n return true\n }\n\n if (isAnyOfSchema(schema, \"string\")) {\n return true\n }\n\n return false\n}\n\nfunction isNumberSchema(schema: z.core.JSONSchema.BaseSchema): boolean {\n if (schema.type === \"number\") {\n return true\n }\n\n if (isAnyOfSchema(schema, \"number\")) {\n return true\n }\n\n return false\n}\n\nfunction isBooleanSchema(schema: z.core.JSONSchema.BaseSchema): boolean {\n if (schema.type === \"boolean\") {\n return true\n }\n\n if (isAnyOfSchema(schema, \"boolean\")) {\n return true\n }\n\n return false\n}\n\nexport function forUnit<\n TArgs extends Record<string, ComponentArgumentSpec>,\n TInputs extends Record<string, ComponentInputSpec>,\n TOutputs extends Record<string, ComponentInputSpec>,\n TSecrets extends Record<string, ComponentArgumentSpec>,\n>(\n unit: Unit<TArgs, TInputs, TOutputs, TSecrets>,\n): UnitContext<\n //\n ComponentArgumentSpecToStatic<TArgs>,\n InputSpecMapToValueMap<TInputs>,\n InputSpecMapToValueMap<TOutputs>,\n ComponentArgumentSpecToStatic<TSecrets>\n> {\n const config = new Config()\n\n const args = mapValues(unit.model.args, (arg, argName) => {\n switch (true) {\n case isStringSchema(arg.schema): {\n if (arg.required) {\n return config.require(argName)\n }\n\n // handle empty strings as undefined\n return config.get(argName) || arg.schema.default\n }\n case isNumberSchema(arg.schema): {\n if (arg.required) {\n return config.requireNumber(argName)\n }\n\n // handle empty strings as undefined\n const value = config.get(argName)\n if (!value) {\n return arg.schema.default\n }\n\n return config.getNumber(argName) ?? arg.schema.default\n }\n case isBooleanSchema(arg.schema): {\n if (arg.required) {\n return config.requireBoolean(argName)\n }\n\n // handle empty strings as undefined\n const value = config.get(argName)\n if (!value) {\n return arg.schema.default\n }\n\n return config.getBoolean(argName) ?? arg.schema.default\n }\n default: {\n if (!arg.required) {\n const value = config.get(argName)\n // handle empty strings as undefined\n if (!value) {\n return arg.schema.default\n }\n }\n\n const value = arg.required ? config.requireObject(argName) : config.getObject(argName)\n if (value === undefined) return arg.schema.default\n\n if (!ajv.validate(arg.schema, value)) {\n throw new Error(`Invalid config for '${argName}': ${ajv.errorsText()}`)\n }\n\n return value\n }\n }\n }) as ComponentArgumentSpecToStatic<TArgs>\n\n const secretIds = config.requireObject<Record<string, string>>(\"$secretIds\")\n\n const getSecretValue = (\n secretName: string,\n secret: ComponentSecret,\n ): Output<unknown> | undefined => {\n switch (true) {\n case isStringSchema(secret.schema): {\n return secret.required ? config.requireSecret(secretName) : config.getSecret(secretName)\n }\n case isNumberSchema(secret.schema): {\n return secret.required\n ? config.requireSecretNumber(secretName)\n : config.getSecretNumber(secretName)\n }\n case isBooleanSchema(secret.schema): {\n return secret.required\n ? config.requireSecretBoolean(secretName)\n : config.getSecretBoolean(secretName)\n }\n default: {\n const value = secret.required\n ? config.requireSecretObject(secretName)\n : config.getSecretObject(secretName)\n\n if (!ajv.validate(secret.schema, value)) {\n throw new Error(`Invalid secret for '${secretName}': ${ajv.errorsText()}`)\n }\n\n return value\n }\n }\n }\n\n const secrets = mapValues(unit.model.secrets, (secret, secretName): UnitSecret<unknown> => {\n const secretId = secretIds[secretName]\n if (!secretId) {\n throw new Error(`Secret '${secretName}' not found in the config.`)\n }\n\n return {\n [HighstateSignature.Secret]: true,\n id: secretId,\n value: secret.required\n ? config.requireSecret(secretName)\n : output(getSecretValue(secretName, secret)),\n }\n })\n\n const inputs = mapValues(unit.model.inputs, (input, inputName) => {\n const value = input.required\n ? config.requireObject<InstanceInput[]>(`input.${inputName}`)\n : config.getObject<InstanceInput[]>(`input.${inputName}`)\n\n if (!value) {\n if (input.multiple) {\n return output([])\n }\n\n return undefined\n }\n\n return getOutput(unit as unknown as Unit, input, value)\n })\n\n const type = unit.model.type\n instanceId = getInstanceId(type, instanceName)\n\n return {\n args,\n instanceId,\n type,\n name: instanceName,\n secrets: secrets as SecretValueMapToSecretMap<ComponentArgumentSpecToStatic<TSecrets>>,\n inputs: inputs as any,\n invokedTriggers: config.getObject<InstanceTriggerInvocation[]>(\"$invokedTriggers\") ?? [],\n\n outputs: async (outputs: any = {}) => {\n const result: any = mapValues(outputs, (outputValue, outputName) => {\n if (outputName === \"$statusFields\") {\n return output(outputValue).apply(mapStatusFields)\n }\n\n if (outputName === \"$pages\") {\n return output(outputValue).apply(mapPages)\n }\n\n if (outputName === \"$terminals\") {\n return output(outputValue).apply(mapTerminals)\n }\n\n if (outputName === \"$triggers\") {\n return output(outputValue).apply(mapTriggers)\n }\n\n if (outputName.startsWith(\"$\")) {\n throw new Error(`Unknown extra output '${outputName}'.`)\n }\n\n const outputModel = unit.model.outputs[outputName]\n if (!outputModel) {\n throw new Error(`Output '${outputName}' not found in the unit '${unit.model.type}'.`)\n }\n\n const entity = unit.entities.get(outputModel.type)\n if (!entity) {\n throw new Error(\n `Entity '${outputModel.type}' not found in the unit '${unit.model.type}'.`,\n )\n }\n\n return output(outputValue).apply(value => {\n if (value === undefined) {\n if (outputModel.required) {\n throw new Error(`Output '${outputName}' is required.`)\n }\n\n return undefined\n }\n\n const schema = outputModel.multiple ? entity.schema.array() : entity.schema\n\n if (!ajv.validate(schema, value)) {\n throw new Error(`Invalid output for '${outputName}': ${ajv.errorsText()}`)\n }\n\n return value\n })\n }) as Record<string, Output<unknown>> & ExtraOutputs\n\n await Promise.all(Object.values(result).map(o => outputToPromise(o)))\n\n result.$secrets = updatedSecretValues\n\n // collect secrets from all outputs\n const secretsMap: Record<string, UnitSecretModel[]> = {}\n for (const [outputName, outputValue] of Object.entries(outputs)) {\n if (!outputName.startsWith(\"$\")) {\n const resolvedValue = await outputToPromise(outputValue)\n const secrets = extractObjectsFromValue(unitSecretSchema, resolvedValue)\n if (secrets.length > 0) {\n secretsMap[outputName] = secrets\n }\n }\n }\n\n // collect artifacts from all outputs\n const artifactsMap: Record<string, UnitArtifact[]> = {}\n for (const [outputName, outputValue] of Object.entries(outputs)) {\n if (!outputName.startsWith(\"$\")) {\n const resolvedValue = await outputToPromise(outputValue)\n const artifacts = extractObjectsFromValue(unitArtifactSchema, resolvedValue)\n if (artifacts.length > 0) {\n artifactsMap[outputName] = artifacts\n }\n }\n }\n\n if (Object.keys(artifactsMap).length > 0) {\n result.$exportedArtifacts = artifactsMap\n }\n\n if (Object.keys(secretsMap).length > 0) {\n result.$exportedSecretIds = mapValues(secretsMap, v => v.map(secret => secret.id))\n }\n\n return result\n },\n }\n}\n\nexport type EntityValue<T extends EntityModel> = z.infer<T[\"schema\"]>\nexport type EntityInput<T extends EntityModel> = Output<EntityValue<T>>\n\nfunction outputToPromise(o: unknown): Promise<unknown> {\n return new Promise(resolve => (output(o) as Output<unknown>).apply(resolve))\n}\n\nfunction mapStatusFields(status: Unwrap<ExtraOutputs[\"$statusFields\"]>): StatusField[] {\n if (!status) {\n return []\n }\n\n if (Array.isArray(status)) {\n return status\n .filter(field => !!field?.value)\n .map(field => {\n return {\n name: field!.name,\n meta: {\n title: field!.meta?.title ?? camelCaseToHumanReadable(field!.name),\n },\n value: field!.value,\n } as StatusField\n })\n }\n\n return Object.entries(status)\n .map(([name, field]) => {\n if (!field) {\n return undefined\n }\n\n if (\n typeof field === \"string\" ||\n typeof field === \"number\" ||\n typeof field === \"boolean\" ||\n Array.isArray(field)\n ) {\n return {\n name,\n meta: {\n title: camelCaseToHumanReadable(name),\n },\n value: field,\n }\n }\n\n return {\n ...(field as StatusField),\n meta: {\n ...field.meta,\n title: field.meta?.title ?? camelCaseToHumanReadable(name),\n },\n name,\n }\n })\n .filter(field => !!field?.value) as StatusField[]\n}\n\nfunction mapPages(pages: Unwrap<ExtraOutputs[\"$pages\"]>): InstancePage[] {\n if (!pages) {\n return []\n }\n\n if (Array.isArray(pages)) {\n return pages.filter(page => !!page)\n }\n\n return Object.entries(pages)\n .filter(([, page]) => !!page)\n .map(([name, page]) => ({ ...page!, name }))\n}\n\nexport function fileFromString(\n name: string,\n content: string,\n contentType = \"text/plain\",\n isSecret = false,\n): InstanceFile {\n return {\n meta: {\n name,\n contentType,\n size: Buffer.byteLength(content, \"utf8\"),\n },\n content: {\n type: \"embedded\",\n value: isSecret ? secret(content) : content,\n },\n }\n}\n\nexport function fileFromBuffer(\n name: string,\n content: Buffer,\n contentType = \"application/octet-stream\",\n isSecret = false,\n): InstanceFile {\n return {\n meta: {\n name,\n contentType,\n size: content.byteLength,\n isBinary: true,\n },\n content: {\n type: \"embedded\",\n value: isSecret ? secret(content.toString(\"base64\")) : content.toString(\"base64\"),\n },\n }\n}\n\nfunction mapTerminals(terminals: Unwrap<ExtraOutputs[\"$terminals\"]>): InstanceTerminal[] {\n if (!terminals) {\n return []\n }\n\n if (!Array.isArray(terminals)) {\n terminals = Object.entries(terminals).map(([name, terminal]) => {\n if (!terminal) {\n return undefined\n }\n\n return { ...terminal, name }\n })\n }\n\n return terminals\n .filter(terminal => !!terminal)\n .map(terminal => {\n if (!terminal.spec.files) {\n return terminal\n }\n\n return {\n ...terminal,\n\n spec: {\n ...terminal.spec,\n\n files: pipe(\n terminal.spec.files,\n mapValues(file => {\n if (typeof file === \"string\") {\n return {\n meta: {\n name: \"content\",\n contentType: \"text/plain\",\n size: Buffer.byteLength(file, \"utf8\"),\n },\n content: {\n type: \"embedded\" as const,\n value: file,\n },\n }\n }\n\n return file\n }),\n pickBy(value => !!value),\n ),\n },\n }\n })\n}\n\nfunction mapTriggers(triggers: Unwrap<ExtraOutputs[\"$triggers\"]>): InstanceTrigger[] {\n if (!triggers) {\n return []\n }\n\n if (Array.isArray(triggers)) {\n return triggers.filter(trigger => !!trigger)\n }\n\n return Object.entries(triggers)\n .filter(([, trigger]) => !!trigger)\n .map(([name, trigger]) => ({ ...(trigger as InstanceTrigger), name }))\n}\n\n/**\n * Extracts all objects with the specified schema from a value.\n */\nfunction extractObjectsFromValue<TSchema extends z.ZodType>(\n schema: TSchema,\n data: unknown,\n): z.infer<TSchema>[] {\n const result: z.infer<TSchema>[] = []\n\n function traverse(obj: unknown): void {\n if (obj === null || obj === undefined || typeof obj !== \"object\") {\n return\n }\n\n if (Array.isArray(obj)) {\n for (const item of obj) {\n traverse(item)\n }\n return\n }\n\n const parseResult = schema.safeParse(obj)\n if (parseResult.success) {\n result.push(parseResult.data)\n return\n }\n\n // recursively traverse all properties\n for (const value of Object.values(obj)) {\n traverse(value)\n }\n }\n\n traverse(data)\n return result\n}\n","import { type Input, type Unwrap, type Output, output, all } from \"@pulumi/pulumi\"\n\n/**\n * The input type for an array of inputs.\n * The same as `Input<Input<T>[]>`, but more readable.\n */\nexport type InputArray<T> = Input<Input<T>[]>\n\n/**\n * The input type for a map of inputs.\n * The same as `Input<Record<string, Input<T>>>`, but more readable.\n */\nexport type InputMap<T> = Input<Readonly<Record<string, Input<T>>>>\n\n/**\n * The input or input array type for a value.\n */\nexport type InputOrArray<T> = Input<T> | InputArray<T>\n\n/**\n * The input of inputs of inputs of inputs, so you got the idea.\n */\nexport type DeepInput<T> = [T] extends [Record<string, unknown> | undefined]\n ? [T] extends [infer U | undefined]\n ? Input<{ [K in keyof U]: DeepInput<U[K]> } | undefined>\n : Input<{ [K in keyof T]: DeepInput<T[K]> }>\n : [T] extends [Array<unknown> | undefined]\n ? [T] extends [(infer U)[] | undefined]\n ? Input<DeepInput<U>[] | undefined>\n : Input<DeepInput<T>[]>\n : Input<T>\n\n/**\n * Merges the given array of `InputOrArray` values into a single flat output array.\n *\n * @param values The values to merge.\n * @returns The merged output array.\n */\nexport function flattenInputs<T>(...values: (InputOrArray<T> | undefined)[]): Output<T[]> {\n return all(values).apply(allValues => {\n const result: T[] = []\n for (const value of allValues) {\n if (Array.isArray(value)) {\n result.push(...(value as T[]))\n } else if (value) {\n result.push(value as T)\n }\n }\n return result\n })\n}\n\n/**\n * Maps each element of an input array to a new value.\n * Produces an output array with the same length.\n *\n * @param array The input array.\n * @param fn The mapping function.\n * @returns The output array.\n */\nexport function mapInputs<T, U>(\n array: InputArray<T>,\n fn: (v: Unwrap<T>, index: number, all: Unwrap<T>[]) => U,\n): Output<U[]> {\n return output(array).apply(array => {\n return array?.map((v, index) => fn(v as Unwrap<T>, index, array as Unwrap<T>[])) ?? []\n })\n}\n\nexport function flatMapInput<T, U>(\n v1: InputOrArray<T>,\n v2: InputOrArray<T>,\n fn: (v: Unwrap<T>, index: number, all: Unwrap<T>[]) => U,\n): Output<U[]>\n\nexport function flatMapInput<T, U>(\n v1: InputOrArray<T>,\n v2: InputOrArray<T>,\n v3: InputOrArray<T>,\n fn: (v: Unwrap<T>, index: number, all: Unwrap<T>[]) => U,\n): Output<U[]>\n\n/**\n * Merges the given array of `InputOrArray` values into a single flat output array and maps each element to a new value.\n *\n * @param values The values to merge.\n * @param fn The mapping function.\n */\nexport function flatMapInput<T, U>(\n ...args: (InputOrArray<T> | ((v: Unwrap<T>, index: number, all: Unwrap<T>[]) => U))[]\n): Output<U[]> {\n const fn = args.pop() as (v: Unwrap<T>, index: number, all: Unwrap<T>[]) => U\n const values = args as InputOrArray<T>[]\n\n return mapInputs(flattenInputs(...values), fn)\n}\n\n/**\n * Map an optional value to another optional value.\n *\n * @param input The input value.\n * @param func The function to apply to the input value.\n * @returns The output value, or `undefined` if the input value is `undefined`.\n */\nexport function mapOptional<T, U>(input: T | undefined, func: (value: T) => U): U | undefined {\n if (input === undefined) {\n return undefined\n }\n\n return func(input)\n}\n\nexport function toPromise<T>(input: Input<T>): Promise<Unwrap<T>> {\n return new Promise(resolve => output(input).apply(resolve))\n}\n\nexport function singleton<T>(factory: () => T): () => T {\n let instance: T | undefined\n return () => {\n if (instance === undefined) {\n instance = factory()\n }\n\n return instance\n }\n}\n\nexport function providerFactory<TInput>(\n factory: (name: string) => TInput,\n): (name: string) => TInput {\n const instances = new Map<string, TInput>()\n return name => {\n if (!instances.has(name)) {\n instances.set(name, factory(name))\n }\n\n return instances.get(name)!\n }\n}\n\nexport function mergeInputObjects<\n T1 extends Record<string, unknown>,\n T2 extends Record<string, unknown>,\n>(obj1: Input<T1 | undefined> | undefined, obj2: Input<T2 | undefined> | undefined): Output<T1 & T2>\n\nexport function mergeInputObjects<\n T1 extends Record<string, unknown>,\n T2 extends Record<string, unknown>,\n T3 extends Record<string, unknown>,\n>(\n obj1: Input<T1 | undefined> | undefined,\n obj2: Input<T2 | undefined> | undefined,\n obj3: Input<T3 | undefined> | undefined,\n): Output<T1 & T2 & T3>\n\n/**\n * Merges the given input objects into a single output object.\n *\n * @param objects The input objects.\n * @returns The output object.\n */\nexport function mergeInputObjects(\n ...objects: Input<Record<string, unknown>>[]\n): Output<Record<string, unknown>> {\n return output(objects).apply(array => {\n return Object.assign({}, ...array) as Record<string, unknown>\n })\n}\n\nexport function normalize<T>(item: T | undefined, collection: T[] | undefined): T[] {\n if (item && collection) {\n return [item, ...collection]\n }\n\n if (item) {\n return [item]\n }\n\n return collection ?? []\n}\n\nexport function apply<T, U>(fn: (value: Unwrap<T>) => U): (input: Input<T>) => Output<U> {\n return input => output(input).apply(fn)\n}\n\nexport function applyMap<T, U>(fn: (value: Unwrap<T>) => U): (input: Input<T[]>) => Output<U[]> {\n return input => output(input).apply(array => array.map(fn))\n}\n"]}
1
+ {"version":3,"sources":["../src/file.ts","../src/utils.ts","../src/unit.ts"],"names":["content","output","item","collection","value","values","secrets","secret","pulumiSecret","name","result"],"mappings":"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","file":"index.js","sourcesContent":["import type { File } from \"@highstate/contract\"\nimport { type Input, type Output, output, secret } from \"@pulumi/pulumi\"\n\nexport type FileOptions = {\n isSecret?: boolean\n contentType?: Input<string>\n mode?: Input<number>\n}\n\n/**\n * Creates a file from a string input.\n * This file can then be passed to terminals/pages or other components.\n *\n * @param name The name of the file.\n * @param content The content of the file.\n * @param options Additional options for the file.\n */\nexport function fileFromString(\n name: Input<string>,\n content: Input<string>,\n { contentType = \"text/plain\", isSecret = false, mode }: FileOptions = {},\n): Output<File> {\n return output({\n meta: {\n name,\n contentType,\n size: output(content).apply(content => Buffer.byteLength(content, \"utf8\")),\n mode,\n },\n content: {\n type: \"embedded\",\n value: isSecret ? secret(content) : content,\n },\n })\n}\n\n/**\n * Creates a file from a buffer input.\n * This file can then be passed to terminals/pages or other components.\n *\n * @param name The name of the file.\n * @param content The content of the file as a Buffer.\n * @param options Additional options for the file.\n */\nexport function fileFromBuffer(\n name: Input<string>,\n content: Buffer,\n { contentType = \"application/octet-stream\", isSecret = false, mode }: FileOptions = {},\n): Output<File> {\n // const base64Content = output(content).apply(\n // c => (console.log(\"fileFromBuffer\", c), c.toString(\"base64\")),\n // )\n const base64Content = content.toString(\"base64\")\n\n return output({\n meta: {\n name,\n contentType,\n size: output(content).apply(content => content.byteLength),\n mode,\n },\n content: {\n type: \"embedded\",\n isBinary: true,\n value: isSecret ? secret(base64Content) : base64Content,\n },\n })\n}\n","import { type Input, type Output, output, type Unwrap } from \"@pulumi/pulumi\"\n\n/**\n * The input type for an array of inputs.\n * The same as `Input<Input<T>[]>`, but more readable.\n */\nexport type InputArray<T> = Input<Input<T>[]>\n\n/**\n * The input type for a record of inputs.\n * The same as `Input<Record<string, Input<T>>>`, but more readable.\n */\nexport type InputRecord<T> = Input<Record<string, Input<T>>>\n\n/**\n * The input or input array type for a value.\n */\nexport type InputOrArray<T> = Input<T> | InputArray<T>\n\ntype LeafValue = string | number | boolean | null | undefined\ntype IsUnknown<T> = unknown extends T ? (T extends unknown ? true : false) : false\n\n/**\n * The recursive input type for a value.\n */\nexport type DeepInput<T> = [T] extends [LeafValue]\n ? Input<T>\n : IsUnknown<T> extends true\n ? Input<unknown>\n : Input<{ [K in keyof T]: DeepInput<T[K]> }>\n\n/**\n * Transforms an input value to a promise that resolves to the unwrapped value.\n *\n * @param input The input value to transform.\n * @returns A promise that resolves to the unwrapped value.\n */\nexport function toPromise<T>(input: Input<T>): Promise<Unwrap<T>> {\n return new Promise(resolve => output(input).apply(resolve))\n}\n\n/**\n * Receives an item and a collection, and returns an array containing the item and the collection.\n *\n * Excludes the item if it is undefined.\n *\n * @param item The single item input.\n * @param collection The collection of items input.\n */\nexport function normalize<T>(item: T | undefined, collection: T[] | undefined): T[] {\n if (item && collection) {\n return [item, ...collection]\n }\n\n if (item) {\n return [item]\n }\n\n return collection ?? []\n}\n\n/**\n * The same as `normalize`, but accepts inputs and returns output.\n *\n * @param item The single item input.\n * @param collection The collection of items input.\n */\nexport function normalizeInputs<T>(\n item: Input<T> | undefined,\n collection: InputArray<T> | undefined,\n): Output<Unwrap<T>[]> {\n return (\n output({ item, collection })\n //\n .apply(({ item, collection }) => normalize(item, collection)) as Output<Unwrap<T>[]>\n )\n}\n\n/**\n * The convenience function to normalize inputs and map them to a new type.\n *\n * @param item The single item input.\n * @param collection The collection of items input.\n * @param mapFn The function to map each item to a new type.\n */\nexport function normalizeInputsAndMap<T, U>(\n item: Input<T> | undefined,\n collection: InputArray<T> | undefined,\n mapFn: (value: Unwrap<T>) => U,\n): Output<U[]> {\n return normalizeInputs(item, collection).apply(values => values.map(mapFn))\n}\n\n/**\n * Applies a function to the input and returns an output.\n *\n * Can be used in `remeda` pipelines.\n *\n * @param fn The function to apply to the input.\n */\nexport function apply<T, U>(fn: (value: Unwrap<T>) => U): (input: Input<T>) => Output<U> {\n return input => output(input).apply(fn)\n}\n","/** biome-ignore-all lint/suspicious/noExplicitAny: здесь орать запрещено */\nimport {\n type ComponentInput,\n type ComponentInputSpec,\n camelCaseToHumanReadable,\n HighstateConfigKey,\n type InstanceInput,\n type InstanceStatusField,\n type InstanceStatusFieldValue,\n type PartialKeys,\n parseArgumentValue,\n parseInstanceId,\n runtimeSchema,\n type TriggerInvocation,\n type Unit,\n type UnitArtifact,\n type UnitConfig,\n type UnitPage,\n type UnitTerminal,\n type UnitTrigger,\n type UnitWorker,\n unitArtifactSchema,\n unitConfigSchema,\n z,\n} from \"@highstate/contract\"\nimport {\n Config,\n type Input,\n type Output,\n output,\n secret as pulumiSecret,\n StackReference,\n type Unwrap,\n} from \"@pulumi/pulumi\"\nimport { mapValues } from \"remeda\"\nimport { type DeepInput, toPromise } from \"./utils\"\n\ntype StatusField<TArgName extends string = string> = Omit<\n InstanceStatusField,\n \"complementaryTo\" | \"meta\"\n> & {\n meta?: PartialKeys<InstanceStatusField[\"meta\"], \"title\">\n complementaryTo?: TArgName\n}\n\ntype ExtraOutputs<TArgName extends string = string> = {\n $statusFields?:\n | Input<\n Record<\n string,\n DeepInput<Omit<StatusField<TArgName>, \"name\"> | InstanceStatusFieldValue | undefined>\n >\n >\n | Input<DeepInput<StatusField<TArgName> | undefined>[]>\n\n $terminals?:\n | Input<Record<string, DeepInput<Omit<UnitTerminal, \"name\"> | undefined>>>\n | Input<DeepInput<UnitTerminal | undefined>[]>\n\n $pages?:\n | Input<Record<string, DeepInput<Omit<UnitPage, \"name\"> | undefined>>>\n | Input<DeepInput<UnitPage | undefined>[]>\n\n $triggers?:\n | Input<Record<string, DeepInput<Omit<UnitTrigger, \"name\"> | undefined>>>\n | Input<DeepInput<UnitTrigger | undefined>[]>\n\n $workers?:\n | Input<Record<string, DeepInput<Omit<UnitWorker, \"name\"> | undefined>>>\n | Input<DeepInput<UnitWorker | undefined>[]>\n}\n\ntype OutputMapToDeepInputMap<T extends Record<string, unknown>, TArgName extends string> =\n T extends Record<string, never>\n ? ExtraOutputs\n : { [K in keyof T]: DeepInput<T[K]> } & ExtraOutputs<TArgName>\n\ninterface UnitContext<\n TArgs extends Record<string, unknown>,\n TInputs extends Record<string, unknown>,\n TOutputs extends Record<string, unknown>,\n TSecrets extends Record<string, unknown>,\n> {\n args: TArgs\n instanceId: string\n type: string\n name: string\n\n secrets: {\n [K in keyof TSecrets]: undefined extends TSecrets[K]\n ? Output<NonNullable<TSecrets[K]>> | undefined\n : Output<TSecrets[K]>\n }\n\n getSecret<K extends keyof TSecrets>(\n this: void,\n name: K,\n ): Output<NonNullable<TSecrets[K]> | undefined>\n\n getSecret<K extends keyof TSecrets>(\n this: void,\n name: K,\n factory: () => Input<NonNullable<TSecrets[K]>>,\n ): Output<NonNullable<TSecrets[K]>>\n\n inputs: TInputs\n invokedTriggers: TriggerInvocation[]\n\n outputs(\n this: void,\n outputs?: OutputMapToDeepInputMap<TOutputs, keyof TArgs & string>,\n ): Promise<unknown>\n}\n\n// z.output since the values are validated/transformed and passed to the user\ntype InputSpecToWrappedValue<T extends ComponentInputSpec> = T[2] extends true\n ? // we have to wrap the array in Output since we don't know how many items will be returned by each multiple input\n Output<NonNullable<z.output<T[0][\"schema\"]>>[]>\n : T[1] extends true\n ? Output<NonNullable<z.output<T[0][\"schema\"]>>>\n : Output<NonNullable<z.output<T[0][\"schema\"]>>> | undefined\n\n// z.input since the values are passed from the user and should be validated/transformed before returning from the unit\ntype OutputSpecToValue<T extends ComponentInputSpec> = T[2] extends true\n ? T[1] extends true\n ? NonNullable<z.input<T[0][\"schema\"]>>[]\n : NonNullable<z.input<T[0][\"schema\"]>>[] | undefined\n : T[1] extends true\n ? NonNullable<z.input<T[0][\"schema\"]>>\n : NonNullable<z.input<T[0][\"schema\"]>> | undefined\n\nconst stackRefMap = new Map<string, StackReference>()\n\nlet instanceId: string | undefined\nlet instanceName: string | undefined\n\n/**\n * Returns the current unit instance id.\n *\n * Only available after calling `forUnit` function.\n */\nexport function getUnitInstanceId(): string {\n if (!instanceId) {\n throw new Error(`Instance id is not set. Did you call \"forUnit\" function?`)\n }\n\n return instanceId\n}\n\n/**\n * Returns the current unit instance name.\n */\nexport function getUnitInstanceName(): string {\n if (!instanceName) {\n throw new Error(`Instance name is not set. Did you call \"forUnit\" function?`)\n }\n\n return instanceName\n}\n\n/**\n * Returns a comment that can be used in resources to indicate that they are managed by Highstate.\n */\nexport function getResourceComment(): string {\n return `Managed by Highstate (${getUnitInstanceId()})`\n}\n\nfunction getStackRef(config: UnitConfig, input: InstanceInput) {\n const [instanceType] = parseInstanceId(input.instanceId)\n const stateId = config.stateIdMap[input.instanceId]\n if (!stateId) {\n throw new Error(`State ID for instance \"${input.instanceId}\" not found in the unit config.`)\n }\n\n const key = `organization/${instanceType}/${stateId}`\n let stackRef = stackRefMap.get(key)\n\n if (!stackRef) {\n stackRef = new StackReference(key)\n stackRefMap.set(key, stackRef)\n }\n\n return stackRef\n}\n\nfunction getOutput(config: UnitConfig, unit: Unit, input: ComponentInput, refs: InstanceInput[]) {\n const entity = unit.entities.get(input.type)\n if (!entity) {\n throw new Error(`Entity \"${input.type}\" not found in the unit \"${unit.model.type}\".`)\n }\n\n const _getOutput = (ref: InstanceInput) => {\n const value = getStackRef(config, ref).requireOutput(ref.output)\n\n return value.apply(value => {\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n const result = entity.schema.safeParse(item)\n\n if (!result.success) {\n throw new Error(\n `Invalid output for \"${input.type}[${index}]\": ${z.prettifyError(result.error)}`,\n )\n }\n }\n } else {\n const result = entity.schema.safeParse(value)\n\n if (!result.success) {\n throw new Error(`Invalid output for \"${input.type}\": ${z.prettifyError(result.error)}`)\n }\n }\n\n if (Array.isArray(value)) {\n return value\n }\n\n return input.multiple ? [value] : value\n })\n }\n\n const values = output(refs.map(ref => _getOutput(ref))).apply(values => values.flat())\n\n if (!input.multiple) {\n return values.apply(values => values[0])\n }\n\n return values\n}\n\nexport function forUnit<\n TArgs extends Record<string, z.ZodType>,\n TInputs extends Record<string, ComponentInputSpec>,\n TOutputs extends Record<string, ComponentInputSpec>,\n TSecrets extends Record<string, z.ZodType>,\n>(\n unit: Unit<TArgs, TInputs, TOutputs, TSecrets>,\n): UnitContext<\n { [K in keyof TArgs]: z.output<TArgs[K]> },\n { [K in keyof TInputs]: InputSpecToWrappedValue<TInputs[K]> },\n { [K in keyof TOutputs]: OutputSpecToValue<TOutputs[K]> },\n { [K in keyof TSecrets]: z.output<TSecrets[K]> }\n> {\n const config = new Config()\n const rawHSConfig = config.requireObject(HighstateConfigKey.Config)\n const hsConfig = unitConfigSchema.parse(rawHSConfig)\n\n const rawHsSecrets = config\n .requireSecretObject(HighstateConfigKey.Secrets)\n .apply(secrets => z.record(z.string(), z.unknown()).parse(secrets))\n\n const args = mapValues(unit.model.args, (arg, argName) => {\n const value = parseArgumentValue(hsConfig.args[argName])\n // biome-ignore lint/style/noNonNullAssertion: runtime schema is there in runtime\n const result = arg[runtimeSchema]!.safeParse(value)\n\n if (!result.success) {\n throw new Error(`Invalid argument \"${argName}\": ${z.prettifyError(result.error)}`)\n }\n\n return result.data\n })\n\n const secrets = mapValues(unit.model.secrets, (secret, secretName) => {\n const hasValue = hsConfig.secretNames.includes(secretName)\n\n if (!hasValue && !secret.required) {\n return secret.schema.default ? pulumiSecret(secret.schema.default) : undefined\n }\n\n if (!hasValue && secret.required) {\n throw new Error(`Secret \"${secretName}\" is required but not provided.`)\n }\n\n return rawHsSecrets[secretName].apply(rawValue => {\n const value = parseArgumentValue(rawValue)\n // biome-ignore lint/style/noNonNullAssertion: runtime schema is there in runtime\n const result = secret[runtimeSchema]!.safeParse(value)\n\n if (!result.success) {\n throw new Error(`Invalid secret \"${secretName}\": ${z.prettifyError(result.error)}`)\n }\n\n return pulumiSecret(result.data)\n })\n })\n\n const inputs = mapValues(unit.model.inputs, (input, inputName) => {\n const value = hsConfig.inputs[inputName]\n\n if (!value) {\n if (input.multiple) {\n return []\n }\n\n return undefined\n }\n\n return getOutput(hsConfig, unit as unknown as Unit, input, value)\n })\n\n const [type, name] = parseInstanceId(hsConfig.instanceId)\n\n instanceId = hsConfig.instanceId\n instanceName = name\n\n return {\n instanceId: hsConfig.instanceId,\n type,\n name,\n\n args: args as any,\n secrets: secrets as any,\n inputs: inputs as any,\n invokedTriggers: hsConfig.invokedTriggers,\n\n getSecret: (<K extends keyof TSecrets>(\n name: K,\n factory?: () => Input<NonNullable<TSecrets[K]>>,\n ) => {\n if (!factory) {\n return secrets[name as string]\n }\n\n const value = secrets[name as string] ?? pulumiSecret(factory())\n secrets[name as string] = value\n\n return value\n }) as any,\n\n outputs: async (outputs: any = {}) => {\n const result: any = mapValues(outputs, (outputValue, outputName) => {\n if (outputName === \"$statusFields\") {\n return output(outputValue).apply(mapStatusFields)\n }\n\n if (outputName === \"$pages\") {\n return output(outputValue).apply(mapPages)\n }\n\n if (outputName === \"$terminals\") {\n return output(outputValue).apply(mapTerminals)\n }\n\n if (outputName === \"$triggers\") {\n return output(outputValue).apply(mapTriggers)\n }\n\n if (outputName === \"$workers\") {\n return output(outputValue).apply(mapWorkers)\n }\n\n if (outputName.startsWith(\"$\")) {\n throw new Error(`Unknown extra output \"${outputName}\".`)\n }\n\n const outputModel = unit.model.outputs[outputName]\n if (!outputModel) {\n throw new Error(\n `Output \"${outputName}\" not found in the unit \"${unit.model.type}\", but was passed to outputs(...).`,\n )\n }\n\n const entity = unit.entities.get(outputModel.type)\n if (!entity) {\n throw new Error(\n `Entity \"${outputModel.type}\" not found in the unit \"${unit.model.type}\". It looks like a bug in the unit definition.`,\n )\n }\n\n return output(outputValue).apply(value => {\n const schema = outputModel.multiple ? entity.schema.array() : entity.schema\n const result = schema.safeParse(value)\n\n if (!result.success) {\n throw new Error(\n `Invalid output \"${outputName}\" of type \"${outputModel.type}\": ${z.prettifyError(result.error)}`,\n )\n }\n\n return result.data\n })\n })\n\n // wait for all outputs to resolve before collecting secrets and artifacts\n await Promise.all(Object.values(result).map(o => toPromise(o)))\n\n result.$secrets = secrets\n\n // collect artifacts from all outputs\n const artifactsMap: Record<string, UnitArtifact[]> = {}\n for (const [outputName, outputValue] of Object.entries(outputs)) {\n const resolvedValue = await toPromise(outputValue)\n const artifacts = extractObjectsFromValue(unitArtifactSchema, resolvedValue)\n if (artifacts.length > 0) {\n artifactsMap[outputName] = artifacts\n }\n }\n\n if (Object.keys(artifactsMap).length > 0) {\n result.$artifacts = artifactsMap\n }\n\n return result\n },\n }\n}\n\nfunction mapStatusFields(status: Unwrap<ExtraOutputs[\"$statusFields\"]>): InstanceStatusField[] {\n if (!status) {\n return []\n }\n\n if (Array.isArray(status)) {\n return status\n .filter((field): field is NonNullable<StatusField> => field?.value !== undefined)\n .map(field => {\n return {\n name: field.name,\n meta: {\n title: field.meta?.title ?? camelCaseToHumanReadable(field.name),\n },\n value: field.value,\n }\n })\n }\n\n return Object.entries(status)\n .map(([name, field]) => {\n if (!field) {\n return undefined\n }\n\n if (\n typeof field === \"string\" ||\n typeof field === \"number\" ||\n typeof field === \"boolean\" ||\n Array.isArray(field)\n ) {\n return {\n name,\n meta: {\n title: camelCaseToHumanReadable(name),\n },\n value: field,\n }\n }\n\n return {\n ...field,\n meta: {\n ...field.meta,\n title: field.meta?.title ?? camelCaseToHumanReadable(name),\n },\n name,\n }\n })\n .filter((field): field is InstanceStatusField => field?.value !== undefined)\n}\n\nfunction mapPages(pages: Unwrap<ExtraOutputs[\"$pages\"]>): Output<UnitPage[]> {\n if (!pages) {\n return output([])\n }\n\n if (!Array.isArray(pages)) {\n pages = Object.entries(pages).map(([name, page]) => {\n if (!page) {\n return undefined\n }\n\n return { ...page, name }\n })\n }\n\n return output(pages.filter((page): page is NonNullable<UnitPage> => !!page))\n}\n\nfunction mapTerminals(terminals: Unwrap<ExtraOutputs[\"$terminals\"]>): Output<UnitTerminal[]> {\n if (!terminals) {\n return output([])\n }\n\n if (!Array.isArray(terminals)) {\n terminals = Object.entries(terminals).map(([name, terminal]) => {\n if (!terminal) {\n return undefined\n }\n\n return { ...terminal, name }\n })\n }\n\n return output(terminals.filter((terminal): terminal is NonNullable<UnitTerminal> => !!terminal))\n}\n\nfunction mapTriggers(triggers: Unwrap<ExtraOutputs[\"$triggers\"]>): Output<UnitTrigger[]> {\n if (!triggers) {\n return output([])\n }\n\n if (!Array.isArray(triggers)) {\n triggers = Object.entries(triggers).map(([name, trigger]) => {\n if (!trigger) {\n return undefined\n }\n\n return { ...trigger, name }\n })\n }\n\n return output(triggers.filter((trigger): trigger is NonNullable<UnitTrigger> => !!trigger))\n}\n\nfunction mapWorkers(workers: Unwrap<ExtraOutputs[\"$workers\"]>): Output<Unwrap<UnitWorker>[]> {\n if (!workers) {\n return output([])\n }\n\n if (!Array.isArray(workers)) {\n workers = Object.entries(workers).map(([name, worker]) => {\n if (!worker) {\n return undefined\n }\n\n return { ...worker, name }\n })\n }\n\n return output(workers.filter((worker): worker is NonNullable<Unwrap<UnitWorker>> => !!worker))\n}\n\n/**\n * Extracts all objects with the specified schema from a value.\n */\nfunction extractObjectsFromValue<TSchema extends z.ZodType>(\n schema: TSchema,\n data: unknown,\n): z.infer<TSchema>[] {\n const result: z.infer<TSchema>[] = []\n\n function traverse(obj: unknown): void {\n if (obj === null || obj === undefined || typeof obj !== \"object\") {\n return\n }\n\n if (Array.isArray(obj)) {\n for (const item of obj) {\n traverse(item)\n }\n return\n }\n\n const parseResult = schema.safeParse(obj)\n if (parseResult.success) {\n result.push(parseResult.data)\n return\n }\n\n // recursively traverse all properties\n for (const value of Object.values(obj)) {\n traverse(value)\n }\n }\n\n traverse(data)\n return result\n}\n"]}
package/package.json CHANGED
@@ -1,11 +1,19 @@
1
1
  {
2
2
  "name": "@highstate/pulumi",
3
- "version": "0.9.18",
3
+ "version": "0.9.19",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
7
7
  "src"
8
8
  ],
9
+ "highstate": {
10
+ "sourceHash": {
11
+ ".": {
12
+ "mode": "manual",
13
+ "version": "1"
14
+ }
15
+ }
16
+ },
9
17
  "exports": {
10
18
  ".": {
11
19
  "types": "./src/index.ts",
@@ -19,15 +27,13 @@
19
27
  "build": "highstate build"
20
28
  },
21
29
  "dependencies": {
22
- "@highstate/contract": "^0.9.18",
30
+ "@highstate/contract": "^0.9.19",
23
31
  "@pulumi/pulumi": "^3.184.0",
24
- "@sinclair/typebox": "^0.34.11",
25
- "ajv": "^8.17.1",
26
- "import-meta-resolve": "^4.1.0",
32
+ "deepmerge-ts": "^7.1.5",
27
33
  "remeda": "^2.21.0"
28
34
  },
29
35
  "devDependencies": {
30
- "@highstate/cli": "^0.9.18"
36
+ "@highstate/cli": "^0.9.19"
31
37
  },
32
- "gitHead": "9ebcd7da56b00b8ca08bf52cc8438f527338cd64"
38
+ "gitHead": "e77d292335556c6e5b6275acda1a3d1609d786a1"
33
39
  }
package/src/file.ts ADDED
@@ -0,0 +1,68 @@
1
+ import type { File } from "@highstate/contract"
2
+ import { type Input, type Output, output, secret } from "@pulumi/pulumi"
3
+
4
+ export type FileOptions = {
5
+ isSecret?: boolean
6
+ contentType?: Input<string>
7
+ mode?: Input<number>
8
+ }
9
+
10
+ /**
11
+ * Creates a file from a string input.
12
+ * This file can then be passed to terminals/pages or other components.
13
+ *
14
+ * @param name The name of the file.
15
+ * @param content The content of the file.
16
+ * @param options Additional options for the file.
17
+ */
18
+ export function fileFromString(
19
+ name: Input<string>,
20
+ content: Input<string>,
21
+ { contentType = "text/plain", isSecret = false, mode }: FileOptions = {},
22
+ ): Output<File> {
23
+ return output({
24
+ meta: {
25
+ name,
26
+ contentType,
27
+ size: output(content).apply(content => Buffer.byteLength(content, "utf8")),
28
+ mode,
29
+ },
30
+ content: {
31
+ type: "embedded",
32
+ value: isSecret ? secret(content) : content,
33
+ },
34
+ })
35
+ }
36
+
37
+ /**
38
+ * Creates a file from a buffer input.
39
+ * This file can then be passed to terminals/pages or other components.
40
+ *
41
+ * @param name The name of the file.
42
+ * @param content The content of the file as a Buffer.
43
+ * @param options Additional options for the file.
44
+ */
45
+ export function fileFromBuffer(
46
+ name: Input<string>,
47
+ content: Buffer,
48
+ { contentType = "application/octet-stream", isSecret = false, mode }: FileOptions = {},
49
+ ): Output<File> {
50
+ // const base64Content = output(content).apply(
51
+ // c => (console.log("fileFromBuffer", c), c.toString("base64")),
52
+ // )
53
+ const base64Content = content.toString("base64")
54
+
55
+ return output({
56
+ meta: {
57
+ name,
58
+ contentType,
59
+ size: output(content).apply(content => content.byteLength),
60
+ mode,
61
+ },
62
+ content: {
63
+ type: "embedded",
64
+ isBinary: true,
65
+ value: isSecret ? secret(base64Content) : base64Content,
66
+ },
67
+ })
68
+ }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * from "@pulumi/pulumi"
2
+ export * from "./file"
2
3
  export * from "./unit"
3
4
  export * from "./utils"
4
- export { ensureSecretValue, updateSecretValue, type UnitSecret } from "./secret"