@openora/create 0.1.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/LICENSE +661 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/generated/core-version.d.ts +2 -0
- package/dist/generated/core-version.d.ts.map +1 -0
- package/dist/generated/core-version.js +2 -0
- package/dist/generated/core-version.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +136 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
- package/template/README.md.tpl +61 -0
- package/template/__dot__claude/settings.json.tpl +52 -0
- package/template/__dot__env.example +21 -0
- package/template/__dot__gitignore +31 -0
- package/template/__dot__mcp.json +9 -0
- package/template/__dot__nvmrc +1 -0
- package/template/__dot__rulesync/commands/check.md +21 -0
- package/template/__dot__rulesync/commands/scaffold-module.md +21 -0
- package/template/__dot__rulesync/commands/scaffold-plugin.md +25 -0
- package/template/__dot__rulesync/commands/scaffold-route.md +23 -0
- package/template/__dot__rulesync/commands/start.md +11 -0
- package/template/__dot__rulesync/hooks/_shared.mjs +60 -0
- package/template/__dot__rulesync/hooks/guard-core.mjs.tpl +44 -0
- package/template/__dot__rulesync/hooks/guard-generated.mjs +34 -0
- package/template/__dot__rulesync/hooks/guard-subagent.mjs +54 -0
- package/template/__dot__rulesync/hooks/post-edit.mjs +57 -0
- package/template/__dot__rulesync/hooks.json +11 -0
- package/template/__dot__rulesync/mcp.json.tpl +10 -0
- package/template/__dot__rulesync/rules/db-conventions.md +83 -0
- package/template/__dot__rulesync/rules/overview.md +92 -0
- package/template/__dot__rulesync/skills/add-feature/SKILL.md +113 -0
- package/template/__dot__rulesync/skills/add-feature/handoff.md +58 -0
- package/template/__dot__rulesync/skills/code-review/SKILL.md +111 -0
- package/template/__dot__rulesync/skills/create-plugin/SKILL.md +72 -0
- package/template/__dot__rulesync/skills/create-pr/SKILL.md +55 -0
- package/template/__dot__rulesync/skills/create-task/SKILL.md +77 -0
- package/template/__dot__rulesync/skills/enhance-prompt/SKILL.md +53 -0
- package/template/__dot__rulesync/subagents/builder.md +93 -0
- package/template/__dot__rulesync/subagents/debugger.md +83 -0
- package/template/__dot__rulesync/subagents/deployer.md +66 -0
- package/template/__dot__rulesync/subagents/expert.md +53 -0
- package/template/__dot__rulesync/subagents/qa.md +88 -0
- package/template/apps/api/package.json.tpl +21 -0
- package/template/apps/api/src/extensions/__dot__gitkeep +0 -0
- package/template/apps/api/src/extensions.config.ts.tpl +22 -0
- package/template/apps/api/src/main.ts.tpl +84 -0
- package/template/apps/api/src/migrate.ts.tpl +46 -0
- package/template/apps/api/src/seed.ts.tpl +39 -0
- package/template/apps/api/tsconfig.json +8 -0
- package/template/docker-compose.yml +19 -0
- package/template/package.json.tpl +32 -0
- package/template/pnpm-workspace.yaml.tpl +8 -0
- package/template/rulesync.jsonc +26 -0
- package/template/turbo/generators/config.ts +2 -0
- package/template/turbo.json +17 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/generated/core-version.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/utility.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/client-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/h2c-client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/socks5-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@7.24.6/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/path/posix.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/path/win32.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/quic.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/stream/iter.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/test/reporters.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/util/types.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/zlib/iter.d.ts","../../../node_modules/.pnpm/@types+node@25.9.2/node_modules/@types/node/index.d.ts"],"fileIdsList":[[64,125,126,128,136,140,143,145,146,147,159],[64,127,128,136,140,143,145,146,147,159],[128,136,140,143,145,146,147,159],[64,128,136,140,143,145,146,147,159,168],[64,128,129,134,136,139,140,143,145,146,147,149,159,164,177],[64,128,129,130,136,139,140,143,145,146,147,159],[64,128,136,140,143,145,146,147,159],[64,128,131,136,140,143,145,146,147,159,178],[64,128,132,133,136,140,143,145,146,147,150,159],[64,128,133,136,140,143,145,146,147,159,164,174],[64,128,134,136,139,140,143,145,146,147,149,159],[64,127,128,135,136,140,143,145,146,147,159],[64,128,136,137,140,143,145,146,147,159],[64,128,136,138,139,140,143,145,146,147,159],[64,127,128,136,139,140,143,145,146,147,159],[64,128,136,139,140,141,143,145,146,147,159,164,177],[64,128,136,139,140,141,143,145,146,147,159,164,166,168],[64,115,128,136,139,140,142,143,145,146,147,149,159,164,177],[64,128,136,139,140,142,143,145,146,147,149,159,164,174,177],[64,128,136,140,142,143,144,145,146,147,159,164,174,177],[62,63,64,65,66,67,68,69,70,71,72,116,117,118,119,120,121,122,123,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],[64,128,136,139,140,143,145,146,147,159],[64,128,136,140,143,145,147,159],[64,128,136,140,143,145,146,147,148,159,177],[64,128,136,139,140,143,145,146,147,149,159,164],[64,128,136,140,143,145,146,147,150,159],[64,128,136,140,143,145,146,147,151,159],[64,128,136,139,140,143,145,146,147,154,159],[64,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,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184],[64,128,136,140,143,145,146,147,156,159],[64,128,136,140,143,145,146,147,157,159],[64,128,133,136,140,143,145,146,147,149,159,168],[64,128,136,139,140,143,145,146,147,159,160],[64,128,136,140,143,145,146,147,159,161,178,181],[64,128,136,139,140,143,145,146,147,159,164,167,168],[64,128,136,140,143,145,146,147,159,165,168],[64,128,136,140,143,145,146,147,159,166],[64,128,136,140,143,145,146,147,159,168,178],[64,128,136,140,143,145,146,147,159,169],[64,125,128,136,140,143,145,146,147,159,164,171,177],[64,128,136,140,143,145,146,147,159,164,170],[64,128,136,139,140,143,145,146,147,159,172,173],[64,128,136,140,143,145,146,147,159,172,173],[64,128,133,136,140,143,145,146,147,149,159,164,174],[64,128,136,140,143,145,146,147,159,175],[64,128,136,140,143,145,146,147,149,159,176],[64,128,136,140,142,143,145,146,147,157,159,177],[64,128,136,140,143,145,146,147,159,178,179],[64,128,133,136,140,143,145,146,147,159,179],[64,128,136,140,143,145,146,147,159,164,180],[64,128,136,140,143,145,146,147,148,159,181],[64,128,136,140,143,145,146,147,159,182],[64,128,131,136,140,143,145,146,147,159],[64,128,133,136,140,143,145,146,147,159],[64,128,136,140,143,145,146,147,159,178],[64,115,128,136,140,143,145,146,147,159],[64,128,136,140,143,145,146,147,159,177],[64,128,136,140,143,145,146,147,159,183],[64,128,136,140,143,145,146,147,154,159],[64,128,136,140,143,145,146,147,159,173],[64,115,128,136,139,140,141,143,145,146,147,154,159,164,168,177,180,181,183],[64,128,136,140,143,145,146,147,159,164,184],[64,128,136,140,143,145,146,147,159,166,185],[64,79,82,85,86,128,136,140,143,145,146,147,159,177],[64,82,128,136,140,143,145,146,147,159,164,177],[64,82,86,128,136,140,143,145,146,147,159,177],[64,128,136,140,143,145,146,147,159,164],[64,76,128,136,140,143,145,146,147,159],[64,80,128,136,140,143,145,146,147,159],[64,78,79,82,128,136,140,143,145,146,147,159,177],[64,128,136,140,143,145,146,147,149,159,174],[64,128,136,140,143,145,146,147,159,186],[64,76,128,136,140,143,145,146,147,159,186],[64,78,82,128,136,140,143,145,146,147,149,159,177],[64,73,74,75,77,81,128,136,139,140,143,145,146,147,159,164,177],[64,82,91,99,128,136,140,143,145,146,147,159],[64,74,80,128,136,140,143,145,146,147,159],[64,82,109,110,128,136,140,143,145,146,147,159],[64,74,77,82,128,136,140,143,145,146,147,159,168,177,186],[64,82,128,136,140,143,145,146,147,159],[64,78,82,128,136,140,143,145,146,147,159,177],[64,73,128,136,140,143,145,146,147,159],[64,76,77,78,80,81,82,83,84,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,128,136,140,143,145,146,147,159],[64,82,102,105,128,136,140,143,145,146,147,159],[64,82,91,92,93,128,136,140,143,145,146,147,159],[64,80,82,92,94,128,136,140,143,145,146,147,159],[64,81,128,136,140,143,145,146,147,159],[64,74,76,82,128,136,140,143,145,146,147,159],[64,82,86,92,94,128,136,140,143,145,146,147,159],[64,86,128,136,140,143,145,146,147,159],[64,80,82,85,128,136,140,143,145,146,147,159,177],[64,74,78,82,91,128,136,140,143,145,146,147,159],[64,82,102,128,136,140,143,145,146,147,159],[64,94,128,136,140,143,145,146,147,159],[64,74,78,82,86,128,136,140,143,145,146,147,159],[64,76,82,109,128,136,140,143,145,146,147,159,168,183,186],[60,64,128,136,140,143,145,146,147,151,159,177]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1076c599b661fb2593acbc4b1a82b50fea5cf3eb6ced05bc75be22b9b594e8b","signature":"ff0f272cae83b4ba4344aa07d22b578ef075a1e66e0fa57828ff2408f37a827a","impliedFormat":99},{"version":"94f131bd70a8f4d6cd4e9cd42716e056e8993c1b60ad1bfbab90ce10ac81b9bf","signature":"43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"c8b8968311ec4e5e97b7b5fb8a65efaba455db9bdcfd7fff7fb15f6e317bfba0","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"aecbf1d9e6a18dab7d92ef8a89a1444b47e1eb6134cb2bb776a26d55ff58c29a","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"1fede9296beac11ce8e6b425396a1791f64341f2be85deebb6286faf6e16306e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce697b6a251d9cad53998c7fd3098072df883b525ec45d83530e434dc6d80dc6","impliedFormat":1},{"version":"719412f054e6ecc35489462c9a21bab0323d173a7d04e55b0ace4b5d86fbeb07","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"cdb978218db340ed6c6b9ee6427a562257aa0ff016d02e0634ff9d58332878bc","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"5ff4433a2deae4f85ab1377e90a7554ce6b47ae51c69a84ca30a6e22fae85834","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"c1fa52b3d014001e8662fa2669d90ea15373958a288e3b83a3b621733d25292a","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"5e66972e83eb4dc7123939bf816e6cbd9ad81af5552db1cab84e6bd9c64d2ecc","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"8413d0641f293aed551c7464615b770d34a02dedede889b9591172287d68e773","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"1b241e24f3227d078c06aeda6e050187ad59a4e591f4467abed44d92b084e08d","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"7fde0e1be5c8be204ffbf428abfcf01da2eb0f130e1bc3f539eb7275f4fd1f58","impliedFormat":1},{"version":"e284328553df5f425a5d33d36a0c3fa66b46af9d097cad6f4d2e8696dfdeb0f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f36b3fbe2be150a9ca140da48593f21e6a8172004f92ddc549b43efec39f3e54","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"1c4f139ade4f6ebf45463505f8155173e5d7a5305e50e0aae0a5e712d6ff3b48","impliedFormat":1},{"version":"e16b319e5aca1031168de823c4946ff8e29629c4c8cc0ec0fcfe2a8ab2155043","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"2c3c5c0f54055e87640f5d233716fd889f3034fc7911d603b642369b0dbeb2a7","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"1c9e5b1a17b1fc9b3711fb36e0690421261ab2880f15b145155b5b2ba2ab6c2d","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"afa1c49f8e559e413d57343339db857d2a8159435cf9cf7d4deb41718fff1b88","impliedFormat":1},{"version":"6953d7597831d0860c7034cf4f0419687d263b6b98a4b32e37ce6d49615c36e2","impliedFormat":1}],"root":[60,61],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":100,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[125,1],[126,1],[127,2],[64,3],[128,4],[129,5],[130,6],[62,7],[131,8],[132,9],[133,10],[134,11],[135,12],[136,13],[137,13],[138,14],[139,15],[140,16],[141,17],[65,7],[63,7],[142,18],[143,19],[144,20],[186,21],[145,22],[146,23],[147,22],[148,24],[149,25],[150,26],[151,27],[152,27],[153,27],[154,28],[155,29],[156,30],[157,31],[158,32],[159,33],[160,33],[161,34],[162,7],[163,7],[164,35],[165,36],[166,37],[167,35],[168,38],[169,39],[170,40],[171,41],[172,42],[173,43],[174,44],[175,45],[176,46],[177,47],[178,48],[179,49],[180,50],[181,51],[182,52],[66,22],[67,7],[68,53],[69,54],[70,7],[71,55],[72,7],[116,56],[117,57],[118,58],[119,58],[120,59],[121,7],[122,4],[123,60],[124,57],[183,61],[184,62],[185,63],[58,7],[59,7],[11,7],[10,7],[2,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[3,7],[20,7],[21,7],[4,7],[22,7],[26,7],[23,7],[24,7],[25,7],[27,7],[28,7],[29,7],[5,7],[30,7],[31,7],[32,7],[33,7],[6,7],[37,7],[34,7],[35,7],[36,7],[38,7],[7,7],[39,7],[44,7],[45,7],[40,7],[41,7],[42,7],[43,7],[8,7],[49,7],[46,7],[47,7],[48,7],[50,7],[9,7],[51,7],[52,7],[53,7],[55,7],[54,7],[56,7],[1,7],[57,7],[91,64],[104,65],[88,66],[105,67],[114,68],[79,69],[80,70],[78,71],[113,72],[108,73],[112,74],[82,75],[101,76],[81,77],[111,78],[76,79],[77,73],[83,80],[84,7],[90,81],[87,80],[74,82],[115,83],[106,84],[94,85],[93,80],[95,86],[98,87],[92,88],[96,89],[109,72],[85,90],[86,91],[99,92],[75,67],[103,93],[102,80],[89,91],[97,94],[100,95],[107,7],[73,7],[110,96],[60,7],[61,97]],"latestChangedDtsFile":"./generated/core-version.d.ts","version":"6.0.3"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-version.d.ts","sourceRoot":"","sources":["../../src/generated/core-version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-version.js","sourceRoot":"","sources":["../../src/generated/core-version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { basename, dirname, join, relative, resolve, sep } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { CORE_VERSION } from './generated/core-version.js';
|
|
6
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const templateRoot = join(here, '..', 'template');
|
|
8
|
+
const MCP_COMMAND = 'node';
|
|
9
|
+
const MCP_ARGS = ['node_modules/@openora/mcp/dist/main.js'];
|
|
10
|
+
const SKIPPED_BASENAMES = new Set(['guard-core.mjs.tpl', 'guard-core.mjs']);
|
|
11
|
+
function die(message) {
|
|
12
|
+
console.error(`\n error: ${message}\n`);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
const USAGE = 'Usage: npm create @openora <target-dir> [--name <name>]';
|
|
16
|
+
function readFlag(args, index) {
|
|
17
|
+
const arg = args[index] ?? '';
|
|
18
|
+
const eq = arg.indexOf('=');
|
|
19
|
+
if (eq !== -1) {
|
|
20
|
+
return { value: arg.slice(eq + 1), next: index };
|
|
21
|
+
}
|
|
22
|
+
return { value: args[index + 1], next: index + 1 };
|
|
23
|
+
}
|
|
24
|
+
function parseArgs(argv) {
|
|
25
|
+
const args = argv.slice(2);
|
|
26
|
+
let target;
|
|
27
|
+
let name;
|
|
28
|
+
for (let i = 0; i < args.length; i++) {
|
|
29
|
+
const arg = args[i];
|
|
30
|
+
if (arg === undefined) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (arg === '--name' || arg.startsWith('--name=')) {
|
|
34
|
+
const flag = readFlag(args, i);
|
|
35
|
+
name = flag.value;
|
|
36
|
+
i = flag.next;
|
|
37
|
+
}
|
|
38
|
+
else if (!arg.startsWith('-') && !target) {
|
|
39
|
+
target = arg;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!target) {
|
|
43
|
+
die(`missing target directory.\n ${USAGE}`);
|
|
44
|
+
}
|
|
45
|
+
return name === undefined ? { target } : { target, name };
|
|
46
|
+
}
|
|
47
|
+
function sanitizeName(raw) {
|
|
48
|
+
return (raw
|
|
49
|
+
.toLowerCase()
|
|
50
|
+
.replace(/[^a-z0-9-_]/g, '-')
|
|
51
|
+
.replace(/^-+|-+$/g, '') || 'igaming-app');
|
|
52
|
+
}
|
|
53
|
+
function posix(path) {
|
|
54
|
+
return path.split(sep).join('/');
|
|
55
|
+
}
|
|
56
|
+
function substitute(content, vars) {
|
|
57
|
+
return content.replace(/\{\{(\w+)\}\}/g, (match, key) => {
|
|
58
|
+
const value = vars[key];
|
|
59
|
+
return value === undefined ? match : value;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function walk(dir) {
|
|
63
|
+
const out = [];
|
|
64
|
+
for (const entry of readdirSync(dir)) {
|
|
65
|
+
const full = join(dir, entry);
|
|
66
|
+
if (statSync(full).isDirectory()) {
|
|
67
|
+
out.push(...walk(full));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
out.push(full);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
function undotSegment(segment) {
|
|
76
|
+
return segment.startsWith('__dot__') ? `.${segment.slice('__dot__'.length)}` : segment;
|
|
77
|
+
}
|
|
78
|
+
function emitTree(srcRoot, vars, targetDir) {
|
|
79
|
+
for (const file of walk(srcRoot)) {
|
|
80
|
+
if (SKIPPED_BASENAMES.has(basename(file))) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const rel = relative(srcRoot, file);
|
|
84
|
+
let outRel = rel.split(sep).map(undotSegment).join(sep);
|
|
85
|
+
if (outRel.endsWith('.tpl')) {
|
|
86
|
+
outRel = outRel.slice(0, -'.tpl'.length);
|
|
87
|
+
}
|
|
88
|
+
const raw = readFileSync(file, 'utf8');
|
|
89
|
+
const content = file.endsWith('.tpl') ? substitute(raw, vars) : raw;
|
|
90
|
+
const outPath = join(targetDir, outRel);
|
|
91
|
+
mkdirSync(dirname(outPath), { recursive: true });
|
|
92
|
+
writeFileSync(outPath, content);
|
|
93
|
+
console.log(` + ${posix(outRel)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function main() {
|
|
97
|
+
const { target, name: nameFlag } = parseArgs(process.argv);
|
|
98
|
+
const targetDir = resolve(process.cwd(), target);
|
|
99
|
+
const name = sanitizeName(nameFlag ?? basename(targetDir));
|
|
100
|
+
if (existsSync(targetDir) && readdirSync(targetDir).length > 0) {
|
|
101
|
+
die(`${targetDir} already exists and is not empty.`);
|
|
102
|
+
}
|
|
103
|
+
if (!existsSync(templateRoot)) {
|
|
104
|
+
die(`template missing at ${templateRoot}`);
|
|
105
|
+
}
|
|
106
|
+
const vars = {
|
|
107
|
+
name,
|
|
108
|
+
coreVersion: CORE_VERSION,
|
|
109
|
+
mcpCommand: MCP_COMMAND,
|
|
110
|
+
mcpArgsJson: JSON.stringify(MCP_ARGS),
|
|
111
|
+
};
|
|
112
|
+
console.log(`\n Creating ${name} at ${targetDir}`);
|
|
113
|
+
console.log(` headless api-only consumer (frontend lives in your own repo)`);
|
|
114
|
+
console.log(` Installs @openora/* from npm - no platform checkout\n`);
|
|
115
|
+
emitTree(templateRoot, vars, targetDir);
|
|
116
|
+
console.log(`
|
|
117
|
+
Done. Next steps:
|
|
118
|
+
|
|
119
|
+
cd ${posix(relative(process.cwd(), targetDir)) || '.'}
|
|
120
|
+
pnpm install # pulls @openora/* from npm + generates agent files
|
|
121
|
+
cp .env.example .env # then set DATABASE_URL / AUTH_SECRET
|
|
122
|
+
pnpm db:migrate # apply the schema - runs from node_modules
|
|
123
|
+
pnpm dev # api :3001
|
|
124
|
+
|
|
125
|
+
Add features with turbo gen:
|
|
126
|
+
|
|
127
|
+
pnpm gen plugin # new overlay plugin
|
|
128
|
+
pnpm gen adapter # swap a vendor adapter (KYC / payment / notification)
|
|
129
|
+
|
|
130
|
+
MCP is preconfigured (.mcp.json -> node_modules/@openora/mcp). Launch Claude
|
|
131
|
+
Code and run /start. This is a headless api - build your frontend in this repo
|
|
132
|
+
and consume the api over HTTP with @openora/core/react.
|
|
133
|
+
`);
|
|
134
|
+
}
|
|
135
|
+
main();
|
|
136
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@openora/create",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "npm initializer that scaffolds a headless Openora consumer app from the published @openora/* packages - no OSS checkout required",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai-native",
|
|
7
|
+
"create",
|
|
8
|
+
"igaming",
|
|
9
|
+
"openora",
|
|
10
|
+
"scaffold"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://github.com/blurifycom/openora",
|
|
13
|
+
"license": "AGPL-3.0-only",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/blurifycom/openora.git",
|
|
17
|
+
"directory": "packages/create-openora"
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"create-openora": "dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"template"
|
|
25
|
+
],
|
|
26
|
+
"type": "module",
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "25.9.2",
|
|
32
|
+
"typescript": "6.0.3",
|
|
33
|
+
"@openora/core": "0.4.1-canary.29"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=26"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "node scripts/copy-template.mjs && node scripts/generate-core-version.mjs && tsc",
|
|
40
|
+
"typecheck": "node scripts/generate-core-version.mjs && tsc --noEmit",
|
|
41
|
+
"clean": "rm -rf dist template src/generated"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
An igaming platform built on the open-source `@openora/*` packages. This repo holds only
|
|
4
|
+
what is unique to your operation - branding, vendor adapters, and overlay plugins. The
|
|
5
|
+
core (auth, wallet, gaming, lobby, compliance, backoffice, CMS) is consumed as linked
|
|
6
|
+
packages and never forked.
|
|
7
|
+
|
|
8
|
+
This is a headless api consumer. Build your frontend (player web + admin backoffice)
|
|
9
|
+
in its own repo and talk to this api over HTTP via `@openora/react`.
|
|
10
|
+
|
|
11
|
+
## Layout
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
apps/
|
|
15
|
+
api/ # Hono + oRPC API (:3001) - thin createApp entry + your extensions.config.ts
|
|
16
|
+
.claude/agents/ # AI agents: builder, expert, qa
|
|
17
|
+
turbo/generators/ # turbo gen: plugin, adapter
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
The `@openora/*` packages install straight from npm - no sibling checkout needed. The generated
|
|
23
|
+
`devDependencies`/`dependencies` track the `latest` stable tag, so a fresh install always pulls the
|
|
24
|
+
newest release; pin an exact version if you need reproducible installs.
|
|
25
|
+
|
|
26
|
+
## Dev setup
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pnpm install # pulls @openora/* from npm
|
|
30
|
+
pnpm setup:mcp # trust the MCP server + install the /start onboarding flow
|
|
31
|
+
pnpm regen # regenerate OpenAPI + catalog + Drizzle client (after schema changes)
|
|
32
|
+
cp .env.example .env # set DATABASE_URL + AUTH_SECRET
|
|
33
|
+
pnpm db:migrate # apply the OSS schema to your database
|
|
34
|
+
pnpm dev # api :3001
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
After `pnpm setup:mcp`, restart your editor and run **`/start`** in Claude Code - it asks what
|
|
38
|
+
you want to build and scaffolds it for you.
|
|
39
|
+
|
|
40
|
+
To pull the newest platform release, re-run `pnpm install` (the pin tracks the `latest` stable tag).
|
|
41
|
+
|
|
42
|
+
## Extending
|
|
43
|
+
|
|
44
|
+
| Need | Command |
|
|
45
|
+
|---|---|
|
|
46
|
+
| Overlay plugin (new behavior/routes) | `pnpm gen plugin` |
|
|
47
|
+
| Swap a vendor adapter (KYC / payment / notification) | `pnpm gen adapter` |
|
|
48
|
+
|
|
49
|
+
Register new plugins in `apps/api/src/extensions.config.ts`. Adapters that override a
|
|
50
|
+
default binding must be listed AFTER the module that owns the default (last registration of
|
|
51
|
+
a DI token wins).
|
|
52
|
+
|
|
53
|
+
## AI agents
|
|
54
|
+
|
|
55
|
+
`.claude/agents/` ships three agents scoped to this repo:
|
|
56
|
+
|
|
57
|
+
- `builder` - configure extensions, swap adapters, write overlays, customize UI
|
|
58
|
+
- `expert` - turn product asks into requirements + acceptance criteria
|
|
59
|
+
- `qa` - write/run Playwright E2E tests and triage bugs
|
|
60
|
+
|
|
61
|
+
The `oss` MCP server (`.mcp.json`) gives them read-only inspection of the platform surface.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"enableAllProjectMcpServers": false,
|
|
3
|
+
"enabledMcpjsonServers": ["oss"],
|
|
4
|
+
"permissions": {
|
|
5
|
+
"deny": [
|
|
6
|
+
"Edit(./node_modules/**)",
|
|
7
|
+
"Write(./node_modules/**)"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"hooks": {
|
|
11
|
+
"PreToolUse": [
|
|
12
|
+
{
|
|
13
|
+
"matcher": "Bash|Edit|Write",
|
|
14
|
+
"hooks": [
|
|
15
|
+
{
|
|
16
|
+
"type": "command",
|
|
17
|
+
"command": "node .rulesync/hooks/guard-core.mjs"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"matcher": "Edit|Write",
|
|
23
|
+
"hooks": [
|
|
24
|
+
{
|
|
25
|
+
"type": "command",
|
|
26
|
+
"command": "node .rulesync/hooks/guard-generated.mjs"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"matcher": "Task",
|
|
32
|
+
"hooks": [
|
|
33
|
+
{
|
|
34
|
+
"type": "command",
|
|
35
|
+
"command": "node .rulesync/hooks/guard-subagent.mjs"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"PostToolUse": [
|
|
41
|
+
{
|
|
42
|
+
"matcher": "Edit|Write",
|
|
43
|
+
"hooks": [
|
|
44
|
+
{
|
|
45
|
+
"type": "command",
|
|
46
|
+
"command": "node .rulesync/hooks/post-edit.mjs"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Database (Postgres). In dev link-mode this is typically the same local DB the
|
|
2
|
+
# OSS checkout uses, so migrations run via `pnpm db:migrate` line up.
|
|
3
|
+
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/oss_igaming
|
|
4
|
+
|
|
5
|
+
# Auth secret (min 32 chars). Generate one: openssl rand -base64 32
|
|
6
|
+
AUTH_SECRET=change-me-in-production-min-32-chars
|
|
7
|
+
|
|
8
|
+
# Optional infra
|
|
9
|
+
REDIS_URL=redis://localhost:6379
|
|
10
|
+
|
|
11
|
+
# Ports
|
|
12
|
+
PORT=3001
|
|
13
|
+
CORS_ORIGINS=http://localhost:3000,http://localhost:3002
|
|
14
|
+
|
|
15
|
+
# Player web app -> API (Next variant reads NEXT_PUBLIC_*, Vite/TanStack reads VITE_PUBLIC_*)
|
|
16
|
+
NEXT_PUBLIC_API_URL=http://localhost:3001
|
|
17
|
+
VITE_PUBLIC_API_URL=http://localhost:3001
|
|
18
|
+
|
|
19
|
+
# Server-to-server API URL used by TanStack Start route loaders (falls back to the
|
|
20
|
+
# public URL above). Only relevant for --web=tanstack.
|
|
21
|
+
INTERNAL_API_URL=http://localhost:3001
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
node_modules
|
|
2
|
+
dist
|
|
3
|
+
.next
|
|
4
|
+
.output
|
|
5
|
+
.nitro
|
|
6
|
+
.tanstack
|
|
7
|
+
.vite
|
|
8
|
+
# Generated by the TanStack Start Vite plugin (--web=tanstack)
|
|
9
|
+
routeTree.gen.ts
|
|
10
|
+
.turbo
|
|
11
|
+
coverage
|
|
12
|
+
.env
|
|
13
|
+
.env.*
|
|
14
|
+
!.env.example
|
|
15
|
+
*.local
|
|
16
|
+
*.tsbuildinfo
|
|
17
|
+
.DS_Store
|
|
18
|
+
|
|
19
|
+
# Generated by rulesync from .rulesync/ (single source of truth).
|
|
20
|
+
# Regenerated on `pnpm install` (prepare) or `pnpm sync:agents`. Do not commit.
|
|
21
|
+
/AGENTS.md
|
|
22
|
+
/CLAUDE.md
|
|
23
|
+
/.mcp.json
|
|
24
|
+
.vscode/mcp.json
|
|
25
|
+
.codex/
|
|
26
|
+
.claude/agents/
|
|
27
|
+
.claude/commands/
|
|
28
|
+
.github/copilot-instructions.md
|
|
29
|
+
.github/agents/
|
|
30
|
+
.github/prompts/
|
|
31
|
+
.github/hooks/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
22
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
targets:
|
|
3
|
+
- '*'
|
|
4
|
+
description: Run the local gate before a PR - typecheck + lint. There is no single `verify` script in this repo; this is it.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This repo has no `verify` script - typecheck and lint are separate. Run them in order and stop at the first failure.
|
|
8
|
+
|
|
9
|
+
1. `pnpm typecheck` - `turbo run typecheck` across all apps.
|
|
10
|
+
2. `pnpm lint` - `oxlint .`.
|
|
11
|
+
|
|
12
|
+
If you have added a test runner (eg `vitest`), also run your test script.
|
|
13
|
+
|
|
14
|
+
The generated agent files (AGENTS.md, CLAUDE.md, .codex/config.toml, Copilot mirrors) are gitignored and regenerated from `.rulesync/` on `pnpm install` - there is nothing to drift-check. If you changed agent instructions, edit `.rulesync/` and run `pnpm sync:agents`.
|
|
15
|
+
|
|
16
|
+
After running:
|
|
17
|
+
|
|
18
|
+
- All green: report ready for PR; list changed files (`git diff --name-only`).
|
|
19
|
+
- typecheck/lint fails: show the location, propose a fix.
|
|
20
|
+
|
|
21
|
+
Do not touch `@openora/*` core or `node_modules` - this repo extends the platform from the outside only (overlay plugins, adapter rebindings, UI plugins, config). Never report ready for PR if any step fails.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 'Generate a self-contained local add-on package (schema, service, router, plugin.ts, AGENTS.md) and register it. Args: <name>. Consumers rarely need this - prefer an overlay plugin.'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
> A consumer extends the platform with **overlay plugins** (`scaffold-plugin`) almost always. Reach
|
|
6
|
+
> for a local module only when the feature is a genuinely self-contained domain with its own tables,
|
|
7
|
+
> service, and routes that you'd otherwise duplicate across plugins.
|
|
8
|
+
|
|
9
|
+
Run `pnpm gen module $ARGUMENTS` in the repo root. Arg is `<name>` (e.g. `loyalty`). The scaffold
|
|
10
|
+
ships a buildable add-on - a `list` route wired contract -> router -> service over a sample table -
|
|
11
|
+
so `/check` is green immediately. Then:
|
|
12
|
+
|
|
13
|
+
1. `<name>/src/schema/index.ts` - Drizzle tables (`pgTable`, snake_case, `timestamp({ withTimezone:
|
|
14
|
+
true })` per `db-conventions`).
|
|
15
|
+
2. `<name>/src/schemas/index.ts` - Zod input/output schemas; types via `z.infer`.
|
|
16
|
+
3. `<name>/src/service/<name>.service.ts` - business logic; inject `DRIZZLE` + `EVENT_BUS`, no inline
|
|
17
|
+
fetch/SQL.
|
|
18
|
+
4. `<name>/src/router/index.ts` - oRPC routes (admin routes `adminGuard.assert` first).
|
|
19
|
+
5. Register in `apps/api/src/extensions.config.ts`; `pnpm db:migrate`; `/check`.
|
|
20
|
+
|
|
21
|
+
Audit every state-changing action. Fill the `// AGENT: implement here` regions; leave wiring alone.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 'Generate an overlay extension under apps/api/src/extensions/<name>/. Adds routes, providers, event handlers, or MCP tools without touching @openora/* core. Args: <name>.'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run `pnpm gen plugin $ARGUMENTS` in the repo root. For a vendor swap use
|
|
6
|
+
`pnpm gen adapter <name> <TOKEN> <dependsOn>`; for a react-sdk page use `pnpm gen page <route>`.
|
|
7
|
+
|
|
8
|
+
After the generator finishes, open `apps/api/src/extensions/<name>/plugin.ts` and implement
|
|
9
|
+
`register(ctx)`:
|
|
10
|
+
|
|
11
|
+
- `ctx.provide(TOKEN, factory)` - bind an adapter/service (sealed compliance tokens are rejected at
|
|
12
|
+
compile + runtime).
|
|
13
|
+
- `ctx.routers.add(namespace, (c) => router)` - mount oRPC routes (Zod input/output, no inline schemas).
|
|
14
|
+
- `ctx.events.on(event, handler)` - subscribe to the typed `EventBus`.
|
|
15
|
+
- `ctx.mcp.tool(definition)` - expose an MCP tool.
|
|
16
|
+
|
|
17
|
+
Then:
|
|
18
|
+
|
|
19
|
+
1. Register the plugin in `apps/api/src/extensions.config.ts`. Last registration of a DI token wins -
|
|
20
|
+
list an adapter swap AFTER the module that owns the default binding.
|
|
21
|
+
2. Tables go in the overlay's own `src/schema/index.ts` (follow `db-conventions`); run `pnpm db:migrate`.
|
|
22
|
+
3. Audit every state-changing action (emit an event the `audit` add-on consumes, or `AUDIT_WRITER.record`).
|
|
23
|
+
4. `/check` to confirm wiring compiles and boundary lint passes.
|
|
24
|
+
|
|
25
|
+
Prefer the guided **create-plugin** skill for the full interview -> classify -> wire -> verify loop.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 'Add an oRPC route stub to an overlay or local add-on. Args: <target> <GET|POST|PUT|PATCH|DELETE> <path>. Example: /scaffold-route promotions GET /active.'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Parse `$ARGUMENTS` as `<target> <method> <path>`.
|
|
6
|
+
|
|
7
|
+
First confirm the route does not already exist - `list-routes` (oss MCP) for the namespace, or
|
|
8
|
+
`query-openapi` with the path.
|
|
9
|
+
|
|
10
|
+
Run `pnpm gen route <target> <method> <path>` in the repo root. The generator adds both a contract
|
|
11
|
+
procedure and a matching router handler - no inline Zod in the router.
|
|
12
|
+
|
|
13
|
+
After it generates:
|
|
14
|
+
|
|
15
|
+
1. Replace the placeholder `.output(z.object({}))` with the real input/output schemas (derive from
|
|
16
|
+
existing schemas; never hand-write a type that a schema already defines).
|
|
17
|
+
2. Implement the handler in the target's router, delegating to a service method. Admin routes call
|
|
18
|
+
`await adminGuard.assert(context)` first.
|
|
19
|
+
3. Audit any state-changing route (emit a domain event or `AUDIT_WRITER.record`).
|
|
20
|
+
4. `pnpm db:migrate` if a table changed, then `/check`.
|
|
21
|
+
|
|
22
|
+
Most consumer routes belong inside an overlay plugin - see **scaffold-plugin** / the **create-plugin**
|
|
23
|
+
skill. Use a local add-on only when the feature is a self-contained module.
|