@prisma/composer-prisma-cloud 0.29.1 → 0.30.0-dev.1

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.
@@ -105,7 +105,12 @@ function portNumbers(from, to) {
105
105
  };
106
106
  return generator(from, to);
107
107
  }
108
+ function clearLockedPorts() {
109
+ lockedPorts.old.clear();
110
+ lockedPorts.young.clear();
111
+ reservedPorts.clear();
112
+ }
108
113
  //#endregion
109
- export { portNumbers as n, getPorts as t };
114
+ export { getPorts as n, portNumbers as r, clearLockedPorts as t };
110
115
 
111
- //# sourceMappingURL=get-port-BYnpbW5H.mjs.map
116
+ //# sourceMappingURL=get-port-CwLPc-ca.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-port-BYnpbW5H.mjs","names":[],"sources":["../../../../node_modules/get-port/index.js"],"sourcesContent":["import net from 'node:net';\nimport os from 'node:os';\n\nclass Locked extends Error {\n\tconstructor(port) {\n\t\tsuper(`${port} is locked`);\n\t}\n}\n\nconst lockedPorts = {\n\told: new Set(),\n\tyoung: new Set(),\n};\n\n// On this interval, the old locked ports are discarded,\n// the young locked ports are moved to old locked ports,\n// and a new young set for locked ports are created.\nconst releaseOldLockedPortsIntervalMs = 1000 * 15;\n\n// Keep `reserve` deliberately process-wide by port number.\n// It is meant to avoid in-process races, not to model every possible\n// IPv4/IPv6 or host-specific bind combination.\nconst reservedPorts = new Set();\n\nconst minPort = 1024;\nconst maxPort = 65_535;\n\n// Lazily create timeout on first use\nlet timeout;\n\nconst getLocalHosts = () => {\n\tconst interfaces = os.networkInterfaces();\n\n\t// Add undefined value for createServer function to use default host,\n\t// and default IPv4 host in case createServer defaults to IPv6.\n\tconst results = new Set([undefined, '0.0.0.0']);\n\n\tfor (const _interface of Object.values(interfaces)) {\n\t\tfor (const config of _interface) {\n\t\t\tresults.add(config.address);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nconst checkAvailablePort = options =>\n\tnew Promise((resolve, reject) => {\n\t\tconst server = net.createServer();\n\t\tserver.unref();\n\t\tserver.on('error', reject);\n\n\t\tserver.listen(options, () => {\n\t\t\tconst {port} = server.address();\n\t\t\tserver.close(() => {\n\t\t\t\tresolve(port);\n\t\t\t});\n\t\t});\n\t});\n\nconst getAvailablePort = async (options, hosts) => {\n\tif (options.host || options.port === 0) {\n\t\treturn checkAvailablePort(options);\n\t}\n\n\tfor (const host of hosts) {\n\t\ttry {\n\t\t\tawait checkAvailablePort({port: options.port, host}); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tif (!['EADDRNOTAVAIL', 'EINVAL'].includes(error.code)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn options.port;\n};\n\nconst isLockedPort = port => lockedPorts.old.has(port) || lockedPorts.young.has(port) || reservedPorts.has(port);\n\nconst portCheckSequence = function * (ports) {\n\tif (ports) {\n\t\tyield * ports;\n\t}\n\n\tyield 0; // Fall back to 0 if anything else failed\n};\n\nexport default async function getPorts(options) {\n\tlet ports;\n\tlet exclude = new Set();\n\n\tif (options) {\n\t\tif (options.port) {\n\t\t\tports = typeof options.port === 'number' ? [options.port] : options.port;\n\t\t}\n\n\t\tif (options.exclude) {\n\t\t\tconst excludeIterable = options.exclude;\n\n\t\t\tif (typeof excludeIterable[Symbol.iterator] !== 'function') {\n\t\t\t\tthrow new TypeError('The `exclude` option must be an iterable.');\n\t\t\t}\n\n\t\t\tfor (const element of excludeIterable) {\n\t\t\t\tif (typeof element !== 'number') {\n\t\t\t\t\tthrow new TypeError('Each item in the `exclude` option must be a number corresponding to the port you want excluded.');\n\t\t\t\t}\n\n\t\t\t\tif (!Number.isSafeInteger(element)) {\n\t\t\t\t\tthrow new TypeError(`Number ${element} in the exclude option is not a safe integer and can't be used`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texclude = new Set(excludeIterable);\n\t\t}\n\t}\n\n\tconst {reserve, ...netOptions} = options ?? {};\n\n\tif (timeout === undefined) {\n\t\ttimeout = setTimeout(() => {\n\t\t\ttimeout = undefined;\n\n\t\t\tlockedPorts.old = lockedPorts.young;\n\t\t\tlockedPorts.young = new Set();\n\t\t}, releaseOldLockedPortsIntervalMs);\n\n\t\t// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).\n\t\tif (timeout.unref) {\n\t\t\ttimeout.unref();\n\t\t}\n\t}\n\n\tconst hosts = getLocalHosts();\n\n\tfor (const port of portCheckSequence(ports)) {\n\t\ttry {\n\t\t\tif (exclude.has(port)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet availablePort = await getAvailablePort({...netOptions, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\twhile (isLockedPort(availablePort)) {\n\t\t\t\tif (port !== 0) {\n\t\t\t\t\tthrow new Locked(port);\n\t\t\t\t}\n\n\t\t\t\tavailablePort = await getAvailablePort({...netOptions, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\t}\n\n\t\t\tif (reserve) {\n\t\t\t\treservedPorts.add(availablePort);\n\t\t\t} else {\n\t\t\t\tlockedPorts.young.add(availablePort);\n\t\t\t}\n\n\t\t\treturn availablePort;\n\t\t} catch (error) {\n\t\t\tif (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof Locked)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error('No available ports found');\n}\n\nexport function portNumbers(from, to) {\n\tif (!Number.isInteger(from) || !Number.isInteger(to)) {\n\t\tthrow new TypeError('`from` and `to` must be integer numbers');\n\t}\n\n\tif (from < minPort || from > maxPort) {\n\t\tthrow new RangeError(`'from' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (to < minPort || to > maxPort) {\n\t\tthrow new RangeError(`'to' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (from > to) {\n\t\tthrow new RangeError('`to` must be greater than or equal to `from`');\n\t}\n\n\tconst generator = function * (from, to) {\n\t\tfor (let port = from; port <= to; port++) {\n\t\t\tyield port;\n\t\t}\n\t};\n\n\treturn generator(from, to);\n}\n\nexport function clearLockedPorts() {\n\tlockedPorts.old.clear();\n\tlockedPorts.young.clear();\n\treservedPorts.clear();\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"get-port-CwLPc-ca.mjs","names":[],"sources":["../../../../node_modules/get-port/index.js"],"sourcesContent":["import net from 'node:net';\nimport os from 'node:os';\n\nclass Locked extends Error {\n\tconstructor(port) {\n\t\tsuper(`${port} is locked`);\n\t}\n}\n\nconst lockedPorts = {\n\told: new Set(),\n\tyoung: new Set(),\n};\n\n// On this interval, the old locked ports are discarded,\n// the young locked ports are moved to old locked ports,\n// and a new young set for locked ports are created.\nconst releaseOldLockedPortsIntervalMs = 1000 * 15;\n\n// Keep `reserve` deliberately process-wide by port number.\n// It is meant to avoid in-process races, not to model every possible\n// IPv4/IPv6 or host-specific bind combination.\nconst reservedPorts = new Set();\n\nconst minPort = 1024;\nconst maxPort = 65_535;\n\n// Lazily create timeout on first use\nlet timeout;\n\nconst getLocalHosts = () => {\n\tconst interfaces = os.networkInterfaces();\n\n\t// Add undefined value for createServer function to use default host,\n\t// and default IPv4 host in case createServer defaults to IPv6.\n\tconst results = new Set([undefined, '0.0.0.0']);\n\n\tfor (const _interface of Object.values(interfaces)) {\n\t\tfor (const config of _interface) {\n\t\t\tresults.add(config.address);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nconst checkAvailablePort = options =>\n\tnew Promise((resolve, reject) => {\n\t\tconst server = net.createServer();\n\t\tserver.unref();\n\t\tserver.on('error', reject);\n\n\t\tserver.listen(options, () => {\n\t\t\tconst {port} = server.address();\n\t\t\tserver.close(() => {\n\t\t\t\tresolve(port);\n\t\t\t});\n\t\t});\n\t});\n\nconst getAvailablePort = async (options, hosts) => {\n\tif (options.host || options.port === 0) {\n\t\treturn checkAvailablePort(options);\n\t}\n\n\tfor (const host of hosts) {\n\t\ttry {\n\t\t\tawait checkAvailablePort({port: options.port, host}); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tif (!['EADDRNOTAVAIL', 'EINVAL'].includes(error.code)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn options.port;\n};\n\nconst isLockedPort = port => lockedPorts.old.has(port) || lockedPorts.young.has(port) || reservedPorts.has(port);\n\nconst portCheckSequence = function * (ports) {\n\tif (ports) {\n\t\tyield * ports;\n\t}\n\n\tyield 0; // Fall back to 0 if anything else failed\n};\n\nexport default async function getPorts(options) {\n\tlet ports;\n\tlet exclude = new Set();\n\n\tif (options) {\n\t\tif (options.port) {\n\t\t\tports = typeof options.port === 'number' ? [options.port] : options.port;\n\t\t}\n\n\t\tif (options.exclude) {\n\t\t\tconst excludeIterable = options.exclude;\n\n\t\t\tif (typeof excludeIterable[Symbol.iterator] !== 'function') {\n\t\t\t\tthrow new TypeError('The `exclude` option must be an iterable.');\n\t\t\t}\n\n\t\t\tfor (const element of excludeIterable) {\n\t\t\t\tif (typeof element !== 'number') {\n\t\t\t\t\tthrow new TypeError('Each item in the `exclude` option must be a number corresponding to the port you want excluded.');\n\t\t\t\t}\n\n\t\t\t\tif (!Number.isSafeInteger(element)) {\n\t\t\t\t\tthrow new TypeError(`Number ${element} in the exclude option is not a safe integer and can't be used`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texclude = new Set(excludeIterable);\n\t\t}\n\t}\n\n\tconst {reserve, ...netOptions} = options ?? {};\n\n\tif (timeout === undefined) {\n\t\ttimeout = setTimeout(() => {\n\t\t\ttimeout = undefined;\n\n\t\t\tlockedPorts.old = lockedPorts.young;\n\t\t\tlockedPorts.young = new Set();\n\t\t}, releaseOldLockedPortsIntervalMs);\n\n\t\t// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).\n\t\tif (timeout.unref) {\n\t\t\ttimeout.unref();\n\t\t}\n\t}\n\n\tconst hosts = getLocalHosts();\n\n\tfor (const port of portCheckSequence(ports)) {\n\t\ttry {\n\t\t\tif (exclude.has(port)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet availablePort = await getAvailablePort({...netOptions, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\twhile (isLockedPort(availablePort)) {\n\t\t\t\tif (port !== 0) {\n\t\t\t\t\tthrow new Locked(port);\n\t\t\t\t}\n\n\t\t\t\tavailablePort = await getAvailablePort({...netOptions, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\t}\n\n\t\t\tif (reserve) {\n\t\t\t\treservedPorts.add(availablePort);\n\t\t\t} else {\n\t\t\t\tlockedPorts.young.add(availablePort);\n\t\t\t}\n\n\t\t\treturn availablePort;\n\t\t} catch (error) {\n\t\t\tif (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof Locked)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error('No available ports found');\n}\n\nexport function portNumbers(from, to) {\n\tif (!Number.isInteger(from) || !Number.isInteger(to)) {\n\t\tthrow new TypeError('`from` and `to` must be integer numbers');\n\t}\n\n\tif (from < minPort || from > maxPort) {\n\t\tthrow new RangeError(`'from' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (to < minPort || to > maxPort) {\n\t\tthrow new RangeError(`'to' must be between ${minPort} and ${maxPort}`);\n\t}\n\n\tif (from > to) {\n\t\tthrow new RangeError('`to` must be greater than or equal to `from`');\n\t}\n\n\tconst generator = function * (from, to) {\n\t\tfor (let port = from; port <= to; port++) {\n\t\t\tyield port;\n\t\t}\n\t};\n\n\treturn generator(from, to);\n}\n\nexport function clearLockedPorts() {\n\tlockedPorts.old.clear();\n\tlockedPorts.young.clear();\n\treservedPorts.clear();\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as blindCast$1 } from "./casts-DpaahrlC-Ykus3kCE.mjs";
2
- import { C as ServiceKeyProvider, T as isWithin, b as Providers, c as PrismaCloudContainer, d as collectPreflightNames, h as prismaCloudContainerOf, i as OrmMigrationProvider, n as GeneratedParamProvider, p as deserialize, s as PgWarmProvider, u as S3CredentialsProvider, y as mintKeyPair } from "./s3-credentials-resource-CySVP49N-bNV7rH_d.mjs";
2
+ import { E as isWithin, b as mintKeyPair, c as PrismaCloudContainer, d as collectPreflightNames, h as prismaCloudContainerOf, i as OrmMigrationProvider, n as GeneratedParamProvider, p as deserialize, s as PgWarmProvider, u as S3CredentialsProvider, v as serviceAppName, w as ServiceKeyProvider, x as Providers } from "./s3-credentials-resource-BZjtuopJ-V_3xXzMD.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import { blindCast } from "@prisma/composer/casts";
5
5
  import * as Effect from "effect/Effect";
