do-functions-cli 1.3.0 → 1.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/README.md CHANGED
@@ -1,70 +1,145 @@
1
1
  # do-functions-cli
2
2
 
3
- ![npm version](https://img.shields.io/npm/v/do-functions-cli.svg)
4
- ![license](https://img.shields.io/badge/license-MIT-blue.svg)
3
+ [![npm version](https://img.shields.io/npm/v/do-functions-cli.svg)](https://www.npmjs.com/package/do-functions-cli)
4
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
5
 
6
- A CLI tool to streamline working with DigitalOcean Serverless Functions.
6
+ A CLI tool for scaffolding [DigitalOcean Serverless Functions](https://docs.digitalocean.com/products/functions/). Quickly create new functions with JavaScript or TypeScript templates, install dependencies, and automatically update your `project.yml` configuration.
7
7
 
8
- ### NOTE: This project has no affiliation with [do-functions](https://github.com/mrbrianevans/do-functions), but was heavily inspired by it. I will likely end up incorporating some of the features of that project into this one.
8
+ > **Note:** This project is not affiliated with [DigitalOcean](https://digitalocean.com) or [do-functions](https://github.com/mrbrianevans/do-functions), but was inspired by the latter.
9
9
 
10
10
  ## Features
11
11
 
12
- - Create new function packages via an interactive `create` command
13
- - Support for multiple languages (JavaScript, TypeScript, more to come)
14
- - Auto-install dependencies in the generated package (optional)
15
- - Automatically update the root `project.yml` with the new package/function (optional)
12
+ - **Interactive function creation** Guided prompts walk you through creating new functions
13
+ - **JavaScript & TypeScript templates** Choose your preferred language
14
+ - **Automatic dependency installation** — Optionally run `npm install` in the generated function directory
15
+ - **Auto-update project.yml** Automatically add new functions to your project configuration
16
+ - **Non-interactive mode** — Use CLI flags and `--yes` for scripted workflows
16
17
 
17
18
  ## Installation
18
19
 
19
- Global:
20
-
21
20
  ```bash
22
- npm i -g do-functions-cli
21
+ # Global installation
22
+ npm install -g do-functions-cli
23
+
24
+ # Or use directly with npx
25
+ npx do-functions-cli create
23
26
  ```
24
27
 
25
- Local:
28
+ ## Quick Start
29
+
30
+ Create a new function interactively:
26
31
 
27
32
  ```bash
28
- npm i -D do-functions-cli
33
+ do-functions-cli create
29
34
  ```
30
35
 
36
+ You'll be prompted to:
37
+
38
+ 1. Enter the packages directory (default: `./packages`)
39
+ 2. Enter the package/function name (e.g., `api/hello`)
40
+ 3. Choose a language (JavaScript or TypeScript)
41
+ 4. Install dependencies (optional)
42
+ 5. Add the function to `project.yml` (optional)
43
+
31
44
  ## Usage
32
45
 
33
- Run the CLI and follow the prompts:
46
+ ### Interactive Mode
34
47
 
35
48
  ```bash
36
- # Show help
37
- npx do-functions-cli --help
49
+ do-functions-cli create
50
+ ```
38
51
 
39
- # Create a new function
40
- npx do-functions-cli create
52
+ ### Non-Interactive Mode
53
+
54
+ Use flags to skip prompts:
55
+
56
+ ```bash
57
+ do-functions-cli create --packages-dir ./packages --func api/hello --yes
41
58
  ```
42
59
 
43
- ## Roadmap / Ideas
60
+ ### CLI Options
61
+
62
+ | Option | Description |
63
+ | --- | --- |
64
+ | `--packages-dir <dir>` | Root packages directory (default: prompted, or `./packages`) |
65
+ | `-f, --func <name>` | Package/function name in `package/function` format |
66
+ | `-y, --yes` | Skip optional prompts and use defaults |
67
+ | `--help` | Show help information |
68
+ | `--version` | Show version number |
44
69
 
45
- - Non-interactive flags for commands (see below)
46
- - Additional commands: `validate`, `deploy`, etc.
70
+ ## Project Structure
47
71
 
48
- ## Planned CLI Flags
72
+ After creating a function, your project will look like:
49
73
 
50
- - `--<language>`: Choose template language (e.g., `--javascript`, `--typescript`).
51
- - `--install` / `--no-install`: Control dependency installation step.
52
- - `--add-project` / `--no-add-project`: Control `project.yml` auto-update.
53
- - `--dry-run`: Show intended actions without any file changes.
54
- - `--verbose`: Print detailed logs for troubleshooting.
74
+ ```
75
+ your-project/
76
+ ├── packages/
77
+ │ └── api/ # Package name
78
+ │ └── hello/ # Function name
79
+ │ ├── index.js # Function entry point (or index.ts)
80
+ │ ├── package.json
81
+ │ └── .include # DigitalOcean include file
82
+ └── project.yml # DigitalOcean project configuration
83
+ ```
55
84
 
56
- ## Troubleshooting
85
+ ## Bundling with esbuild
57
86
 
58
- - If `project.yml` parsing fails, ensure the file is valid YAML and matches the expected schema:
87
+ The generated function templates include [esbuild](https://esbuild.github.io/) for bundling your code. This ensures compatibility with DigitalOcean Functions by:
88
+
89
+ - **Bundling all dependencies** — All `node_modules` are bundled into a single file (`dist/bundle.js`)
90
+ - **CommonJS output** — Code is transpiled to CommonJS format (`--format=cjs`) for compatibility with the DigitalOcean Functions runtime
91
+ - **Node.js 18 targeting** — The bundle is optimized for Node.js 18 (`--target=node18`)
92
+ - **Minification** — Output is minified to reduce file size and improve cold start times
93
+
94
+ ### Build Script
95
+
96
+ Each function includes a `build` script in `package.json`:
97
+
98
+ ```bash
99
+ # JavaScript
100
+ esbuild ./index.js --bundle --platform=node --target=node18 --format=cjs --outfile=./dist/bundle.js --minify
101
+
102
+ # TypeScript (includes type checking)
103
+ tsc --noEmit && esbuild ./index.ts --bundle --platform=node --target=node18 --format=cjs --outfile=./dist/bundle.js --minify
104
+ ```
105
+
106
+ DigitalOcean automatically runs `npm run build` during deployment, so you don't need to build manually before deploying.
107
+
108
+ ### The .include File
109
+
110
+ Each function contains a `.include` file that tells DigitalOcean which files to include in the deployed function. By default, it points to the bundled output:
111
+
112
+ ```
113
+ dist/bundle.js
114
+ ```
115
+
116
+ This means only the bundled file is deployed, keeping your function package small and fast.
117
+
118
+ ## project.yml Configuration
119
+
120
+ The CLI automatically manages your `project.yml` file:
59
121
 
60
122
  ```yaml
61
123
  packages:
62
- - name: sample
124
+ - name: api
63
125
  functions:
64
126
  - name: hello
65
127
  runtime: nodejs:18
66
128
  web: true
67
- ...
68
129
  ```
69
130
 
70
- - Ensure Node.js 18+ for best compatibility with templates and runtime.
131
+ ## Requirements
132
+
133
+ - Node.js 20.12.0 or later
134
+ - npm or compatible package manager
135
+
136
+ ## Roadmap
137
+
138
+ - Additional language templates (Python, Go)
139
+ - `validate` command for project configuration
140
+ - `deploy` command integration with DigitalOcean CLI
141
+ - Dry-run mode for previewing changes
142
+
143
+ ## License
144
+
145
+ MIT
package/dist/cli.js CHANGED
@@ -1,15 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
- import createCommand from './commands/create.js';
4
3
  import fs from 'fs-extra/esm';
4
+ import createCommand from './commands/create.js';
5
5
  const packageJson = await fs.readJSON(new URL('../package.json', import.meta.url));
6
- const cliVersion = packageJson.version;
7
6
  // Initialize the main CLI program
8
7
  const program = new Command();
9
- program
10
- .name('do-functions-cli')
11
- .description('CLI tool for managing DigitalOcean serverless functions')
12
- .version(cliVersion);
8
+ program.name(packageJson.name).description(packageJson.description).version(packageJson.version);
13
9
  // Register the 'create' command for creating new serverless functions
14
10
  program.addCommand(createCommand);
15
11
  // Parse command-line arguments and execute
@@ -17,8 +13,7 @@ program.parse(process.argv);
17
13
  /**
18
14
  * Handle uncaught exceptions globally.
19
15
  *
20
- * ExitPromptError is thrown when a user cancels an interactive prompt,
21
- * so we handle it gracefully. Other errors are re-thrown for proper error reporting.
16
+ * ExitPromptError is thrown when a user cancels an interactive prompt.
22
17
  */
23
18
  process.on('uncaughtException', (error) => {
24
19
  if (error instanceof Error && error.name === 'ExitPromptError') {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,cAAc,CAAC;AAE9B,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnF,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC;AAEvC,kCAAkC;AAClC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,yDAAyD,CAAC;KACtE,OAAO,CAAC,UAAU,CAAC,CAAC;AAEvB,sEAAsE;AACtE,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,2CAA2C;AAC3C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B;;;;;GAKG;AACH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,cAAc,CAAC;AAE9B,OAAO,aAAa,MAAM,sBAAsB,CAAC;AAEjD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnF,kCAAkC;AAClC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEjG,sEAAsE;AACtE,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,2CAA2C;AAC3C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B;;;;GAIG;AACH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,QAAA,MAAM,aAAa,SAAwB,CAAC;AAiI5C,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,QAAA,MAAM,aAAa,SAAwB,CAAC;AAkI5C,eAAe,aAAa,CAAC"}
@@ -8,17 +8,18 @@
8
8
  * 4. Installing dependencies (optional)
9
9
  * 5. Adding the function to project.yml configuration (optional)
10
10
  */
11
- import { confirm, input, select } from '@inquirer/prompts';
12
- import { Command } from 'commander';
13
- import fs from 'fs-extra';
14
11
  import * as child_process from 'node:child_process';
15
12
  import * as path from 'node:path';
16
13
  import * as util from 'node:util';
14
+ import { confirm, input, select } from '@inquirer/prompts';
15
+ import { Command } from 'commander';
16
+ import fs from 'fs-extra';
17
17
  import ora from 'ora';
18
+ import * as z from 'zod';
19
+ import { CreateOptionsSchema } from '../schemas/createOptions.js';
20
+ import { functionTemplateService } from '../services/functionTemplateService.js';
18
21
  import { scaffoldFunction, updateProjectConfig } from '../utils/util.js';
19
22
  import { validateFunctionName } from '../utils/validators.js';
20
- import { CreateOptionsSchema } from '../schemas/createOptions.js';
21
- import * as z from "zod";
22
23
  // Promisify exec to use async/await syntax
23
24
  const exec = util.promisify(child_process.exec);
24
25
  const createCommand = new Command('create');
@@ -40,11 +41,12 @@ createCommand
40
41
  message: 'Enter the root function packages directory:',
41
42
  default: './packages',
42
43
  }));
43
- const userFuncPath = parsedOptions.func || (await input({
44
- message: 'Enter the package/function name to create:',
45
- default: 'sample/hello',
46
- validate: validateFunctionName,
47
- }));
44
+ const userFuncPath = parsedOptions.func ||
45
+ (await input({
46
+ message: 'Enter the package/function name to create:',
47
+ default: 'sample/hello',
48
+ validate: validateFunctionName,
49
+ }));
48
50
  const [pkgName, funcName] = userFuncPath.split('/');
49
51
  const resolvedFuncDir = path.resolve(userPackagesDir, userFuncPath);
50
52
  if (await fs.exists(resolvedFuncDir)) {
@@ -57,14 +59,13 @@ createCommand
57
59
  return;
58
60
  }
59
61
  }
60
- const funcLanguage = (await select({
62
+ const funcLanguage = await select({
61
63
  message: 'Choose a language for the function:',
62
- choices: [
63
- { name: 'JavaScript', value: 'javascript' },
64
- { name: 'TypeScript', value: 'typescript' },
65
- ],
66
- default: 'javascript',
67
- }));
64
+ choices: functionTemplateService
65
+ .getTemplates()
66
+ .map((template) => ({ name: template.name, value: template.dirName })),
67
+ default: functionTemplateService.getDefaultTemplate().dirName,
68
+ });
68
69
  // Initialize a spinner to show progress to the user
69
70
  const spinner = ora(`Creating function '${userFuncPath}'...`).start();
70
71
  try {
@@ -117,7 +118,7 @@ createCommand
117
118
  }
118
119
  else {
119
120
  spinner.start('Updating project.yml configuration...');
120
- const result = await updateProjectConfig(projectYmlPath, pkgName, funcName);
121
+ const result = await updateProjectConfig(projectYmlPath, pkgName, funcName, funcLanguage);
121
122
  const resultStatusMessageMap = {
122
123
  'created-new-config': `Created project.yml with package "${pkgName}" and function "${userFuncPath}"`,
123
124
  'added-package': `Added new package "${pkgName}" with function "${userFuncPath}" to project.yml`,
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,2CAA2C;AAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAEhD,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5C,aAAa;KACV,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,sBAAsB,EAAE,qCAAqC,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACnE,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC;IAE/C,MAAM,eAAe,GACnB,aAAa,CAAC,WAAW;QACzB,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,6CAA6C;YACtD,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC,CAAC;IAEN,MAAM,YAAY,GAChB,aAAa,CAAC,IAAI;QAClB,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,4CAA4C;YACrD,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,oBAAoB;SAC/B,CAAC,CAAC,CAAC;IAEN,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IAExE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACpE,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,kBAAkB,eAAe,gDAAgD;YAC1F,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,4CAA4C,CAAC,CAAC,IAAI,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC;QAChC,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,uBAAuB;aAC7B,YAAY,EAAE;aACd,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,OAAO,EAAE,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,OAAO;KAC9D,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,YAAY,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC;YACrB,SAAS,EAAE,eAAe;YAC1B,QAAQ,EAAE,YAAY;YACtB,YAAY;SACb,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,aAAa,YAAY,8BAA8B,eAAe,GAAG,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC;IACd,CAAC;IAED,8DAA8D;IAC9D,MAAM,WAAW,GACf,OAAO,CAAC,GAAG;QACX,CAAC,MAAM,OAAO,CAAC;YACb,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;IACN,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,4CAA4C;YAC5C,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAChE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG;QACX,CAAC,MAAM,OAAO,CAAC;YACb,OAAO,EAAE,2EAA2E;YACpF,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;IACN,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACxD,CAAC,CAAC,OAAO,CAAC,GAAG;gBACX,CAAC,MAAM,OAAO,CAAC;oBACb,OAAO,EAAE,iEAAiE;oBAC1E,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAEvD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC1F,MAAM,sBAAsB,GAAiC;gBAC3D,oBAAoB,EAAE,qCAAqC,OAAO,mBAAmB,YAAY,GAAG;gBACpG,eAAe,EAAE,sBAAsB,OAAO,oBAAoB,YAAY,kBAAkB;gBAChG,gBAAgB,EAAE,mBAAmB,YAAY,0BAA0B,OAAO,kBAAkB;gBACpG,iBAAiB,EAAE,aAAa,YAAY,gCAAgC,OAAO,qBAAqB;gBACxG,KAAK,EAAE,4CAA4C;aACpD,CAAC;YAEF,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,wDAAwD;AACxD,eAAe,aAAa,CAAC"}
@@ -1,4 +1,4 @@
1
- import * as z from "zod";
1
+ import * as z from 'zod';
2
2
  export declare const CreateOptionsSchema: z.ZodObject<{
3
3
  packagesDir: z.ZodOptional<z.ZodString>;
4
4
  func: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"createOptions.d.ts","sourceRoot":"","sources":["../../src/schemas/createOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"createOptions.d.ts","sourceRoot":"","sources":["../../src/schemas/createOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,eAAO,MAAM,mBAAmB;;;iBAM9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -1,6 +1,9 @@
1
- import * as z from "zod";
1
+ import * as z from 'zod';
2
2
  export const CreateOptionsSchema = z.object({
3
3
  packagesDir: z.string().optional(),
4
- func: z.string().regex(/^[a-z]+\/[a-z]+$/).optional(),
4
+ func: z
5
+ .string()
6
+ .regex(/^[a-z]+\/[a-z]+$/)
7
+ .optional(),
5
8
  });
6
9
  //# sourceMappingURL=createOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createOptions.js","sourceRoot":"","sources":["../../src/schemas/createOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC"}
1
+ {"version":3,"file":"createOptions.js","sourceRoot":"","sources":["../../src/schemas/createOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,KAAK,CAAC,kBAAkB,CAAC;SACzB,QAAQ,EAAE;CACd,CAAC,CAAC"}
@@ -1,19 +1,10 @@
1
1
  import * as z from 'zod';
2
2
  /**
3
3
  * Zod schema for validating a DigitalOcean function entry in project.yml
4
- *
5
- * Properties:
6
- * - name: The function name (required)
7
- * - runtime: The Node.js runtime version (defaults to DEFAULT_RUNTIME)
8
- * - web: Whether the function is web-accessible (defaults to true)
9
4
  */
10
5
  export declare const DOFunctionSchema: z.ZodObject<{
11
6
  name: z.ZodString;
12
- runtime: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
13
- "nodejs:18": "nodejs:18";
14
- "nodejs:14": "nodejs:14";
15
- "nodejs:default": "nodejs:default";
16
- }>>>;
7
+ runtime: z.ZodOptional<z.ZodString>;
17
8
  web: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
18
9
  }, z.core.$strip>;
19
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"doFunction.d.ts","sourceRoot":"","sources":["../../src/schemas/doFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;iBAO3B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"doFunction.d.ts","sourceRoot":"","sources":["../../src/schemas/doFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -1,19 +1,10 @@
1
1
  import * as z from 'zod';
2
- import { DEFAULT_RUNTIME } from '../constants.js';
3
2
  /**
4
3
  * Zod schema for validating a DigitalOcean function entry in project.yml
5
- *
6
- * Properties:
7
- * - name: The function name (required)
8
- * - runtime: The Node.js runtime version (defaults to DEFAULT_RUNTIME)
9
- * - web: Whether the function is web-accessible (defaults to true)
10
4
  */
11
5
  export const DOFunctionSchema = z.object({
12
6
  name: z.string(),
13
- runtime: z
14
- .enum(['nodejs:14', 'nodejs:18', 'nodejs:default'])
15
- .optional()
16
- .default(DEFAULT_RUNTIME),
7
+ runtime: z.string().optional(),
17
8
  web: z.boolean().optional().default(true),
18
9
  });
19
10
  //# sourceMappingURL=doFunction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doFunction.js","sourceRoot":"","sources":["../../src/schemas/doFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;SAClD,QAAQ,EAAE;SACV,OAAO,CAAC,eAA8B,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC1C,CAAC,CAAC"}
1
+ {"version":3,"file":"doFunction.js","sourceRoot":"","sources":["../../src/schemas/doFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC1C,CAAC,CAAC"}
@@ -10,11 +10,7 @@ export declare const DOPackageSchema: z.ZodObject<{
10
10
  name: z.ZodString;
11
11
  functions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
12
12
  name: z.ZodString;
13
- runtime: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
14
- "nodejs:18": "nodejs:18";
15
- "nodejs:14": "nodejs:14";
16
- "nodejs:default": "nodejs:default";
17
- }>>>;
13
+ runtime: z.ZodOptional<z.ZodString>;
18
14
  web: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
19
15
  }, z.core.$strip>>>>;
20
16
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"doPackage.d.ts","sourceRoot":"","sources":["../../src/schemas/doPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;iBAG1B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"doPackage.d.ts","sourceRoot":"","sources":["../../src/schemas/doPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;;;;;;;iBAG1B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"doPackage.js","sourceRoot":"","sources":["../../src/schemas/doPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC5D,CAAC,CAAC"}
1
+ {"version":3,"file":"doPackage.js","sourceRoot":"","sources":["../../src/schemas/doPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC5D,CAAC,CAAC"}
@@ -10,11 +10,7 @@ export declare const DOProjectYmlSchema: z.ZodObject<{
10
10
  name: z.ZodString;
11
11
  functions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
12
12
  name: z.ZodString;
13
- runtime: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
14
- "nodejs:18": "nodejs:18";
15
- "nodejs:14": "nodejs:14";
16
- "nodejs:default": "nodejs:default";
17
- }>>>;
13
+ runtime: z.ZodOptional<z.ZodString>;
18
14
  web: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
19
15
  }, z.core.$strip>>>>;
20
16
  }, z.core.$strip>>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"doProjectYml.d.ts","sourceRoot":"","sources":["../../src/schemas/doProjectYml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;iBAE7B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"doProjectYml.d.ts","sourceRoot":"","sources":["../../src/schemas/doProjectYml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAIzB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;iBAE7B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"doProjectYml.js","sourceRoot":"","sources":["../../src/schemas/doProjectYml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC1D,CAAC,CAAC"}
1
+ {"version":3,"file":"doProjectYml.js","sourceRoot":"","sources":["../../src/schemas/doProjectYml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC1D,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import * as z from 'zod';
2
+ /**
3
+ * Zod schema for validating a function template entry
4
+ */
5
+ export declare const FunctionTemplateSchema: z.ZodObject<{
6
+ name: z.ZodString;
7
+ dirName: z.ZodString;
8
+ runtime: z.ZodString;
9
+ }, z.core.$strip>;
10
+ /**
11
+ * TypeScript type derived from the FunctionTemplateSchema
12
+ */
13
+ export type FunctionTemplate = z.infer<typeof FunctionTemplateSchema>;
14
+ //# sourceMappingURL=functionTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionTemplate.d.ts","sourceRoot":"","sources":["../../src/schemas/functionTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as z from 'zod';
2
+ /**
3
+ * Zod schema for validating a function template entry
4
+ */
5
+ export const FunctionTemplateSchema = z.object({
6
+ name: z.string(),
7
+ dirName: z.string(),
8
+ runtime: z.string(),
9
+ });
10
+ //# sourceMappingURL=functionTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionTemplate.js","sourceRoot":"","sources":["../../src/schemas/functionTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { FunctionTemplate } from '../schemas/functionTemplate.js';
2
+ /**
3
+ * Service class for managing function templates.
4
+ * Provides methods to retrieve and manage available function templates.
5
+ */
6
+ declare class FunctionTemplateService {
7
+ /** Array to store available function templates */
8
+ private templates;
9
+ /** Retrieves all available function templates */
10
+ getTemplates(): FunctionTemplate[];
11
+ /** Retrieves the default function template */
12
+ getDefaultTemplate(): FunctionTemplate;
13
+ /** Retrieves a function template by its directory name */
14
+ getTemplateByDirName(dirName: string): FunctionTemplate | undefined;
15
+ /** Adds a new function template to the list */
16
+ addTemplate(template: FunctionTemplate): void;
17
+ }
18
+ /** Singleton instance for managing function templates */
19
+ export declare const functionTemplateService: FunctionTemplateService;
20
+ export {};
21
+ //# sourceMappingURL=functionTemplateService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionTemplateService.d.ts","sourceRoot":"","sources":["../../src/services/functionTemplateService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE;;;GAGG;AACH,cAAM,uBAAuB;IAC3B,kDAAkD;IAClD,OAAO,CAAC,SAAS,CAWf;IAEF,iDAAiD;IACjD,YAAY,IAAI,gBAAgB,EAAE;IAIlC,8CAA8C;IAC9C,kBAAkB,IAAI,gBAAgB;IAItC,0DAA0D;IAC1D,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAKnE,+CAA+C;IAC/C,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;CAG9C;AAED,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,yBAAgC,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Service class for managing function templates.
3
+ * Provides methods to retrieve and manage available function templates.
4
+ */
5
+ class FunctionTemplateService {
6
+ /** Array to store available function templates */
7
+ templates = [
8
+ {
9
+ name: 'JavaScript',
10
+ dirName: 'javascript',
11
+ runtime: 'nodejs:18',
12
+ },
13
+ {
14
+ name: 'TypeScript',
15
+ dirName: 'typescript',
16
+ runtime: 'nodejs:18',
17
+ },
18
+ ];
19
+ /** Retrieves all available function templates */
20
+ getTemplates() {
21
+ return this.templates.map((template) => ({ ...template }));
22
+ }
23
+ /** Retrieves the default function template */
24
+ getDefaultTemplate() {
25
+ return { ...this.templates[0] };
26
+ }
27
+ /** Retrieves a function template by its directory name */
28
+ getTemplateByDirName(dirName) {
29
+ const template = this.templates.find((template) => template.dirName === dirName);
30
+ return template ? { ...template } : undefined;
31
+ }
32
+ /** Adds a new function template to the list */
33
+ addTemplate(template) {
34
+ this.templates.push({ ...template });
35
+ }
36
+ }
37
+ /** Singleton instance for managing function templates */
38
+ export const functionTemplateService = new FunctionTemplateService();
39
+ //# sourceMappingURL=functionTemplateService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionTemplateService.js","sourceRoot":"","sources":["../../src/services/functionTemplateService.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,uBAAuB;IAC3B,kDAAkD;IAC1C,SAAS,GAAuB;QACtC;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,WAAW;SACrB;QACD;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;IAEF,iDAAiD;IACjD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,8CAA8C;IAC9C,kBAAkB;QAChB,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC;IACnC,CAAC;IAED,0DAA0D;IAC1D,oBAAoB,CAAC,OAAe;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACjF,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,+CAA+C;IAC/C,WAAW,CAAC,QAA0B;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;CACF;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC"}
@@ -1,12 +1,11 @@
1
- export type LanguageChoice = 'typescript' | 'javascript';
2
1
  /**
3
2
  * Get the template directory for a function depending on language choice.
4
3
  */
5
- export declare function getTemplateDir(funcLanguage: LanguageChoice): string;
4
+ export declare function getTemplateDir(funcLanguage: string): string;
6
5
  export type ScaffoldOptions = {
7
6
  targetDir: string;
8
7
  funcPath: string;
9
- funcLanguage: LanguageChoice;
8
+ funcLanguage: string;
10
9
  };
11
10
  /**
12
11
  * Scaffolds a function directory by emptying target and copying template, then updating package.json name.
@@ -20,5 +19,5 @@ export type UpdateResult = {
20
19
  * Update or create the project.yml configuration with the given package and function.
21
20
  * Uses early returns for clarity. Returns a status describing the performed action.
22
21
  */
23
- export declare function updateProjectConfig(projectYmlPath: string, pkgName: string, funcName: string): Promise<UpdateResult>;
22
+ export declare function updateProjectConfig(projectYmlPath: string, pkgName: string, funcName: string, funcLanguage: string): Promise<UpdateResult>;
24
23
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;AAEzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,cAAc,GAAG,MAAM,CAOnE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,SAAS,EACT,QAAQ,EACR,YAAY,GACb,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjC;AAED,MAAM,MAAM,YAAY,GACpB,oBAAoB,GACpB,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CA+BvB"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,SAAS,EACT,QAAQ,EACR,YAAY,GACb,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjC;AAED,MAAM,MAAM,YAAY,GACpB,oBAAoB,GACpB,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAoCvB"}
@@ -1,9 +1,9 @@
1
- import fs from 'fs-extra';
2
1
  import * as path from 'node:path';
3
- import { DEFAULT_RUNTIME } from '../constants.js';
4
- import { DOProjectYmlSchema } from '../schemas/doProjectYml.js';
5
- import YAML from 'yaml';
6
2
  import { fileURLToPath } from 'node:url';
3
+ import fs from 'fs-extra';
4
+ import YAML from 'yaml';
5
+ import { DOProjectYmlSchema } from '../schemas/doProjectYml.js';
6
+ import { functionTemplateService } from '../services/functionTemplateService.js';
7
7
  /**
8
8
  * Get the template directory for a function depending on language choice.
9
9
  */
@@ -25,9 +25,13 @@ export async function scaffoldFunction({ targetDir, funcPath, funcLanguage, }) {
25
25
  * Update or create the project.yml configuration with the given package and function.
26
26
  * Uses early returns for clarity. Returns a status describing the performed action.
27
27
  */
28
- export async function updateProjectConfig(projectYmlPath, pkgName, funcName) {
28
+ export async function updateProjectConfig(projectYmlPath, pkgName, funcName, funcLanguage) {
29
29
  try {
30
- const functionObj = { name: funcName, runtime: DEFAULT_RUNTIME, web: true };
30
+ const funcLanguageObj = functionTemplateService.getTemplateByDirName(funcLanguage);
31
+ if (!funcLanguageObj) {
32
+ throw new Error(`Unsupported function language: ${funcLanguage}`);
33
+ }
34
+ const functionObj = { name: funcName, runtime: funcLanguageObj.runtime, web: true };
31
35
  const exists = await fs.exists(projectYmlPath);
32
36
  if (!exists) {
33
37
  const initial = { packages: [{ name: pkgName, functions: [functionObj] }] };
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,20 +1,30 @@
1
1
  {
2
2
  "name": "do-functions-cli",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
+ "description": "CLI tool for scaffolding DigitalOcean Serverless Functions with JavaScript and TypeScript templates, automatic dependency installation, and project.yml configuration.",
4
5
  "type": "module",
5
6
  "repository": {
6
7
  "type": "git",
7
8
  "url": "git+https://github.com/grantchatterton/do-functions-cli.git"
8
9
  },
10
+ "homepage": "https://github.com/grantchatterton/do-functions-cli#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/grantchatterton/do-functions-cli/issues"
13
+ },
9
14
  "author": "Grant Chatterton",
10
15
  "license": "MIT",
16
+ "engines": {
17
+ "node": ">=20.12.0"
18
+ },
11
19
  "bin": {
12
20
  "do-functions-cli": "dist/cli.js"
13
21
  },
14
22
  "scripts": {
15
23
  "build": "tsc",
16
- "format": "prettier --write .",
17
- "format:check": "prettier --check .",
24
+ "format": "prettier --write ./src",
25
+ "format:check": "prettier --check ./src",
26
+ "lint": "eslint ./src --ext .ts",
27
+ "lint:fix": "eslint ./src --ext .ts --fix",
18
28
  "prepublishOnly": "npm run build",
19
29
  "watch": "tsc -w"
20
30
  },
@@ -27,23 +37,39 @@
27
37
  "zod": "^4.1.13"
28
38
  },
29
39
  "devDependencies": {
40
+ "@eslint/js": "^9.39.1",
41
+ "@semantic-release/git": "^10.0.1",
42
+ "@trivago/prettier-plugin-sort-imports": "^6.0.0",
30
43
  "@types/fs-extra": "^11.0.4",
31
44
  "@types/node": "^24.10.1",
45
+ "eslint": "^9.39.1",
46
+ "eslint-config-prettier": "^10.1.8",
47
+ "globals": "^16.5.0",
48
+ "jiti": "^2.6.1",
32
49
  "prettier": "^3.7.2",
33
- "typescript": "^5.9.3"
50
+ "prettier-plugin-organize-imports": "^4.3.0",
51
+ "typescript": "^5.9.3",
52
+ "typescript-eslint": "^8.48.0"
34
53
  },
35
54
  "files": [
36
55
  "dist",
37
56
  "templates"
38
57
  ],
39
58
  "keywords": [
59
+ "digitalocean",
60
+ "serverless",
40
61
  "functions",
41
- "utility",
42
- "typescript",
62
+ "faas",
43
63
  "cli",
44
- "npm",
45
- "do",
46
- "digitalocean",
47
- "serverless"
64
+ "scaffold",
65
+ "generator",
66
+ "typescript",
67
+ "javascript",
68
+ "nodejs",
69
+ "cloud-functions",
70
+ "serverless-functions",
71
+ "do-functions",
72
+ "function-template",
73
+ "project-generator"
48
74
  ]
49
75
  }