create-invokable 0.2.0 → 0.3.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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +20 -4
- package/dist/cli.js.map +1 -1
- package/dist/template.d.ts.map +1 -1
- package/dist/template.js +200 -8
- package/dist/template.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAA4C,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAkBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAA4C,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAkBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkIxE"}
|
package/dist/cli.js
CHANGED
|
@@ -95,18 +95,34 @@ export async function createMain(options) {
|
|
|
95
95
|
stderr(`\nCreated ${target}\n\n`);
|
|
96
96
|
for (const file of files)
|
|
97
97
|
stderr(` ${file.path}\n`);
|
|
98
|
-
|
|
98
|
+
// Spelled out because `${name} login` is the first thing people try, and
|
|
99
|
+
// it is not a command until the package is linked. Getting
|
|
100
|
+
// "command not found" straight after a successful scaffold reads as the
|
|
101
|
+
// tool being broken.
|
|
102
|
+
const lines = [
|
|
99
103
|
'',
|
|
100
104
|
'Next:',
|
|
101
105
|
` cd ${name}`,
|
|
102
106
|
' npm install',
|
|
103
107
|
' npm run build',
|
|
108
|
+
'',
|
|
109
|
+
`Run it with the full path — \`${name}\` is not on your PATH yet:`,
|
|
104
110
|
` node bin/${name}.mjs --help`,
|
|
111
|
+
` node bin/${name}.mjs doctor --json`,
|
|
105
112
|
'',
|
|
106
|
-
|
|
107
|
-
|
|
113
|
+
`To type \`${name}\` instead, link it once:`,
|
|
114
|
+
' npm link',
|
|
115
|
+
` ${name} --help`,
|
|
108
116
|
'',
|
|
109
|
-
]
|
|
117
|
+
];
|
|
118
|
+
if (auth === 'self-host') {
|
|
119
|
+
lines.push('This project is self-hosted, so it ships its own server.', 'Start it in another terminal before you sign in:', ' npm run server', ` node bin/${name}.mjs login`, '');
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
lines.push('Sign in (opens a browser):', ` node bin/${name}.mjs login`, '');
|
|
123
|
+
}
|
|
124
|
+
lines.push('Then check the contract holds:', ` npx invokable-test node bin/${name}.mjs`, '');
|
|
125
|
+
stderr(lines.join('\n'));
|
|
110
126
|
return 0;
|
|
111
127
|
}
|
|
112
128
|
finally {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/template.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAmXD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,CA2G3D"}
|
package/dist/template.js
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* The `@invokable/*` range a scaffolded project depends on.
|
|
4
|
+
*
|
|
5
|
+
* Read from this package's own version rather than written down. Every package
|
|
6
|
+
* in the monorepo shares one version, and a caret range on 0.x does not cross a
|
|
7
|
+
* minor bump — so a hardcoded `^0.2.0` left here would make
|
|
8
|
+
* `create-invokable@0.3.0` scaffold projects pinned to an SDK it was never
|
|
9
|
+
* tested against.
|
|
10
|
+
*/
|
|
11
|
+
function sdkRange() {
|
|
12
|
+
const manifest = new URL('../package.json', import.meta.url);
|
|
13
|
+
const { version } = JSON.parse(readFileSync(manifest, 'utf8'));
|
|
14
|
+
return `^${version}`;
|
|
15
|
+
}
|
|
1
16
|
/** `deploy-thing` -> `DeployThing`, for a generated type name. */
|
|
2
17
|
function pascal(value) {
|
|
3
18
|
return value
|
|
@@ -102,6 +117,133 @@ ${spec.spends ? gated : plain}
|
|
|
102
117
|
});
|
|
103
118
|
`;
|
|
104
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* A runnable server for `--auth self-host`.
|
|
122
|
+
*
|
|
123
|
+
* Telling someone to "start a server that mounts @invokable/server" and handing
|
|
124
|
+
* them nothing is where the self-host path used to break: the CLI half was
|
|
125
|
+
* scaffolded and the other half was a sentence. This is the other half.
|
|
126
|
+
*/
|
|
127
|
+
function serverSource(spec) {
|
|
128
|
+
return `#!/usr/bin/env node
|
|
129
|
+
/**
|
|
130
|
+
* Development auth + checkpoint server for ${spec.name}.
|
|
131
|
+
*
|
|
132
|
+
* npm run server # this file, on :8787
|
|
133
|
+
* npm run build && node bin/${spec.name}.mjs login
|
|
134
|
+
*
|
|
135
|
+
* Three things are served: auth and checkpoints come from @invokable/server,
|
|
136
|
+
* and the ${spec.command} endpoints are yours to replace with the real thing.
|
|
137
|
+
*/
|
|
138
|
+
import { createServer } from 'node:http';
|
|
139
|
+
import {
|
|
140
|
+
CheckpointVerifier,
|
|
141
|
+
checkpointRoutes,
|
|
142
|
+
invokableAuth,
|
|
143
|
+
memoryCheckpointStore,
|
|
144
|
+
memoryStore,
|
|
145
|
+
verifyCheckpoint,
|
|
146
|
+
} from '@invokable/server';
|
|
147
|
+
import { nodeListener } from '@invokable/server/node';
|
|
148
|
+
|
|
149
|
+
const PORT = Number(process.env.PORT ?? 8787);
|
|
150
|
+
|
|
151
|
+
// Signs approval fingerprints. In production this comes from your secret
|
|
152
|
+
// manager and never leaves your infrastructure.
|
|
153
|
+
const CHECKPOINT_SECRET = process.env.CHECKPOINT_SECRET ?? 'dev-only-change-me-0123456789abcdef';
|
|
154
|
+
|
|
155
|
+
const verifier = new CheckpointVerifier({
|
|
156
|
+
secret: CHECKPOINT_SECRET,
|
|
157
|
+
// Development only — everything is lost on restart, and on serverless there
|
|
158
|
+
// is no shared memory at all. Swap for postgresCheckpointStore() before
|
|
159
|
+
// anyone depends on this. See the @invokable/server README.
|
|
160
|
+
store: memoryCheckpointStore(),
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
const auth = invokableAuth({
|
|
164
|
+
store: memoryStore(),
|
|
165
|
+
tokenPrefix: '${spec.name.replace(/-/g, '').slice(0, 4)}',
|
|
166
|
+
tokenTtl: null,
|
|
167
|
+
|
|
168
|
+
// THE HOOK YOU MUST REPLACE.
|
|
169
|
+
//
|
|
170
|
+
// Runs on the approval page, in the browser. It answers "who is signed in
|
|
171
|
+
// right now?" from your own session — a cookie, a JWT, whatever you already
|
|
172
|
+
// have. Returning null means signed out, and nothing can be approved.
|
|
173
|
+
requireSession: (_request) => ({
|
|
174
|
+
subject: 'dev@example.com',
|
|
175
|
+
displayName: 'Local Developer',
|
|
176
|
+
}),
|
|
177
|
+
|
|
178
|
+
// Optional: your own branded approval page. If you replace the default, KEEP
|
|
179
|
+
// the part naming the tool, version and machine, and the warning to approve
|
|
180
|
+
// only a login you just started — that display is the only defence against
|
|
181
|
+
// someone sending a user a code and asking them to approve it.
|
|
182
|
+
// approvePage: ({ device, user }) => renderMyPage(device, user),
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
const checkpoints = checkpointRoutes({ verifier });
|
|
186
|
+
${spec.spends
|
|
187
|
+
? `
|
|
188
|
+
// Guards only the endpoint that spends. Guarding the planning call too would
|
|
189
|
+
// mean the CLI could never fetch a plan to show the user, and the gate could
|
|
190
|
+
// never open.
|
|
191
|
+
const requireApproval = verifyCheckpoint({
|
|
192
|
+
verifier,
|
|
193
|
+
requiresApproval: (request) => new URL(request.url).pathname === '/v1/${spec.command}',
|
|
194
|
+
// Must return the same \`subject\` the CLI passes to checkpoint(). It binds an
|
|
195
|
+
// approval to one target, so an approval for A cannot act on B.
|
|
196
|
+
subjectFor: () => 'svc-1',
|
|
197
|
+
});
|
|
198
|
+
`
|
|
199
|
+
: ''}
|
|
200
|
+
const state = { runs: [], balance: 100 };
|
|
201
|
+
const json = (body, status = 200) =>
|
|
202
|
+
new Response(JSON.stringify(body), { status, headers: { 'content-type': 'application/json' } });
|
|
203
|
+
|
|
204
|
+
createServer(
|
|
205
|
+
nodeListener(async (request) => {
|
|
206
|
+
const { pathname } = new URL(request.url);
|
|
207
|
+
${spec.spends
|
|
208
|
+
? `
|
|
209
|
+
// Planning changes nothing, so it is not gated. It produces the summary the
|
|
210
|
+
// user is about to be asked to approve.
|
|
211
|
+
if (pathname === '/v1/${spec.command}/plan' && request.method === 'POST') {
|
|
212
|
+
const { env } = await request.json().catch(() => ({}));
|
|
213
|
+
return json({ id: 'svc-1', env, credits: 12, balance: state.balance, summary: { env } });
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (pathname === '/v1/${spec.command}' && request.method === 'POST') {
|
|
217
|
+
// Returns a 409 the CLI turns into exit 12 when the approval is missing,
|
|
218
|
+
// stale, expired or already used. Returns null when it is good.
|
|
219
|
+
const rejected = await requireApproval(request);
|
|
220
|
+
if (rejected) return rejected;
|
|
221
|
+
|
|
222
|
+
const id = \`run_\${state.runs.length + 1}\`;
|
|
223
|
+
state.runs.push(id);
|
|
224
|
+
state.balance -= 12;
|
|
225
|
+
return json({ ok: true, id, balanceAfter: state.balance });
|
|
226
|
+
}
|
|
227
|
+
`
|
|
228
|
+
: `
|
|
229
|
+
if (pathname.startsWith('/v1/${spec.command}/')) {
|
|
230
|
+
return json({ ok: true, name: decodeURIComponent(pathname.split('/').pop() ?? '') });
|
|
231
|
+
}
|
|
232
|
+
`}
|
|
233
|
+
// Each returns null for paths it does not own, so they compose with yours.
|
|
234
|
+
return (await auth(request)) ?? (await checkpoints(request));
|
|
235
|
+
}),
|
|
236
|
+
).listen(PORT, () => {
|
|
237
|
+
console.error(\`${spec.name} dev server on http://127.0.0.1:\${PORT}\`);
|
|
238
|
+
console.error('');
|
|
239
|
+
console.error(' auth POST /device/start GET /device POST /device/token');
|
|
240
|
+
console.error(' checkpoints POST /checkpoints POST /checkpoints/verify');
|
|
241
|
+
console.error(' yours ${spec.spends ? `POST /v1/${spec.command}/plan POST /v1/${spec.command}` : `GET /v1/${spec.command}/:name`}');
|
|
242
|
+
console.error('');
|
|
243
|
+
console.error(' Next: npm run build && node bin/${spec.name}.mjs login');
|
|
244
|
+
});
|
|
245
|
+
`;
|
|
246
|
+
}
|
|
105
247
|
function readme(spec) {
|
|
106
248
|
const envPrefix = spec.name.toUpperCase().replace(/-/g, '_');
|
|
107
249
|
return `# ${spec.name}
|
|
@@ -116,6 +258,14 @@ npm run build
|
|
|
116
258
|
node bin/${spec.name}.mjs --help
|
|
117
259
|
\`\`\`
|
|
118
260
|
|
|
261
|
+
\`${spec.name}\` is not on your PATH until you link it, so run it by path while
|
|
262
|
+
developing. To type the bare name instead:
|
|
263
|
+
|
|
264
|
+
\`\`\`bash
|
|
265
|
+
npm link # once
|
|
266
|
+
${spec.name} --help
|
|
267
|
+
\`\`\`
|
|
268
|
+
|
|
119
269
|
## Try it
|
|
120
270
|
|
|
121
271
|
\`\`\`bash
|
|
@@ -127,14 +277,48 @@ node bin/${spec.name}.mjs doctor --json
|
|
|
127
277
|
\`\`\`
|
|
128
278
|
${spec.auth === 'self-host'
|
|
129
279
|
? `
|
|
130
|
-
### Run the
|
|
280
|
+
### Run the server
|
|
281
|
+
|
|
282
|
+
This project is self-hosted, so it ships its own server — \`server.mjs\` in this
|
|
283
|
+
directory. It serves three things:
|
|
131
284
|
|
|
132
|
-
|
|
133
|
-
|
|
285
|
+
| | |
|
|
286
|
+
|---|---|
|
|
287
|
+
| Auth | the device-code endpoints \`login\` talks to (from \`@invokable/server\`) |
|
|
288
|
+
| Checkpoints | issuing and verifying approval fingerprints (from \`@invokable/server\`) |
|
|
289
|
+
| \`/v1/${spec.command}\` | **yours** — replace with the real thing |
|
|
134
290
|
|
|
135
291
|
\`\`\`bash
|
|
136
|
-
|
|
292
|
+
npm run server # terminal 1, on :8787
|
|
293
|
+
npm run build
|
|
294
|
+
node bin/${spec.name}.mjs login # terminal 2
|
|
137
295
|
\`\`\`
|
|
296
|
+
|
|
297
|
+
\`login\` prints a code and a URL. Open the URL, approve, and the CLI finishes on
|
|
298
|
+
its own.
|
|
299
|
+
|
|
300
|
+
### Before this is production
|
|
301
|
+
|
|
302
|
+
\`server.mjs\` is wired for a laptop. Three things must change, and each is
|
|
303
|
+
marked in the file:
|
|
304
|
+
|
|
305
|
+
- **\`requireSession\`** returns a fixed user. Replace it with your own session
|
|
306
|
+
lookup — a cookie, a JWT, whatever you already have. Returning \`null\` means
|
|
307
|
+
signed out, and nothing can be approved.
|
|
308
|
+
- **\`memoryStore()\` and \`memoryCheckpointStore()\`** lose everything on
|
|
309
|
+
restart, and on serverless there is no shared memory at all. Swap for
|
|
310
|
+
\`postgresAuthStore()\` and \`postgresCheckpointStore()\`; see the
|
|
311
|
+
[\`@invokable/server\` README](https://www.npmjs.com/package/@invokable/server).
|
|
312
|
+
- **\`CHECKPOINT_SECRET\`** is a literal. Move it to your secret manager.
|
|
313
|
+
|
|
314
|
+
Two things the SDK deliberately leaves to you: CSRF protection on
|
|
315
|
+
\`/device/approve\` if you serve a cookie-authenticated form, and rate limiting
|
|
316
|
+
on \`/device/start\`.
|
|
317
|
+
|
|
318
|
+
Mounting in an app you already have? The handlers are
|
|
319
|
+
\`(Request) => Promise<Response | null>\` and return \`null\` for paths they do not
|
|
320
|
+
own, so they compose with your routes. \`@invokable/server/node\` adapts them to
|
|
321
|
+
Express.
|
|
138
322
|
`
|
|
139
323
|
: `
|
|
140
324
|
### Sign in
|
|
@@ -191,6 +375,7 @@ whenever you add a command; \`init --check\` fails CI when they are stale.
|
|
|
191
375
|
}
|
|
192
376
|
export function scaffold(spec) {
|
|
193
377
|
const version = spec.version ?? '0.1.0';
|
|
378
|
+
const sdk = sdkRange();
|
|
194
379
|
const pkg = {
|
|
195
380
|
name: spec.name,
|
|
196
381
|
version,
|
|
@@ -203,19 +388,22 @@ export function scaffold(spec) {
|
|
|
203
388
|
build: 'tsc -p tsconfig.json',
|
|
204
389
|
dev: 'tsc -p tsconfig.json --watch',
|
|
205
390
|
test: 'invokable-test node bin/' + spec.name + '.mjs',
|
|
391
|
+
...(spec.auth === 'self-host' ? { server: 'node server.mjs' } : {}),
|
|
206
392
|
prepublishOnly: 'npm run build',
|
|
207
393
|
},
|
|
208
394
|
dependencies: {
|
|
209
|
-
'@invokable/core':
|
|
210
|
-
'@invokable/skills':
|
|
395
|
+
'@invokable/core': sdk,
|
|
396
|
+
'@invokable/skills': sdk,
|
|
397
|
+
// Only self-host projects ship a server; hosted tools talk to one.
|
|
398
|
+
...(spec.auth === 'self-host' ? { '@invokable/server': sdk } : {}),
|
|
211
399
|
},
|
|
212
400
|
devDependencies: {
|
|
213
|
-
'@invokable/conformance':
|
|
401
|
+
'@invokable/conformance': sdk,
|
|
214
402
|
'@types/node': '^22.0.0',
|
|
215
403
|
typescript: '^5.9.0',
|
|
216
404
|
},
|
|
217
405
|
};
|
|
218
|
-
|
|
406
|
+
const files = [
|
|
219
407
|
{ path: 'package.json', content: JSON.stringify(pkg, null, 2) + '\n' },
|
|
220
408
|
{
|
|
221
409
|
path: 'tsconfig.json',
|
|
@@ -279,5 +467,9 @@ jobs:
|
|
|
279
467
|
`,
|
|
280
468
|
},
|
|
281
469
|
];
|
|
470
|
+
if (spec.auth === 'self-host') {
|
|
471
|
+
files.push({ path: 'server.mjs', content: serverSource(spec), executable: true });
|
|
472
|
+
}
|
|
473
|
+
return files;
|
|
282
474
|
}
|
|
283
475
|
//# sourceMappingURL=template.js.map
|
package/dist/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,KAAK;SACT,KAAK,CAAC,eAAe,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACrD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAoBD,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD,SAAS,OAAO,CAAC,IAAkB;IACjC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC3B,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,IAAI,CAAC,IAAI,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE;QAC/E,CAAC,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,UAAU,CAAC,IAAkB;IACpC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE7D,8EAA8E;IAC9E,8EAA8E;IAC9E,wCAAwC;IACxC,MAAM,QAAQ,GAAG;uBACI,IAAI,CAAC,OAAO;YACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;CAM/B,CAAC;IAEA,MAAM,KAAK,GAAG;MACV,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;;;;;;yCAcO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBAC5C,IAAI,CAAC,OAAO;;;;;;mBAMV,IAAI,CAAC,OAAO;oBACX,IAAI,CAAC,OAAO;;;4BAGJ,IAAI,CAAC,OAAO;;;sBAGlB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;;;kCAGb,IAAI,CAAC,OAAO;;QAEtC,CAAC;IAEP,MAAM,KAAK,GAAG;MACV,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;;;kCAWA,IAAI,CAAC,OAAO;;QAEtC,CAAC;IAEP,OAAO,+BAA+B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;;;;EAIvE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;WAElB,IAAI,CAAC,IAAI;;;;;2BAKO,SAAS,YAAY,OAAO;2BAC5B,SAAS,aAAa,OAAO;;mBAErC,IAAI,CAAC,IAAI;EAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,8GAA8G,CAAC,CAAC,CAAC,EAAE;;;;;EAKjI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;;;CAG5B,CAAC;AACF,CAAC;AAED,SAAS,MAAM,CAAC,IAAkB;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO,KAAK,IAAI,CAAC,IAAI;;;;;;;;;WASZ,IAAI,CAAC,IAAI;;;;;;;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
|