@pact-toolbox/script
Version:
1 lines • 6.04 kB
Source Map (JSON)
{"version":3,"file":"index.node.mjs","names":["options: ToolboxScript<Args>","source: string","options: RunScriptOptions","id: string"],"sources":["../src/runner.ts"],"sourcesContent":["import type { PactToolboxConfigObj } from \"@pact-toolbox/config\";\nimport type { StartLocalNetworkOptions } from \"@pact-toolbox/network\";\nimport defu from \"defu\";\nimport { createJiti } from \"jiti\";\nimport { fileURLToPath } from \"mlly\";\nimport { resolve } from \"pathe\";\n\nimport { resolveConfig } from \"@pact-toolbox/config\";\nimport { createPactToolboxNetwork } from \"@pact-toolbox/network\";\nimport { PactToolboxClient } from \"@pact-toolbox/runtime\";\nimport { logger } from \"@pact-toolbox/utils\";\n\nexport interface ToolboxScriptContext<Args = Record<string, unknown>> {\n client: PactToolboxClient;\n args: Args;\n logger: typeof logger;\n network: string;\n config: PactToolboxConfigObj;\n}\n\nexport interface ToolboxScriptOptions {\n autoStartNetwork?: boolean;\n persist?: boolean;\n startNetworkOptions?: Partial<StartLocalNetworkOptions>;\n configOverrides?: Partial<PactToolboxConfigObj>;\n network?: string;\n}\nexport interface ToolboxScript<Args = Record<string, unknown>> extends ToolboxScriptOptions {\n run: (ctx: ToolboxScriptContext<Args>) => Promise<void>;\n}\n\nexport function createScript<Args = Record<string, unknown>>(options: ToolboxScript<Args>): ToolboxScript<Args> {\n return options;\n}\n\nconst SUPPORTED_EXTENSIONS = [\".js\", \".mjs\", \".cjs\", \".ts\", \".mts\", \".cts\", \".json\"];\n// https://github.com/dword-design/package-name-regex\nconst NPM_PACKAGE_RE = /^(@[\\da-z~-][\\d._a-z~-]*\\/)?[\\da-z~-][\\d._a-z~-]*($|\\/.*)/;\nexport interface RunScriptOptions {\n cwd?: string;\n network?: string;\n args?: Record<string, unknown>;\n config?: PactToolboxConfigObj;\n client?: PactToolboxClient;\n scriptOptions?: ToolboxScriptOptions;\n}\nexport async function runScript(source: string, options: RunScriptOptions): Promise<void> {\n // normalize options\n options.cwd = resolve(process.cwd(), options.cwd || \".\");\n options.scriptOptions = options.scriptOptions || {};\n if (!options.config) {\n options.config = await resolveConfig();\n }\n const scriptsDir = options.config.scriptsDir ?? \"scripts\";\n\n const jiti = createJiti(resolve(options.cwd, scriptsDir), {\n interopDefault: true,\n moduleCache: false,\n extensions: [...SUPPORTED_EXTENSIONS],\n });\n const tryResolve = (id: string) => {\n const resolved = jiti.esmResolve(id, { try: true });\n return resolved ? fileURLToPath(resolved) : undefined;\n };\n // Try resolving as npm package\n if (NPM_PACKAGE_RE.test(source)) {\n source = tryResolve(source) || source;\n }\n // // Import from local fs\n // const ext = extname(source);\n // const isDir = !ext || ext === basename(source); /* #71 */\n // const cwd = resolve(options.cwd!, isDir ? source : dirname(source));\n // if (isDir) {\n // source = options.!;\n // }\n\n const scriptPath =\n tryResolve(resolve(options.cwd, scriptsDir, source)) ||\n tryResolve(resolve(options.cwd, source)) ||\n tryResolve(resolve(options.cwd, \".scripts\", source));\n source;\n if (!scriptPath) {\n throw new Error(`Script ${source} not found`);\n }\n\n const scriptObject = await jiti.import(scriptPath);\n if (typeof scriptObject !== \"object\") {\n throw new Error(`Script ${source} should export an object with run method`);\n }\n const scriptInstance = defu(options.scriptOptions, scriptObject) as ToolboxScript;\n if (scriptInstance.configOverrides) {\n options.config = defu(scriptInstance.configOverrides, options.config) as Required<PactToolboxConfigObj>;\n }\n options.network = options.network ?? scriptInstance.network ?? options.config.defaultNetwork;\n if (!options.client) {\n options.client = new PactToolboxClient(options.config, options.network);\n }\n options.client.setConfig(options.config);\n try {\n let n;\n if (scriptInstance.autoStartNetwork) {\n n = await createPactToolboxNetwork(options.config, {\n ...scriptInstance.startNetworkOptions,\n network: options.network,\n client: options.client,\n });\n }\n const context = {\n logger,\n client: options.client!,\n args: options.args!,\n network: options.network!,\n config: options.config!,\n };\n await scriptInstance.run(context);\n if (!scriptInstance.persist) {\n if (n) {\n await n.stop();\n }\n }\n } catch (error) {\n logger.error(error);\n throw error;\n }\n}\n"],"mappings":";;;;;;;;;;AA+BA,SAAgB,aAA6CA,SAAmD;AAC9G,QAAO;AACR;AAED,MAAM,uBAAuB;CAAC;CAAO;CAAQ;CAAQ;CAAO;CAAQ;CAAQ;AAAQ;AAEpF,MAAM,iBAAiB;AASvB,eAAsB,UAAUC,QAAgBC,SAA0C;AAExF,SAAQ,MAAM,QAAQ,QAAQ,KAAK,EAAE,QAAQ,OAAO,IAAI;AACxD,SAAQ,gBAAgB,QAAQ,iBAAiB,CAAE;AACnD,MAAK,QAAQ,OACX,SAAQ,SAAS,MAAM,eAAe;CAExC,MAAM,aAAa,QAAQ,OAAO,cAAc;CAEhD,MAAM,OAAO,WAAW,QAAQ,QAAQ,KAAK,WAAW,EAAE;EACxD,gBAAgB;EAChB,aAAa;EACb,YAAY,CAAC,GAAG,oBAAqB;CACtC,EAAC;CACF,MAAM,aAAa,CAACC,OAAe;EACjC,MAAM,WAAW,KAAK,WAAW,IAAI,EAAE,KAAK,KAAM,EAAC;AACnD,SAAO,WAAW,cAAc,SAAS;CAC1C;AAED,KAAI,eAAe,KAAK,OAAO,CAC7B,UAAS,WAAW,OAAO,IAAI;CAUjC,MAAM,aACJ,WAAW,QAAQ,QAAQ,KAAK,YAAY,OAAO,CAAC,IACpD,WAAW,QAAQ,QAAQ,KAAK,OAAO,CAAC,IACxC,WAAW,QAAQ,QAAQ,KAAK,YAAY,OAAO,CAAC;AAEtD,MAAK,WACH,OAAM,IAAI,OAAO,SAAS,OAAO;CAGnC,MAAM,eAAe,MAAM,KAAK,OAAO,WAAW;AAClD,YAAW,iBAAiB,SAC1B,OAAM,IAAI,OAAO,SAAS,OAAO;CAEnC,MAAM,iBAAiB,KAAK,QAAQ,eAAe,aAAa;AAChE,KAAI,eAAe,gBACjB,SAAQ,SAAS,KAAK,eAAe,iBAAiB,QAAQ,OAAO;AAEvE,SAAQ,UAAU,QAAQ,WAAW,eAAe,WAAW,QAAQ,OAAO;AAC9E,MAAK,QAAQ,OACX,SAAQ,SAAS,IAAI,kBAAkB,QAAQ,QAAQ,QAAQ;AAEjE,SAAQ,OAAO,UAAU,QAAQ,OAAO;AACxC,KAAI;EACF,IAAI;AACJ,MAAI,eAAe,iBACjB,KAAI,MAAM,yBAAyB,QAAQ,QAAQ;GACjD,GAAG,eAAe;GAClB,SAAS,QAAQ;GACjB,QAAQ,QAAQ;EACjB,EAAC;EAEJ,MAAM,UAAU;GACd;GACA,QAAQ,QAAQ;GAChB,MAAM,QAAQ;GACd,SAAS,QAAQ;GACjB,QAAQ,QAAQ;EACjB;AACD,QAAM,eAAe,IAAI,QAAQ;AACjC,OAAK,eAAe,SAClB;OAAI,EACF,OAAM,EAAE,MAAM;EACf;CAEJ,SAAQ,OAAO;AACd,SAAO,MAAM,MAAM;AACnB,QAAM;CACP;AACF"}