@pulse-compute/cli 0.0.0 → 1.0.0-beta.2

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.
Files changed (191) hide show
  1. package/API.md +572 -0
  2. package/CHANGELOG.md +71 -0
  3. package/README.md +71 -1
  4. package/bin/pulse.js +15 -0
  5. package/bin/pulsewasm-extract.js +22 -0
  6. package/cli-spec.json +575 -0
  7. package/completions/_pulse +106 -0
  8. package/completions/pulse.bash +31 -0
  9. package/completions/pulse.fish +76 -0
  10. package/docs/README.md +77 -0
  11. package/docs/architecture/current-contracts.md +470 -0
  12. package/docs/architecture/overview.md +93 -0
  13. package/docs/architecture/vision.md +515 -0
  14. package/docs/concepts/bodies.md +186 -0
  15. package/docs/concepts/compilation-and-lowering.md +496 -0
  16. package/docs/concepts/contracts-and-providers.md +158 -0
  17. package/docs/concepts/effects-and-continuations.md +300 -0
  18. package/docs/concepts/entities-and-adapters.md +71 -0
  19. package/docs/concepts/package-owned-lowering.md +175 -0
  20. package/docs/concepts/targets-and-hosts.md +70 -0
  21. package/docs/contributing/README.md +38 -0
  22. package/docs/contributing/adding-core-provider.md +315 -0
  23. package/docs/contributing/adding-first-party-lowerer.md +327 -0
  24. package/docs/contributing/entities-lowering.md +91 -0
  25. package/docs/contributing/package-lowerer-contract.md +383 -0
  26. package/docs/contributing/pulse-aware-packages.md +149 -0
  27. package/docs/examples.md +112 -0
  28. package/docs/fixtures/inspect-fetch-composition.selected.json +181 -0
  29. package/docs/getting-started.md +128 -0
  30. package/docs/guides/compatibility-imports.md +60 -0
  31. package/docs/guides/deploying-fastly.md +188 -0
  32. package/docs/guides/deploying-node.md +143 -0
  33. package/docs/guides/events.md +233 -0
  34. package/docs/guides/fastly-capabilities.md +153 -0
  35. package/docs/guides/fetching-and-composition.md +101 -0
  36. package/docs/guides/grip.md +94 -0
  37. package/docs/guides/json-schemas.md +233 -0
  38. package/docs/guides/migrating-from-express.md +192 -0
  39. package/docs/guides/project-lifecycle.md +143 -0
  40. package/docs/guides/routing.md +202 -0
  41. package/docs/guides/troubleshooting.md +47 -0
  42. package/docs/maintainers/README.md +60 -0
  43. package/docs/maintainers/codex-maintainer.md +71 -0
  44. package/docs/maintainers/documentation-deployment.md +147 -0
  45. package/docs/maintainers/documentation-system.md +58 -0
  46. package/docs/maintainers/documentation-versioning.md +65 -0
  47. package/docs/maintainers/maintainer-charter.md +100 -0
  48. package/docs/maintainers/maintenance-policy.json +809 -0
  49. package/docs/maintainers/maintenance-policy.md +124 -0
  50. package/docs/maintainers/npm-publishing.md +154 -0
  51. package/docs/maintainers/plugin-readiness.json +19 -0
  52. package/docs/maintainers/plugin-readiness.md +31 -0
  53. package/docs/maintainers/public-site.md +158 -0
  54. package/docs/maintainers/release-acceptance.md +293 -0
  55. package/docs/maintainers/release-manifest.md +89 -0
  56. package/docs/maintainers/repository-setup.md +145 -0
  57. package/docs/maintainers/scope-policy.md +105 -0
  58. package/docs/maintainers/support-and-triage.md +74 -0
  59. package/docs/maintainers/testing.md +334 -0
  60. package/docs/packages/README.md +60 -0
  61. package/docs/packages/assets.md +85 -0
  62. package/docs/packages/cli.md +190 -0
  63. package/docs/packages/crypto.md +78 -0
  64. package/docs/packages/entities.md +129 -0
  65. package/docs/packages/grip.md +82 -0
  66. package/docs/packages/implementation-packages.md +122 -0
  67. package/docs/packages/jwt.md +55 -0
  68. package/docs/packages/provider-fastly.md +243 -0
  69. package/docs/packages/pulse.md +159 -0
  70. package/docs/packages/runtime.md +265 -0
  71. package/docs/packages/s3.md +101 -0
  72. package/docs/preview-scope.md +142 -0
  73. package/docs/reference/README.md +33 -0
  74. package/docs/reference/cli-spec.json +575 -0
  75. package/docs/reference/cli.md +457 -0
  76. package/docs/reference/compatibility-matrix.md +169 -0
  77. package/docs/reference/diagnostics.md +1872 -0
  78. package/docs/reference/documentation-versions.json +22 -0
  79. package/docs/reference/environment.md +347 -0
  80. package/docs/reference/handler-authoring.md +264 -0
  81. package/docs/reference/project-config.md +582 -0
  82. package/docs/reference/project-config.schema.json +981 -0
  83. package/docs/reference/release-manifest.json +441 -0
  84. package/docs/reference/shell-completion.md +23 -0
  85. package/documentation-site.json +668 -0
  86. package/documentation-versions.json +22 -0
  87. package/examples/01-hello-json/.pulse/.gitignore +3 -0
  88. package/examples/01-hello-json/.pulse/config.ts +16 -0
  89. package/examples/01-hello-json/README.md +119 -0
  90. package/examples/01-hello-json/package.json +20 -0
  91. package/examples/01-hello-json/src/index.ts +9 -0
  92. package/examples/01-hello-json/tests/pulse.harness.ts +22 -0
  93. package/examples/01-hello-json/tsconfig.json +14 -0
  94. package/examples/02-request-schema/.pulse/.gitignore +3 -0
  95. package/examples/02-request-schema/.pulse/config.ts +17 -0
  96. package/examples/02-request-schema/README.md +145 -0
  97. package/examples/02-request-schema/package.json +20 -0
  98. package/examples/02-request-schema/src/index.ts +18 -0
  99. package/examples/02-request-schema/src/schemas.ts +20 -0
  100. package/examples/02-request-schema/tests/pulse.harness.ts +37 -0
  101. package/examples/02-request-schema/tsconfig.json +14 -0
  102. package/examples/03-fetch-composition/.pulse/.gitignore +3 -0
  103. package/examples/03-fetch-composition/.pulse/config.ts +31 -0
  104. package/examples/03-fetch-composition/README.md +210 -0
  105. package/examples/03-fetch-composition/package.json +20 -0
  106. package/examples/03-fetch-composition/src/index.ts +60 -0
  107. package/examples/03-fetch-composition/tests/pulse.harness.ts +47 -0
  108. package/examples/03-fetch-composition/tsconfig.json +14 -0
  109. package/examples/05-fastly-capabilities/.pulse/.gitignore +3 -0
  110. package/examples/05-fastly-capabilities/.pulse/config.ts +57 -0
  111. package/examples/05-fastly-capabilities/README.md +257 -0
  112. package/examples/05-fastly-capabilities/package.json +22 -0
  113. package/examples/05-fastly-capabilities/src/index.ts +55 -0
  114. package/examples/05-fastly-capabilities/tests/pulse.harness.ts +66 -0
  115. package/examples/05-fastly-capabilities/tsconfig.json +14 -0
  116. package/examples/07-opaque-proxy/.pulse/.gitignore +3 -0
  117. package/examples/07-opaque-proxy/.pulse/config.ts +38 -0
  118. package/examples/07-opaque-proxy/README.md +150 -0
  119. package/examples/07-opaque-proxy/package.json +21 -0
  120. package/examples/07-opaque-proxy/src/index.ts +9 -0
  121. package/examples/07-opaque-proxy/tests/pulse.harness.ts +25 -0
  122. package/examples/07-opaque-proxy/tsconfig.json +14 -0
  123. package/examples/09-router-lowering/.pulse/.gitignore +3 -0
  124. package/examples/09-router-lowering/.pulse/config.ts +22 -0
  125. package/examples/09-router-lowering/README.md +287 -0
  126. package/examples/09-router-lowering/package.json +22 -0
  127. package/examples/09-router-lowering/src/index.ts +65 -0
  128. package/examples/09-router-lowering/tests/pulse.harness.ts +91 -0
  129. package/examples/09-router-lowering/tsconfig.json +14 -0
  130. package/examples/10-entities-tools/.pulse/.gitignore +4 -0
  131. package/examples/10-entities-tools/.pulse/config.ts +23 -0
  132. package/examples/10-entities-tools/README.md +165 -0
  133. package/examples/10-entities-tools/package.json +21 -0
  134. package/examples/10-entities-tools/src/handlers.ts +15 -0
  135. package/examples/10-entities-tools/src/index.ts +31 -0
  136. package/examples/10-entities-tools/src/schemas.ts +18 -0
  137. package/examples/10-entities-tools/tests/pulse.harness.ts +40 -0
  138. package/examples/10-entities-tools/tools-facade.cjs +158 -0
  139. package/examples/10-entities-tools/tsconfig.json +14 -0
  140. package/examples/11-events/.pulse/.gitignore +4 -0
  141. package/examples/11-events/.pulse/config.ts +24 -0
  142. package/examples/11-events/README.md +194 -0
  143. package/examples/11-events/package.json +20 -0
  144. package/examples/11-events/src/index.ts +27 -0
  145. package/examples/11-events/src/schemas.ts +19 -0
  146. package/examples/11-events/tests/pulse.harness.ts +34 -0
  147. package/examples/11-events/tsconfig.json +15 -0
  148. package/examples/12-mcp-proxy/.pulse/.gitignore +3 -0
  149. package/examples/12-mcp-proxy/.pulse/config.ts +25 -0
  150. package/examples/12-mcp-proxy/README.md +149 -0
  151. package/examples/12-mcp-proxy/package.json +20 -0
  152. package/examples/12-mcp-proxy/src/index.ts +17 -0
  153. package/examples/12-mcp-proxy/tests/pulse.harness.ts +29 -0
  154. package/examples/12-mcp-proxy/tsconfig.json +14 -0
  155. package/examples/13-jwt-es256/.pulse/config.ts +19 -0
  156. package/examples/13-jwt-es256/README.md +195 -0
  157. package/examples/13-jwt-es256/package.json +21 -0
  158. package/examples/13-jwt-es256/src/index.ts +21 -0
  159. package/examples/13-jwt-es256/tests/pulse.harness.ts +54 -0
  160. package/examples/13-jwt-es256/tsconfig.json +14 -0
  161. package/examples/README.md +36 -0
  162. package/package.json +66 -6
  163. package/project-config.schema.json +981 -0
  164. package/release-manifest.json +441 -0
  165. package/src/command-spec.js +279 -0
  166. package/src/completion.js +113 -0
  167. package/src/diagnostics.js +350 -0
  168. package/src/documentation.js +45 -0
  169. package/src/index.d.ts +133 -0
  170. package/src/index.js +15 -0
  171. package/src/internal/command-executor.d.ts +29 -0
  172. package/src/internal/command-executor.js +143 -0
  173. package/src/internal/command-plan.d.ts +9 -0
  174. package/src/internal/command-plan.js +73 -0
  175. package/src/internal/command-reporter.d.ts +15 -0
  176. package/src/internal/command-reporter.js +133 -0
  177. package/src/internal/command-request.d.ts +35 -0
  178. package/src/internal/command-request.js +154 -0
  179. package/src/internal/node-http.js +54 -0
  180. package/src/internal/project-context.d.ts +66 -0
  181. package/src/internal/project-context.js +175 -0
  182. package/src/project-config-reference.js +4 -0
  183. package/src/project-config-schema.d.ts +23 -0
  184. package/src/project-config-schema.js +271 -0
  185. package/src/project-config.js +724 -0
  186. package/src/project-execution.js +2946 -0
  187. package/src/provider-drivers.js +3 -0
  188. package/src/target-support.js +3 -0
  189. package/src/typescript-module-loader.js +269 -0
  190. package/src/workflow.js +78 -0
  191. package/src/workspace.js +82 -0
