@ts-cloud/core 0.4.1 → 0.4.2

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 CHANGED
@@ -45909,6 +45909,7 @@ function composeServerlessAppTemplate(opts) {
45909
45909
  var PHP_LAYER_EXTENSIONS = [
45910
45910
  "cli",
45911
45911
  "fpm",
45912
+ "curl",
45912
45913
  "mbstring",
45913
45914
  "xml",
45914
45915
  "pdo",
@@ -45931,13 +45932,18 @@ function phpLayerBuildStage(phpVersion, asName) {
45931
45932
  const scl = `php${phpVersion.replace(".", "")}`;
45932
45933
  const packages = phpLayerPackages(phpVersion).join(" \\\n ");
45933
45934
  const sclRoot = `/opt/remi/${scl}/root`;
45934
- const from = asName ? `FROM amazonlinux:2023 AS ${asName}` : "FROM amazonlinux:2023";
45935
+ const sclEtc = `/etc/opt/remi/${scl}`;
45936
+ const from = asName ? `FROM almalinux:9 AS ${asName}` : "FROM almalinux:9";
45935
45937
  return `${from}
45936
45938
 
45937
- # Remi provides version-isolated PHP SCL packages for EL9 (AL2023 compatible).
45938
- RUN dnf -y install dnf-plugins-core 'dnf-command(config-manager)' && \\
45939
+ # Build PHP on AlmaLinux 9 (where Remi's version-isolated SCL packages install
45940
+ # cleanly Remi's release RPM rejects Amazon Linux 2023). AlmaLinux 9 shares
45941
+ # glibc 2.34 with the provided.al2023 Lambda runtime, and the relocation step
45942
+ # below bundles every non-glibc shared lib under /opt/php/lib, so the resulting
45943
+ # /opt tree runs on Lambda's provided.al2023.
45944
+ RUN dnf -y install epel-release dnf-plugins-core 'dnf-command(config-manager)' && \\
45945
+ dnf config-manager --set-enabled crb && \\
45939
45946
  dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm && \\
45940
- dnf -y update && \\
45941
45947
  dnf -y install \\
45942
45948
  ${packages} \\
45943
45949
  findutils tar gzip && \\
@@ -45950,7 +45956,10 @@ RUN set -eux; \\
45950
45956
  cp ${sclRoot}/usr/sbin/php-fpm /opt/php/sbin/php-fpm; \\
45951
45957
  EXT_DIR="$(${sclRoot}/usr/bin/php -r 'echo ini_get("extension_dir");')"; \\
45952
45958
  cp -a "$EXT_DIR"/*.so /opt/php/lib/php/modules/ || true; \\
45953
- cp -a ${sclRoot}/etc/php.d/*.ini /opt/php/etc/php.d/ 2>/dev/null || true; \\
45959
+ cp -a ${sclEtc}/php.d/*.ini /opt/php/etc/php.d/ 2>/dev/null || true; \\
45960
+ # Rewrite any absolute extension/zend_extension paths to bare names so they
45961
+ # resolve against the relocated extension_dir.
45962
+ sed -i -E "s#(zend_)?extension *= *.*/([^/]+\\.so)#\\1extension=\\2#" /opt/php/etc/php.d/*.ini 2>/dev/null || true; \\
45954
45963
  # Copy shared-library dependencies of php, php-fpm, and the extension modules.
45955
45964
  for bin in /opt/php/bin/php /opt/php/sbin/php-fpm /opt/php/lib/php/modules/*.so; do \\
45956
45965
  ldd "$bin" 2>/dev/null | awk '/=>/{print $3}/ld-linux/{print $1}' | sort -u | while read -r lib; do \\
@@ -45958,10 +45967,9 @@ RUN set -eux; \\
45958
45967
  done; \\
45959
45968
  done
45960
45969
 
45961
- # Point PHP at the relocated config + extension dir.
45970
+ # Build the relocated main php.ini: extension_dir + every per-extension directive.
45962
45971
  RUN printf 'extension_dir=/opt/php/lib/php/modules\\n' > /opt/php/etc/php.ini && \\
45963
45972
  cat /opt/php/etc/php.d/*.ini >> /opt/php/etc/php.ini 2>/dev/null || true
45964
- ENV PHP_INI_SCAN_DIR=/opt/php/etc/php.d
45965
45973
 
45966
45974
  # Runtime assets (bootstrap, runtime loops, fpm config) are added by the build
45967
45975
  # orchestrator after the image is produced. Export /opt as the layer payload.
@@ -46278,7 +46286,7 @@ var LARAVEL_SERVERLESS_BUILD_STEPS = [
46278
46286
  ];
46279
46287
  // src/serverless-php/layer-build.ts
46280
46288
  import { execFileSync as execFileSync2 } from "node:child_process";
46281
- import { existsSync as existsSync5, mkdtempSync as mkdtempSync3, readdirSync as readdirSync5, readFileSync as readFileSync6, rmSync as rmSync3, statSync as statSync3, writeFileSync as writeFileSync5 } from "node:fs";
46289
+ import { existsSync as existsSync5, mkdirSync as mkdirSync2, mkdtempSync as mkdtempSync3, readdirSync as readdirSync5, readFileSync as readFileSync6, rmSync as rmSync3, statSync as statSync3, writeFileSync as writeFileSync5 } from "node:fs";
46282
46290
  import { tmpdir as tmpdir3 } from "node:os";
46283
46291
  import { join as join9, relative as relative2 } from "node:path";
46284
46292
  function* walk(dir) {
@@ -46300,16 +46308,17 @@ function buildPhpRuntimeLayerZip(options = {}) {
46300
46308
  writeFileSync5(join9(stage, "Dockerfile"), generatePhpLayerDockerfile(options));
46301
46309
  step("Building PHP runtime image (docker)");
46302
46310
  execFileSync2("docker", ["build", "--platform", platform, "-t", imageTag, stage], { stdio: "inherit" });
46303
- step("Extracting /opt from image");
46311
+ step("Extracting /opt/php from image");
46304
46312
  const cid = execFileSync2("docker", ["create", "--platform", platform, imageTag], { encoding: "utf-8" }).trim();
46305
46313
  const optDir = join9(stage, "opt");
46314
+ mkdirSync2(optDir, { recursive: true });
46306
46315
  try {
46307
- execFileSync2("docker", ["cp", `${cid}:/opt/.`, optDir], { stdio: "inherit" });
46316
+ execFileSync2("docker", ["cp", `${cid}:/opt/php`, join9(optDir, "php")], { stdio: "inherit" });
46308
46317
  } finally {
46309
46318
  execFileSync2("docker", ["rm", cid], { stdio: "ignore" });
46310
46319
  }
46311
- if (!existsSync5(optDir))
46312
- throw new Error("layer build produced no /opt directory");
46320
+ if (!existsSync5(join9(optDir, "php", "bin", "php")))
46321
+ throw new Error("layer build produced no /opt/php/bin/php");
46313
46322
  const entries = [];
46314
46323
  for (const file of walk(optDir)) {
46315
46324
  const rel = relative2(optDir, file).replace(/\\/g, "/");
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Generates the Dockerfile that builds the ts-cloud PHP runtime layer for AWS
3
- * Lambda (`provided.al2023`). Built against Amazon Linux 2023 so glibc and the
4
- * shared libraries match the Lambda execution environment.
3
+ * Lambda (`provided.al2023`). Built on AlmaLinux 9 it shares glibc 2.34 with
4
+ * the Lambda runtime, and (unlike Amazon Linux 2023) the Remi repository's
5
+ * release RPM installs there, giving version-isolated PHP SCL packages
6
+ * (`php83-php-*` under `/opt/remi/php83/`) so the same recipe builds PHP 8.1–8.4.
5
7
  *
6
- * AL2023's default repos can't select an arbitrary PHP minor version, so we use
7
- * the Remi repository's SCL-style packages (`php83-php-*`, installed under
8
- * `/opt/remi/php83/`), which lets the same recipe build PHP 8.1–8.4. The PHP
9
- * binary, php-fpm, extensions, and their shared-library dependencies are then
10
- * relocated under `/opt` so the archive works as a Lambda layer.
8
+ * The PHP binary, php-fpm, extensions, and all their non-glibc shared-library
9
+ * dependencies are relocated + bundled under `/opt` so the archive runs as a
10
+ * provided.al2023 Lambda layer.
11
11
  *
12
12
  * Build it in CI (Docker required) — see {@link buildPhpRuntimeLayerZip}. The
13
13
  * resulting /opt tree is published as a Lambda layer.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ts-cloud/core",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "type": "module",
5
5
  "description": "Core CloudFormation generation library for ts-cloud",
6
6
  "author": "Chris Breuer <chris@stacksjs.com>",
@@ -31,7 +31,7 @@
31
31
  "typecheck": "tsc --noEmit"
32
32
  },
33
33
  "dependencies": {
34
- "@ts-cloud/aws-types": "0.4.1"
34
+ "@ts-cloud/aws-types": "0.4.2"
35
35
  },
36
36
  "devDependencies": {
37
37
  "typescript": "^5.9.3"