@@ -5631,7 +5631,8 @@ function LocalBucketProvider(input) {
5631
5631
  bucketId: name,
5632
5632
  name,
5633
5633
  projectId: projectIdOfInput(news.project),
5634
- createdAt: DEV_TIMESTAMP
5634
+ createdAt: DEV_TIMESTAMP,
5635
+ logicalId: null
5635
5636
  };
5636
5637
  },
5637
5638
  catch: (cause) => cause
@@ -5948,7 +5949,8 @@ function LocalAppProvider(input) {
5948
5949
  branchId: news.branchId ?? null,
5949
5950
  latestDeploymentId: null,
5950
5951
  appEndpointDomain: url,
5951
- createdAt: DEV_TIMESTAMP
5952
+ createdAt: DEV_TIMESTAMP,
5953
+ logicalId: null
5952
5954
  };
5953
5955
  },
5954
5956
  catch: (cause) => cause
@@ -5957,6 +5959,22 @@ function LocalAppProvider(input) {
5957
5959
  read: ({ output }) => Effect.succeed(output)
5958
5960
  }));
5959
5961
  }
5962
+ /**
5963
+ * Reserves each service's emulator port one at a time, in the order given,
5964
+ * before Alchemy applies the `App` resources concurrently. A new service gets
5965
+ * the smallest free port, so on a fresh start the ports follow this order; a
5966
+ * service that already has a port keeps it. `serviceAppNames` are the
5967
+ * `App` resources' `displayName`s.
5968
+ */
5969
+ async function reserveServicePorts(container, serviceAppNames) {
5970
+ const appName = appNameOf(container);
5971
+ for (const service of serviceAppNames) try {
5972
+ await computeClient().ensureService(appName, slugServiceId(service));
5973
+ } catch (cause) {
5974
+ const reason = cause instanceof Error ? cause.message : String(cause);
5975
+ throw new Error(`reserving a local port for service "${service}" failed: ${reason}`, { cause });
5976
+ }
5977
+ }
5960
5978
  /** `Prisma.EnvironmentVariable` → a key/value row in `<devDir>/env.json`. Upstream's value is `Redacted`; env.json holds the plain string the child process is given. */
