chore: publish create app cli (#44)
* chore: move folder to match package name * chore: update dependencies
This commit is contained in:
parent
b76c371480
commit
0f8efecf65
@ -1,3 +1,5 @@
|
||||
{
|
||||
"singleQuote": true
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"plugins": ["prettier-plugin-organize-imports"]
|
||||
}
|
||||
|
||||
@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
- Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
- The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
@ -4,13 +4,13 @@
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.app.json"
|
||||
"path": "./tsconfig.app.json",
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.spec.json"
|
||||
}
|
||||
"path": "./tsconfig.spec.json",
|
||||
},
|
||||
],
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true
|
||||
}
|
||||
"esModuleInterop": true,
|
||||
},
|
||||
}
|
||||
|
||||
@ -3,9 +3,21 @@
|
||||
@tailwind utilities;
|
||||
html {
|
||||
-webkit-text-size-adjust: 100%;
|
||||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
||||
Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif,
|
||||
Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
|
||||
font-family:
|
||||
ui-sans-serif,
|
||||
system-ui,
|
||||
-apple-system,
|
||||
BlinkMacSystemFont,
|
||||
Segoe UI,
|
||||
Roboto,
|
||||
Helvetica Neue,
|
||||
Arial,
|
||||
Noto Sans,
|
||||
sans-serif,
|
||||
Apple Color Emoji,
|
||||
Segoe UI Emoji,
|
||||
Segoe UI Symbol,
|
||||
Noto Color Emoji;
|
||||
line-height: 1.5;
|
||||
tab-size: 4;
|
||||
scroll-behavior: smooth;
|
||||
@ -39,8 +51,15 @@ a {
|
||||
text-decoration: inherit;
|
||||
}
|
||||
pre {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
|
||||
Liberation Mono, Courier New, monospace;
|
||||
font-family:
|
||||
ui-monospace,
|
||||
SFMono-Regular,
|
||||
Menlo,
|
||||
Monaco,
|
||||
Consolas,
|
||||
Liberation Mono,
|
||||
Courier New,
|
||||
monospace;
|
||||
}
|
||||
svg {
|
||||
display: block;
|
||||
@ -52,14 +71,24 @@ pre {
|
||||
background-color: rgba(55, 65, 81, 1);
|
||||
border-radius: 0.25rem;
|
||||
color: rgba(229, 231, 235, 1);
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
|
||||
Liberation Mono, Courier New, monospace;
|
||||
font-family:
|
||||
ui-monospace,
|
||||
SFMono-Regular,
|
||||
Menlo,
|
||||
Monaco,
|
||||
Consolas,
|
||||
Liberation Mono,
|
||||
Courier New,
|
||||
monospace;
|
||||
overflow: scroll;
|
||||
padding: 0.5rem 0.75rem;
|
||||
}
|
||||
|
||||
.shadow {
|
||||
box-shadow: 0 0 #0000, 0 0 #0000, 0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
||||
box-shadow:
|
||||
0 0 #0000,
|
||||
0 0 #0000,
|
||||
0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
||||
0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.wrapper {
|
||||
@ -164,8 +193,17 @@ pre {
|
||||
display: flex;
|
||||
margin-top: 1rem;
|
||||
padding: 1rem;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -174,8 +212,17 @@ pre {
|
||||
.list-item-link svg:first-child {
|
||||
margin-right: 1rem;
|
||||
height: 1.5rem;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -184,8 +231,17 @@ pre {
|
||||
.list-item-link > span {
|
||||
flex-grow: 1;
|
||||
font-weight: 400;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -197,8 +253,17 @@ pre {
|
||||
font-size: 0.75rem;
|
||||
font-weight: 300;
|
||||
line-height: 1rem;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -227,16 +292,34 @@ pre {
|
||||
.button-pill {
|
||||
padding: 1.5rem 2rem;
|
||||
transition-duration: 300ms;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
.button-pill svg {
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -358,8 +441,17 @@ summary {
|
||||
font-weight: 400;
|
||||
padding: 0.5rem;
|
||||
cursor: pointer;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
|
||||
@ -13,10 +13,10 @@
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
"name": "next",
|
||||
},
|
||||
],
|
||||
"types": ["jest", "node"]
|
||||
"types": ["jest", "node"],
|
||||
},
|
||||
"include": [
|
||||
"**/*.ts",
|
||||
@ -25,12 +25,12 @@
|
||||
"**/*.jsx",
|
||||
"../../apps/demo-nextjs-app-router/.next/types/**/*.ts",
|
||||
"../../dist/apps/demo-nextjs-app-router/.next/types/**/*.ts",
|
||||
"next-env.d.ts"
|
||||
"next-env.d.ts",
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"jest.config.ts",
|
||||
"src/**/*.spec.ts",
|
||||
"src/**/*.test.ts"
|
||||
]
|
||||
"src/**/*.test.ts",
|
||||
],
|
||||
}
|
||||
|
||||
@ -3,9 +3,21 @@
|
||||
@tailwind utilities;
|
||||
html {
|
||||
-webkit-text-size-adjust: 100%;
|
||||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
||||
Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif,
|
||||
Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
|
||||
font-family:
|
||||
ui-sans-serif,
|
||||
system-ui,
|
||||
-apple-system,
|
||||
BlinkMacSystemFont,
|
||||
Segoe UI,
|
||||
Roboto,
|
||||
Helvetica Neue,
|
||||
Arial,
|
||||
Noto Sans,
|
||||
sans-serif,
|
||||
Apple Color Emoji,
|
||||
Segoe UI Emoji,
|
||||
Segoe UI Symbol,
|
||||
Noto Color Emoji;
|
||||
line-height: 1.5;
|
||||
tab-size: 4;
|
||||
scroll-behavior: smooth;
|
||||
@ -39,8 +51,15 @@ a {
|
||||
text-decoration: inherit;
|
||||
}
|
||||
pre {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
|
||||
Liberation Mono, Courier New, monospace;
|
||||
font-family:
|
||||
ui-monospace,
|
||||
SFMono-Regular,
|
||||
Menlo,
|
||||
Monaco,
|
||||
Consolas,
|
||||
Liberation Mono,
|
||||
Courier New,
|
||||
monospace;
|
||||
}
|
||||
svg {
|
||||
display: block;
|
||||
@ -52,14 +71,24 @@ pre {
|
||||
background-color: rgba(55, 65, 81, 1);
|
||||
border-radius: 0.25rem;
|
||||
color: rgba(229, 231, 235, 1);
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
|
||||
Liberation Mono, Courier New, monospace;
|
||||
font-family:
|
||||
ui-monospace,
|
||||
SFMono-Regular,
|
||||
Menlo,
|
||||
Monaco,
|
||||
Consolas,
|
||||
Liberation Mono,
|
||||
Courier New,
|
||||
monospace;
|
||||
overflow: scroll;
|
||||
padding: 0.5rem 0.75rem;
|
||||
}
|
||||
|
||||
.shadow {
|
||||
box-shadow: 0 0 #0000, 0 0 #0000, 0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
||||
box-shadow:
|
||||
0 0 #0000,
|
||||
0 0 #0000,
|
||||
0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
||||
0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.wrapper {
|
||||
@ -164,8 +193,17 @@ pre {
|
||||
display: flex;
|
||||
margin-top: 1rem;
|
||||
padding: 1rem;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -174,8 +212,17 @@ pre {
|
||||
.list-item-link svg:first-child {
|
||||
margin-right: 1rem;
|
||||
height: 1.5rem;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -184,8 +231,17 @@ pre {
|
||||
.list-item-link > span {
|
||||
flex-grow: 1;
|
||||
font-weight: 400;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -197,8 +253,17 @@ pre {
|
||||
font-size: 0.75rem;
|
||||
font-weight: 300;
|
||||
line-height: 1rem;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -227,16 +292,34 @@ pre {
|
||||
.button-pill {
|
||||
padding: 1.5rem 2rem;
|
||||
transition-duration: 300ms;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
.button-pill svg {
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
@ -358,8 +441,17 @@ summary {
|
||||
font-weight: 400;
|
||||
padding: 0.5rem;
|
||||
cursor: pointer;
|
||||
transition-property: background-color, border-color, color, fill, stroke,
|
||||
opacity, box-shadow, transform, filter, backdrop-filter,
|
||||
transition-property:
|
||||
background-color,
|
||||
border-color,
|
||||
color,
|
||||
fill,
|
||||
stroke,
|
||||
opacity,
|
||||
box-shadow,
|
||||
transform,
|
||||
filter,
|
||||
backdrop-filter,
|
||||
-webkit-backdrop-filter;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 150ms;
|
||||
|
||||
@ -11,8 +11,8 @@
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"incremental": true,
|
||||
"types": ["jest", "node"]
|
||||
"types": ["jest", "node"],
|
||||
},
|
||||
"include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "next-env.d.ts"],
|
||||
"exclude": ["node_modules", "jest.config.ts"]
|
||||
"exclude": ["node_modules", "jest.config.ts"],
|
||||
}
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
## Fal.ai App Generator
|
||||
|
||||
Generate a new full stack app configured with Fal.ai proxy and models.
|
||||
|
||||
```sh
|
||||
npx @fal-ai/create
|
||||
```
|
||||
@ -1,21 +0,0 @@
|
||||
{
|
||||
"name": "@fal-ai/create",
|
||||
"version": "0.0.1",
|
||||
"description": "The fal serverless app generator.",
|
||||
"main": "index.js",
|
||||
"keywords": [
|
||||
"fal",
|
||||
"next",
|
||||
"nextjs",
|
||||
"express"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fal-ai/serverless-js.git",
|
||||
"directory": "libs/cli"
|
||||
},
|
||||
"type": "module",
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"dependencies": {}
|
||||
}
|
||||
@ -5,7 +5,7 @@
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fal-ai/serverless-js.git",
|
||||
"url": "https://github.com/fal-ai/fal-js.git",
|
||||
"directory": "libs/client"
|
||||
},
|
||||
"keywords": [
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { encode, decode } from '@msgpack/msgpack';
|
||||
import { decode, encode } from '@msgpack/msgpack';
|
||||
import {
|
||||
ContextFunction,
|
||||
InterpretOnChangeFunction,
|
||||
Service,
|
||||
createMachine,
|
||||
guard,
|
||||
immediate,
|
||||
interpret,
|
||||
InterpretOnChangeFunction,
|
||||
reduce,
|
||||
Service,
|
||||
state,
|
||||
transition,
|
||||
} from 'robot3';
|
||||
|
||||
@ -18,20 +18,22 @@ export type Metrics = {
|
||||
};
|
||||
|
||||
export type QueueStatus =
|
||||
{
|
||||
status: 'IN_PROGRESS';
|
||||
response_url: string;
|
||||
logs: null | RequestLog[];
|
||||
} | {
|
||||
status: 'COMPLETED';
|
||||
response_url: string;
|
||||
logs: null | RequestLog[];
|
||||
metrics: Metrics;
|
||||
} | {
|
||||
status: 'IN_QUEUE';
|
||||
queue_position: number;
|
||||
response_url: string;
|
||||
};
|
||||
| {
|
||||
status: 'IN_PROGRESS';
|
||||
response_url: string;
|
||||
logs: null | RequestLog[];
|
||||
}
|
||||
| {
|
||||
status: 'COMPLETED';
|
||||
response_url: string;
|
||||
logs: null | RequestLog[];
|
||||
metrics: Metrics;
|
||||
}
|
||||
| {
|
||||
status: 'IN_QUEUE';
|
||||
queue_position: number;
|
||||
response_url: string;
|
||||
};
|
||||
|
||||
export function isQueueStatus(obj: any): obj is QueueStatus {
|
||||
return obj && obj.status && obj.response_url;
|
||||
@ -52,22 +54,22 @@ export type ValidationErrorInfo = {
|
||||
*/
|
||||
export type WebHookResponse<Payload = any> =
|
||||
| {
|
||||
/** Indicates a successful response. */
|
||||
status: 'OK';
|
||||
/** The payload of the response, structure determined by the Payload type. */
|
||||
payload: Payload;
|
||||
/** Error is never present in a successful response. */
|
||||
error: never;
|
||||
/** The unique identifier for the request. */
|
||||
request_id: string;
|
||||
}
|
||||
/** Indicates a successful response. */
|
||||
status: 'OK';
|
||||
/** The payload of the response, structure determined by the Payload type. */
|
||||
payload: Payload;
|
||||
/** Error is never present in a successful response. */
|
||||
error: never;
|
||||
/** The unique identifier for the request. */
|
||||
request_id: string;
|
||||
}
|
||||
| {
|
||||
/** Indicates an unsuccessful response. */
|
||||
status: 'ERROR';
|
||||
/** The payload of the response, structure determined by the Payload type. */
|
||||
payload: Payload;
|
||||
/** Description of the error that occurred. */
|
||||
error: string;
|
||||
/** The unique identifier for the request. */
|
||||
request_id: string;
|
||||
};
|
||||
/** Indicates an unsuccessful response. */
|
||||
status: 'ERROR';
|
||||
/** The payload of the response, structure determined by the Payload type. */
|
||||
payload: Payload;
|
||||
/** Description of the error that occurred. */
|
||||
error: string;
|
||||
/** The unique identifier for the request. */
|
||||
request_id: string;
|
||||
};
|
||||
|
||||
@ -48,12 +48,15 @@ export function throttle<T extends (...args: any[]) => any>(
|
||||
clearTimeout(lastFunc);
|
||||
}
|
||||
|
||||
lastFunc = setTimeout(() => {
|
||||
if (Date.now() - lastRan >= limit) {
|
||||
func(...args);
|
||||
lastRan = Date.now();
|
||||
}
|
||||
}, limit - (Date.now() - lastRan));
|
||||
lastFunc = setTimeout(
|
||||
() => {
|
||||
if (Date.now() - lastRan >= limit) {
|
||||
func(...args);
|
||||
lastRan = Date.now();
|
||||
}
|
||||
},
|
||||
limit - (Date.now() - lastRan)
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@ -4,10 +4,10 @@
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
"path": "./tsconfig.lib.json",
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.spec.json"
|
||||
}
|
||||
]
|
||||
"path": "./tsconfig.spec.json",
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
7
libs/create-app/README.md
Normal file
7
libs/create-app/README.md
Normal file
@ -0,0 +1,7 @@
|
||||
## The fal.ai App Generator
|
||||
|
||||
Generate a new full stack app configured with [fal.ai](https://fal.ai) proxy and models.
|
||||
|
||||
```sh
|
||||
npx @fal-ai/create-app
|
||||
```
|
||||
@ -1,11 +1,11 @@
|
||||
/* eslint-disable */
|
||||
export default {
|
||||
displayName: 'cli',
|
||||
displayName: 'create-app',
|
||||
preset: '../../jest.preset.js',
|
||||
testEnvironment: 'node',
|
||||
transform: {
|
||||
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
|
||||
},
|
||||
moduleFileExtensions: ['ts', 'js', 'html'],
|
||||
coverageDirectory: '../../coverage/libs/cli',
|
||||
coverageDirectory: '../../coverage/libs/create-app',
|
||||
};
|
||||
27
libs/create-app/package.json
Normal file
27
libs/create-app/package.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "@fal-ai/create-app",
|
||||
"version": "0.1.0",
|
||||
"description": "The fal app generator.",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"main": "src/index.js",
|
||||
"keywords": [
|
||||
"fal",
|
||||
"next",
|
||||
"nextjs",
|
||||
"express"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fal-ai/fal-js.git",
|
||||
"directory": "libs/create-app"
|
||||
},
|
||||
"dependencies": {
|
||||
"@inquirer/prompts": "^3.3.0",
|
||||
"@inquirer/select": "^1.3.1",
|
||||
"chalk": "^5.3.0",
|
||||
"execa": "^8.0.1",
|
||||
"open": "^10.0.3",
|
||||
"ora": "^8.0.1"
|
||||
}
|
||||
}
|
||||
@ -1,32 +1,32 @@
|
||||
{
|
||||
"name": "cli",
|
||||
"name": "create-app",
|
||||
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "libs/cli/src",
|
||||
"sourceRoot": "libs/create-app/src",
|
||||
"projectType": "library",
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": ["{options.outputPath}"],
|
||||
"options": {
|
||||
"outputPath": "dist/libs/cli",
|
||||
"tsConfig": "libs/cli/tsconfig.lib.json",
|
||||
"packageJson": "libs/cli/package.json",
|
||||
"main": "libs/cli/src/index.ts",
|
||||
"assets": ["LICENSE", "CODE_OF_CONDUCT.md", "libs/cli/README.md"]
|
||||
"outputPath": "dist/libs/create-app",
|
||||
"tsConfig": "libs/create-app/tsconfig.lib.json",
|
||||
"packageJson": "libs/create-app/package.json",
|
||||
"main": "libs/create-app/src/index.ts",
|
||||
"assets": ["LICENSE", "CODE_OF_CONDUCT.md", "libs/create-app/README.md"]
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/linter:eslint",
|
||||
"outputs": ["{options.outputFile}"],
|
||||
"options": {
|
||||
"lintFilePatterns": ["libs/cli/**/*.ts"]
|
||||
"lintFilePatterns": ["libs/create-app/**/*.ts"]
|
||||
}
|
||||
},
|
||||
"test": {
|
||||
"executor": "@nx/jest:jest",
|
||||
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
|
||||
"options": {
|
||||
"jestConfig": "libs/cli/jest.config.ts",
|
||||
"jestConfig": "libs/create-app/jest.config.ts",
|
||||
"passWithNoTests": true
|
||||
},
|
||||
"configurations": {
|
||||
@ -1,15 +1,15 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import chalk from 'chalk';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import childProcess from 'child_process';
|
||||
import ora from 'ora';
|
||||
import select from '@inquirer/select';
|
||||
import { input } from '@inquirer/prompts';
|
||||
import select from '@inquirer/select';
|
||||
import chalk from 'chalk';
|
||||
import childProcess from 'child_process';
|
||||
import { Command } from 'commander';
|
||||
import { execa, execaCommand } from 'execa';
|
||||
import fs from 'fs';
|
||||
import open from 'open';
|
||||
import ora from 'ora';
|
||||
import path from 'path';
|
||||
|
||||
const program = new Command();
|
||||
const log = console.log;
|
||||
@ -25,8 +25,8 @@ async function main() {
|
||||
const kebabRegez = /^([a-z]+)(-[a-z0-9]+)*$/;
|
||||
|
||||
program
|
||||
.name('Fal.ai App Generator')
|
||||
.description('Generate full stack AI apps integrated with Fal.ai.');
|
||||
.name('The fal.ai App Generator')
|
||||
.description('Generate full stack AI apps integrated with fal.ai');
|
||||
|
||||
program.parse(process.argv);
|
||||
|
||||
@ -47,7 +47,7 @@ async function main() {
|
||||
}
|
||||
|
||||
const hasFalEnv = await select({
|
||||
message: 'Do you have a Fal.ai API key?',
|
||||
message: 'Do you have a fal.ai API key?',
|
||||
choices: [
|
||||
{
|
||||
name: 'Yes',
|
||||
@ -66,10 +66,10 @@ async function main() {
|
||||
|
||||
const fal_api_key = await input({ message: 'Fal AI API Key' });
|
||||
|
||||
let envs = `
|
||||
const envs = `
|
||||
# environment, either PRODUCTION or DEVELOPMENT
|
||||
ENVIRONMENT="PRODUCTION"
|
||||
|
||||
|
||||
# FAL AI API Key
|
||||
FAL_KEY="${fal_api_key}"
|
||||
`;
|
||||
@ -4,10 +4,10 @@
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
"path": "./tsconfig.lib.json",
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.spec.json"
|
||||
}
|
||||
]
|
||||
"path": "./tsconfig.spec.json",
|
||||
},
|
||||
],
|
||||
}
|
||||
@ -11,10 +11,7 @@
|
||||
"outDir": "dist",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"*": [
|
||||
"node_modules/*",
|
||||
"src/types/*"
|
||||
]
|
||||
"*": ["node_modules/*", "src/types/*"]
|
||||
}
|
||||
},
|
||||
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
|
||||
@ -4,7 +4,7 @@
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fal-ai/serverless-js.git",
|
||||
"url": "https://github.com/fal-ai/fal-js.git",
|
||||
"directory": "libs/proxy"
|
||||
},
|
||||
"keywords": [
|
||||
|
||||
@ -4,10 +4,10 @@
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
"path": "./tsconfig.lib.json",
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.spec.json"
|
||||
}
|
||||
]
|
||||
"path": "./tsconfig.spec.json",
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
3
nx.json
3
nx.json
@ -1,5 +1,6 @@
|
||||
{
|
||||
"$schema": "./node_modules/nx/schemas/nx-schema.json",
|
||||
"extends": "nx/presets/npm.json",
|
||||
"tasksRunnerOptions": {
|
||||
"default": {
|
||||
"runner": "nx-cloud",
|
||||
@ -50,5 +51,5 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultProject": "demo-nextjs-page-router"
|
||||
"defaultProject": "demo-nextjs-app-router"
|
||||
}
|
||||
|
||||
1933
package-lock.json
generated
1933
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "@fal-ai/serverless",
|
||||
"name": "@fal-ai/fal-js",
|
||||
"version": "0.0.0",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
@ -46,6 +46,8 @@
|
||||
"http-proxy-middleware": "^2.0.6",
|
||||
"js-base64": "^3.7.5",
|
||||
"next": "^14.0.3",
|
||||
"open": "^10.0.3",
|
||||
"ora": "^8.0.1",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"regenerator-runtime": "0.13.7",
|
||||
@ -108,7 +110,8 @@
|
||||
"nx-cloud": "16.4.0",
|
||||
"organize-imports-cli": "^0.10.0",
|
||||
"postcss": "8.4.21",
|
||||
"prettier": "^2.6.2",
|
||||
"prettier": "^3.2.4",
|
||||
"prettier-plugin-organize-imports": "^3.2.4",
|
||||
"secretlint": "^7.0.7",
|
||||
"tailwindcss": "3.2.7",
|
||||
"ts-jest": "29.1.1",
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
"skipDefaultLibCheck": true,
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@fal-ai/cli": ["libs/cli/src/index.ts"],
|
||||
"@fal-ai/create-app": ["libs/create-app/src/index.ts"],
|
||||
"@fal-ai/serverless-client": ["libs/client/src/index.ts"],
|
||||
"@fal-ai/serverless-proxy": ["libs/proxy/src/index.ts"],
|
||||
"@fal-ai/serverless-proxy/express": ["libs/proxy/src/express.ts"],
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user