@trigger.dev/build 0.0.0-prerelease-20240823132052
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/README.md +3 -0
- package/dist/commonjs/extensions/audioWaveform.d.ts +6 -0
- package/dist/commonjs/extensions/audioWaveform.js +45 -0
- package/dist/commonjs/extensions/audioWaveform.js.map +1 -0
- package/dist/commonjs/extensions/core/additionalFiles.d.ts +5 -0
- package/dist/commonjs/extensions/core/additionalFiles.js +64 -0
- package/dist/commonjs/extensions/core/additionalFiles.js.map +1 -0
- package/dist/commonjs/extensions/core/additionalPackages.d.ts +15 -0
- package/dist/commonjs/extensions/core/additionalPackages.js +77 -0
- package/dist/commonjs/extensions/core/additionalPackages.js.map +1 -0
- package/dist/commonjs/extensions/core/syncEnvVars.d.ts +16 -0
- package/dist/commonjs/extensions/core/syncEnvVars.js +129 -0
- package/dist/commonjs/extensions/core/syncEnvVars.js.map +1 -0
- package/dist/commonjs/extensions/core.d.ts +3 -0
- package/dist/commonjs/extensions/core.js +20 -0
- package/dist/commonjs/extensions/core.js.map +1 -0
- package/dist/commonjs/extensions/prisma.d.ts +19 -0
- package/dist/commonjs/extensions/prisma.js +130 -0
- package/dist/commonjs/extensions/prisma.js.map +1 -0
- package/dist/commonjs/extensions/typescript.d.ts +5 -0
- package/dist/commonjs/extensions/typescript.js +48 -0
- package/dist/commonjs/extensions/typescript.js.map +1 -0
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.js +3 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/version.d.ts +1 -0
- package/dist/commonjs/version.js +5 -0
- package/dist/commonjs/version.js.map +1 -0
- package/dist/esm/extensions/audioWaveform.d.ts +6 -0
- package/dist/esm/extensions/audioWaveform.js +42 -0
- package/dist/esm/extensions/audioWaveform.js.map +1 -0
- package/dist/esm/extensions/core/additionalFiles.d.ts +5 -0
- package/dist/esm/extensions/core/additionalFiles.js +61 -0
- package/dist/esm/extensions/core/additionalFiles.js.map +1 -0
- package/dist/esm/extensions/core/additionalPackages.d.ts +15 -0
- package/dist/esm/extensions/core/additionalPackages.js +74 -0
- package/dist/esm/extensions/core/additionalPackages.js.map +1 -0
- package/dist/esm/extensions/core/syncEnvVars.d.ts +16 -0
- package/dist/esm/extensions/core/syncEnvVars.js +126 -0
- package/dist/esm/extensions/core/syncEnvVars.js.map +1 -0
- package/dist/esm/extensions/core.d.ts +3 -0
- package/dist/esm/extensions/core.js +4 -0
- package/dist/esm/extensions/core.js.map +1 -0
- package/dist/esm/extensions/prisma.d.ts +19 -0
- package/dist/esm/extensions/prisma.js +122 -0
- package/dist/esm/extensions/prisma.js.map +1 -0
- package/dist/esm/extensions/typescript.d.ts +5 -0
- package/dist/esm/extensions/typescript.js +42 -0
- package/dist/esm/extensions/typescript.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/version.d.ts +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.emitDecoratorMetadata = emitDecoratorMetadata;
|
|
7
|
+
const build_1 = require("@trigger.dev/core/v3/build");
|
|
8
|
+
const promises_1 = require("node:fs/promises");
|
|
9
|
+
const pkg_types_1 = require("pkg-types");
|
|
10
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
11
|
+
const { transpileModule, ModuleKind } = typescript_1.default;
|
|
12
|
+
const decoratorMatcher = new RegExp(/((?<![(\s]\s*['"])@\w[.[\]\w\d]*\s*(?![;])[((?=\s)])/);
|
|
13
|
+
function emitDecoratorMetadata(options = {}) {
|
|
14
|
+
return (0, build_1.createExtensionForPlugin)(plugin(options));
|
|
15
|
+
}
|
|
16
|
+
function plugin(options = {}) {
|
|
17
|
+
return {
|
|
18
|
+
name: "emitDecoratorMetadata",
|
|
19
|
+
async setup(build) {
|
|
20
|
+
const tsconfig = await (0, pkg_types_1.readTSConfig)(options.path);
|
|
21
|
+
if (!tsconfig) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (!tsconfig.compilerOptions?.emitDecoratorMetadata) {
|
|
25
|
+
console.warn("Typescript decorators plugin requires `emitDecoratorMetadata` to be set to true in your tsconfig.json");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
build.onLoad({ filter: /\.ts$/ }, async (args) => {
|
|
29
|
+
const ts = await (0, promises_1.readFile)(args.path, "utf8");
|
|
30
|
+
if (!ts)
|
|
31
|
+
return;
|
|
32
|
+
// Find the decorator and if there isn't one, return out
|
|
33
|
+
if (!decoratorMatcher.test(ts)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const program = transpileModule(ts, {
|
|
37
|
+
fileName: args.path,
|
|
38
|
+
compilerOptions: {
|
|
39
|
+
...tsconfig.compilerOptions,
|
|
40
|
+
module: ModuleKind.ES2022,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
return { contents: program.outputText };
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/extensions/typescript.ts"],"names":[],"mappings":";;;;;AAcA,sDAEC;AAhBD,sDAAsF;AAEtF,+CAA4C;AAC5C,yCAAyC;AACzC,4DAAuC;AAEvC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,oBAAa,CAAC;AAEtD,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,sDAAsD,CAAC,CAAC;AAM5F,SAAgB,qBAAqB,CAAC,UAAwC,EAAE;IAC9E,OAAO,IAAA,gCAAwB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,MAAM,CAAC,UAAwC,EAAE;IACxD,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,KAAK,CAAC,KAAK,CAAC,KAAK;YACf,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAY,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,EAAE,CAAC;gBACrD,OAAO,CAAC,IAAI,CACV,uGAAuG,CACxG,CAAC;gBAEF,OAAO;YACT,CAAC;YAED,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC/C,MAAM,EAAE,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAE7C,IAAI,CAAC,EAAE;oBAAE,OAAO;gBAEhB,wDAAwD;gBACxD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBAED,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,EAAE;oBAClC,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,eAAe,EAAE;wBACf,GAAG,QAAQ,CAAC,eAAe;wBAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;qBAC1B;iBACF,CAAC,CAAC;gBAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION = "0.0.0";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const AUDIOWAVEFORM_VERSION = "1.10.1";
|
|
2
|
+
const AUDIOWAVEFORM_CHECKSUM = "sha256:00b41ea4d6e7a5b4affcfe4ac99951ec89da81a8cba40af19e9b98c3a8f9b4b8";
|
|
3
|
+
export function audioWaveform(options = {}) {
|
|
4
|
+
return new AudioWaveformExtension();
|
|
5
|
+
}
|
|
6
|
+
class AudioWaveformExtension {
|
|
7
|
+
options;
|
|
8
|
+
name = "AudioWaveformExtension";
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
async onBuildComplete(context, manifest) {
|
|
13
|
+
if (context.target === "dev") {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const opts = this.options.version
|
|
17
|
+
? {
|
|
18
|
+
version: this.options.version,
|
|
19
|
+
checksum: this.options.checksum,
|
|
20
|
+
}
|
|
21
|
+
: {
|
|
22
|
+
version: AUDIOWAVEFORM_VERSION,
|
|
23
|
+
checksum: AUDIOWAVEFORM_CHECKSUM,
|
|
24
|
+
};
|
|
25
|
+
context.logger.debug("Adding audiowaveform to the build", {
|
|
26
|
+
...opts,
|
|
27
|
+
});
|
|
28
|
+
const instructions = [
|
|
29
|
+
`ADD ${opts.checksum ? `--checksum=${opts.checksum}` : ""} https://github.com/bbc/audiowaveform/releases/download/${opts.version}/audiowaveform_${opts.version}-1-12_amd64.deb .`,
|
|
30
|
+
`RUN dpkg -i audiowaveform_${opts.version}-1-12_amd64.deb || true`,
|
|
31
|
+
`RUN rm audiowaveform*.deb`,
|
|
32
|
+
];
|
|
33
|
+
context.addLayer({
|
|
34
|
+
id: "audiowaveform",
|
|
35
|
+
image: {
|
|
36
|
+
pkgs: ["sox"],
|
|
37
|
+
instructions,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=audioWaveform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audioWaveform.js","sourceRoot":"","sources":["../../../src/extensions/audioWaveform.ts"],"names":[],"mappings":"AAQA,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AACvC,MAAM,sBAAsB,GAC1B,yEAAyE,CAAC;AAE5E,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,OAAO,IAAI,sBAAsB,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,sBAAsB;IAGN;IAFJ,IAAI,GAAG,wBAAwB,CAAC;IAEhD,YAAoB,UAAgC,EAAE;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAG,CAAC;IAE1D,KAAK,CAAC,eAAe,CAAC,OAAqB,EAAE,QAAuB;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;YAC/B,CAAC,CAAC;gBACE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;aAChC;YACH,CAAC,CAAC;gBACE,OAAO,EAAE,qBAAqB;gBAC9B,QAAQ,EAAE,sBAAsB;aACjC,CAAC;QAEN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE;YACxD,GAAG,IAAI;SACR,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG;YACnB,OACE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAClD,2DAA2D,IAAI,CAAC,OAAO,kBACrE,IAAI,CAAC,OACP,mBAAmB;YACnB,6BAA6B,IAAI,CAAC,OAAO,yBAAyB;YAClE,2BAA2B;SAC5B,CAAC;QAEF,OAAO,CAAC,QAAQ,CAAC;YACf,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,KAAK,CAAC;gBACb,YAAY;aACb;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { relative, join, posix, dirname } from "node:path";
|
|
2
|
+
import { glob } from "tinyglobby";
|
|
3
|
+
import { copyFile, mkdir } from "node:fs/promises";
|
|
4
|
+
export function additionalFiles(options) {
|
|
5
|
+
return {
|
|
6
|
+
name: "additionalFiles",
|
|
7
|
+
async onBuildComplete(context, manifest) {
|
|
8
|
+
// Copy any static assets to the destination
|
|
9
|
+
const staticAssets = await findStaticAssetFiles(options.files ?? [], manifest.outputPath, {
|
|
10
|
+
cwd: context.workingDir,
|
|
11
|
+
});
|
|
12
|
+
for (const { assets, matcher } of staticAssets) {
|
|
13
|
+
if (assets.length === 0) {
|
|
14
|
+
console.warn("No files found for matcher", matcher);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
await copyStaticAssets(staticAssets);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function findStaticAssetFiles(matchers, destinationPath, options) {
|
|
22
|
+
const result = [];
|
|
23
|
+
for (const matcher of matchers) {
|
|
24
|
+
const assets = await findStaticAssetsForMatcher(matcher, destinationPath, options);
|
|
25
|
+
result.push({ matcher, assets });
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
async function findStaticAssetsForMatcher(matcher, destinationPath, options) {
|
|
30
|
+
const result = [];
|
|
31
|
+
const files = await glob({
|
|
32
|
+
patterns: [matcher],
|
|
33
|
+
cwd: options?.cwd,
|
|
34
|
+
ignore: options?.ignore ?? [],
|
|
35
|
+
onlyFiles: true,
|
|
36
|
+
absolute: true,
|
|
37
|
+
});
|
|
38
|
+
let matches = 0;
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
matches++;
|
|
41
|
+
const pathInsideDestinationDir = relative(options?.cwd ?? process.cwd(), file)
|
|
42
|
+
.split(posix.sep)
|
|
43
|
+
.filter((p) => p !== "..")
|
|
44
|
+
.join(posix.sep);
|
|
45
|
+
const relativeDestinationPath = join(destinationPath, pathInsideDestinationDir);
|
|
46
|
+
result.push({
|
|
47
|
+
source: file,
|
|
48
|
+
destination: relativeDestinationPath,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
async function copyStaticAssets(staticAssetFiles) {
|
|
54
|
+
for (const { assets } of staticAssetFiles) {
|
|
55
|
+
for (const { source, destination } of assets) {
|
|
56
|
+
await mkdir(dirname(destination), { recursive: true });
|
|
57
|
+
await copyFile(source, destination);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=additionalFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"additionalFiles.js","sourceRoot":"","sources":["../../../../src/extensions/core/additionalFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BuildExtension } from "@trigger.dev/core/v3/build";
|
|
2
|
+
export type AdditionalPackagesOptions = {
|
|
3
|
+
packages: string[];
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Add additional packages to the build when deploying, useful when you are using the bin command of a package by shelling out to it.
|
|
7
|
+
* You can pass the name of the package, and it's version will be resolved from the locally installed version. If the version cannot be automatically resolved, it will resolve to the latest version, or you can specify the version using `@` syntax.
|
|
8
|
+
* @example
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* additionalPackages({
|
|
12
|
+
* packages: ["wrangler", "prisma@3.0.0"]
|
|
13
|
+
* });
|
|
14
|
+
*/
|
|
15
|
+
export declare function additionalPackages(options: AdditionalPackagesOptions): BuildExtension;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { dirname } from "node:path";
|
|
2
|
+
import { readPackageJSON } from "pkg-types";
|
|
3
|
+
/**
|
|
4
|
+
* Add additional packages to the build when deploying, useful when you are using the bin command of a package by shelling out to it.
|
|
5
|
+
* You can pass the name of the package, and it's version will be resolved from the locally installed version. If the version cannot be automatically resolved, it will resolve to the latest version, or you can specify the version using `@` syntax.
|
|
6
|
+
* @example
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* additionalPackages({
|
|
10
|
+
* packages: ["wrangler", "prisma@3.0.0"]
|
|
11
|
+
* });
|
|
12
|
+
*/
|
|
13
|
+
export function additionalPackages(options) {
|
|
14
|
+
return {
|
|
15
|
+
name: "additionalPackages",
|
|
16
|
+
async onBuildStart(context) {
|
|
17
|
+
if (context.target !== "deploy") {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const dependencies = {};
|
|
21
|
+
for (const pkg of options.packages) {
|
|
22
|
+
const { name, version } = parsePackageName(pkg);
|
|
23
|
+
if (version) {
|
|
24
|
+
dependencies[name] = version;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
try {
|
|
28
|
+
// Lets try and resolve the version from the local package.json
|
|
29
|
+
const modulePath = await context.resolvePath(name);
|
|
30
|
+
if (!modulePath) {
|
|
31
|
+
dependencies[name] = "latest";
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
console.log("Resolved module path", { modulePath });
|
|
35
|
+
const packageJSON = await readPackageJSON(dirname(modulePath));
|
|
36
|
+
if (packageJSON.version) {
|
|
37
|
+
dependencies[name] = packageJSON.version;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.warn(`Could not resolve version for package ${name}, defaulting to latest`);
|
|
41
|
+
dependencies[name] = "latest";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.warn(`Could not resolve version for package ${name}, defaulting to latest`, error);
|
|
46
|
+
dependencies[name] = "latest";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
context.addLayer({
|
|
51
|
+
id: "additionalPackages",
|
|
52
|
+
dependencies,
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// This needs to handle packages like @taskhero/config@1.0.0, wrangler, wrangler@1.0.0, @taskhero/config, etc.
|
|
58
|
+
function parsePackageName(pkg) {
|
|
59
|
+
// Regular expression to match package names and versions
|
|
60
|
+
const regex = /^(@?[a-z0-9-~][a-z0-9-._~]*\/)?([a-z0-9-~][a-z0-9-._~]*)(@(.+))?$/i;
|
|
61
|
+
const match = pkg.match(regex);
|
|
62
|
+
if (!match) {
|
|
63
|
+
throw new Error(`Invalid package name: ${pkg}`);
|
|
64
|
+
}
|
|
65
|
+
const [, scope, packageName, , version] = match;
|
|
66
|
+
if (!packageName) {
|
|
67
|
+
throw new Error(`Invalid package name: ${pkg}`);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
name: scope ? `${scope}${packageName}` : packageName,
|
|
71
|
+
version,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=additionalPackages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"additionalPackages.js","sourceRoot":"","sources":["../../../../src/extensions/core/additionalPackages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAM5C;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,KAAK,CAAC,YAAY,CAAC,OAAO;YACxB,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAA2B,EAAE,CAAC;YAEhD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAEhD,IAAI,OAAO,EAAE,CAAC;oBACZ,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC;wBACH,+DAA+D;wBAC/D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAEnD,IAAI,CAAC,UAAU,EAAE,CAAC;4BAChB,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;4BAC9B,SAAS;wBACX,CAAC;wBAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;wBAEpD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;wBAE/D,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;4BACxB,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;wBAC3C,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,IAAI,CAAC,yCAAyC,IAAI,wBAAwB,CAAC,CAAC;4BAEpF,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;wBAChC,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CACV,yCAAyC,IAAI,wBAAwB,EACrE,KAAK,CACN,CAAC;wBAEF,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,QAAQ,CAAC;gBACf,EAAE,EAAE,oBAAoB;gBACxB,YAAY;aACb,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8GAA8G;AAC9G,SAAS,gBAAgB,CAAC,GAAW;IAInC,yDAAyD;IACzD,MAAM,KAAK,GAAG,oEAAoE,CAAC;IACnF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,AAAD,EAAG,OAAO,CAAC,GAAG,KAAK,CAAC;IAEhD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW;QACpD,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BuildExtension } from "@trigger.dev/core/v3/build";
|
|
2
|
+
export type SyncEnvVarsBody = Record<string, string> | Array<{
|
|
3
|
+
name: string;
|
|
4
|
+
value: string;
|
|
5
|
+
}>;
|
|
6
|
+
export type SyncEnvVarsResult = SyncEnvVarsBody | Promise<void | undefined | SyncEnvVarsBody> | void | undefined;
|
|
7
|
+
export type SyncEnvVarsParams = {
|
|
8
|
+
projectRef: string;
|
|
9
|
+
environment: string;
|
|
10
|
+
env: Record<string, string>;
|
|
11
|
+
};
|
|
12
|
+
export type SyncEnvVarsFunction = (params: SyncEnvVarsParams) => SyncEnvVarsResult;
|
|
13
|
+
export type SyncEnvVarsOptions = {
|
|
14
|
+
override?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function syncEnvVars(fn: SyncEnvVarsFunction, options?: SyncEnvVarsOptions): BuildExtension;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
const UNSYNCABLE_ENV_VARS = [
|
|
2
|
+
"PWD",
|
|
3
|
+
"MallocNanoZone",
|
|
4
|
+
"USER",
|
|
5
|
+
"LANG",
|
|
6
|
+
"__CFBundleIdentifier",
|
|
7
|
+
"COMMAND_MODE",
|
|
8
|
+
"PATH",
|
|
9
|
+
"LOGNAME",
|
|
10
|
+
"SSLKEYLOGFILE",
|
|
11
|
+
"SSH_AUTH_SOCK",
|
|
12
|
+
"SHLVL",
|
|
13
|
+
"SHELL",
|
|
14
|
+
"HOME",
|
|
15
|
+
"__CF_USER_TEXT_ENCODING",
|
|
16
|
+
"XPC_SERVICE_NAME",
|
|
17
|
+
"XPC_FLAGS",
|
|
18
|
+
"ORIGINAL_XDG_CURRENT_DESKTOP",
|
|
19
|
+
"TERM_PROGRAM",
|
|
20
|
+
"TERM_PROGRAM_VERSION",
|
|
21
|
+
"COLORTERM",
|
|
22
|
+
"GIT_ASKPASS",
|
|
23
|
+
"VSCODE_GIT_ASKPASS_NODE",
|
|
24
|
+
"VSCODE_GIT_ASKPASS_EXTRA_ARGS",
|
|
25
|
+
"VSCODE_GIT_ASKPASS_MAIN",
|
|
26
|
+
"VSCODE_GIT_IPC_HANDLE",
|
|
27
|
+
"VSCODE_INJECTION",
|
|
28
|
+
"ZDOTDIR",
|
|
29
|
+
"USER_ZDOTDIR",
|
|
30
|
+
"TERM",
|
|
31
|
+
"OLDPWD",
|
|
32
|
+
"HOMEBREW_PREFIX",
|
|
33
|
+
"HOMEBREW_CELLAR",
|
|
34
|
+
"HOMEBREW_REPOSITORY",
|
|
35
|
+
"MANPATH",
|
|
36
|
+
"INFOPATH",
|
|
37
|
+
"__GIT_PROMPT_DIR",
|
|
38
|
+
"GIT_PROMPT_EXECUTABLE",
|
|
39
|
+
"NVM_DIR",
|
|
40
|
+
"NVM_CD_FLAGS",
|
|
41
|
+
"NVM_BIN",
|
|
42
|
+
"NVM_INC",
|
|
43
|
+
"BUN_INSTALL",
|
|
44
|
+
"DENO_INSTALL",
|
|
45
|
+
"GITHUB_TOKEN",
|
|
46
|
+
"TMPDIR",
|
|
47
|
+
"_",
|
|
48
|
+
];
|
|
49
|
+
export function syncEnvVars(fn, options) {
|
|
50
|
+
return {
|
|
51
|
+
name: "SyncEnvVarsExtension",
|
|
52
|
+
async onBuildComplete(context, manifest) {
|
|
53
|
+
if (context.target === "dev") {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const $spinner = context.logger.spinner("Invoking syncEnvVars callback");
|
|
57
|
+
const result = await callSyncEnvVarsFn(fn, manifest.deploy.env ?? {}, manifest.environment, context);
|
|
58
|
+
if (!result) {
|
|
59
|
+
$spinner.stop("No env vars detected");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const env = Object.entries(result).reduce((acc, [key, value]) => {
|
|
63
|
+
if (UNSYNCABLE_ENV_VARS.includes(key)) {
|
|
64
|
+
return acc;
|
|
65
|
+
}
|
|
66
|
+
acc[key] = value;
|
|
67
|
+
return acc;
|
|
68
|
+
}, {});
|
|
69
|
+
const numberOfEnvVars = Object.keys(env).length;
|
|
70
|
+
if (numberOfEnvVars === 0) {
|
|
71
|
+
$spinner.stop("No env vars detected");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
else if (numberOfEnvVars === 1) {
|
|
75
|
+
$spinner.stop(`Found 1 env var`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
$spinner.stop(`Found ${numberOfEnvVars} env vars to sync`);
|
|
79
|
+
}
|
|
80
|
+
context.addLayer({
|
|
81
|
+
id: "sync-env-vars",
|
|
82
|
+
deploy: {
|
|
83
|
+
env,
|
|
84
|
+
override: options?.override ?? true,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async function callSyncEnvVarsFn(syncEnvVarsFn, env, environment, context) {
|
|
91
|
+
if (syncEnvVarsFn && typeof syncEnvVarsFn === "function") {
|
|
92
|
+
let resolvedEnvVars = {};
|
|
93
|
+
let result;
|
|
94
|
+
try {
|
|
95
|
+
result = await syncEnvVarsFn({
|
|
96
|
+
projectRef: context.config.project,
|
|
97
|
+
environment,
|
|
98
|
+
env,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
context.logger.warn("Error calling syncEnvVars function", error);
|
|
103
|
+
}
|
|
104
|
+
if (!result) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (Array.isArray(result)) {
|
|
108
|
+
for (const item of result) {
|
|
109
|
+
if (typeof item === "object" &&
|
|
110
|
+
item !== null &&
|
|
111
|
+
"name" in item &&
|
|
112
|
+
"value" in item &&
|
|
113
|
+
typeof item.name === "string" &&
|
|
114
|
+
typeof item.value === "string") {
|
|
115
|
+
resolvedEnvVars[item.name] = item.value;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (result) {
|
|
120
|
+
resolvedEnvVars = result;
|
|
121
|
+
}
|
|
122
|
+
return resolvedEnvVars;
|
|
123
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=syncEnvVars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncEnvVars.js","sourceRoot":"","sources":["../../../../src/extensions/core/syncEnvVars.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/extensions/core.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BuildManifest, BuildTarget } from "@trigger.dev/core/v3";
|
|
2
|
+
import { BuildContext, BuildExtension } from "@trigger.dev/core/v3/build";
|
|
3
|
+
export type PrismaExtensionOptions = {
|
|
4
|
+
schema: string;
|
|
5
|
+
migrate?: boolean;
|
|
6
|
+
version?: string;
|
|
7
|
+
directUrlEnvVarName?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function prismaExtension(options: PrismaExtensionOptions): PrismaExtension;
|
|
10
|
+
export declare class PrismaExtension implements BuildExtension {
|
|
11
|
+
private options;
|
|
12
|
+
moduleExternals: string[];
|
|
13
|
+
readonly name = "PrismaExtension";
|
|
14
|
+
private _resolvedSchemaPath?;
|
|
15
|
+
constructor(options: PrismaExtensionOptions);
|
|
16
|
+
externalsForTarget(target: BuildTarget): string[];
|
|
17
|
+
onBuildStart(context: BuildContext): Promise<void>;
|
|
18
|
+
onBuildComplete(context: BuildContext, manifest: BuildManifest): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { binaryForRuntime } from "@trigger.dev/core/v3/build";
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { cp, readdir } from "node:fs/promises";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
const BINARY_TARGET = "linux-arm64-openssl-3.0.x";
|
|
7
|
+
export function prismaExtension(options) {
|
|
8
|
+
return new PrismaExtension(options);
|
|
9
|
+
}
|
|
10
|
+
export class PrismaExtension {
|
|
11
|
+
options;
|
|
12
|
+
moduleExternals;
|
|
13
|
+
name = "PrismaExtension";
|
|
14
|
+
_resolvedSchemaPath;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.moduleExternals = ["@prisma/client", "@prisma/engines"];
|
|
18
|
+
}
|
|
19
|
+
externalsForTarget(target) {
|
|
20
|
+
if (target === "dev") {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return this.moduleExternals;
|
|
24
|
+
}
|
|
25
|
+
async onBuildStart(context) {
|
|
26
|
+
if (context.target === "dev") {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// Resolve the path to the prisma schema, relative to the config.directory
|
|
30
|
+
this._resolvedSchemaPath = resolve(context.workingDir, this.options.schema);
|
|
31
|
+
context.logger.debug(`Resolved the prisma schema to: ${this._resolvedSchemaPath}`);
|
|
32
|
+
// Check that the prisma schema exists
|
|
33
|
+
if (!existsSync(this._resolvedSchemaPath)) {
|
|
34
|
+
throw new Error(`PrismaExtension could not find the prisma schema at ${this._resolvedSchemaPath}. Make sure the path is correct: ${this.options.schema}, relative to the working dir ${context.workingDir}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async onBuildComplete(context, manifest) {
|
|
38
|
+
if (context.target === "dev") {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
assert(this._resolvedSchemaPath, "Resolved schema path is not set");
|
|
42
|
+
context.logger.debug("Looking for @prisma/client in the externals", {
|
|
43
|
+
externals: manifest.externals,
|
|
44
|
+
});
|
|
45
|
+
const prismaExternal = manifest.externals?.find((external) => external.name === "@prisma/client");
|
|
46
|
+
const version = prismaExternal?.version ?? this.options.version;
|
|
47
|
+
if (!version) {
|
|
48
|
+
throw new Error(`PrismaExtension could not determine the version of @prisma/client. It's possible that the @prisma/client was not used in the project. If this isn't the case, please provide a version in the PrismaExtension options.`);
|
|
49
|
+
}
|
|
50
|
+
context.logger.debug(`PrismaExtension is generating the Prisma client for version ${version}`);
|
|
51
|
+
const usingSchemaFolder = dirname(this._resolvedSchemaPath).endsWith("schema");
|
|
52
|
+
const commands = [];
|
|
53
|
+
let prismaDir;
|
|
54
|
+
if (usingSchemaFolder) {
|
|
55
|
+
const schemaDir = dirname(this._resolvedSchemaPath);
|
|
56
|
+
prismaDir = dirname(schemaDir);
|
|
57
|
+
context.logger.debug(`Using the schema folder: ${schemaDir}`);
|
|
58
|
+
// Find all the files in schemaDir that end with .prisma (excluding the schema.prisma file)
|
|
59
|
+
const prismaFiles = await readdir(schemaDir).then((files) => files.filter((file) => file.endsWith(".prisma")));
|
|
60
|
+
context.logger.debug(`Found prisma files in the schema folder`, {
|
|
61
|
+
prismaFiles,
|
|
62
|
+
});
|
|
63
|
+
const schemaDestinationPath = join(manifest.outputPath, "prisma", "schema");
|
|
64
|
+
const allPrismaFiles = [...prismaFiles];
|
|
65
|
+
for (const file of allPrismaFiles) {
|
|
66
|
+
const destination = join(schemaDestinationPath, file);
|
|
67
|
+
const source = join(schemaDir, file);
|
|
68
|
+
context.logger.debug(`Copying the prisma schema from ${source} to ${destination}`);
|
|
69
|
+
await cp(source, destination);
|
|
70
|
+
}
|
|
71
|
+
commands.push(`${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js generate` // Don't add the --schema flag or this will fail
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
prismaDir = dirname(this._resolvedSchemaPath);
|
|
76
|
+
// Now we need to add a layer that:
|
|
77
|
+
// Copies the prisma schema to the build outputPath
|
|
78
|
+
// Adds the `prisma` CLI dependency to the dependencies
|
|
79
|
+
// Adds the `prisma generate` command, which generates the Prisma client
|
|
80
|
+
const schemaDestinationPath = join(manifest.outputPath, "prisma", "schema.prisma");
|
|
81
|
+
// Copy the prisma schema to the build output path
|
|
82
|
+
context.logger.debug(`Copying the prisma schema from ${this._resolvedSchemaPath} to ${schemaDestinationPath}`);
|
|
83
|
+
await cp(this._resolvedSchemaPath, schemaDestinationPath);
|
|
84
|
+
commands.push(`${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js generate --schema=./prisma/schema.prisma`);
|
|
85
|
+
}
|
|
86
|
+
const env = {};
|
|
87
|
+
if (this.options.migrate) {
|
|
88
|
+
// Copy the migrations directory to the build output path
|
|
89
|
+
const migrationsDir = join(prismaDir, "migrations");
|
|
90
|
+
const migrationsDestinationPath = join(manifest.outputPath, "prisma", "migrations");
|
|
91
|
+
context.logger.debug(`Copying the prisma migrations from ${migrationsDir} to ${migrationsDestinationPath}`);
|
|
92
|
+
await cp(migrationsDir, migrationsDestinationPath, { recursive: true });
|
|
93
|
+
commands.push(`${binaryForRuntime(manifest.runtime)} node_modules/prisma/build/index.js migrate deploy`);
|
|
94
|
+
env.DATABASE_URL = manifest.deploy.env?.DATABASE_URL;
|
|
95
|
+
if (this.options.directUrlEnvVarName) {
|
|
96
|
+
env[this.options.directUrlEnvVarName] =
|
|
97
|
+
manifest.deploy.env?.[this.options.directUrlEnvVarName];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
env.DIRECT_URL = manifest.deploy.env?.DIRECT_URL;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
context.logger.debug(`Adding the prisma layer with the following commands`, {
|
|
104
|
+
commands,
|
|
105
|
+
env,
|
|
106
|
+
dependencies: {
|
|
107
|
+
prisma: version,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
context.addLayer({
|
|
111
|
+
id: "prisma",
|
|
112
|
+
commands,
|
|
113
|
+
dependencies: {
|
|
114
|
+
prisma: version,
|
|
115
|
+
},
|
|
116
|
+
build: {
|
|
117
|
+
env,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=prisma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../../src/extensions/prisma.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAgC,MAAM,4BAA4B,CAAC;AAC5F,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASnD,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,OAAO,eAAe;IAON;IANpB,eAAe,CAAW;IAEV,IAAI,GAAG,iBAAiB,CAAC;IAEjC,mBAAmB,CAAU;IAErC,YAAoB,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;QACjD,IAAI,CAAC,eAAe,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAC/D,CAAC;IAED,kBAAkB,CAAC,MAAmB;QACpC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAqB;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,0EAA0E;QAC1E,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAEnF,sCAAsC;QACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,uDAAuD,IAAI,CAAC,mBAAmB,oCAAoC,IAAI,CAAC,OAAO,CAAC,MAAM,iCAAiC,OAAO,CAAC,UAAU,EAAE,CAC5L,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAqB,EAAE,QAAuB;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,iCAAiC,CAAC,CAAC;QAEpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;YAClE,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAC7C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,gBAAgB,CACjD,CAAC;QAEF,MAAM,OAAO,GAAG,cAAc,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAEhE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,wNAAwN,CACzN,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,OAAO,EAAE,CAAC,CAAC;QAE/F,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE/E,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,SAA6B,CAAC;QAElC,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAEpD,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAE/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;YAE9D,2FAA2F;YAC3F,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1D,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CACjD,CAAC;YAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;gBAC9D,WAAW;aACZ,CAAC,CAAC;YAEH,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAE5E,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;YAExC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAErC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,MAAM,OAAO,WAAW,EAAE,CAAC,CAAC;gBAEnF,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAChC,CAAC;YAED,QAAQ,CAAC,IAAI,CACX,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,8CAA8C,CAAC,gDAAgD;aACrI,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC9C,mCAAmC;YACnC,mDAAmD;YACnD,uDAAuD;YACvD,wEAAwE;YACxE,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YACnF,kDAAkD;YAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kCAAkC,IAAI,CAAC,mBAAmB,OAAO,qBAAqB,EAAE,CACzF,CAAC;YAEF,MAAM,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;YAE1D,QAAQ,CAAC,IAAI,CACX,GAAG,gBAAgB,CACjB,QAAQ,CAAC,OAAO,CACjB,8EAA8E,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAuC,EAAE,CAAC;QAEnD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,yDAAyD;YACzD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACpD,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YAEpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,aAAa,OAAO,yBAAyB,EAAE,CACtF,CAAC;YAEF,MAAM,EAAE,CAAC,aAAa,EAAE,yBAAyB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAExE,QAAQ,CAAC,IAAI,CACX,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,oDAAoD,CAC1F,CAAC;YAEF,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC;YAErD,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBACnC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC;YACnD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,EAAE;YAC1E,QAAQ;YACR,GAAG;YACH,YAAY,EAAE;gBACZ,MAAM,EAAE,OAAO;aAChB;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC;YACf,EAAE,EAAE,QAAQ;YACZ,QAAQ;YACR,YAAY,EAAE;gBACZ,MAAM,EAAE,OAAO;aAChB;YACD,KAAK,EAAE;gBACL,GAAG;aACJ;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
|