5961
5979
  function LocalEnvironmentVariableProvider(input) {
5962
5980
  return Provider.effect(EnvironmentVariable, Effect.succeed({
@@ -6126,6 +6144,7 @@ function LocalDatabaseProvider(input) {
6126
6144
  branchId: null,
6127
6145
  defaultConnectionId: null,
6128
6146
  createdAt: DEV_TIMESTAMP,
6147
+ logicalId: null,
6129
6148
  directConnectionString: direct,
6130
6149
  pooledConnectionString: void 0,
6131
6150
  accelerateConnectionString: void 0,
@@ -6317,19 +6336,24 @@ function devContainerDescriptor() {
6317
6336
  deserialize
6318
6337
  };
6319
6338
  }
6339
+ /** The resolved absolute path to this daemon's published entrypoint. */
6340
+ function daemonEntry(name) {
6341
+ return resolvePackageEntry(`@prisma/composer-prisma-cloud/local-target/${name}-main`);
6342
+ }
6320
6343
  function usesBuckets(input) {
6321
6344
  return input.graph.nodes.some((n) => n.node.kind === "resource" && n.node.type === "s3");
6322
6345
  }
6323
6346
  function usesPostgres(input) {
6324
6347
  return input.graph.nodes.some((n) => n.node.kind === "resource" && (n.node.type === "raw-postgres" || n.node.type === "postgres"));
6325
6348
  }
6326
- /** The resolved absolute path to this daemon's published entrypoint. */
6327
- function daemonEntry(name) {
6328
- return resolvePackageEntry(`@prisma/composer-prisma-cloud/local-target/${name}-main`);
6349
+ /** The `App` name of each of this extension's services, in `graph.nodes` order: dependencies first, ties in declaration order. */
6350
+ function serviceAppNames(input) {
6351
+ return input.graph.nodes.filter((n) => n.node.kind === "service" && n.node.extension === "@prisma/composer-prisma-cloud").map((n) => serviceAppName(n.id));
6329
6352
  }
6330
6353
  async function runDevEmulators(input) {
6331
6354
  const { url: computeUrl } = await ensureDaemon("compute", daemonEntry("compute"));
6332
6355
  console.log(`[dev] compute emulator ready at ${computeUrl}`);
6356
+ await reserveServicePorts(input.container, serviceAppNames(input));
6333
6357
  if (usesBuckets(input)) {
6334
6358
  const { url: bucketsUrl } = await ensureDaemon("buckets", daemonEntry("buckets"));
6335
6359
  console.log(`[dev] buckets emulator ready at ${bucketsUrl}`);
@@ -6387,9 +6411,13 @@ async function runDevTeardown(input) {
6387
6411
  const app = prismaCloudContainerOf(input.container).input.appName;
6388
6412
  const cwd = process.cwd();
6389
6413
  await tolerateUnreachable(() => postgresClient().deleteApp(app));
6390
- await tolerateUnreachable(() => computeClient().deleteApp(app));
6391
- await tolerateUnreachable(() => bucketsClient().deleteApp(app));
6392
- removeLocalPaths([`${cwd}/${DEV_DIR}`, `${cwd}/.alchemy/state/${app}/dev`]);
6414
+ try {
6415
+ await ensureDaemon("compute", daemonEntry("compute"));
6416
+ await computeClient().deleteApp(app);
6417
+ } finally {
6418
+ await tolerateUnreachable(() => bucketsClient().deleteApp(app));
6419
+ removeLocalPaths([`${cwd}/${DEV_DIR}`, `${cwd}/.alchemy/state/${app}/dev`]);
6420
+ }
6393
6421
  }
6394
6422
  /** `localTargetProviders()`'s `ProviderCollection` doesn't structurally unify with Alchemy's inferred providers Layer (a @internal/lowering typings gap); it satisfies it at runtime — mirrors `control/extension.ts`'s own `asProvidersLayer`, duplicated rather than shared so this module imports nothing from `./control`. */
6395
6423
  function asProvidersLayer(layer) {