fastscript 3.0.0 → 3.0.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.
- package/CHANGELOG.md +6 -0
- package/README.md +667 -636
- package/node_modules/@fastscript/core-private/src/fs-normalize.mjs +125 -121
- package/node_modules/@fastscript/core-private/src/typecheck.mjs +1466 -1464
- package/package.json +18 -3
- package/src/compatibility-governance.mjs +257 -0
- package/src/fs-normalize.mjs +6 -4
- package/src/generated/compatibility-registry-report.mjs +815 -0
- package/src/generated/docs-search-index.mjs +710 -219
- package/src/validate.mjs +2 -0
package/README.md
CHANGED
|
@@ -1,648 +1,679 @@
|
|
|
1
|
-
# FastScript
|
|
2
|
-
|
|
3
|
-
FastScript is a proprietary, source-available JavaScript-first full-stack runtime built around a first-class `.fs` file format.
|
|
4
|
-
|
|
5
|
-
It is designed to feel easier to read than heavyweight stack combinations while staying compatible with the JavaScript ecosystem developers already use.
|
|
6
|
-
|
|
7
|
-
- Write normal JavaScript or TypeScript in `.fs`
|
|
8
|
-
- Write pages, APIs, middleware, jobs, and database workflows in `.fs`
|
|
1
|
+
# FastScript
|
|
2
|
+
|
|
3
|
+
FastScript is a proprietary, source-available JavaScript-first full-stack runtime built around a first-class `.fs` file format.
|
|
4
|
+
|
|
5
|
+
It is designed to feel easier to read than heavyweight stack combinations while staying compatible with the JavaScript ecosystem developers already use.
|
|
6
|
+
|
|
7
|
+
- Write normal JavaScript or TypeScript in `.fs`
|
|
8
|
+
- Write pages, APIs, middleware, jobs, and database workflows in `.fs`
|
|
9
9
|
- Keep compatibility with normal `.js` packages and modules
|
|
10
10
|
- Treat FastScript-specific syntax as optional sugar, not a requirement
|
|
11
|
+
- Govern compatibility claims through a source-of-truth support matrix
|
|
11
12
|
- Compile to optimized JavaScript for production deployment
|
|
12
|
-
- Deploy the same app to Node, Vercel, or Cloudflare
|
|
13
|
-
- Run one quality gate for formatting, linting, typecheck, tests, smoke checks, benchmarks, and interop
|
|
14
|
-
- Build on the same language/runtime foundation that powers the future FastScript AI coding products
|
|
15
|
-
|
|
16
|
-
FastScript v3 is built for product teams that want a simpler, faster full-stack pipeline without surrendering compatibility with the ground-level JavaScript platform.
|
|
17
|
-
|
|
18
|
-
The v3 product contract is simple:
|
|
19
|
-
|
|
20
|
-
- `.fs` is a universal JS/TS container for the FastScript runtime
|
|
21
|
-
- FastScript-specific syntax is optional sugar
|
|
22
|
-
- valid JS/TS failures in `.fs` are FastScript compatibility bugs
|
|
23
|
-
- the speed story is earned by the runtime/compiler/toolchain and backed by release proof artifacts
|
|
24
|
-
|
|
25
|
-
## What FastScript Is
|
|
26
|
-
|
|
27
|
-
FastScript combines:
|
|
28
|
-
|
|
29
|
-
1. A JS/TS-compatible source container: `.fs`
|
|
30
|
-
2. A compiler and CLI
|
|
31
|
-
3. A full-stack app runtime
|
|
32
|
-
4. A deployment pipeline for multiple targets
|
|
33
|
-
5. A bridge back to standard JavaScript and TypeScript export paths
|
|
34
|
-
|
|
35
|
-
That means a single project can contain:
|
|
36
|
-
|
|
37
|
-
- UI pages
|
|
38
|
-
- API handlers
|
|
39
|
-
- middleware
|
|
40
|
-
- database migrations
|
|
41
|
-
- seed scripts
|
|
42
|
-
- jobs and workers
|
|
43
|
-
- deploy adapters
|
|
44
|
-
|
|
45
|
-
## Core Positioning
|
|
46
|
-
|
|
47
|
-
FastScript is built to be:
|
|
48
|
-
|
|
49
|
-
- Simpler than stacking TypeScript + framework + glue code everywhere
|
|
50
|
-
- Faster to build and ship than heavier pipeline combinations
|
|
51
|
-
- Compatible with existing JavaScript libraries
|
|
52
|
-
- Friendly to AI-assisted generation because the language surface is smaller and more regular
|
|
53
|
-
- Easy to migrate into and easy to export back out
|
|
54
|
-
|
|
55
|
-
## Current Measured Numbers
|
|
56
|
-
|
|
57
|
-
These are the real measured numbers from the current repo benchmark report:
|
|
58
|
-
|
|
13
|
+
- Deploy the same app to Node, Vercel, or Cloudflare
|
|
14
|
+
- Run one quality gate for formatting, linting, typecheck, tests, smoke checks, benchmarks, and interop
|
|
15
|
+
- Build on the same language/runtime foundation that powers the future FastScript AI coding products
|
|
16
|
+
|
|
17
|
+
FastScript v3 is built for product teams that want a simpler, faster full-stack pipeline without surrendering compatibility with the ground-level JavaScript platform.
|
|
18
|
+
|
|
19
|
+
The v3 product contract is simple:
|
|
20
|
+
|
|
21
|
+
- `.fs` is a universal JS/TS container for the FastScript runtime
|
|
22
|
+
- FastScript-specific syntax is optional sugar
|
|
23
|
+
- valid JS/TS failures in `.fs` are FastScript compatibility bugs
|
|
24
|
+
- the speed story is earned by the runtime/compiler/toolchain and backed by release proof artifacts
|
|
25
|
+
|
|
26
|
+
## What FastScript Is
|
|
27
|
+
|
|
28
|
+
FastScript combines:
|
|
29
|
+
|
|
30
|
+
1. A JS/TS-compatible source container: `.fs`
|
|
31
|
+
2. A compiler and CLI
|
|
32
|
+
3. A full-stack app runtime
|
|
33
|
+
4. A deployment pipeline for multiple targets
|
|
34
|
+
5. A bridge back to standard JavaScript and TypeScript export paths
|
|
35
|
+
|
|
36
|
+
That means a single project can contain:
|
|
37
|
+
|
|
38
|
+
- UI pages
|
|
39
|
+
- API handlers
|
|
40
|
+
- middleware
|
|
41
|
+
- database migrations
|
|
42
|
+
- seed scripts
|
|
43
|
+
- jobs and workers
|
|
44
|
+
- deploy adapters
|
|
45
|
+
|
|
46
|
+
## Core Positioning
|
|
47
|
+
|
|
48
|
+
FastScript is built to be:
|
|
49
|
+
|
|
50
|
+
- Simpler than stacking TypeScript + framework + glue code everywhere
|
|
51
|
+
- Faster to build and ship than heavier pipeline combinations
|
|
52
|
+
- Compatible with existing JavaScript libraries
|
|
53
|
+
- Friendly to AI-assisted generation because the language surface is smaller and more regular
|
|
54
|
+
- Easy to migrate into and easy to export back out
|
|
55
|
+
|
|
56
|
+
## Current Measured Numbers
|
|
57
|
+
|
|
58
|
+
These are the real measured numbers from the current repo benchmark report:
|
|
59
|
+
|
|
59
60
|
- Build time: `702.98ms`
|
|
60
61
|
- JS first-load gzip: `2.71KB`
|
|
61
62
|
- Routes in benchmark app: `16`
|
|
62
63
|
- API routes in benchmark app: `5`
|
|
63
|
-
- Interop matrix: `
|
|
64
|
+
- Interop matrix: `17/17` passing
|
|
64
65
|
- Current website deploy target: Node, Vercel, and Cloudflare adapters supported
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
- `benchmarks/
|
|
70
|
-
- `benchmarks/
|
|
71
|
-
- `
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
npm
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
fastscript
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
###
|
|
183
|
-
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
### Example:
|
|
199
|
-
|
|
200
|
-
```fs
|
|
201
|
-
export
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
return
|
|
225
|
-
}
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### Example:
|
|
229
|
-
|
|
230
|
-
```fs
|
|
231
|
-
export
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
export
|
|
276
|
-
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
###
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
-
|
|
307
|
-
-
|
|
308
|
-
-
|
|
309
|
-
-
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
-
|
|
323
|
-
-
|
|
324
|
-
-
|
|
325
|
-
-
|
|
326
|
-
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
npm run
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
66
|
+
- Governed `.fs` parity corpus: `18` passing checks across JS/TS, Next-style, React, Node, and Vue patterns
|
|
67
|
+
|
|
68
|
+
See:
|
|
69
|
+
|
|
70
|
+
- `benchmarks/latest-report.md`
|
|
71
|
+
- `benchmarks/suite-latest.json`
|
|
72
|
+
- `benchmarks/interop-latest.json`
|
|
73
|
+
- `docs/PROOF_PACK.md`
|
|
74
|
+
|
|
75
|
+
## Why Teams Pick FastScript
|
|
76
|
+
|
|
77
|
+
- Smaller client payloads than heavier framework baselines
|
|
78
|
+
- Faster build loops and stricter release gates in one toolchain
|
|
79
|
+
- One runtime-native source container for pages, APIs, jobs, and middleware
|
|
80
|
+
- Package compatibility without giving up a proprietary language/runtime moat
|
|
81
|
+
- A direct path into the next FastScript AI assistant stack
|
|
82
|
+
|
|
83
|
+
## Why Developers Choose FastScript
|
|
84
|
+
|
|
85
|
+
FastScript is built for developers who want one system instead of a pile of cooperating tools.
|
|
86
|
+
|
|
87
|
+
- Write ordinary TS/JS/JSX/TSX in `.fs`
|
|
88
|
+
- Use the same runtime for frontend pages, backend APIs, middleware, jobs, and workers
|
|
89
|
+
- Keep npm packages and ecosystem code while migrating incrementally
|
|
90
|
+
- See exactly what is `proven`, `partial`, `planned`, or `blocked` in the governed support matrix
|
|
91
|
+
- Convert existing route-based codebases safely with dry-run previews, diff artifacts, validation, and rollback
|
|
92
|
+
- Ship through Node, Vercel, or Cloudflare deploy adapters without rebuilding your app around each target
|
|
93
|
+
|
|
94
|
+
The strongest public developer guide lives at `/why-fastscript`, and the compatibility lane for edge cases lives at:
|
|
95
|
+
|
|
96
|
+
- `https://github.com/lordolami/fastscript/issues/new?template=compatibility-gap.yml`
|
|
97
|
+
|
|
98
|
+
## Install
|
|
99
|
+
|
|
100
|
+
### Option 1: npm install
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npm install -g fastscript
|
|
104
|
+
fastscript --help
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The published npm package is generated as a self-contained release bundle, so the CLI works without a second private npm package.
|
|
108
|
+
|
|
109
|
+
### Option 2: local repo workflow
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
git clone https://github.com/lordolami/fastscript.git
|
|
113
|
+
cd fastscript
|
|
114
|
+
npm install
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Option 3: global CLI link for daily use
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
git clone https://github.com/lordolami/fastscript.git
|
|
121
|
+
cd fastscript
|
|
122
|
+
npm install
|
|
123
|
+
npm link
|
|
124
|
+
fastscript --help
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
This gives you a global `fastscript` command backed by your local clone.
|
|
128
|
+
|
|
129
|
+
The source repos remain split for development, but npm users get a clean self-contained public package.
|
|
130
|
+
|
|
131
|
+
To use the CLI directly during development:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
node ./src/cli.mjs --help
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
If you publish or link the package locally, the command is:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
fastscript
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Quick Start
|
|
144
|
+
|
|
145
|
+
### Create a project
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
npm run create
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Or use one of the included templates:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
npm run create:fullstack
|
|
155
|
+
npm run create:startup-mvp
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Run locally
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npm run dev
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Link the CLI globally from your clone
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
npm link
|
|
168
|
+
fastscript create my-app
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Build for production
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
npm run build
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Start the production build
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
npm run start
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Run the full quality gate
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npm run qa:all
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## The `.fs` Language At A Glance
|
|
190
|
+
|
|
191
|
+
FastScript keeps normal JavaScript module structure and adds a few core forms:
|
|
192
|
+
|
|
193
|
+
- `fn` for functions
|
|
194
|
+
- `state` for named stateful declarations
|
|
195
|
+
- `~name = ...` for lightweight reactive-style declarations
|
|
196
|
+
- type syntax that can be stripped at compile time
|
|
197
|
+
- file conventions for pages, APIs, and runtime hooks
|
|
198
|
+
|
|
199
|
+
### Example: basic page
|
|
200
|
+
|
|
201
|
+
```fs
|
|
202
|
+
export default fn Page() {
|
|
203
|
+
state title = "FastScript"
|
|
204
|
+
~subtitle = "Write once. Ship anywhere."
|
|
205
|
+
|
|
206
|
+
return `
|
|
207
|
+
<section>
|
|
208
|
+
<h1>${title}</h1>
|
|
209
|
+
<p>${subtitle}</p>
|
|
210
|
+
</section>
|
|
211
|
+
`
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Example: load data for a page
|
|
216
|
+
|
|
217
|
+
```fs
|
|
218
|
+
export async fn load(ctx) {
|
|
219
|
+
const user = await ctx.db.get("users", ctx.params.id)
|
|
220
|
+
if (!user) return { notFound: true }
|
|
221
|
+
return { user }
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export default fn Page({ user }) {
|
|
225
|
+
return `<h1>${user.name}</h1>`
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Example: API route
|
|
230
|
+
|
|
231
|
+
```fs
|
|
232
|
+
export const schemas = {
|
|
233
|
+
POST: { sku: "string", qty: "int" }
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export async fn POST(ctx) {
|
|
237
|
+
const body = await ctx.input.validateBody(schemas.POST)
|
|
238
|
+
const order = { id: Date.now().toString(36), ...body }
|
|
239
|
+
ctx.db.collection("orders").set(order.id, order)
|
|
240
|
+
ctx.queue.enqueue("send-order-email", { orderId: order.id })
|
|
241
|
+
return ctx.helpers.json({ ok: true, order })
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Example: middleware
|
|
246
|
+
|
|
247
|
+
```fs
|
|
248
|
+
export async fn middleware(ctx, next) {
|
|
249
|
+
ctx.state.requestStartedAt = Date.now()
|
|
250
|
+
|
|
251
|
+
if (ctx.url.pathname.startsWith("/private") && !ctx.session?.user) {
|
|
252
|
+
return ctx.helpers.redirect("/")
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return next()
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Example: hydration hook for client behavior
|
|
260
|
+
|
|
261
|
+
```fs
|
|
262
|
+
export function hydrate({ root }) {
|
|
263
|
+
const button = root.querySelector("[data-action]")
|
|
264
|
+
if (!button) return
|
|
265
|
+
|
|
266
|
+
button.addEventListener("click", () => {
|
|
267
|
+
console.log("hydrated")
|
|
268
|
+
})
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Page Contract
|
|
273
|
+
|
|
274
|
+
A FastScript page can export any of the following:
|
|
275
|
+
|
|
276
|
+
- `export default fn Page(...)` or `export default function Page(...)`
|
|
277
|
+
- `export async fn load(ctx)` for server-side data loading
|
|
278
|
+
- `export function hydrate({ root, ...ctx })` for client behavior
|
|
279
|
+
- HTTP method handlers like `POST`, `PUT`, `PATCH`, `DELETE`
|
|
280
|
+
|
|
281
|
+
### Minimal page
|
|
282
|
+
|
|
283
|
+
```fs
|
|
284
|
+
export default fn Page() {
|
|
285
|
+
return `<h1>Hello</h1>`
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Page with loader
|
|
290
|
+
|
|
291
|
+
```fs
|
|
292
|
+
export async fn load(ctx) {
|
|
293
|
+
return { now: new Date().toISOString() }
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export default fn Page({ now }) {
|
|
297
|
+
return `<p>${now}</p>`
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Routing
|
|
302
|
+
|
|
303
|
+
FastScript uses file-based routing under `app/pages`.
|
|
304
|
+
|
|
305
|
+
### Route examples
|
|
306
|
+
|
|
307
|
+
- `app/pages/index.fs` -> `/`
|
|
308
|
+
- `app/pages/blog/index.fs` -> `/blog`
|
|
309
|
+
- `app/pages/blog/[slug].fs` -> `/blog/:slug`
|
|
310
|
+
- `app/pages/docs/[...slug].fs` -> `/docs/:slug*`
|
|
311
|
+
- `app/pages/[[...slug]].fs` -> optional catch-all
|
|
312
|
+
- `app/pages/blog/[id:int].fs` -> typed param route
|
|
313
|
+
- `app/pages/404.fs` -> not-found page
|
|
314
|
+
- `app/pages/_layout.fs` -> global layout wrapper
|
|
315
|
+
|
|
316
|
+
## Full-Stack Surface Area
|
|
317
|
+
|
|
318
|
+
FastScript currently includes first-party support for:
|
|
319
|
+
|
|
320
|
+
- pages
|
|
321
|
+
- layouts
|
|
322
|
+
- API routes
|
|
323
|
+
- middleware
|
|
324
|
+
- auth/session flows
|
|
325
|
+
- database migrations
|
|
326
|
+
- database seed scripts
|
|
327
|
+
- storage and upload handlers
|
|
328
|
+
- jobs and worker runtime
|
|
329
|
+
- deploy targets
|
|
330
|
+
- benchmark and interop reporting
|
|
331
|
+
- docs indexing and API reference generation
|
|
332
|
+
|
|
333
|
+
## Interop Story
|
|
334
|
+
|
|
335
|
+
FastScript is designed to sit on top of the JavaScript ecosystem, not replace it with an isolated wall.
|
|
336
|
+
|
|
337
|
+
### What works
|
|
338
|
+
|
|
339
|
+
- normal `.js` dependencies
|
|
340
|
+
- ESM/CJS compatibility checks
|
|
341
|
+
- export from `.fs` to `.js`
|
|
342
|
+
- export from `.fs` to `.ts`
|
|
343
|
+
- migration tooling from page-based JS/TS apps into `.fs`
|
|
344
|
+
|
|
345
|
+
### Why that matters
|
|
346
|
+
|
|
347
|
+
Developers should be able to:
|
|
348
|
+
|
|
349
|
+
1. migrate into FastScript without rewriting the whole world
|
|
350
|
+
2. use existing libraries
|
|
351
|
+
3. export back out when needed
|
|
352
|
+
4. keep real production optionality
|
|
353
|
+
|
|
354
|
+
## Migration Story
|
|
355
|
+
|
|
356
|
+
FastScript is meant to meet existing teams where they are:
|
|
357
|
+
|
|
358
|
+
1. keep your current TS/JS modules
|
|
359
|
+
2. run `npm run migrate -- <path> --dry-run`
|
|
360
|
+
3. inspect `diff-preview.json`, manifests, validation, and fidelity output
|
|
361
|
+
4. convert route-by-route into `.fs`
|
|
362
|
+
5. preserve CSS, assets, and existing libraries
|
|
363
|
+
6. keep authoring normal TS/JS directly in `.fs` after conversion
|
|
364
|
+
|
|
365
|
+
If valid JS/TS or a real framework pattern fails in `.fs`, that is a FastScript compatibility gap and should be reported through the public compatibility issue lane.
|
|
366
|
+
|
|
367
|
+
## Commands
|
|
368
|
+
|
|
369
|
+
### Main app lifecycle
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
npm run dev
|
|
373
|
+
npm run start
|
|
374
|
+
npm run build
|
|
375
|
+
npm run build:ssg
|
|
376
|
+
npm run create
|
|
377
|
+
npm run check
|
|
378
|
+
npm run validate
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Language and migration
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
npm run migrate
|
|
385
|
+
npm run convert
|
|
386
|
+
npm run migrate:rollback
|
|
387
|
+
npm run manifest
|
|
388
|
+
npm run wizard:migrate
|
|
389
|
+
npm run export:js
|
|
390
|
+
npm run export:ts
|
|
391
|
+
npm run compat
|
|
392
|
+
npm run typecheck
|
|
393
|
+
npm run typecheck:pass
|
|
394
|
+
npm run lint:fs
|
|
395
|
+
npm run lint:fs:pass
|
|
396
|
+
npm run diagnostics
|
|
397
|
+
npm run permissions
|
|
398
|
+
npm run format
|
|
399
|
+
npm run format:check
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
`migrate` now runs strict compatibility-first conversion (rename-only + import extension rewrites + manifest/validation/fidelity reports).
|
|
403
|
+
Example: `npm run migrate -- app --dry-run`
|
|
404
|
+
Full proof mode: `npm run migrate -- app --fidelity-level full --fail-on-unproven-fidelity`
|
|
405
|
+
|
|
406
|
+
Latest trust artifacts are written to `.fastscript/conversion/latest`:
|
|
407
|
+
`conversion-manifest.json`, `diff-preview.json`, `validation-report.json`, `fidelity-report.json`.
|
|
408
|
+
|
|
379
409
|
Authored `.fs` now accepts normal JS/TS/JSX/TSX-style code directly. Proof artifacts for the current parity contract are written to `.fastscript/proofs/js-ts-syntax-proof.json` and `.fastscript/proofs/fs-parity-matrix.json`.
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
npm run db:
|
|
386
|
-
npm run db:
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
npm run deploy:
|
|
394
|
-
npm run deploy:
|
|
395
|
-
npm run
|
|
396
|
-
npm run worker
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
npm run smoke:
|
|
404
|
-
npm run
|
|
405
|
-
npm run test:
|
|
406
|
-
npm run test:
|
|
407
|
-
npm run test:
|
|
408
|
-
npm run test:
|
|
409
|
-
npm run test:
|
|
410
|
-
npm run
|
|
411
|
-
npm run qa:
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
npm run bench
|
|
419
|
-
npm run
|
|
420
|
-
npm run
|
|
421
|
-
npm run
|
|
422
|
-
npm run
|
|
423
|
-
npm run
|
|
424
|
-
npm run
|
|
425
|
-
npm run
|
|
426
|
-
npm run
|
|
427
|
-
npm run
|
|
428
|
-
npm run backup:
|
|
429
|
-
npm run backup:
|
|
430
|
-
npm run
|
|
431
|
-
npm run
|
|
432
|
-
npm run
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
npm run release:
|
|
440
|
-
npm run release:
|
|
441
|
-
npm run
|
|
442
|
-
npm run
|
|
443
|
-
npm run
|
|
444
|
-
npm run
|
|
445
|
-
npm run
|
|
446
|
-
npm run docs:
|
|
447
|
-
npm run
|
|
448
|
-
npm run style:
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
npm
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
npm run deploy:
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
styles.
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
-
|
|
538
|
-
-
|
|
539
|
-
-
|
|
540
|
-
-
|
|
541
|
-
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
-
|
|
548
|
-
-
|
|
549
|
-
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
-
|
|
557
|
-
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
-
|
|
563
|
-
-
|
|
564
|
-
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
- `
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
- `spec/
|
|
577
|
-
- `
|
|
578
|
-
- `docs/
|
|
579
|
-
- `docs/
|
|
580
|
-
- `docs/
|
|
581
|
-
- `docs/
|
|
582
|
-
- `docs/
|
|
583
|
-
- `docs/
|
|
584
|
-
- `docs/
|
|
585
|
-
- `docs/
|
|
586
|
-
- `docs/
|
|
587
|
-
- `docs/
|
|
588
|
-
- `docs/
|
|
589
|
-
- `docs/
|
|
590
|
-
- `docs/
|
|
591
|
-
- `docs/
|
|
592
|
-
- `docs/
|
|
593
|
-
- `
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
- you
|
|
603
|
-
- you cannot use
|
|
604
|
-
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
- `
|
|
410
|
+
The governed compatibility registry and generated support matrix live in `spec/compatibility-registry.json` and `docs/SUPPORT_MATRIX.md`.
|
|
411
|
+
|
|
412
|
+
### Database and data
|
|
413
|
+
|
|
414
|
+
```bash
|
|
415
|
+
npm run db:migrate
|
|
416
|
+
npm run db:seed
|
|
417
|
+
npm run db:rollback
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Deploy and runtime
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
npm run deploy:node
|
|
424
|
+
npm run deploy:vercel
|
|
425
|
+
npm run deploy:cloudflare
|
|
426
|
+
npm run worker
|
|
427
|
+
npm run worker:replay-dead-letter
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Quality and testing
|
|
431
|
+
|
|
432
|
+
```bash
|
|
433
|
+
npm run smoke:dev
|
|
434
|
+
npm run smoke:start
|
|
435
|
+
npm run test:core
|
|
436
|
+
npm run test:conformance
|
|
437
|
+
npm run test:plugins
|
|
438
|
+
npm run test:routes
|
|
439
|
+
npm run test:interop-matrix
|
|
440
|
+
npm run test:vscode-language
|
|
441
|
+
npm run qa:gate
|
|
442
|
+
npm run qa:all
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Benchmarks, reports, and ops
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
npm run bench
|
|
449
|
+
npm run bench:discipline
|
|
450
|
+
npm run regression
|
|
451
|
+
npm run profile
|
|
452
|
+
npm run trace
|
|
453
|
+
npm run bench:report
|
|
454
|
+
npm run benchmark:suite
|
|
455
|
+
npm run interop:report
|
|
456
|
+
npm run sbom:generate
|
|
457
|
+
npm run proof:publish
|
|
458
|
+
npm run backup:create
|
|
459
|
+
npm run backup:restore
|
|
460
|
+
npm run backup:verify
|
|
461
|
+
npm run retention:sweep
|
|
462
|
+
npm run kpi:track
|
|
463
|
+
npm run deploy:zero-downtime
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### Release and tooling
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
npm run release:patch
|
|
470
|
+
npm run release:minor
|
|
471
|
+
npm run release:major
|
|
472
|
+
npm run pack:check
|
|
473
|
+
npm run hooks:install
|
|
474
|
+
npm run repo:lock
|
|
475
|
+
npm run plugins:marketplace-sync
|
|
476
|
+
npm run docs:index
|
|
477
|
+
npm run docs:api-ref
|
|
478
|
+
npm run style:generate
|
|
479
|
+
npm run style:check
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
## Recommended Developer Flow
|
|
483
|
+
|
|
484
|
+
For normal development:
|
|
485
|
+
|
|
486
|
+
```bash
|
|
487
|
+
npm install
|
|
488
|
+
npm run dev
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
Before shipping:
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
npm run qa:all
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
For deployment:
|
|
498
|
+
|
|
499
|
+
```bash
|
|
500
|
+
npm run deploy:cloudflare
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
Or:
|
|
504
|
+
|
|
505
|
+
```bash
|
|
506
|
+
npm run deploy:node
|
|
507
|
+
npm run deploy:vercel
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
## Project Layout
|
|
511
|
+
|
|
512
|
+
```txt
|
|
513
|
+
app/
|
|
514
|
+
api/
|
|
515
|
+
auth.fs
|
|
516
|
+
docs-search.fs
|
|
517
|
+
hello.fs
|
|
518
|
+
upload.fs
|
|
519
|
+
webhook.fs
|
|
520
|
+
db/
|
|
521
|
+
migrations/
|
|
522
|
+
001_init.fs
|
|
523
|
+
seed.fs
|
|
524
|
+
design/
|
|
525
|
+
class-allowlist.json
|
|
526
|
+
tokens.json
|
|
527
|
+
pages/
|
|
528
|
+
_layout.fs
|
|
529
|
+
index.fs
|
|
530
|
+
learn.fs
|
|
531
|
+
examples.fs
|
|
532
|
+
benchmarks.fs
|
|
533
|
+
roadmap.fs
|
|
534
|
+
docs/
|
|
535
|
+
index.fs
|
|
536
|
+
latest.fs
|
|
537
|
+
playground.fs
|
|
538
|
+
search.fs
|
|
539
|
+
v1/
|
|
540
|
+
index.fs
|
|
541
|
+
v1.1/
|
|
542
|
+
index.fs
|
|
543
|
+
blog/
|
|
544
|
+
index.fs
|
|
545
|
+
[slug].fs
|
|
546
|
+
env.schema.fs
|
|
547
|
+
middleware.fs
|
|
548
|
+
styles.css
|
|
549
|
+
styles.generated.css
|
|
550
|
+
src/
|
|
551
|
+
cli.mjs
|
|
552
|
+
build.mjs
|
|
553
|
+
server-runtime.mjs
|
|
554
|
+
examples/
|
|
555
|
+
fullstack/
|
|
556
|
+
startup-mvp/
|
|
557
|
+
spec/
|
|
558
|
+
LANGUAGE_V1_SPEC.md
|
|
559
|
+
MASTER_TODO.md
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
## Example Projects Included
|
|
563
|
+
|
|
564
|
+
### `examples/fullstack`
|
|
565
|
+
A production-style full-stack starter with:
|
|
566
|
+
|
|
567
|
+
- pages
|
|
568
|
+
- API route
|
|
569
|
+
- migration
|
|
570
|
+
- seed script
|
|
571
|
+
- job handler
|
|
572
|
+
- layout
|
|
573
|
+
|
|
574
|
+
### `examples/startup-mvp`
|
|
575
|
+
A more startup-shaped example with:
|
|
576
|
+
|
|
577
|
+
- cart + checkout APIs
|
|
578
|
+
- dashboard page
|
|
579
|
+
- migrations
|
|
580
|
+
- email job flow
|
|
581
|
+
|
|
582
|
+
## Deploy Targets
|
|
583
|
+
|
|
584
|
+
FastScript currently has deploy adapters for:
|
|
585
|
+
|
|
586
|
+
- Node
|
|
587
|
+
- Vercel
|
|
588
|
+
- Cloudflare
|
|
589
|
+
|
|
590
|
+
The long-term direction is one language, many targets:
|
|
591
|
+
|
|
592
|
+
- web
|
|
593
|
+
- server
|
|
594
|
+
- mobile
|
|
595
|
+
- desktop
|
|
596
|
+
|
|
597
|
+
That roadmap is tracked in:
|
|
598
|
+
|
|
599
|
+
- `spec/MULTI_TARGET_APP_PLAN.md`
|
|
600
|
+
- `app/pages/roadmap.fs`
|
|
601
|
+
|
|
602
|
+
## Documentation Map
|
|
603
|
+
|
|
604
|
+
Key docs in this repo:
|
|
605
|
+
|
|
606
|
+
- `spec/LANGUAGE_V1_SPEC.md`
|
|
607
|
+
- `spec/STYLING_V1_SPEC.md`
|
|
608
|
+
- `docs/GOVERNANCE_VERSIONING_POLICY.md`
|
|
609
|
+
- `docs/LANGUAGE_V1_MIGRATION.md`
|
|
610
|
+
- `docs/COMPILER_ERROR_CODES.md`
|
|
611
|
+
- `docs/AI_CONTEXT_PACK_V1.md`
|
|
612
|
+
- `docs/PLUGIN_API_CONTRACT.md`
|
|
613
|
+
- `docs/INCIDENT_PLAYBOOK.md` (public stub; full version lives in private core)
|
|
614
|
+
- `docs/DEPLOY_GUIDE.md`
|
|
615
|
+
- `docs/SUPPORT_MATRIX.md`
|
|
616
|
+
- `docs/RELEASE_PROCESS.md`
|
|
617
|
+
- `docs/TROUBLESHOOTING.md`
|
|
618
|
+
- `docs/ARCHITECTURE_OVERVIEW.md`
|
|
619
|
+
- `docs/KNOWN_LIMITATIONS.md`
|
|
620
|
+
- `docs/CONTRIBUTING.md`
|
|
621
|
+
- `docs/OBSERVABILITY.md` (public stub; full version lives in private core)
|
|
622
|
+
- `docs/RUNTIME_PERMISSIONS.md`
|
|
623
|
+
- `docs/ROLLOUT_GUIDE.md` (public stub; full version lives in private core)
|
|
624
|
+
- `SECURITY.md`
|
|
625
|
+
|
|
626
|
+
## Protection, Licensing, and Commercial Use
|
|
627
|
+
|
|
628
|
+
FastScript is being built as the core language layer for a larger AI product. Because of that, the repository is not licensed under a permissive open-source license.
|
|
629
|
+
|
|
630
|
+
What that means in practice:
|
|
631
|
+
|
|
632
|
+
- you can review the repository and evaluate it internally;
|
|
633
|
+
- you cannot commercially use, redistribute, relicense, or build competing products on top of this code without written permission;
|
|
634
|
+
- you cannot use this repository to train, fine-tune, improve, or evaluate a commercial AI product without written permission;
|
|
635
|
+
- trademark rights in the FastScript name, logo, and branding are reserved.
|
|
636
|
+
|
|
637
|
+
If you need commercial use, partnership, integration, or platform rights, contact:
|
|
638
|
+
|
|
639
|
+
- `legal@fastscript.dev`
|
|
640
|
+
|
|
641
|
+
## Contributing
|
|
642
|
+
|
|
643
|
+
FastScript is evolving quickly. If you contribute:
|
|
644
|
+
|
|
645
|
+
1. keep the canonical repo lock intact
|
|
646
|
+
2. run `npm run qa:all`
|
|
647
|
+
3. keep `.fs` and `.js` interop working
|
|
648
|
+
4. avoid unnecessary ecosystem lock-in
|
|
649
|
+
5. preserve the language goal: simpler, faster, still grounded in JavaScript
|
|
650
|
+
|
|
651
|
+
Contribution review does not grant any right to commercially reuse the platform outside the repository license.
|
|
652
|
+
|
|
653
|
+
## Public/Private Boundary
|
|
654
|
+
|
|
655
|
+
This public repository is the developer-facing FastScript surface. Sensitive compiler/runtime/platform materials now live in the protected private repository `https://github.com/lordolami/fastscript-core-private`. The public repo consumes private-core modules through bridge files and tracks the boundary in `docs/PRIVATE_CORE_SPLIT.md`.
|
|
656
|
+
|
|
657
|
+
## Canonical Repo
|
|
658
|
+
|
|
659
|
+
Canonical repo lock:
|
|
660
|
+
|
|
661
|
+
`github.com/lordolami/fastscript`
|
|
662
|
+
|
|
663
|
+
The repo lock script is:
|
|
664
|
+
|
|
665
|
+
```bash
|
|
666
|
+
npm run repo:lock
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
## License
|
|
670
|
+
|
|
671
|
+
This repository is licensed under the FastScript Source-Available License v1.
|
|
672
|
+
|
|
673
|
+
See:
|
|
674
|
+
|
|
675
|
+
- `LICENSE`
|
|
676
|
+
- `SECURITY.md`
|
|
646
677
|
- `app/pages/license.fs`
|
|
647
678
|
|
|
648
679
|
|