@tailor-platform/sdk 2.0.1 → 2.1.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/CHANGELOG.md +33 -0
- package/dist/application-Af1zIqSI.mjs +3 -0
- package/dist/{application-CM6hKnSK.mjs → application-D77KJFKD.mjs} +121 -23
- package/dist/application-D77KJFKD.mjs.map +1 -0
- package/dist/cli/lib.mjs +2 -2
- package/dist/cli/main.mjs +26 -13
- package/dist/cli/main.mjs.map +1 -1
- package/dist/completion/zsh-worker.zsh +1 -1
- package/dist/configure/config/types.d.mts +12 -1
- package/dist/configure/index.d.mts +1 -1
- package/dist/configure/services/index.d.mts +1 -1
- package/dist/configure/services/resolver/index.d.mts +1 -1
- package/dist/configure/services/resolver/resolver.d.mts +1 -1
- package/dist/{globals-TfAVItuK.mjs → globals-B2nlxBrz.mjs} +2 -10
- package/dist/globals-B2nlxBrz.mjs.map +1 -0
- package/dist/{register-ts-hook-LYV7zH-e.mjs → register-ts-hook-BU18uU44.mjs} +3 -3
- package/dist/{register-ts-hook-LYV7zH-e.mjs.map → register-ts-hook-BU18uU44.mjs.map} +1 -1
- package/dist/runtime/globals.d.mts +0 -7
- package/dist/runtime/workflow.d.mts +2 -7
- package/dist/utils/test/index.d.mts +3 -0
- package/dist/utils/test/index.mjs +24 -12
- package/dist/utils/test/index.mjs.map +1 -1
- package/dist/vitest/environment.mjs +1 -1
- package/dist/vitest/setup.mjs +1 -1
- package/dist/workflow-Bamae_Yc.mjs.map +1 -1
- package/docs/configuration.md +3 -0
- package/docs/services/resolver.md +32 -0
- package/docs/testing.md +1 -1
- package/package.json +2 -2
- package/dist/application-CM6hKnSK.mjs.map +0 -1
- package/dist/application-CXNaUNhv.mjs +0 -3
- package/dist/globals-TfAVItuK.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @tailor-platform/sdk
|
|
2
2
|
|
|
3
|
+
## 2.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1976](https://github.com/tailor-platform/sdk/pull/1976) [`aef43a7`](https://github.com/tailor-platform/sdk/commit/aef43a765d2ab26c2eee9bbbe5463e28c845f8dc) Thanks [@toiroakr](https://github.com/toiroakr)! - Add `defaultPermission` to resolver namespaces in `defineConfig`, applying an access requirement to every resolver in the namespace that declares no `permission` of its own — securing a namespace no longer means editing every resolver. It takes the same values as a resolver's `permission`, including `"allowAnonymous"` for a namespace that is public by design, and a resolver's own `permission` replaces it rather than merging with it. `generate` and `deploy` now warn when a namespace declares neither a `defaultPermission` nor a `permission` on each of its resolvers.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#1982](https://github.com/tailor-platform/sdk/pull/1982) [`287c551`](https://github.com/tailor-platform/sdk/commit/287c55173c75ae6533732fb1128a16e4366961e0) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency get-tsconfig to v4.14.1
|
|
12
|
+
|
|
13
|
+
- [#1995](https://github.com/tailor-platform/sdk/pull/1995) [`b6ed05d`](https://github.com/tailor-platform/sdk/commit/b6ed05db825886dba844664210f32855572e3f88) Thanks [@renovate](https://github.com/apps/renovate)! - chore(deps): update dependency tsx to v4.23.5
|
|
14
|
+
|
|
15
|
+
- [#1976](https://github.com/tailor-platform/sdk/pull/1976) [`5d0f513`](https://github.com/tailor-platform/sdk/commit/5d0f5135fb1dc6dc9a467f48a7b5aa3d8ac57e5e) Thanks [@toiroakr](https://github.com/toiroakr)! - Fix a resolver `permission` denial returning `ReferenceError: TailorErrorMessage is not defined` to the caller instead of `access denied`. The generated guard now raises `TailorErrors`, which is the only error class the platform turns back into a message the caller can read.
|
|
16
|
+
|
|
17
|
+
`TailorErrorMessage` no longer exists in the platform runtime, so its ambient global declaration and its Vitest mock are removed as well — together they let code that always failed in production pass both type checking and tests. Code that throws `TailorErrorMessage` now fails to compile; replace it with `TailorErrors`:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
throw new TailorErrors([{ message: "not found", path: [] }]);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- [#1978](https://github.com/tailor-platform/sdk/pull/1978) [`49aa0d3`](https://github.com/tailor-platform/sdk/commit/49aa0d38fc60224d701d7663483f2137b280841f) Thanks [@toiroakr](https://github.com/toiroakr)! - `createTailorDBHook` now takes each field from the data's own properties. A type declaring a field named after a member of `Object` — `toString`, say — used to get that member as the field's value on every record that omitted the field, so validation rejected otherwise valid rows:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
✗ Found 1 error(s) in ./seed/data/Customer.jsonl
|
|
27
|
+
Expected a string: received function toString() { [native code] }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
A field named `__proto__` is recorded as a data property rather than assigned, so its value is kept instead of being swallowed by the inherited setter.
|
|
31
|
+
|
|
32
|
+
A field the data does not carry still lands as an `undefined` key, which is what keeps a column inferred from these records nullable.
|
|
33
|
+
|
|
34
|
+
- [#1967](https://github.com/tailor-platform/sdk/pull/1967) [`47e4f2b`](https://github.com/tailor-platform/sdk/commit/47e4f2bc37a735de091f83f3c4d453a004daec62) Thanks [@toiroakr](https://github.com/toiroakr)! - Drop internal RPC vocabulary from the JSDoc on the `tailor.workflow` runtime API. The module doc and `execJobFunction`'s own doc described the wire-format history behind the current names, which reached editor tooltips without telling users anything they could act on. The behaviour the text was explaining is kept: `execJobFunction` blocks until the job finishes and returns its result, while `startWorkflow` returns only an execution ID.
|
|
35
|
+
|
|
3
36
|
## 2.0.1
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
|
@@ -3996,7 +3996,8 @@ function policyEntryExpr(policy) {
|
|
|
3996
3996
|
/**
|
|
3997
3997
|
* Build the permission guard statement injected at resolver entry.
|
|
3998
3998
|
*
|
|
3999
|
-
* Rejects the call with `
|
|
3999
|
+
* Rejects the call with `TailorErrors` — the only error class the platform
|
|
4000
|
+
* turns back into a message the caller can read — when the caller doesn't match
|
|
4000
4001
|
* `permission`, evaluated against `context.caller` — the original caller,
|
|
4001
4002
|
* unaffected by `authInvoker`. `permission` is deny-by-default: a caller is
|
|
4002
4003
|
* granted only by a matching `permit: true` policy, and a matching
|
|
@@ -4025,7 +4026,8 @@ function buildResolverPermissionGuardExpr(permission) {
|
|
|
4025
4026
|
const $reasons = ($matchedDeny.length > 0 ? $matchedDeny : $allowPolicies)
|
|
4026
4027
|
.map((p) => p.description)
|
|
4027
4028
|
.filter(Boolean);
|
|
4028
|
-
|
|
4029
|
+
const $message = $reasons.length > 0 ? "access denied: " + $reasons.join("; ") : "access denied";
|
|
4030
|
+
throw new TailorErrors([{ message: $message, path: [] }]);
|
|
4029
4031
|
}
|
|
4030
4032
|
}`;
|
|
4031
4033
|
}
|
|
@@ -4035,16 +4037,18 @@ function buildResolverPermissionGuardExpr(permission) {
|
|
|
4035
4037
|
*
|
|
4036
4038
|
* Kept as a single generator so a resolver-wrapping behavior (like the
|
|
4037
4039
|
* permission guard) can't be added to one entry-point template and forgotten
|
|
4038
|
-
* in the other
|
|
4039
|
-
*
|
|
4040
|
+
* in the other — the namespace-default precedence below is resolved here for
|
|
4041
|
+
* the same reason. References `context.caller`, `context.input`, `invoker`,
|
|
4042
|
+
* and `_internalResolver` — the caller's wrapper must bind a `context` object
|
|
4040
4043
|
* with `user`/`input` properties and an `invoker` binding (from
|
|
4041
4044
|
* `INVOKER_EXPR`) before inlining this expression.
|
|
4042
|
-
* @param
|
|
4045
|
+
* @param params - The resolver's and its namespace's permission config
|
|
4043
4046
|
* @returns A JS statement block to inline before calling `_internalResolver.body(...)`
|
|
4044
4047
|
*/
|
|
4045
|
-
function buildResolverPermissionAndInputCheckExpr(
|
|
4048
|
+
function buildResolverPermissionAndInputCheckExpr(params) {
|
|
4049
|
+
const { permission, defaultPermission } = params;
|
|
4046
4050
|
return `
|
|
4047
|
-
${buildResolverPermissionGuardExpr(permission) ?? ""}
|
|
4051
|
+
${buildResolverPermissionGuardExpr(permission ?? defaultPermission) ?? ""}
|
|
4048
4052
|
if (_internalResolver.input) {
|
|
4049
4053
|
const result = t.object(_internalResolver.input).parse({
|
|
4050
4054
|
value: context.input,
|
|
@@ -4544,17 +4548,11 @@ async function loadResolver(resolverFilePath) {
|
|
|
4544
4548
|
* 1. Uses a transform plugin to add validation wrapper during bundling
|
|
4545
4549
|
* 2. Creates an in-memory entry module
|
|
4546
4550
|
* 3. Bundles in a single step with tree-shaking
|
|
4547
|
-
* @param
|
|
4548
|
-
* @param config - Resolver file loading configuration
|
|
4549
|
-
* @param baseDir - Directory the config's file patterns are resolved against
|
|
4550
|
-
* @param startContext - Start context for workflow/job transformations
|
|
4551
|
-
* @param cache - Optional bundle cache for skipping unchanged builds
|
|
4552
|
-
* @param inlineSourcemap - Whether to enable inline sourcemaps
|
|
4553
|
-
* @param bundleLogLevel - Controls which console calls are kept in bundled code
|
|
4554
|
-
* @param tsconfigCache - Optional tsconfig lookup cache shared across bundles in this CLI run
|
|
4551
|
+
* @param options - Bundle options
|
|
4555
4552
|
* @returns Map of resolver name to bundled code
|
|
4556
4553
|
*/
|
|
4557
|
-
async function bundleResolvers(
|
|
4554
|
+
async function bundleResolvers(options) {
|
|
4555
|
+
const { namespace, config, baseDir, defaultPermission, startContext, cache, inlineSourcemap, bundleLogLevel = "DEBUG", tsconfigCache } = options;
|
|
4558
4556
|
const bundledCode = /* @__PURE__ */ new Map();
|
|
4559
4557
|
const files = loadFilesWithIgnores(config, baseDir);
|
|
4560
4558
|
if (files.length === 0) {
|
|
@@ -4577,16 +4575,27 @@ async function bundleResolvers(namespace, config, baseDir, startContext, cache,
|
|
|
4577
4575
|
});
|
|
4578
4576
|
}
|
|
4579
4577
|
const tsconfig = await resolveTSConfigWithFallback(baseDir);
|
|
4580
|
-
const results = await withBundleConcurrency(resolvers, (resolver) => bundleSingleResolver(
|
|
4578
|
+
const results = await withBundleConcurrency(resolvers, (resolver) => bundleSingleResolver({
|
|
4579
|
+
namespace,
|
|
4580
|
+
resolver,
|
|
4581
|
+
tsconfig,
|
|
4582
|
+
defaultPermission,
|
|
4583
|
+
startContext,
|
|
4584
|
+
cache,
|
|
4585
|
+
inlineSourcemap,
|
|
4586
|
+
bundleLogLevel,
|
|
4587
|
+
tsconfigCache
|
|
4588
|
+
}));
|
|
4581
4589
|
for (const [name, code] of results) bundledCode.set(name, code);
|
|
4582
4590
|
logger.log(`${styles.success("Bundled")} ${styles.info(`"${namespace}"`)}`);
|
|
4583
4591
|
return bundledCode;
|
|
4584
4592
|
}
|
|
4585
|
-
async function bundleSingleResolver(
|
|
4593
|
+
async function bundleSingleResolver(options) {
|
|
4594
|
+
const { namespace, resolver, tsconfig, defaultPermission, startContext, cache, inlineSourcemap, bundleLogLevel = "DEBUG", tsconfigCache } = options;
|
|
4586
4595
|
const serializedStartContext = serializeStartContext(startContext);
|
|
4587
4596
|
const contextHash = computeBundlerContextHash({
|
|
4588
4597
|
sourceFile: resolver.sourceFile,
|
|
4589
|
-
extraContext: serializedStartContext,
|
|
4598
|
+
extraContext: JSON.stringify([serializedStartContext, defaultPermission ?? null]),
|
|
4590
4599
|
tsconfig,
|
|
4591
4600
|
inlineSourcemap,
|
|
4592
4601
|
bundleLogLevel
|
|
@@ -4606,7 +4615,10 @@ async function bundleSingleResolver(namespace, resolver, tsconfig, startContext,
|
|
|
4606
4615
|
|
|
4607
4616
|
const $tailor_resolver_body = async (context) => {
|
|
4608
4617
|
const invoker = ${INVOKER_EXPR};
|
|
4609
|
-
${buildResolverPermissionAndInputCheckExpr(
|
|
4618
|
+
${buildResolverPermissionAndInputCheckExpr({
|
|
4619
|
+
permission: resolver.permission,
|
|
4620
|
+
defaultPermission
|
|
4621
|
+
})}
|
|
4610
4622
|
return _internalResolver.body({ ...context, invoker });
|
|
4611
4623
|
};
|
|
4612
4624
|
|
|
@@ -4642,6 +4654,53 @@ async function bundleSingleResolver(namespace, resolver, tsconfig, startContext,
|
|
|
4642
4654
|
return [resolver.name, code];
|
|
4643
4655
|
}
|
|
4644
4656
|
|
|
4657
|
+
//#endregion
|
|
4658
|
+
//#region src/cli/services/resolver/default-permission.ts
|
|
4659
|
+
/**
|
|
4660
|
+
* Validate a resolver namespace's `defaultPermission` with the same schema as
|
|
4661
|
+
* a resolver's own `permission`, so an invalid policy fails the build instead
|
|
4662
|
+
* of compiling into a guard that lets everyone through.
|
|
4663
|
+
* @param params - The namespace name and its resolver service config
|
|
4664
|
+
* @returns The validated default, or `undefined` when the namespace declares none
|
|
4665
|
+
*/
|
|
4666
|
+
function parseResolverDefaultPermission(params) {
|
|
4667
|
+
const { namespace, config } = params;
|
|
4668
|
+
if (config.defaultPermission === void 0) return;
|
|
4669
|
+
const result = ResolverPermissionSchema.safeParse(config.defaultPermission);
|
|
4670
|
+
if (!result.success) throw new Error(`Invalid \`defaultPermission\` for resolver namespace "${namespace}": ` + result.error.issues.map((issue) => issue.message).join("; "));
|
|
4671
|
+
return result.data;
|
|
4672
|
+
}
|
|
4673
|
+
/**
|
|
4674
|
+
* Find the `defaultPermission` of the resolver namespace a file belongs to.
|
|
4675
|
+
*
|
|
4676
|
+
* `function test-run` receives a single file rather than a namespace, so the
|
|
4677
|
+
* namespace is recovered by matching the file against each namespace's own
|
|
4678
|
+
* patterns — otherwise a test run would skip a guard the deployed resolver has.
|
|
4679
|
+
*
|
|
4680
|
+
* Nothing stops two namespaces' patterns from claiming the same file, and
|
|
4681
|
+
* `deploy` then bundles that resolver once per namespace, each with its own
|
|
4682
|
+
* default. Picking one here would make the test run agree with only one of
|
|
4683
|
+
* the deployed copies, so an ambiguous file is rejected instead.
|
|
4684
|
+
* @param params - The config's resolver section, the resolver file, and the config's own directory
|
|
4685
|
+
* @returns The owning namespace's validated default, or `undefined` when no namespace claims the file
|
|
4686
|
+
*/
|
|
4687
|
+
function resolveResolverDefaultPermissionForFile(params) {
|
|
4688
|
+
const { config, filePath, baseDir } = params;
|
|
4689
|
+
if (!config) return;
|
|
4690
|
+
const targetFile = path.resolve(filePath);
|
|
4691
|
+
const owners = [];
|
|
4692
|
+
for (const [namespace, serviceConfig] of Object.entries(config)) {
|
|
4693
|
+
if ("external" in serviceConfig) continue;
|
|
4694
|
+
if (loadFilesWithIgnores(serviceConfig, baseDir).some((file) => path.resolve(file) === targetFile)) owners.push({
|
|
4695
|
+
namespace,
|
|
4696
|
+
config: serviceConfig
|
|
4697
|
+
});
|
|
4698
|
+
}
|
|
4699
|
+
if (owners.length > 1) throw new Error(`Resolver ${path.relative(process.cwd(), targetFile)} matches more than one resolver namespace: ${owners.map((owner) => `"${owner.namespace}"`).join(", ")}. Each namespace applies its own \`defaultPermission\`, so narrow the \`files\`/\`ignores\` patterns until exactly one namespace claims this file.`);
|
|
4700
|
+
const [owner] = owners;
|
|
4701
|
+
return owner ? parseResolverDefaultPermission(owner) : void 0;
|
|
4702
|
+
}
|
|
4703
|
+
|
|
4645
4704
|
//#endregion
|
|
4646
4705
|
//#region src/cli/services/resolver/service.ts
|
|
4647
4706
|
/**
|
|
@@ -4653,6 +4712,10 @@ async function bundleSingleResolver(namespace, resolver, tsconfig, startContext,
|
|
|
4653
4712
|
*/
|
|
4654
4713
|
function createResolverService(namespace, config, baseDir) {
|
|
4655
4714
|
const resolvers = {};
|
|
4715
|
+
const defaultPermission = parseResolverDefaultPermission({
|
|
4716
|
+
namespace,
|
|
4717
|
+
config
|
|
4718
|
+
});
|
|
4656
4719
|
const loadResolverForFile = async (resolverFile) => {
|
|
4657
4720
|
try {
|
|
4658
4721
|
const resolverModule = await import(pathToFileURL(resolverFile).href);
|
|
@@ -4674,6 +4737,7 @@ function createResolverService(namespace, config, baseDir) {
|
|
|
4674
4737
|
return {
|
|
4675
4738
|
namespace,
|
|
4676
4739
|
config,
|
|
4740
|
+
defaultPermission,
|
|
4677
4741
|
get resolvers() {
|
|
4678
4742
|
return resolvers;
|
|
4679
4743
|
},
|
|
@@ -4684,10 +4748,34 @@ function createResolverService(namespace, config, baseDir) {
|
|
|
4684
4748
|
logger.log(`Found ${styles.highlight(resolverFiles.length.toString())} resolver files for service ${styles.highlight(`"${namespace}"`)}`);
|
|
4685
4749
|
await Promise.all(resolverFiles.map((resolverFile) => loadResolverForFile(resolverFile)));
|
|
4686
4750
|
assertUniqueResolverNames(resolvers, namespace);
|
|
4751
|
+
warnUndeclaredPermissions({
|
|
4752
|
+
namespace,
|
|
4753
|
+
defaultPermission,
|
|
4754
|
+
resolvers
|
|
4755
|
+
});
|
|
4687
4756
|
}
|
|
4688
4757
|
};
|
|
4689
4758
|
}
|
|
4690
4759
|
/**
|
|
4760
|
+
* Warn about resolvers that declare no access requirement at all.
|
|
4761
|
+
*
|
|
4762
|
+
* A namespace-level `defaultPermission` covers every resolver in the
|
|
4763
|
+
* namespace, so the warning only fires when the namespace declares none and
|
|
4764
|
+
* at least one of its resolvers declares none either — those resolvers are
|
|
4765
|
+
* reachable by anonymous callers.
|
|
4766
|
+
* @param params - The namespace, its default permission, and its loaded resolvers
|
|
4767
|
+
*/
|
|
4768
|
+
function warnUndeclaredPermissions(params) {
|
|
4769
|
+
const { namespace, defaultPermission, resolvers } = params;
|
|
4770
|
+
if (defaultPermission !== void 0) return;
|
|
4771
|
+
const loaded = Object.values(resolvers);
|
|
4772
|
+
const undeclared = loaded.filter((resolver) => resolver.permission === void 0);
|
|
4773
|
+
if (undeclared.length === 0) return;
|
|
4774
|
+
logger.warn(`Resolver namespace ${styles.highlight(`"${namespace}"`)}: ${undeclared.length} of ${loaded.length} resolvers declare no \`permission\`, so anonymous callers can reach them. Set \`defaultPermission\` on the namespace, or declare \`permission\` on each resolver ("allowAnonymous" if public access is intended).`);
|
|
4775
|
+
const names = undeclared.map((resolver) => resolver.name).toSorted();
|
|
4776
|
+
logger.debug(` Resolvers without \`permission\`: ${names.join(", ")}`);
|
|
4777
|
+
}
|
|
4778
|
+
/**
|
|
4691
4779
|
* Assert that every loaded resolver in a namespace has a unique name.
|
|
4692
4780
|
* Resolvers are stored by source file, so two files declaring the same
|
|
4693
4781
|
* `name` would otherwise silently share a single bundle cache entry.
|
|
@@ -5751,7 +5839,17 @@ async function loadApplication(params) {
|
|
|
5751
5839
|
authHooks: /* @__PURE__ */ new Map()
|
|
5752
5840
|
};
|
|
5753
5841
|
for (const pipeline of resolverResult.resolverServices) {
|
|
5754
|
-
const resolverBundles = await bundleResolvers(
|
|
5842
|
+
const resolverBundles = await bundleResolvers({
|
|
5843
|
+
namespace: pipeline.namespace,
|
|
5844
|
+
config: pipeline.config,
|
|
5845
|
+
baseDir,
|
|
5846
|
+
defaultPermission: pipeline.defaultPermission,
|
|
5847
|
+
startContext,
|
|
5848
|
+
cache: bundleCache,
|
|
5849
|
+
inlineSourcemap,
|
|
5850
|
+
bundleLogLevel,
|
|
5851
|
+
tsconfigCache
|
|
5852
|
+
});
|
|
5755
5853
|
for (const [name, code] of resolverBundles) bundledScripts.resolvers.set(resolverBundleKey(pipeline.namespace, name), code);
|
|
5756
5854
|
}
|
|
5757
5855
|
if (executorService) bundledScripts.executors = await bundleExecutors({
|
|
@@ -5823,5 +5921,5 @@ async function loadApplication(params) {
|
|
|
5823
5921
|
}
|
|
5824
5922
|
|
|
5825
5923
|
//#endregion
|
|
5826
|
-
export {
|
|
5827
|
-
//# sourceMappingURL=application-
|
|
5924
|
+
export { createApplyLimiter as $, getDistDir as A, fetchUserInfo as B, composeFunctionTreeshakeOptions as C, getPluginGenerationDependencies as D, createBundleLog as E, fetchAll as F, initOAuth2Client as G, getOAuth2ClientId as H, fetchAllTolerant as I, isNotFoundError as J, initOperatorClient as K, fetchMachineUserToken as L, hashFile as M, closeConnectionPool as N, hasGenerationHooks as O, defaultPlatformBaseUrl as P, byName as Q, fetchPaged as R, platformBundleDefinePlugin as S, resolveBundleLogLevel as T, getOrNull as U, getConsoleBaseUrl as V, getPlatformBaseUrl as W, rememberPlatformConfigForToken as X, normalizeBaseUrl as Y, resolveStaticWebsiteUrls as Z, assertUniqueTailorDBTypeNamesWithExternal as _, resolveInlineSourcemap as a, createTsconfigPathsPlugin as b, WorkflowJobSchema as c, HTTP_METHODS as d, LOG_LEVELS as et, INVOKER_EXPR as f, assertUniqueLocalTailorDBTypeNames as g, buildResolverPermissionAndInputCheckExpr as h, resolverBundleKey as i, hashContent as j, createBundleCache as k, resolveResolverDefaultPermissionForFile as l, buildResolverOperationHookExpr as m, generatePluginFilesIfNeeded as n, getApplicationAuthNamespace as o, buildExecutorArgsExpr as p, isDefaultPlatform as q, loadApplication as r, WorkflowJobFunctionExecutionPolicySchema as s, defineApplication as t, ResolverSchema as u, stringifyFunction as v, createLogLevelTreeshakeOptions as w, resolveTSConfigWithFallback as x, createGeneratedEntryResolverPlugin as y, fetchPlatformMachineUserToken as z };
|
|
5925
|
+
//# sourceMappingURL=application-D77KJFKD.mjs.map
|