@augmenting-integrations/deploy-tools 8.4.0 → 8.5.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/LICENSE +21 -0
- package/dist/chunk-A7IIB34G.js +0 -0
- package/dist/{chunk-Q5W2NBVE.js → chunk-RYVRSM25.js} +1 -1
- package/dist/chunk-RYVRSM25.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/package-next-lambda.d.ts.map +1 -1
- package/dist/package-next-lambda.js +1 -1
- package/package.json +10 -10
- package/dist/chunk-Q5W2NBVE.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Augmenting Integrations LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/chunk-A7IIB34G.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/package-next-lambda.ts"],"sourcesContent":["import {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readlinkSync,\n realpathSync,\n rmSync,\n statSync,\n chmodSync,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport process from \"node:process\";\n\n// =============================================================================\n// `augint package-next-lambda`\n//\n// Stages a Next.js standalone build into a Lambda-ready directory at\n// `.next/standalone/`. Lifts the symlink-flatten loop, force-copy of\n// runtime-required pnpm packages, Prisma .prisma hoist, and .pnpm purge\n// from each spoke's CI workflow so the logic is fixed in one place.\n//\n// Defaults assume the spoke convention:\n// - cwd contains .next/ (from `next build`)\n// - run.sh at cwd root (LWA entry)\n// - optional Makefile at cwd root (SAM BuildMethod=makefile)\n// - optional public/ and content/ at cwd root\n//\n// Flags:\n// --cwd <path> Override working directory\n// --no-prisma Skip Prisma .prisma hoist (use for apex)\n// --no-makefile Skip Makefile stage\n// =============================================================================\n\ntype Options = {\n cwd: string;\n prismaHoist: boolean;\n stageMakefile: boolean;\n};\n\nfunction parseArgs(argv: string[]): Options {\n let cwd = process.cwd();\n let prismaHoist = true;\n let stageMakefile = true;\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--cwd\" || a === \"--root\") {\n const next = argv[i + 1];\n if (next) {\n cwd = resolve(next);\n i++;\n }\n } else if (a === \"--no-prisma\") {\n prismaHoist = false;\n } else if (a === \"--no-makefile\") {\n stageMakefile = false;\n }\n }\n return { cwd, prismaHoist, stageMakefile };\n}\n\nfunction copyIfExists(src: string, dst: string, opts: { dereference?: boolean } = {}) {\n if (!existsSync(src)) return;\n cpSync(src, dst, { recursive: true, dereference: !!opts.dereference, force: true });\n}\n\nfunction* walkSymlinks(root: string): Generator<string> {\n if (!existsSync(root)) return;\n const stack = [root];\n while (stack.length > 0) {\n const dir = stack.pop()!;\n let entries: Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n try {\n entries = readdirSync(dir, { withFileTypes: true }) as unknown as Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n } catch {\n continue;\n }\n for (const e of entries) {\n const full = join(dir, e.name);\n let lst: ReturnType<typeof lstatSync>;\n try {\n lst = lstatSync(full);\n } catch {\n continue;\n }\n if (lst.isSymbolicLink()) {\n yield full;\n } else if (lst.isDirectory()) {\n stack.push(full);\n }\n }\n }\n}\n\nfunction flattenSymlinks(roots: string[]) {\n // Multiple passes: dereferencing one link can expose a deeper one.\n for (let pass = 0; pass < 5; pass++) {\n let flattened = 0;\n for (const root of roots) {\n for (const link of walkSymlinks(root)) {\n let target: string;\n try {\n target = realpathSync(link);\n } catch {\n continue;\n }\n if (!existsSync(target)) continue;\n rmSync(link, { force: true });\n cpSync(target, link, { recursive: true, dereference: true, force: true });\n flattened++;\n }\n }\n if (flattened === 0) return;\n }\n}\n\nfunction copyRuntimePkg(cwd: string, pkg: string, standaloneNodeMods: string) {\n // Look in the standard tree and the .pnpm/node_modules hoist position.\n const candidates = [\n join(cwd, \"node_modules\", pkg),\n join(cwd, \"node_modules\", \".pnpm\", \"node_modules\", pkg),\n ];\n for (const src of candidates) {\n if (existsSync(src)) {\n const dst = join(standaloneNodeMods, pkg);\n rmSync(dst, { recursive: true, force: true });\n mkdirSync(dirname(dst), { recursive: true });\n cpSync(src, dst, { recursive: true, dereference: true, force: true });\n return;\n }\n }\n throw new Error(`runtime package not found: ${pkg}`);\n}\n\nfunction hoistPrismaClient(standaloneNodeMods: string) {\n // pnpm keeps .prisma/client inside the .pnpm subdir alongside @prisma/client.\n // After we flatten and purge .pnpm, that path disappears, but @prisma/client\n // does require('.prisma/client/...') at runtime. Hoist a copy first.\n const pnpmRoot = join(standaloneNodeMods, \".pnpm\");\n if (!existsSync(pnpmRoot)) return;\n const found = findFirst(pnpmRoot, (full) =>\n full.endsWith(join(\"node_modules\", \".prisma\", \"client\")),\n );\n if (!found) return;\n const dst = join(standaloneNodeMods, \".prisma\", \"client\");\n mkdirSync(dirname(dst), { recursive: true });\n cpSync(found, dst, { recursive: true, dereference: true, force: true });\n}\n\nfunction findFirst(root: string, predicate: (path: string) => boolean): string | null {\n const stack = [root];\n while (stack.length > 0) {\n const dir = stack.pop()!;\n let entries: Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n try {\n entries = readdirSync(dir, { withFileTypes: true }) as unknown as Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n } catch {\n continue;\n }\n for (const e of entries) {\n const full = join(dir, e.name);\n if (predicate(full)) return full;\n if (e.isDirectory()) stack.push(full);\n }\n }\n return null;\n}\n\nexport async function runPackageNextLambda(argv: string[]): Promise<void> {\n const opts = parseArgs(argv);\n const cwd = opts.cwd;\n const standalone = join(cwd, \".next\", \"standalone\");\n if (!existsSync(standalone)) {\n process.stderr.write(\n `package-next-lambda: ${standalone} missing. Run \\`next build\\` first.\\n`,\n );\n process.exit(1);\n }\n\n // ----- Stage static + public + content + run.sh + Makefile + manifest -----\n mkdirSync(join(standalone, \".next\"), { recursive: true });\n copyIfExists(join(cwd, \".next\", \"static\"), join(standalone, \".next\", \"static\"));\n copyIfExists(join(cwd, \"public\"), join(standalone, \"public\"));\n copyIfExists(join(cwd, \"content\"), join(standalone, \"content\"));\n copyIfExists(join(cwd, \"app.manifest.json\"), join(standalone, \"app.manifest.json\"));\n const runSh = join(cwd, \"run.sh\");\n if (existsSync(runSh)) {\n cpSync(runSh, join(standalone, \"run.sh\"));\n try {\n chmodSync(join(standalone, \"run.sh\"), 0o755);\n } catch {\n // chmod may fail on Windows runners; ignore.\n }\n }\n if (opts.stageMakefile) {\n copyIfExists(join(cwd, \"Makefile\"), join(standalone, \"Makefile\"));\n }\n\n // ----- Flatten pnpm symlinks (Lambda runtime can't follow them) -----\n flattenSymlinks([\n join(standalone, \"node_modules\"),\n join(standalone, \".next\", \"node_modules\"),\n ]);\n\n // ----- Force-copy known runtime-required packages -----\n const standaloneNodeMods = join(standalone, \"node_modules\");\n for (const pkg of [\"@swc/helpers\", \"@next/env\"]) {\n try {\n copyRuntimePkg(cwd, pkg, standaloneNodeMods);\n } catch (err) {\n process.stderr.write(\n `package-next-lambda: ${(err as Error).message}\\n` +\n \"Consider adding the package to dependencies or removing it from the runtime list.\\n\",\n );\n process.exit(1);\n }\n }\n\n // ----- Prisma .prisma hoist (spokes with a data plane) -----\n if (opts.prismaHoist) {\n hoistPrismaClient(standaloneNodeMods);\n }\n\n // ----- Purge .pnpm (unreferenced after symlink flatten) -----\n const pnpmRoot = join(standaloneNodeMods, \".pnpm\");\n if (existsSync(pnpmRoot)) {\n rmSync(pnpmRoot, { recursive: true, force: true });\n }\n\n // ----- Report size -----\n const bytes = directorySize(standalone);\n process.stdout.write(\n `package-next-lambda: staged ${standalone} (${(bytes / 1024 / 1024).toFixed(1)} MB)\\n`,\n );\n}\n\nfunction directorySize(root: string): number {\n let total = 0;\n const stack = [root];\n while (stack.length > 0) {\n const dir = stack.pop()!;\n let entries: Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n try {\n entries = readdirSync(dir, { withFileTypes: true }) as unknown as Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n } catch {\n continue;\n }\n for (const e of entries) {\n const full = join(dir, e.name);\n try {\n if (e.isDirectory()) {\n stack.push(full);\n } else {\n total += statSync(full).size;\n }\n } catch {\n // ignore unreadable\n }\n }\n }\n return total;\n}\n\nvoid readlinkSync; // referenced for completeness in walk; silence unused warning\n\nconst isDirectInvocation =\n import.meta.url === `file://${process.argv[1]}` ||\n process.argv[1]?.endsWith(\"package-next-lambda.js\");\nif (isDirectInvocation) {\n runPackageNextLambda(process.argv.slice(2)).catch((err) => {\n process.stderr.write(\n `package-next-lambda: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n process.exit(1);\n });\n}\n"],"mappings":"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","names":[]}
|
package/dist/cli.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-next-lambda.d.ts","sourceRoot":"","sources":["../src/package-next-lambda.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-next-lambda.d.ts","sourceRoot":"","sources":["../src/package-next-lambda.ts"],"names":[],"mappings":"AAyLA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkExE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@augmenting-integrations/deploy-tools",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.5.0",
|
|
4
4
|
"description": "Augint platform deploy tooling. `augint validate-spoke` checks Prisma canonical schema against the app manifest; `augint package-next-lambda` packages a Next standalone build for Lambda. Shared across every spoke + apex repo so deploy logic isn't copy/pasted into each app's CI workflow.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -17,19 +17,19 @@
|
|
|
17
17
|
"scripts",
|
|
18
18
|
"README.md"
|
|
19
19
|
],
|
|
20
|
-
"scripts": {
|
|
21
|
-
"build": "tsup",
|
|
22
|
-
"clean": "rm -rf dist",
|
|
23
|
-
"test": "vitest run --passWithNoTests"
|
|
24
|
-
},
|
|
25
20
|
"dependencies": {
|
|
26
|
-
"@augmenting-integrations/platform": "
|
|
21
|
+
"@augmenting-integrations/platform": "8.5.0"
|
|
27
22
|
},
|
|
28
23
|
"devDependencies": {
|
|
29
|
-
"@augmenting-integrations/platform": "workspace:*",
|
|
30
24
|
"@types/node": "^20.17.6",
|
|
31
25
|
"tsup": "^8.3.5",
|
|
32
26
|
"typescript": "^5.7.2",
|
|
33
|
-
"vitest": "^4.1.5"
|
|
27
|
+
"vitest": "^4.1.5",
|
|
28
|
+
"@augmenting-integrations/platform": "8.5.0"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsup",
|
|
32
|
+
"clean": "rm -rf dist",
|
|
33
|
+
"test": "vitest run --passWithNoTests"
|
|
34
34
|
}
|
|
35
|
-
}
|
|
35
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/package-next-lambda.ts"],"sourcesContent":["import {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readlinkSync,\n realpathSync,\n rmSync,\n statSync,\n chmodSync,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport process from \"node:process\";\n\n// =============================================================================\n// `augint package-next-lambda`\n//\n// Stages a Next.js standalone build into a Lambda-ready directory at\n// `.next/standalone/`. Lifts the symlink-flatten loop, force-copy of\n// runtime-required pnpm packages, Prisma .prisma hoist, and .pnpm purge\n// from each spoke's CI workflow so the logic is fixed in one place.\n//\n// Defaults assume the spoke convention:\n// - cwd contains .next/ (from `next build`)\n// - run.sh at cwd root (LWA entry)\n// - optional Makefile at cwd root (SAM BuildMethod=makefile)\n// - optional public/ and content/ at cwd root\n//\n// Flags:\n// --cwd <path> Override working directory\n// --no-prisma Skip Prisma .prisma hoist (use for apex)\n// --no-makefile Skip Makefile stage\n// =============================================================================\n\ntype Options = {\n cwd: string;\n prismaHoist: boolean;\n stageMakefile: boolean;\n};\n\nfunction parseArgs(argv: string[]): Options {\n let cwd = process.cwd();\n let prismaHoist = true;\n let stageMakefile = true;\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--cwd\" || a === \"--root\") {\n const next = argv[i + 1];\n if (next) {\n cwd = resolve(next);\n i++;\n }\n } else if (a === \"--no-prisma\") {\n prismaHoist = false;\n } else if (a === \"--no-makefile\") {\n stageMakefile = false;\n }\n }\n return { cwd, prismaHoist, stageMakefile };\n}\n\nfunction copyIfExists(src: string, dst: string, opts: { dereference?: boolean } = {}) {\n if (!existsSync(src)) return;\n cpSync(src, dst, { recursive: true, dereference: !!opts.dereference, force: true });\n}\n\nfunction* walkSymlinks(root: string): Generator<string> {\n if (!existsSync(root)) return;\n const stack = [root];\n while (stack.length > 0) {\n const dir = stack.pop()!;\n let entries: Array<{ name: string; isDirectory(): boolean; isSymbolicLink(): boolean }>;\n try {\n entries = readdirSync(dir, { withFileTypes: true }) as unknown as Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n } catch {\n continue;\n }\n for (const e of entries) {\n const full = join(dir, e.name);\n let lst: ReturnType<typeof lstatSync>;\n try {\n lst = lstatSync(full);\n } catch {\n continue;\n }\n if (lst.isSymbolicLink()) {\n yield full;\n } else if (lst.isDirectory()) {\n stack.push(full);\n }\n }\n }\n}\n\nfunction flattenSymlinks(roots: string[]) {\n // Multiple passes: dereferencing one link can expose a deeper one.\n for (let pass = 0; pass < 5; pass++) {\n let flattened = 0;\n for (const root of roots) {\n for (const link of walkSymlinks(root)) {\n let target: string;\n try {\n target = realpathSync(link);\n } catch {\n continue;\n }\n if (!existsSync(target)) continue;\n rmSync(link, { force: true });\n cpSync(target, link, { recursive: true, dereference: true, force: true });\n flattened++;\n }\n }\n if (flattened === 0) return;\n }\n}\n\nfunction copyRuntimePkg(cwd: string, pkg: string, standaloneNodeMods: string) {\n // Look in the standard tree and the .pnpm/node_modules hoist position.\n const candidates = [\n join(cwd, \"node_modules\", pkg),\n join(cwd, \"node_modules\", \".pnpm\", \"node_modules\", pkg),\n ];\n for (const src of candidates) {\n if (existsSync(src)) {\n const dst = join(standaloneNodeMods, pkg);\n rmSync(dst, { recursive: true, force: true });\n mkdirSync(dirname(dst), { recursive: true });\n cpSync(src, dst, { recursive: true, dereference: true, force: true });\n return;\n }\n }\n throw new Error(`runtime package not found: ${pkg}`);\n}\n\nfunction hoistPrismaClient(standaloneNodeMods: string) {\n // pnpm keeps .prisma/client inside the .pnpm subdir alongside @prisma/client.\n // After we flatten and purge .pnpm, that path disappears, but @prisma/client\n // does require('.prisma/client/...') at runtime. Hoist a copy first.\n const pnpmRoot = join(standaloneNodeMods, \".pnpm\");\n if (!existsSync(pnpmRoot)) return;\n const found = findFirst(pnpmRoot, (full) =>\n full.endsWith(join(\"node_modules\", \".prisma\", \"client\")),\n );\n if (!found) return;\n const dst = join(standaloneNodeMods, \".prisma\", \"client\");\n mkdirSync(dirname(dst), { recursive: true });\n cpSync(found, dst, { recursive: true, dereference: true, force: true });\n}\n\nfunction findFirst(root: string, predicate: (path: string) => boolean): string | null {\n const stack = [root];\n while (stack.length > 0) {\n const dir = stack.pop()!;\n let entries: Array<{ name: string; isDirectory(): boolean; isSymbolicLink(): boolean }>;\n try {\n entries = readdirSync(dir, { withFileTypes: true }) as unknown as Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n } catch {\n continue;\n }\n for (const e of entries) {\n const full = join(dir, e.name);\n if (predicate(full)) return full;\n if (e.isDirectory()) stack.push(full);\n }\n }\n return null;\n}\n\nexport async function runPackageNextLambda(argv: string[]): Promise<void> {\n const opts = parseArgs(argv);\n const cwd = opts.cwd;\n const standalone = join(cwd, \".next\", \"standalone\");\n if (!existsSync(standalone)) {\n process.stderr.write(\n `package-next-lambda: ${standalone} missing. Run \\`next build\\` first.\\n`,\n );\n process.exit(1);\n }\n\n // ----- Stage static + public + content + run.sh + Makefile + manifest -----\n mkdirSync(join(standalone, \".next\"), { recursive: true });\n copyIfExists(join(cwd, \".next\", \"static\"), join(standalone, \".next\", \"static\"));\n copyIfExists(join(cwd, \"public\"), join(standalone, \"public\"));\n copyIfExists(join(cwd, \"content\"), join(standalone, \"content\"));\n copyIfExists(join(cwd, \"app.manifest.json\"), join(standalone, \"app.manifest.json\"));\n const runSh = join(cwd, \"run.sh\");\n if (existsSync(runSh)) {\n cpSync(runSh, join(standalone, \"run.sh\"));\n try {\n chmodSync(join(standalone, \"run.sh\"), 0o755);\n } catch {\n // chmod may fail on Windows runners; ignore.\n }\n }\n if (opts.stageMakefile) {\n copyIfExists(join(cwd, \"Makefile\"), join(standalone, \"Makefile\"));\n }\n\n // ----- Flatten pnpm symlinks (Lambda runtime can't follow them) -----\n flattenSymlinks([\n join(standalone, \"node_modules\"),\n join(standalone, \".next\", \"node_modules\"),\n ]);\n\n // ----- Force-copy known runtime-required packages -----\n const standaloneNodeMods = join(standalone, \"node_modules\");\n for (const pkg of [\"@swc/helpers\", \"@next/env\"]) {\n try {\n copyRuntimePkg(cwd, pkg, standaloneNodeMods);\n } catch (err) {\n process.stderr.write(\n `package-next-lambda: ${(err as Error).message}\\n` +\n \"Consider adding the package to dependencies or removing it from the runtime list.\\n\",\n );\n process.exit(1);\n }\n }\n\n // ----- Prisma .prisma hoist (spokes with a data plane) -----\n if (opts.prismaHoist) {\n hoistPrismaClient(standaloneNodeMods);\n }\n\n // ----- Purge .pnpm (unreferenced after symlink flatten) -----\n const pnpmRoot = join(standaloneNodeMods, \".pnpm\");\n if (existsSync(pnpmRoot)) {\n rmSync(pnpmRoot, { recursive: true, force: true });\n }\n\n // ----- Report size -----\n const bytes = directorySize(standalone);\n process.stdout.write(\n `package-next-lambda: staged ${standalone} (${(bytes / 1024 / 1024).toFixed(1)} MB)\\n`,\n );\n}\n\nfunction directorySize(root: string): number {\n let total = 0;\n const stack = [root];\n while (stack.length > 0) {\n const dir = stack.pop()!;\n let entries: Array<{ name: string; isDirectory(): boolean; isSymbolicLink(): boolean }>;\n try {\n entries = readdirSync(dir, { withFileTypes: true }) as unknown as Array<{\n name: string;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }>;\n } catch {\n continue;\n }\n for (const e of entries) {\n const full = join(dir, e.name);\n try {\n if (e.isDirectory()) {\n stack.push(full);\n } else {\n total += statSync(full).size;\n }\n } catch {\n // ignore unreadable\n }\n }\n }\n return total;\n}\n\nvoid readlinkSync; // referenced for completeness in walk; silence unused warning\n\nconst isDirectInvocation =\n import.meta.url === `file://${process.argv[1]}` ||\n process.argv[1]?.endsWith(\"package-next-lambda.js\");\nif (isDirectInvocation) {\n runPackageNextLambda(process.argv.slice(2)).catch((err) => {\n process.stderr.write(\n `package-next-lambda: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n process.exit(1);\n });\n}\n"],"mappings":"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","names":[]}
|