@@ -0,0 +1,55 @@
1
+ import { grip } from '@pulse-compute/grip'
2
+ import { Pulse } from '@pulse-compute/pulse'
3
+
4
+ interface User {
5
+ id: number
6
+ name: string
7
+ }
8
+
9
+ interface Session {
10
+ userId: number
11
+ }
12
+
13
+ const app = new Pulse({ auto: true })
14
+
15
+ // Config, secret, and a named Fastly backend.
16
+ app.get('/users/7', async (ctx) => {
17
+ const base = await ctx.config.get('API_BASE')
18
+ const token = await ctx.secret.get('API_TOKEN')
19
+ const user = await ctx
20
+ .fetch('https://api.example.com/users/7', {
21
+ headers: {
22
+ authorization: `Bearer ${token}`,
23
+ accept: 'application/json',
24
+ 'x-api-base': base,
25
+ },
26
+ })
27
+ .json<User>()
28
+ return ctx.json({ user })
29
+ })
30
+
31
+ // Named Fastly KV storage.
32
+ app.get('/session', async (ctx) => {
33
+ const current = await ctx.kv<Session>('sessions').get('session:123')
34
+ if (current === undefined) {
35
+ return ctx.json({ error: 'not_found' }, { status: 404 })
36
+ }
37
+ await ctx.kv<Session>('sessions').put('session:last', current)
38
+ return ctx.json({ session: current })
39
+ })
40
+
41
+ // Request-bound GRIP broadcast through the supported package root.
42
+ app.post('/publish', async (ctx) => {
43
+ const acknowledgement = await grip.broadcast(ctx, {
44
+ channel: 'events:demo',
45
+ event: 'pulse.message',
46
+ id: 'message-1',
47
+ data: { message: 'hello from Pulse' },
48
+ })
49
+ return ctx.json(
50
+ { accepted: acknowledgement.accepted },
51
+ { status: 202 },
52
+ )
53
+ })
54
+
55
+ export default app
@@ -0,0 +1,66 @@
1
+ const config = { API_BASE: 'https://api.example.com' }
2
+ const secrets = {
3
+ API_TOKEN: 'test-example-secret',
4
+ GRIP_TOKEN: 'test-grip-secret',
5
+ }
6
+ const grip = {
7
+ publishEndpoint: 'https://publisher.example.com/publish',
8
+ authentication: {
9
+ scheme: 'bearer',
10
+ secretRef: 'GRIP_TOKEN',
11
+ },
12
+ }
13
+
14
+ export default {
15
+ cases: [
16
+ {
17
+ name: 'configured-fetch',
18
+ request: { path: '/users/7' },
19
+ config,
20
+ secrets,
21
+ fetches: {
22
+ 'https://api.example.com/users/7': {
23
+ value: { id: 7, name: 'Ada' },
24
+ },
25
+ },
26
+ expect: {
27
+ status: 200,
28
+ json: { user: { id: 7, name: 'Ada' } },
29
+ },
30
+ },
31
+ {
32
+ name: 'session-hit',
33
+ request: { path: '/session' },
34
+ kv: { sessions: { 'session:123': { userId: 123 } } },
35
+ expect: {
36
+ status: 200,
37
+ json: { session: { userId: 123 } },
38
+ },
39
+ },
40
+ {
41
+ name: 'session-miss',
42
+ request: { path: '/session' },
43
+ kv: { sessions: {} },
44
+ expect: {
45
+ status: 404,
46
+ json: { error: 'not_found' },
47
+ },
48
+ },
49
+ {
50
+ name: 'grip-broadcast',
51
+ request: { method: 'POST', path: '/publish' },
52
+ secrets,
53
+ grip,
54
+ fetches: {
55
+ 'POST https://publisher.example.com/publish': {
56
+ status: 202,
57
+ value: { accepted: true, messageId: 'message-1' },
58
+ },
59
+ },
60
+ expect: {
61
+ status: 202,
62
+ json: { accepted: true },
63
+ },
64
+ },
65
+ ],
66
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "strict": true,
7
+ "noEmit": true
8
+ },
9
+ "include": [
10
+ "src/**/*.ts",
11
+ ".pulse/**/*.ts",
12
+ "tests/**/*.ts"
13
+ ]
14
+ }
@@ -0,0 +1,3 @@
1
+ *
2
+ !.gitignore
3
+ !config.ts
@@ -0,0 +1,38 @@
1
+ import { defineConfig } from '@pulse-compute/pulse'
2
+
3
+ export default defineConfig((_scope) => ({
4
+ pulse: {
5
+ entry: 'src/index.ts',
6
+ tests: 'tests/pulse.harness.ts',
7
+ defaultProfile: 'local',
8
+ strict: true,
9
+ },
10
+ local: {
11
+ host: 'fastly',
12
+ target: 'native',
13
+ outDir: 'dist',
14
+ dev: {
15
+ fetches: {
16
+ 'https://assets.example.com/archive.bin': {
17
+ opaque: true,
18
+ status: 206,
19
+ headers: [
20
+ ['content-type', 'application/octet-stream'],
21
+ ['x-part', 'one'],
22
+ ['x-part', 'two'],
23
+ ],
24
+ chunks: ['opaque-example'],
25
+ },
26
+ },
27
+ },
28
+ fastly: {
29
+ bindings: {
30
+ backends: {
31
+ 'https://assets.example.com': 'assets_backend',
32
+ },
33
+ dynamicBackends: false,
34
+ },
35
+ build: { name: 'pulse-opaque-proxy-example' },
36
+ },
37
+ },
38
+ }))
@@ -0,0 +1,150 @@
1
+ # Opaque binary proxy
2
+
3
+ Returns an origin response directly. The binary or streaming body stays
4
+ host-owned and is never decoded or copied into user scope.
5
+
6
+ ## Workflow
7
+
8
+ ```bash
9
+ pulse doctor
10
+ pulse inspect
11
+ pulse test
12
+ pulse dev
13
+ pulse build
14
+ ```
15
+
16
+ The documented test result below is executed by the documentation gate.
17
+
18
+ <!-- pulse-doc-run {"project":"examples/07-opaque-proxy","args":["test","--json"]} -->
19
+ ```bash
20
+ pulse test --json
21
+ ```
22
+ ```json
23
+ {
24
+ "status": "passed",
25
+ "provider": "fastly",
26
+ "summary": {
27
+ "total": 1,
28
+ "passed": 1,
29
+ "failed": 0
30
+ },
31
+ "cases": [
32
+ {
33
+ "name": "pass-through",
34
+ "status": "passed",
35
+ "response": {
36
+ "status": 206
37
+ }
38
+ }
39
+ ]
40
+ }
41
+ ```
42
+
43
+ Fastly builds produce a verified `.pulse-docs-build/bin/main.wasm`. Configured
44
+ tests execute through the local-conformance runtime; compiled-target execution
45
+ remains in the explicit reality profile.
46
+
47
+ ## Wasm size
48
+
49
+ | Artifact | Default build | `--experimental-native-size` | Reduction |
50
+ |---|---:|---:|---:|
51
+ | `canonical-native.wasm` | 2.1 KiB (2,200 bytes) | 2.1 KiB (2,101 bytes) | 4.5% |
52
+ | `bin/main.wasm` | 29.7 KiB (30,455 bytes) | 25.7 KiB (26,287 bytes) | 13.7% |
53
+
54
+ The executable documentation gate rebuilds and measures both variants on
55
+ `1.0.0-beta.2`. These are uncompressed on-disk sizes, not transfer sizes or
56
+ platform limits.
57
+
58
+ ## Handler
59
+
60
+ <!-- pulse-doc-source: examples/07-opaque-proxy/src/index.ts -->
61
+ ```ts
62
+ import { Pulse } from '@pulse-compute/pulse'
63
+
64
+ const app = new Pulse({ auto: true })
65
+
66
+ app.get('/archive', async (ctx) => {
67
+ return ctx.fetch('https://assets.example.com/archive.bin')
68
+ })
69
+
70
+ export default app
71
+ ```
72
+ <!-- /pulse-doc-source -->
73
+
74
+ ## Project config
75
+
76
+ <!-- pulse-doc-source: examples/07-opaque-proxy/.pulse/config.ts -->
77
+ ```ts
78
+ import { defineConfig } from '@pulse-compute/pulse'
79
+
80
+ export default defineConfig((_scope) => ({
81
+ pulse: {
82
+ entry: 'src/index.ts',
83
+ tests: 'tests/pulse.harness.ts',
84
+ defaultProfile: 'local',
85
+ strict: true,
86
+ },
87
+ local: {
88
+ host: 'fastly',
89
+ target: 'native',
90
+ outDir: 'dist',
91
+ dev: {
92
+ fetches: {
93
+ 'https://assets.example.com/archive.bin': {
94
+ opaque: true,
95
+ status: 206,
96
+ headers: [
97
+ ['content-type', 'application/octet-stream'],
98
+ ['x-part', 'one'],
99
+ ['x-part', 'two'],
100
+ ],
101
+ chunks: ['opaque-example'],
102
+ },
103
+ },
104
+ },
105
+ fastly: {
106
+ bindings: {
107
+ backends: {
108
+ 'https://assets.example.com': 'assets_backend',
109
+ },
110
+ dynamicBackends: false,
111
+ },
112
+ build: { name: 'pulse-opaque-proxy-example' },
113
+ },
114
+ },
115
+ }))
116
+ ```
117
+ <!-- /pulse-doc-source -->
118
+
119
+
120
+ ## Test harness
121
+
122
+ <!-- pulse-doc-source: examples/07-opaque-proxy/tests/pulse.harness.ts -->
123
+ ```ts
124
+ export default {
125
+ cases: [
126
+ {
127
+ name: 'pass-through',
128
+ request: { path: '/archive' },
129
+ fetches: {
130
+ 'https://assets.example.com/archive.bin': {
131
+ opaque: true,
132
+ status: 206,
133
+ headers: [
134
+ ['content-type', 'application/octet-stream'],
135
+ ['x-part', 'one'],
136
+ ['x-part', 'two'],
137
+ ],
138
+ chunks: ['opaque-example'],
139
+ },
140
+ },
141
+ expect: {
142
+ status: 206,
143
+ bodyClass: 'opaque',
144
+ headers: { 'x-part': ['one', 'two'] },
145
+ },
146
+ },
147
+ ],
148
+ }
149
+ ```
150
+ <!-- /pulse-doc-source -->
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@pulse-examples/07-opaque-proxy",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "doctor": "pulse doctor",
8
+ "inspect": "pulse inspect",
9
+ "test": "pulse test",
10
+ "dev": "pulse dev",
11
+ "build": "pulse build"
12
+ },
13
+ "dependencies": {
14
+ "@pulse-compute/pulse": "1.0.0-beta.2",
15
+ "@pulse-compute/provider-fastly": "1.0.0-beta.2"
16
+ },
17
+ "devDependencies": {
18
+ "@pulse-compute/cli": "1.0.0-beta.2",
19
+ "typescript": "5.9.3"
20
+ }
21
+ }
@@ -0,0 +1,9 @@
1
+ import { Pulse } from '@pulse-compute/pulse'
2
+
3
+ const app = new Pulse({ auto: true })
4
+
5
+ app.get('/archive', async (ctx) => {
6
+ return ctx.fetch('https://assets.example.com/archive.bin')
7
+ })
8
+
9
+ export default app
@@ -0,0 +1,25 @@
1
+ export default {
2
+ cases: [
3
+ {
4
+ name: 'pass-through',
5
+ request: { path: '/archive' },
6
+ fetches: {
7
+ 'https://assets.example.com/archive.bin': {
8
+ opaque: true,
9
+ status: 206,
10
+ headers: [
11
+ ['content-type', 'application/octet-stream'],
12
+ ['x-part', 'one'],
13
+ ['x-part', 'two'],
14
+ ],
15
+ chunks: ['opaque-example'],
16
+ },
17
+ },
18
+ expect: {
19
+ status: 206,
20
+ bodyClass: 'opaque',
21
+ headers: { 'x-part': ['one', 'two'] },
22
+ },
23
+ },
24
+ ],
25
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "strict": true,
7
+ "noEmit": true
8
+ },
9
+ "include": [
10
+ "src/**/*.ts",
11
+ ".pulse/**/*.ts",
12
+ "tests/**/*.ts"
13
+ ]
14
+ }
@@ -0,0 +1,3 @@
1
+ *
2
+ !.gitignore
3
+ !config.ts
@@ -0,0 +1,22 @@
1
+ import { defineConfig } from '@pulse-compute/pulse'
2
+
3
+ export default defineConfig((_scope) => ({
4
+ pulse: {
5
+ entry: 'src/index.ts',
6
+ tests: 'tests/pulse.harness.ts',
7
+ defaultProfile: 'local',
8
+ strict: true,
9
+ },
10
+ local: {
11
+ host: 'node',
12
+ target: 'native',
13
+ outDir: 'dist',
14
+ dev: {
15
+ fetches: {
16
+ 'https://users.example.test/users/7': {
17
+ value: { id: 7, name: 'Ada' },
18
+ },
19
+ },
20
+ },
21
+ },
22
+ }))