datasette-ts 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/db/sqlite/d1.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/entity.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/column.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/column-builder.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/table.utils.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/pg-core/foreign-keys.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/tracing-utils.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/pg-core/unique-constraint.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/pg-core/utils/array.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/pg-core/columns/common.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/pg-core/columns/enum.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/subquery.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/drizzle-orm/version.js", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/tracing.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/view-common.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/table.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/sql.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/utils.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/logger.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/pg-core/table.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/pg-core/primary-keys.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/expressions/conditions.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/expressions/select.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/expressions/index.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/relations.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/alias.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/selection-proxy.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/query-promise.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/foreign-keys.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/unique-constraint.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/common.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/blob.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/custom.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/integer.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/numeric.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/real.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/text.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/all.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/table.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/checks.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/indexes.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/primary-keys.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/utils.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/delete.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/casing.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/errors.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/functions/aggregate.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/functions/vector.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/functions/index.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sql/index.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/columns/index.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/view-base.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/dialect.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/query-builders/query-builder.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/select.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/query-builder.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/insert.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/drizzle-orm/sqlite-core/query-builders/select.types.js", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/update.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/index.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/count.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/query.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/query-builders/raw.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/db.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/cache/core/cache.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/cache/core/index.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/alias.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/session.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/drizzle-orm/sqlite-core/subquery.js", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/view.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/sqlite-core/index.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/libsql/session.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/libsql/driver-core.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/libsql/driver.ts", "../node_modules/.pnpm/drizzle-orm@0.45.1_@cloudflare+workers-types@4.20260103.0_@libsql+client@0.17.0_@types+_1659e5b6a055b44e7fd73940e3e831ea/node_modules/src/libsql/index.ts", "../src/db/sqlite/node.ts", "../src/db/sqlite/index.ts", "../src/db/introspection.ts", "../src/core/registry.ts", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/identity.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/visit.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/directives.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/anchors.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/applyReviver.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/toJS.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Node.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Alias.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Scalar.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/createNode.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Collection.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyComment.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/foldFlowLines.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyString.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringify.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyPair.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/log.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/merge.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/addPairToJSMap.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/Pair.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyCollection.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/YAMLMap.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/map.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/nodes/YAMLSeq.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/seq.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/string.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/common/null.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/bool.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyNumber.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/float.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/int.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/core/schema.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/json/schema.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/binary.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/pairs.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/omap.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/bool.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/float.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/int.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/set.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/yaml-1.1/schema.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/tags.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/schema/Schema.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/stringify/stringifyDocument.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/doc/Document.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/errors.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-props.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-contains-newline.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-flow-indent-check.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-map-includes.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-block-map.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-block-seq.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-end.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-flow-collection.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-collection.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-block-scalar.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/resolve-flow-scalar.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-scalar.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/util-empty-scalar-position.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-node.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/compose-doc.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/compose/composer.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst-scalar.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst-stringify.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst-visit.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/cst.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/lexer.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/line-counter.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/parse/parser.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/public-api.js", "../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/dist/index.js", "../src/core/auth.ts", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/compose.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/http-exception.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/request/constants.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/utils/body.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/utils/url.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/request.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/utils/html.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/context.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/utils/constants.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/hono-base.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/reg-exp-router/matcher.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/reg-exp-router/node.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/reg-exp-router/trie.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/reg-exp-router/router.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/reg-exp-router/prepared-router.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/reg-exp-router/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/smart-router/router.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/smart-router/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/trie-router/node.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/trie-router/router.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/router/trie-router/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/hono.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/helper/html/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/constants.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/utils.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/context.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/context.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/intrinsic-element/common.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/children.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/intrinsic-element/components.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/utils.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/base.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/render.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/hooks/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/hooks/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/jsx-runtime.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/dom/components.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/streaming.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/components.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/index.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/middleware/jsx-renderer/index.js", "../src/core/sqlite-escape.ts", "../src/core/filters.ts", "../src/core/table.ts", "../src/core/facets.ts", "../src/core/query.ts", "../src/http/search.ts", "../src/core/columns.ts", "../src/core/sort.ts", "../src/http/shape.ts", "../src/http/response.ts", "../src/core/labels.ts", "../src/http/hash-urls.ts", "../src/http/timings.ts", "../src/http/handler.ts", "../src/http/csv.ts", "../src/core/foreign-keys.ts", "../src/db/definitions.ts", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/jsx-dev-runtime.js", "../node_modules/.pnpm/hono@4.11.4/node_modules/hono/dist/jsx/jsx-runtime.js", "../src/http/html.tsx", "../src/server/app.tsx", "../src/http/assets.ts", "../src/http/assets-node.ts", "../src/http/app-css-hash-node.ts", "../src/server/bun.ts", "../node_modules/.pnpm/@hono+node-server@1.19.8_hono@4.11.4/node_modules/@hono/node-server/dist/index.mjs", "../src/server/node.ts", "../src/cli/deploy-cloudflare.ts", "../scripts/cloudflare-deploy-helpers.mjs", "../src/cli/serve.ts", "../src/core/inspect.ts", "../src/core/metadata.ts", "../src/server/index.ts", "../src/cli.ts"],
4
+ "sourcesContent": ["import type { D1Database, SqliteClient, SqliteOpenOptions, SqliteRow } from \"./types.js\";\n\nexport function openD1Sqlite(options: SqliteOpenOptions): SqliteClient {\n if (!options.d1) {\n throw new Error(\"Missing D1 database binding.\");\n }\n const db = options.d1;\n\n return {\n driver: \"d1\",\n readOnly: options.readOnly ?? true,\n orm: null,\n async execute(sql, params) {\n const statement = params?.length ? db.prepare(sql).bind(...params) : db.prepare(sql);\n const result = await statement.all();\n const rows = (result.results ?? []) as SqliteRow[];\n const firstRow = rows[0];\n const columns = firstRow ? Object.keys(firstRow) : [];\n return { rows, columns };\n },\n close() {\n // Cloudflare D1 connections are managed by the runtime.\n },\n };\n}\n", "export const entityKind = Symbol.for('drizzle:entityKind');\nexport const hasOwnEntityKind = Symbol.for('drizzle:hasOwnEntityKind');\n\nexport interface DrizzleEntity {\n\t[entityKind]: string;\n}\n\nexport type DrizzleEntityClass<T> =\n\t& ((abstract new(...args: any[]) => T) | (new(...args: any[]) => T))\n\t& DrizzleEntity;\n\nexport function is<T extends DrizzleEntityClass<any>>(value: any, type: T): value is InstanceType<T> {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (value instanceof type) { // eslint-disable-line no-instanceof/no-instanceof\n\t\treturn true;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) {\n\t\tthrow new Error(\n\t\t\t`Class \"${\n\t\t\t\ttype.name ?? '<unknown>'\n\t\t\t}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`,\n\t\t);\n\t}\n\n\tlet cls = Object.getPrototypeOf(value).constructor;\n\tif (cls) {\n\t\t// Traverse the prototype chain to find the entityKind\n\t\twhile (cls) {\n\t\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcls = Object.getPrototypeOf(cls);\n\t\t}\n\t}\n\n\treturn false;\n}\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport interface ColumnBaseConfig<\n\tTDataType extends ColumnDataType,\n\tTColumnType extends string,\n> extends ColumnBuilderBaseConfig<TDataType, TColumnType> {\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n}\n\nexport type ColumnTypeConfig<T extends ColumnBaseConfig<ColumnDataType, string>, TTypeConfig extends object> = T & {\n\tbrand: 'Column';\n\ttableName: T['tableName'];\n\tname: T['name'];\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: T['data'];\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'];\n\thasDefault: T['hasDefault'];\n\tisPrimaryKey: T['isPrimaryKey'];\n\tisAutoincrement: T['isAutoincrement'];\n\thasRuntimeDefault: T['hasRuntimeDefault'];\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseColumn: infer U } ? U : unknown;\n\tgenerated: GeneratedColumnConfig<T['data']> | undefined;\n\tidentity: undefined | 'always' | 'byDefault';\n} & TTypeConfig;\n\nexport type ColumnRuntimeConfig<TData, TRuntimeConfig extends object> = ColumnBuilderRuntimeConfig<\n\tTData,\n\tTRuntimeConfig\n>;\n\nexport interface Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTRuntimeConfig extends object = object,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTTypeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: ColumnTypeConfig<T, TTypeConfig>;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: T['columnType'];\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\n\tprotected config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(\n\t\treadonly table: Table,\n\t\tconfig: ColumnRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tthis.config = config;\n\t\tthis.name = config.name;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\tmapToDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\t// ** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnDataType, string>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n", "import { entityKind } from '~/entity.ts';\nimport type { Column } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume, Simplify } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'string'\n\t| 'number'\n\t| 'boolean'\n\t| 'array'\n\t| 'json'\n\t| 'date'\n\t| 'bigint'\n\t| 'custom'\n\t| 'buffer'\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'relDuration'\n\t| 'localTime'\n\t| 'localDate'\n\t| 'localDateTime';\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'common' | 'gel';\n\nexport type GeneratedStorageMode = 'virtual' | 'stored';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport type GeneratedColumnConfig<TDataType> = {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n};\n\nexport type GeneratedIdentityConfig = {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n};\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {\n\tname: string;\n\tdataType: TDataType;\n\tcolumnType: TColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTableName extends string,\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: T['name'];\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T extends { notNull: true } ? true : false;\n\thasDefault: T extends { hasDefault: true } ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, 'common'>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport type ColumnBuilderTypeConfig<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> = Simplify<\n\t& {\n\t\tbrand: 'ColumnBuilder';\n\t\tname: T['name'];\n\t\tdataType: T['dataType'];\n\t\tcolumnType: T['columnType'];\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverParam'];\n\t\tnotNull: T extends { notNull: infer U } ? U : boolean;\n\t\thasDefault: T extends { hasDefault: infer U } ? U : boolean;\n\t\tenumValues: T['enumValues'];\n\t\tidentity: T extends { identity: infer U } ? U : unknown;\n\t\tgenerated: T extends { generated: infer G } ? G extends undefined ? unknown : G : unknown;\n\t}\n\t& TTypeConfig\n>;\n\nexport type ColumnBuilderRuntimeConfig<TData, TRuntimeConfig extends object = object> = {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n} & TRuntimeConfig;\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t};\n};\n\nexport type IsAutoincrement<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T extends ColumnBuilderBase, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T extends ColumnBuilderBase, TGenerated extends {} = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<\n\tT extends ColumnBuilderBase,\n\tTType extends 'always' | 'byDefault',\n> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\nexport interface ColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> {\n\t_: ColumnBuilderTypeConfig<T, TTypeConfig>;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T, TTypeConfig> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: ColumnBuilderTypeConfig<T, TTypeConfig>;\n\n\tprotected config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t: IsPrimaryKey<NotNull<this>>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t\t: IsPrimaryKey<NotNull<this>>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<\n\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t{},\n\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t>\n\t: TDialect extends 'mysql' ? MySqlColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'mysqlColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'common' ? Column<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'singlestoreColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'gel' ? GelColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<TTableName, {\n\t\t\t_:\n\t\t\t\t& Omit<TConfigMap[Key]['_'], 'name'>\n\t\t\t\t& { name: TConfigMap[Key]['_']['name'] extends '' ? Assume<Key, string> : TConfigMap[Key]['_']['name'] };\n\t\t}, TDialect>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<TColumn extends Column, TAlias extends string, TDialect extends Dialect> =\n\tTDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: never;\n", "/** @internal */\nexport const TableName = Symbol.for('drizzle:Name');\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: PgColumn[];\n\treadonly foreignTable: PgTable;\n\treadonly foreignColumns: PgColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgForeignKeyBuilder';\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined = 'no action';\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined = 'no action';\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: PgColumn[];\n\t\t\tforeignColumns: PgColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as PgTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport type AnyForeignKeyBuilder = ForeignKeyBuilder;\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'PgForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(readonly table: PgTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends PgColumn[],\n> = { [Key in keyof TColumns]: AnyPgColumn<{ tableName: TTableName }> };\n\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnyPgColumn<{ tableName: TTableName }>, ...AnyPgColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tconst { name, columns, foreignColumns } = config;\n\t\treturn {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tforeignColumns,\n\t\t};\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n", "export function iife<T extends unknown[], U>(fn: (...args: T) => U, ...args: T): U {\n\treturn fn(...args);\n}\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { PgColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport function unique(name?: string): UniqueOnConstraintBuilder {\n\treturn new UniqueOnConstraintBuilder(name);\n}\n\nexport function uniqueKeyName(table: PgTable, columns: string[]) {\n\treturn `${table[TableName]}_${columns.join('_')}_unique`;\n}\n\nexport class UniqueConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'PgUniqueConstraintBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\t/** @internal */\n\tnullsNotDistinctConfig = false;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tprivate name?: string,\n\t) {\n\t\tthis.columns = columns;\n\t}\n\n\tnullsNotDistinct() {\n\t\tthis.nullsNotDistinctConfig = true;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): UniqueConstraint {\n\t\treturn new UniqueConstraint(table, this.columns, this.nullsNotDistinctConfig, this.name);\n\t}\n}\n\nexport class UniqueOnConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'PgUniqueOnConstraintBuilder';\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tname?: string,\n\t) {\n\t\tthis.name = name;\n\t}\n\n\ton(...columns: [PgColumn, ...PgColumn[]]) {\n\t\treturn new UniqueConstraintBuilder(columns, this.name);\n\t}\n}\n\nexport class UniqueConstraint {\n\tstatic readonly [entityKind]: string = 'PgUniqueConstraint';\n\n\treadonly columns: PgColumn[];\n\treadonly name?: string;\n\treadonly nullsNotDistinct: boolean = false;\n\n\tconstructor(readonly table: PgTable, columns: PgColumn[], nullsNotDistinct: boolean, name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));\n\t\tthis.nullsNotDistinct = nullsNotDistinct;\n\t}\n\n\tgetName() {\n\t\treturn this.name;\n\t}\n}\n", "function parsePgArrayValue(arrayString: string, startFrom: number, inQuotes: boolean): [string, number] {\n\tfor (let i = startFrom; i < arrayString.length; i++) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === '\\\\') {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i + 1];\n\t\t}\n\n\t\tif (inQuotes) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === ',' || char === '}') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i];\n\t\t}\n\t}\n\n\treturn [arrayString.slice(startFrom).replace(/\\\\/g, ''), arrayString.length];\n}\n\nexport function parsePgNestedArray(arrayString: string, startFrom = 0): [any[], number] {\n\tconst result: any[] = [];\n\tlet i = startFrom;\n\tlet lastCharIsComma = false;\n\n\twhile (i < arrayString.length) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === ',') {\n\t\t\tif (lastCharIsComma || i === startFrom) {\n\t\t\t\tresult.push('');\n\t\t\t}\n\t\t\tlastCharIsComma = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tlastCharIsComma = false;\n\n\t\tif (char === '\\\\') {\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\tconst [value, startFrom] = parsePgArrayValue(arrayString, i + 1, true);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '}') {\n\t\t\treturn [result, i + 1];\n\t\t}\n\n\t\tif (char === '{') {\n\t\t\tconst [value, startFrom] = parsePgNestedArray(arrayString, i + 1);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [value, newStartFrom] = parsePgArrayValue(arrayString, i, false);\n\t\tresult.push(value);\n\t\ti = newStartFrom;\n\t}\n\n\treturn [result, i];\n}\n\nexport function parsePgArray(arrayString: string): any[] {\n\tconst [result] = parsePgNestedArray(arrayString, 1);\n\treturn result;\n}\n\nexport function makePgArray(array: any[]): string {\n\treturn `{${\n\t\tarray.map((item) => {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\treturn makePgArray(item);\n\t\t\t}\n\n\t\t\tif (typeof item === 'string') {\n\t\t\t\treturn `\"${item.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n\t\t\t}\n\n\t\t\treturn `${item}`;\n\t\t}).join(',')\n\t}}`;\n}\n", "import type {\n\tColumnBuilderBase,\n\tColumnBuilderBaseConfig,\n\tColumnBuilderExtraConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasGenerated,\n\tMakeColumnConfig,\n} from '~/column-builder.ts';\nimport { ColumnBuilder } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Simplify, Update } from '~/utils.ts';\n\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\nimport { uniqueKeyName } from '../unique-constraint.ts';\nimport { makePgArray, parsePgArray } from '../utils/array.ts';\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tactions: {\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport interface PgColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'pg' }> {}\n\nexport abstract class PgColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }, TExtraConfig>\n\timplements PgColumnBuilderBase<T, TTypeConfig>\n{\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tstatic override readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tarray<TSize extends number | undefined = undefined>(size?: TSize): PgArrayBuilder<\n\t\t& {\n\t\t\tname: T['name'];\n\t\t\tdataType: 'array';\n\t\t\tcolumnType: 'PgArray';\n\t\t\tdata: T['data'][];\n\t\t\tdriverParam: T['driverParam'][] | string;\n\t\t\tenumValues: T['enumValues'];\n\t\t\tsize: TSize;\n\t\t\tbaseBuilder: T;\n\t\t}\n\t\t& (T extends { notNull: true } ? { notNull: true } : {})\n\t\t& (T extends { hasDefault: true } ? { hasDefault: true } : {}),\n\t\tT\n\t> {\n\t\treturn new PgArrayBuilder(this.config.name, this as PgColumnBuilder<any, any>, size as any);\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tactions: ReferenceConfig['actions'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, actions });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(as: SQL | T['data'] | (() => SQL)): HasGenerated<this, {\n\t\ttype: 'always';\n\t}> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as HasGenerated<this, {\n\t\t\ttype: 'always';\n\t\t}>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, actions }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, actions) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (actions.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(actions.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (actions.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(actions.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tactions,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgColumn<MakeColumnConfig<T, TTableName>>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, this.config);\n\t}\n}\n\n// To understand how to use `PgColumn` and `PgColumn`, see `Column` and `AnyColumn` documentation.\nexport abstract class PgColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = {},\n\tTTypeConfig extends object = {},\n> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\tconstructor(\n\t\toverride readonly table: PgTable,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tif (!config.uniqueName) {\n\t\t\tconfig.uniqueName = uniqueKeyName(table, [config.name]);\n\t\t}\n\t\tsuper(table, config);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n> extends PgColumn<T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string | undefined,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string | undefined;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = PgColumn<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type PgArrayColumnBuilderBaseConfig = ColumnBuilderBaseConfig<'array', 'PgArray'> & {\n\tsize: number | undefined;\n\tbaseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;\n};\n\nexport class PgArrayBuilder<\n\tT extends PgArrayColumnBuilderBaseConfig,\n\tTBase extends ColumnBuilderBaseConfig<ColumnDataType, string> | PgArrayColumnBuilderBaseConfig,\n> extends PgColumnBuilder<\n\tT,\n\t{\n\t\tbaseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<\n\t\t\t\tTBase,\n\t\t\t\tTBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder\n\t\t\t\t\t: never\n\t\t\t>\n\t\t\t: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;\n\t\tsize: T['size'];\n\t},\n\t{\n\t\tbaseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<\n\t\t\t\tTBase,\n\t\t\t\tTBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder\n\t\t\t\t\t: never\n\t\t\t>\n\t\t\t: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;\n\t\tsize: T['size'];\n\t}\n> {\n\tstatic override readonly [entityKind] = 'PgArrayBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\tbaseBuilder: PgArrayBuilder<T, TBase>['config']['baseBuilder'],\n\t\tsize: T['size'],\n\t) {\n\t\tsuper(name, 'array', 'PgArray');\n\t\tthis.config.baseBuilder = baseBuilder;\n\t\tthis.config.size = size;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase> {\n\t\tconst baseColumn = this.config.baseBuilder.build(table);\n\t\treturn new PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase>(\n\t\t\ttable as AnyPgTable<{ name: MakeColumnConfig<T, TTableName>['tableName'] }>,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t\tbaseColumn,\n\t\t);\n\t}\n}\n\nexport class PgArray<\n\tT extends ColumnBaseConfig<'array', 'PgArray'> & {\n\t\tsize: number | undefined;\n\t\tbaseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;\n\t},\n\tTBase extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n> extends PgColumn<T, {}, { size: T['size']; baseBuilder: T['baseBuilder'] }> {\n\treadonly size: T['size'];\n\n\tstatic override readonly [entityKind]: string = 'PgArray';\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgArrayBuilder<T, TBase>['config'],\n\t\treadonly baseColumn: PgColumn,\n\t\treadonly range?: [number | undefined, number | undefined],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.size = config.size;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `${this.baseColumn.getSQLType()}[${typeof this.size === 'number' ? this.size : ''}]`;\n\t}\n\n\toverride mapFromDriverValue(value: unknown[] | string): T['data'] {\n\t\tif (typeof value === 'string') {\n\t\t\t// Thank you node-postgres for not parsing enum arrays\n\t\t\tvalue = parsePgArray(value);\n\t\t}\n\t\treturn value.map((v) => this.baseColumn.mapFromDriverValue(v));\n\t}\n\n\toverride mapToDriverValue(value: unknown[], isNestedArray = false): unknown[] | string {\n\t\tconst a = value.map((v) =>\n\t\t\tv === null\n\t\t\t\t? null\n\t\t\t\t: is(this.baseColumn, PgArray)\n\t\t\t\t? this.baseColumn.mapToDriverValue(v as unknown[], true)\n\t\t\t\t: this.baseColumn.mapToDriverValue(v)\n\t\t);\n\t\tif (isNestedArray) return a;\n\t\treturn makePgArray(a);\n\t}\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport type { NonArray, Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\n// Enum as ts enum\n\nexport type PgEnumObjectColumnBuilderInitial<TName extends string, TValues extends object> = PgEnumObjectColumnBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgEnumObjectColumn';\n\tdata: TValues[keyof TValues];\n\tenumValues: string[];\n\tdriverParam: string;\n}>;\n\nexport interface PgEnumObject<TValues extends object> {\n\t(): PgEnumObjectColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: string[];\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport class PgEnumObjectColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: string[] },\n> extends PgColumnBuilder<T, { enum: PgEnumObject<any> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnumObject<any>) {\n\t\tsuper(name, 'string', 'PgEnumObjectColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumObjectColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumObjectColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumObjectColumn<T extends ColumnBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: object }>\n\textends PgColumn<T, { enum: PgEnumObject<object> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumn';\n\n\treadonly enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumObjectColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\n// Enum as string union\n\nexport type PgEnumColumnBuilderInitial<TName extends string, TValues extends [string, ...string[]]> =\n\tPgEnumColumnBuilder<{\n\t\tname: TName;\n\t\tdataType: 'string';\n\t\tcolumnType: 'PgEnumColumn';\n\t\tdata: TValues[number];\n\t\tenumValues: TValues;\n\t\tdriverParam: string;\n\t}>;\n\nconst isPgEnumSym = Symbol.for('drizzle:isPgEnum');\nexport interface PgEnum<TValues extends [string, ...string[]]> {\n\t(): PgEnumColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: TValues;\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport function isPgEnum(obj: unknown): obj is PgEnum<[string, ...string[]]> {\n\treturn !!obj && typeof obj === 'function' && isPgEnumSym in obj && obj[isPgEnumSym] === true;\n}\n\nexport class PgEnumColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] },\n> extends PgColumnBuilder<T, { enum: PgEnum<T['enumValues']> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnum<T['enumValues']>) {\n\t\tsuper(name, 'string', 'PgEnumColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumColumn<T extends ColumnBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] }>\n\textends PgColumn<T, { enum: PgEnum<T['enumValues']> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumColumn';\n\n\treadonly enum = this.config.enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\nexport function pgEnum<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n): PgEnum<Writable<T>>;\n\nexport function pgEnum<E extends Record<string, string>>(\n\tenumName: string,\n\tenumObj: NonArray<E>,\n): PgEnumObject<E>;\n\nexport function pgEnum(\n\tenumName: any,\n\tinput: any,\n): any {\n\treturn Array.isArray(input)\n\t\t? pgEnumWithSchema(enumName, [...input] as [string, ...string[]], undefined)\n\t\t: pgEnumObjectWithSchema(enumName, input, undefined);\n}\n\n/** @internal */\nexport function pgEnumWithSchema<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n\tschema?: string,\n): PgEnum<Writable<T>> {\n\tconst enumInstance: PgEnum<Writable<T>> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, Writable<T>> =>\n\t\t\tnew PgEnumColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: values,\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n\n/** @internal */\nexport function pgEnumObjectWithSchema<T extends object>(\n\tenumName: string,\n\tvalues: T,\n\tschema?: string,\n): PgEnumObject<T> {\n\tconst enumInstance: PgEnumObject<T> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, T> =>\n\t\t\tnew PgEnumObjectColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: Object.values(values),\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n", "import { entityKind } from './entity.ts';\nimport type { SQL, SQLWrapper } from './sql/sql.ts';\n\nexport interface Subquery<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTAlias extends string = string,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\nexport class Subquery<\n\tTAlias extends string = string,\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Subquery';\n\n\tdeclare _: {\n\t\tbrand: 'Subquery';\n\t\tsql: SQL;\n\t\tselectedFields: TSelectedFields;\n\t\talias: TAlias;\n\t\tisWith: boolean;\n\t\tusedTables?: string[];\n\t};\n\n\tconstructor(sql: SQL, fields: TSelectedFields, alias: string, isWith = false, usedTables: string[] = []) {\n\t\tthis._ = {\n\t\t\tbrand: 'Subquery',\n\t\t\tsql,\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\talias: alias as TAlias,\n\t\t\tisWith,\n\t\t\tusedTables,\n\t\t};\n\t}\n\n\t// getSQL(): SQL<unknown> {\n\t// \treturn new SQL([this]);\n\t// }\n}\n\nexport class WithSubquery<\n\tTAlias extends string = string,\n\tTSelection extends Record<string, unknown> = Record<string, unknown>,\n> extends Subquery<TAlias, TSelection> {\n\tstatic override readonly [entityKind]: string = 'WithSubquery';\n}\n\nexport type WithSubqueryWithoutSelection<TAlias extends string> = WithSubquery<TAlias, {}>;\n", "// package.json\nvar version = \"0.45.1\";\n\n// src/version.ts\nvar compatibilityVersion = 10;\nexport {\n compatibilityVersion,\n version as npmVersion\n};\n", "import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined;\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n", "export const ViewBaseConfig = Symbol.for('drizzle:ViewBaseConfig');\n", "import type { Column, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { SQLWrapper } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumn extends Column = Column<any>> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: Record<string, TColumn>;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const Schema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const Columns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface Table<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends TableConfig = TableConfig,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n\nexport class Table<T extends TableConfig = TableConfig> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: {\n\t\treadonly brand: 'Table';\n\t\treadonly config: T;\n\t\treadonly name: T['name'];\n\t\treadonly schema: T['schema'];\n\t\treadonly columns: T['columns'];\n\t\treadonly inferSelect: InferSelectModel<Table<T>>;\n\t\treadonly inferInsert: InferInsertModel<Table<T>>;\n\t};\n\n\tdeclare readonly $inferSelect: InferSelectModel<Table<T>>;\n\tdeclare readonly $inferInsert: InferInsertModel<Table<T>>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: Schema as typeof Schema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: Columns as typeof Columns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[Schema]: string | undefined;\n\n\t/** @internal */\n\t[Columns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[Schema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<T extends Table>(table: T): `${T['_']['schema']}.${T['_']['name']}` {\n\treturn `${table[Schema] ?? 'public'}.${table[TableName]}`;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Record<string, Column>,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string as MapColumnName<\n\t\t\t\t\tKey,\n\t\t\t\t\tTColumns[Key],\n\t\t\t\t\tTConfig['dbColumnNames']\n\t\t\t\t>\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode, TConfig>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'select', TConfig>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TConfig>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n", "import type { CasingCache } from '~/casing.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { isPgEnum } from '~/pg-core/columns/enum.ts';\nimport type { SelectResult } from '~/query-builders/select.types.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { Assume, Equal } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { AnyColumn } from '../column.ts';\nimport { Column } from '../column.ts';\nimport { IsAlias, Table } from '../table.ts';\n\n/**\n * This class is used to indicate a primitive param value that is used in `sql` tag.\n * It is only used on type level and is never instantiated at runtime.\n * If you see a value of this type in the code, its runtime value is actually the primitive param value.\n */\nexport class FakePrimitiveParam {\n\tstatic readonly [entityKind]: string = 'FakePrimitiveParam';\n}\n\nexport type Chunk =\n\t| string\n\t| Table\n\t| View\n\t| AnyColumn\n\t| Name\n\t| Param\n\t| Placeholder\n\t| SQL;\n\nexport interface BuildQueryConfig {\n\tcasing: CasingCache;\n\tescapeName(name: string): string;\n\tescapeParam(num: number, value: unknown): string;\n\tescapeString(str: string): string;\n\tprepareTyping?: (encoder: DriverValueEncoder<unknown, unknown>) => QueryTypingsValue;\n\tparamStartIndex?: { value: number };\n\tinlineParams?: boolean;\n\tinvokeSource?: 'indexes' | undefined;\n}\n\nexport type QueryTypingsValue = 'json' | 'decimal' | 'time' | 'timestamp' | 'uuid' | 'date' | 'none';\n\nexport interface Query {\n\tsql: string;\n\tparams: unknown[];\n}\n\nexport interface QueryWithTypings extends Query {\n\ttypings?: QueryTypingsValue[];\n}\n\n/**\n * Any value that implements the `getSQL` method. The implementations include:\n * - `Table`\n * - `Column`\n * - `View`\n * - `Subquery`\n * - `SQL`\n * - `SQL.Aliased`\n * - `Placeholder`\n * - `Param`\n */\nexport interface SQLWrapper {\n\tgetSQL(): SQL;\n\tshouldOmitSQLParens?(): boolean;\n}\n\nexport function isSQLWrapper(value: unknown): value is SQLWrapper {\n\treturn value !== null && value !== undefined && typeof (value as any).getSQL === 'function';\n}\n\nfunction mergeQueries(queries: QueryWithTypings[]): QueryWithTypings {\n\tconst result: QueryWithTypings = { sql: '', params: [] };\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t\tif (query.typings?.length) {\n\t\t\tif (!result.typings) {\n\t\t\t\tresult.typings = [];\n\t\t\t}\n\t\t\tresult.typings.push(...query.typings);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport class StringChunk implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'StringChunk';\n\n\treadonly value: string[];\n\n\tconstructor(value: string | string[]) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport class SQL<T = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'SQL';\n\n\tdeclare _: {\n\t\tbrand: 'SQL';\n\t\ttype: T;\n\t};\n\n\t/** @internal */\n\tdecoder: DriverValueDecoder<T, any> = noopDecoder;\n\tprivate shouldInlineParams = false;\n\n\t/** @internal */\n\tusedTables: string[] = [];\n\n\tconstructor(readonly queryChunks: SQLChunk[]) {\n\t\tfor (const chunk of queryChunks) {\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\n\t\t\t\tthis.usedTables.push(\n\t\t\t\t\tschemaName === undefined\n\t\t\t\t\t\t? chunk[Table.Symbol.Name]\n\t\t\t\t\t\t: schemaName + '.' + chunk[Table.Symbol.Name],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tappend(query: SQL): this {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\n\ttoQuery(config: BuildQueryConfig): QueryWithTypings {\n\t\treturn tracer.startActiveSpan('drizzle.buildSQL', (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': query.sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(query.params),\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\n\tbuildQueryFromSourceParams(chunks: SQLChunk[], _config: BuildQueryConfig): Query {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 },\n\t\t});\n\n\t\tconst {\n\t\t\tcasing,\n\t\t\tescapeName,\n\t\t\tescapeParam,\n\t\t\tprepareTyping,\n\t\t\tinlineParams,\n\t\t\tparamStartIndex,\n\t\t} = config;\n\n\t\treturn mergeQueries(chunks.map((chunk): QueryWithTypings => {\n\t\t\tif (is(chunk, StringChunk)) {\n\t\t\t\treturn { sql: chunk.value.join(''), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Name)) {\n\t\t\t\treturn { sql: escapeName(chunk.value), params: [] };\n\t\t\t}\n\n\t\t\tif (chunk === undefined) {\n\t\t\t\treturn { sql: '', params: [] };\n\t\t\t}\n\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result: SQLChunk[] = [new StringChunk('(')];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) {\n\t\t\t\t\t\tresult.push(new StringChunk(', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(')'));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL)) {\n\t\t\t\treturn this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t\t...config,\n\t\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[IsAlias]\n\t\t\t\t\t\t? escapeName(tableName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(tableName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = casing.getColumnCasing(chunk);\n\t\t\t\tif (_config.invokeSource === 'indexes') {\n\t\t\t\t\treturn { sql: escapeName(columnName), params: [] };\n\t\t\t\t}\n\n\t\t\t\tconst schemaName = chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.table[IsAlias] || schemaName === undefined\n\t\t\t\t\t\t? escapeName(chunk.table[Table.Symbol.Name]) + '.' + escapeName(columnName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(chunk.table[Table.Symbol.Name]) + '.'\n\t\t\t\t\t\t\t+ escapeName(columnName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[ViewBaseConfig].isAlias\n\t\t\t\t\t\t? escapeName(viewName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(viewName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t\t}\n\n\t\t\t\tconst mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);\n\n\t\t\t\tif (is(mappedValue, SQL)) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t}\n\n\t\t\t\tif (inlineParams) {\n\t\t\t\t\treturn { sql: this.mapInlineParam(mappedValue, config), params: [] };\n\t\t\t\t}\n\n\t\t\t\tlet typings: QueryTypingsValue[] = ['none'];\n\t\t\t\tif (prepareTyping) {\n\t\t\t\t\ttypings = [prepareTyping(chunk.encoder)];\n\t\t\t\t}\n\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, mappedValue), params: [mappedValue], typings };\n\t\t\t}\n\n\t\t\tif (is(chunk, Placeholder)) {\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== undefined) {\n\t\t\t\treturn { sql: escapeName(chunk.fieldAlias), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) {\n\t\t\t\t\treturn { sql: escapeName(chunk._.alias), params: [] };\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(') '),\n\t\t\t\t\tnew Name(chunk._.alias),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (isPgEnum(chunk)) {\n\t\t\t\tif (chunk.schema) {\n\t\t\t\t\treturn { sql: escapeName(chunk.schema) + '.' + escapeName(chunk.enumName), params: [] };\n\t\t\t\t}\n\t\t\t\treturn { sql: escapeName(chunk.enumName), params: [] };\n\t\t\t}\n\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(')'),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (inlineParams) {\n\t\t\t\treturn { sql: this.mapInlineParam(chunk, config), params: [] };\n\t\t\t}\n\n\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t}));\n\t}\n\n\tprivate mapInlineParam(\n\t\tchunk: unknown,\n\t\t{ escapeString }: BuildQueryConfig,\n\t): string {\n\t\tif (chunk === null) {\n\t\t\treturn 'null';\n\t\t}\n\t\tif (typeof chunk === 'number' || typeof chunk === 'boolean') {\n\t\t\treturn chunk.toString();\n\t\t}\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn escapeString(chunk);\n\t\t}\n\t\tif (typeof chunk === 'object') {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === '[object Object]') {\n\t\t\t\treturn escapeString(JSON.stringify(chunk));\n\t\t\t}\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error('Unexpected param value: ' + chunk);\n\t}\n\n\tgetSQL(): SQL {\n\t\treturn this;\n\t}\n\n\tas(alias: string): SQL.Aliased<T>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(): SQL<TData>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(alias: string): SQL.Aliased<TData>;\n\tas(alias?: string): SQL<T> | SQL.Aliased<T> {\n\t\t// TODO: remove with deprecated overloads\n\t\tif (alias === undefined) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\n\tmapWith<\n\t\tTDecoder extends\n\t\t\t| DriverValueDecoder<any, any>\n\t\t\t| DriverValueDecoder<any, any>['mapFromDriverValue'],\n\t>(decoder: TDecoder): SQL<GetDecoderResult<TDecoder>> {\n\t\tthis.decoder = typeof decoder === 'function' ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this as SQL<GetDecoderResult<TDecoder>>;\n\t}\n\n\tinlineParams(): this {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * This method is used to conditionally include a part of the query.\n\t *\n\t * @param condition - Condition to check\n\t * @returns itself if the condition is `true`, otherwise `undefined`\n\t */\n\tif(condition: any | undefined): this | undefined {\n\t\treturn condition ? this : undefined;\n\t}\n}\n\nexport type GetDecoderResult<T> = T extends Column ? T['_']['data'] : T extends\n\t| DriverValueDecoder<infer TData, any>\n\t| DriverValueDecoder<infer TData, any>['mapFromDriverValue'] ? TData\n: never;\n\n/**\n * Any DB name (table, column, index etc.)\n */\nexport class Name implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Name';\n\n\tprotected brand!: 'Name';\n\n\tconstructor(readonly value: string) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/**\n * Any DB name (table, column, index etc.)\n * @deprecated Use `sql.identifier` instead.\n */\nexport function name(value: string): Name {\n\treturn new Name(value);\n}\n\nexport interface DriverValueDecoder<TData, TDriverParam> {\n\tmapFromDriverValue(value: TDriverParam): TData;\n}\n\nexport interface DriverValueEncoder<TData, TDriverParam> {\n\tmapToDriverValue(value: TData): TDriverParam | SQL;\n}\n\nexport function isDriverValueEncoder(value: unknown): value is DriverValueEncoder<any, any> {\n\treturn typeof value === 'object' && value !== null && 'mapToDriverValue' in value\n\t\t&& typeof (value as any).mapToDriverValue === 'function';\n}\n\nexport const noopDecoder: DriverValueDecoder<any, any> = {\n\tmapFromDriverValue: (value) => value,\n};\n\nexport const noopEncoder: DriverValueEncoder<any, any> = {\n\tmapToDriverValue: (value) => value,\n};\n\nexport interface DriverValueMapper<TData, TDriverParam>\n\textends DriverValueDecoder<TData, TDriverParam>, DriverValueEncoder<TData, TDriverParam>\n{}\n\nexport const noopMapper: DriverValueMapper<any, any> = {\n\t...noopDecoder,\n\t...noopEncoder,\n};\n\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nexport class Param<TDataType = unknown, TDriverParamType = TDataType> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Param';\n\n\tprotected brand!: 'BoundParamValue';\n\n\t/**\n\t * @param value - Parameter value\n\t * @param encoder - Encoder to convert the value to a driver parameter\n\t */\n\tconstructor(\n\t\treadonly value: TDataType,\n\t\treadonly encoder: DriverValueEncoder<TDataType, TDriverParamType> = noopEncoder,\n\t) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.param` instead. */\nexport function param<TData, TDriver>(\n\tvalue: TData,\n\tencoder?: DriverValueEncoder<TData, TDriver>,\n): Param<TData, TDriver> {\n\treturn new Param(value, encoder);\n}\n\n/**\n * Anything that can be passed to the `` sql`...` `` tagged function.\n */\nexport type SQLChunk =\n\t| StringChunk\n\t| SQLChunk[]\n\t| SQLWrapper\n\t| SQL\n\t| Table\n\t| View\n\t| Subquery\n\t| AnyColumn\n\t| Param\n\t| Name\n\t| undefined\n\t| FakePrimitiveParam\n\t| Placeholder;\n\nexport function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQL<T>;\n/*\n\tThe type of `params` is specified as `SQLChunk[]`, but that's slightly incorrect -\n\tin runtime, users won't pass `FakePrimitiveParam` instances as `params` - they will pass primitive values\n\twhich will be wrapped in `Param`. That's why the overload specifies `params` as `any[]` and not as `SQLSourceParam[]`.\n\tThis type is used to make our lives easier and the type checker happy.\n*/\nexport function sql(strings: TemplateStringsArray, ...params: SQLChunk[]): SQL {\n\tconst queryChunks: SQLChunk[] = [];\n\tif (params.length > 0 || (strings.length > 0 && strings[0] !== '')) {\n\t\tqueryChunks.push(new StringChunk(strings[0]!));\n\t}\n\tfor (const [paramIndex, param] of params.entries()) {\n\t\tqueryChunks.push(param, new StringChunk(strings[paramIndex + 1]!));\n\t}\n\n\treturn new SQL(queryChunks);\n}\n\nexport namespace sql {\n\texport function empty(): SQL {\n\t\treturn new SQL([]);\n\t}\n\n\t/** @deprecated - use `sql.join()` */\n\texport function fromList(list: SQLChunk[]): SQL {\n\t\treturn new SQL(list);\n\t}\n\n\t/**\n\t * Convenience function to create an SQL query from a raw string.\n\t * @param str The raw SQL query string.\n\t */\n\texport function raw(str: string): SQL {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\n\t/**\n\t * Join a list of SQL chunks with a separator.\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`]);\n\t * // sql`abc`\n\t * ```\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`], sql`, `);\n\t * // sql`a, b, c`\n\t * ```\n\t */\n\texport function join(chunks: SQLChunk[], separator?: SQLChunk): SQL {\n\t\tconst result: SQLChunk[] = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== undefined) {\n\t\t\t\tresult.push(separator);\n\t\t\t}\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\n\t/**\n\t * Create a SQL chunk that represents a DB identifier (table, column, index etc.).\n\t * When used in a query, the identifier will be escaped based on the DB engine.\n\t * For example, in PostgreSQL, identifiers are escaped with double quotes.\n\t *\n\t * **WARNING: This function does not offer any protection against SQL injections, so you must validate any user input beforehand.**\n\t *\n\t * @example ```ts\n\t * const query = sql`SELECT * FROM ${sql.identifier('my-table')}`;\n\t * // 'SELECT * FROM \"my-table\"'\n\t * ```\n\t */\n\texport function identifier(value: string): Name {\n\t\treturn new Name(value);\n\t}\n\n\texport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\t\treturn new Placeholder(name);\n\t}\n\n\texport function param<TData, TDriver>(\n\t\tvalue: TData,\n\t\tencoder?: DriverValueEncoder<TData, TDriver>,\n\t): Param<TData, TDriver> {\n\t\treturn new Param(value, encoder);\n\t}\n}\n\nexport namespace SQL {\n\texport class Aliased<T = unknown> implements SQLWrapper {\n\t\tstatic readonly [entityKind]: string = 'SQL.Aliased';\n\n\t\tdeclare _: {\n\t\t\tbrand: 'SQL.Aliased';\n\t\t\ttype: T;\n\t\t};\n\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\n\t\tconstructor(\n\t\t\treadonly sql: SQL,\n\t\t\treadonly fieldAlias: string,\n\t\t) {}\n\n\t\tgetSQL(): SQL {\n\t\t\treturn this.sql;\n\t\t}\n\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased(this.sql, this.fieldAlias);\n\t\t}\n\t}\n}\n\nexport class Placeholder<TName extends string = string, TValue = any> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Placeholder';\n\n\tdeclare protected: TValue;\n\n\tconstructor(readonly name: TName) {}\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.placeholder` instead. */\nexport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\treturn new Placeholder(name);\n}\n\nexport function fillPlaceholders(params: unknown[], values: Record<string, unknown>): unknown[] {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn values[p.name];\n\t\t}\n\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn p.encoder.mapToDriverValue(values[p.value.name]);\n\t\t}\n\n\t\treturn p;\n\t});\n}\n\nexport type ColumnsSelection = Record<string, unknown>;\n\nconst IsDrizzleView = Symbol.for('drizzle:IsDrizzleView');\n\nexport abstract class View<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'View';\n\n\tdeclare _: {\n\t\tbrand: 'View';\n\t\tviewBrand: string;\n\t\tname: TName;\n\t\texisting: TExisting;\n\t\tselectedFields: TSelection;\n\t};\n\n\t/** @internal */\n\t[ViewBaseConfig]: {\n\t\tname: TName;\n\t\toriginalName: TName;\n\t\tschema: string | undefined;\n\t\tselectedFields: ColumnsSelection;\n\t\tisExisting: TExisting;\n\t\tquery: TExisting extends true ? undefined : SQL;\n\t\tisAlias: boolean;\n\t};\n\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\n\tdeclare readonly $inferSelect: InferSelectViewModel<View<Assume<TName, string>, TExisting, TSelection>>;\n\n\tconstructor(\n\t\t{ name, schema, selectedFields, query }: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t},\n\t) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery: query as (TExisting extends true ? undefined : SQL),\n\t\t\tisExisting: !query as TExisting,\n\t\t\tisAlias: false,\n\t\t};\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport function isView(view: unknown): view is View {\n\treturn typeof view === 'object' && view !== null && IsDrizzleView in view;\n}\n\nexport function getViewName<T extends View>(view: T): T['_']['name'] {\n\treturn view[ViewBaseConfig].name;\n}\n\nexport type InferSelectViewModel<TView extends View> =\n\tEqual<TView['_']['selectedFields'], { [x: string]: unknown }> extends true ? { [x: string]: unknown }\n\t\t: SelectResult<\n\t\t\tTView['_']['selectedFields'],\n\t\t\t'single',\n\t\t\tRecord<TView['_']['name'], 'not-null'>\n\t\t>;\n\n// Defined separately from the Column class to resolve circular dependency\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Table class to resolve circular dependency\nTable.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Column class to resolve circular dependency\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n", "import type { Cache } from './cache/core/cache.ts';\nimport type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { is } from './entity.ts';\nimport type { Logger } from './logger.ts';\nimport type { SelectedFieldsOrdered } from './operations.ts';\nimport type { TableLike } from './query-builders/select.types.ts';\nimport { Param, SQL, View } from './sql/sql.ts';\nimport type { DriverValueDecoder } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { getTableName, Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\n/** @internal */\nexport function mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[],\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst newPath = pathPrefix ? [...pathPrefix, name] : [name];\n\t\tif (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\n}\n\nexport function haveSameKeys(left: Record<string, unknown>, right: Record<string, unknown>) {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const [index, key] of leftKeys.entries()) {\n\t\tif (key !== rightKeys[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @internal */\nexport function mapUpdateSet(table: Table, values: Record<string, unknown>): UpdateSet {\n\tconst entries: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\n}\n\nexport type UpdateSet = Record<string, SQL | Param | AnyColumn | null | undefined>;\n\nexport type OneOrMany<T> = T | T[];\n\nexport type Update<T, TUpdate> =\n\t& {\n\t\t[K in Exclude<keyof T, keyof TUpdate>]: T[K];\n\t}\n\t& TUpdate;\n\nexport type Simplify<T> =\n\t& {\n\t\t// @ts-ignore - \"Type parameter 'K' has a circular constraint\", not sure why\n\t\t[K in keyof T]: T[K];\n\t}\n\t& {};\n\nexport type Not<T extends boolean> = T extends true ? false : true;\n\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false\n\t: true;\n\nexport type SingleKeyObject<T, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: T;\n\nexport type FromSingleKeyObject<T, Result, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: Result;\n\nexport type SimplifyMappedType<T> = [T] extends [unknown] ? T : never;\n\nexport type ShallowRecord<K extends keyof any, T> = SimplifyMappedType<{ [P in K]: T }>;\n\nexport type Assume<T, U> = T extends U ? T : U;\n\nexport type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n\nexport interface DrizzleTypeError<T extends string> {\n\t$drizzleTypeError: T;\n}\n\nexport type ValueOrArray<T> = T | T[];\n\n/** @internal */\nexport function applyMixins(baseClass: any, extendedClasses: any[]) {\n\tfor (const extendedClass of extendedClasses) {\n\t\tfor (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {\n\t\t\tif (name === 'constructor') continue;\n\n\t\t\tObject.defineProperty(\n\t\t\t\tbaseClass.prototype,\n\t\t\t\tname,\n\t\t\t\tObject.getOwnPropertyDescriptor(extendedClass.prototype, name) || Object.create(null),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport type Or<T1, T2> = T1 extends true ? true : T2 extends true ? true : false;\n\nexport type IfThenElse<If, Then, Else> = If extends true ? Then : Else;\n\nexport type PromiseOf<T> = T extends Promise<infer U> ? U : T;\n\nexport type Writable<T> = {\n\t-readonly [P in keyof T]: T[P];\n};\n\nexport type NonArray<T> = T extends any[] ? never : T;\n\nexport function getTableColumns<T extends Table>(table: T): T['_']['columns'] {\n\treturn table[Table.Symbol.Columns];\n}\n\nexport function getViewSelectedFields<T extends View>(view: T): T['_']['selectedFields'] {\n\treturn view[ViewBaseConfig].selectedFields;\n}\n\n/** @internal */\nexport function getTableLikeName(table: TableLike): string | undefined {\n\treturn is(table, Subquery)\n\t\t? table._.alias\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].name\n\t\t: is(table, SQL)\n\t\t? undefined\n\t\t: table[Table.Symbol.IsAlias]\n\t\t? table[Table.Symbol.Name]\n\t\t: table[Table.Symbol.BaseName];\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyColumn<{ tableName: TForeignTableName }> };\n\nexport type Casing = 'snake_case' | 'camelCase';\n\nexport interface DrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> {\n\tlogger?: boolean | Logger;\n\tschema?: TSchema;\n\tcasing?: Casing;\n\tcache?: Cache;\n}\nexport type ValidateShape<T, ValidShape, TResult = T> = T extends ValidShape\n\t? Exclude<keyof T, keyof ValidShape> extends never ? TResult\n\t: DrizzleTypeError<\n\t\t`Invalid key(s): ${Exclude<(keyof T) & (string | number | bigint | boolean | null | undefined), keyof ValidShape>}`\n\t>\n\t: never;\n\nexport type KnownKeysOnly<T, U> = {\n\t[K in keyof T]: K extends keyof U ? T[K] : never;\n};\n\nexport type IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/** @internal */\nexport function getColumnNameAndConfig<\n\tTConfig extends Record<string, any> | undefined,\n>(a: string | TConfig | undefined, b: TConfig | undefined) {\n\treturn {\n\t\tname: typeof a === 'string' && a.length > 0 ? a : '' as string,\n\t\tconfig: typeof a === 'object' ? a : b as TConfig,\n\t};\n}\n\nexport type IfNotImported<T, Y, N> = unknown extends T ? Y : N;\n\nexport type ImportTypeError<TPackageName extends string> =\n\t`Please install \\`${TPackageName}\\` to allow Drizzle ORM to connect to the database`;\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends any\n\t? Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>\n\t: never;\n\ntype ExpectedConfigShape = {\n\tlogger?: boolean | {\n\t\tlogQuery(query: string, params: unknown[]): void;\n\t};\n\tschema?: Record<string, never>;\n\tcasing?: 'snake_case' | 'camelCase';\n};\n\n// If this errors, you must update config shape checker function with new config specs\nconst _: DrizzleConfig = {} as ExpectedConfigShape;\nconst __: ExpectedConfigShape = {} as DrizzleConfig;\n\nexport function isConfig(data: any): boolean {\n\tif (typeof data !== 'object' || data === null) return false;\n\n\tif (data.constructor.name !== 'Object') return false;\n\n\tif ('logger' in data) {\n\t\tconst type = typeof data['logger'];\n\t\tif (\n\t\t\ttype !== 'boolean' && (type !== 'object' || typeof data['logger']['logQuery'] !== 'function')\n\t\t\t&& type !== 'undefined'\n\t\t) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('schema' in data) {\n\t\tconst type = typeof data['schema'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== undefined) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('connection' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'string' && type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('client' in data) {\n\t\tconst type = typeof data['client'];\n\t\tif (type !== 'object' && type !== 'function' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif (Object.keys(data).length === 0) return true;\n\n\treturn false;\n}\n\nexport type NeonAuthToken = string | (() => string | Promise<string>);\n\nexport const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder();\n", "import { entityKind } from '~/entity.ts';\n\nexport interface Logger {\n\tlogQuery(query: string, params: unknown[]): void;\n}\n\nexport interface LogWriter {\n\twrite(message: string): void;\n}\n\nexport class ConsoleLogWriter implements LogWriter {\n\tstatic readonly [entityKind]: string = 'ConsoleLogWriter';\n\n\twrite(message: string) {\n\t\tconsole.log(message);\n\t}\n}\n\nexport class DefaultLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'DefaultLogger';\n\n\treadonly writer: LogWriter;\n\n\tconstructor(config?: { writer: LogWriter }) {\n\t\tthis.writer = config?.writer ?? new ConsoleLogWriter();\n\t}\n\n\tlogQuery(query: string, params: unknown[]): void {\n\t\tconst stringifiedParams = params.map((p) => {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(p);\n\t\t\t} catch {\n\t\t\t\treturn String(p);\n\t\t\t}\n\t\t});\n\t\tconst paramsStr = stringifiedParams.length ? ` -- params: [${stringifiedParams.join(', ')}]` : '';\n\t\tthis.writer.write(`Query: ${query}${paramsStr}`);\n\t}\n}\n\nexport class NoopLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'NoopLogger';\n\n\tlogQuery(): void {\n\t\t// noop\n\t}\n}\n", "import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type { ExtraConfigColumn, PgColumn, PgColumnBuilder, PgColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumn>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<T extends TableConfig> =\n\t& PgTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t}\n\t& {\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t});\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport const pgTable: PgTableFn = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport { PgTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnyPgColumn<{ tableName: TTableName }>,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\n\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKeyBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKey';\n\n\treadonly columns: AnyPgColumn<{}>[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: PgTable, columns: AnyPgColumn<{}>[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name ?? `${this.table[PgTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n", "import { type AnyColumn, Column, type GetColumnData } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tisDriverValueEncoder,\n\tisSQLWrapper,\n\tParam,\n\tPlaceholder,\n\tSQL,\n\tsql,\n\ttype SQLChunk,\n\ttype SQLWrapper,\n\tStringChunk,\n\tView,\n} from '../sql.ts';\n\nexport function bindIfParam(value: unknown, column: SQLWrapper): SQLChunk {\n\tif (\n\t\tisDriverValueEncoder(column)\n\t\t&& !isSQLWrapper(value)\n\t\t&& !is(value, Param)\n\t\t&& !is(value, Placeholder)\n\t\t&& !is(value, Column)\n\t\t&& !is(value, Table)\n\t\t&& !is(value, View)\n\t) {\n\t\treturn new Param(value, column);\n\t}\n\treturn value as SQLChunk;\n}\n\nexport interface BinaryOperator {\n\t<TColumn extends Column>(\n\t\tleft: TColumn,\n\t\tright: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\t): SQL;\n\t<T>(left: SQL.Aliased<T>, right: T | SQLWrapper): SQL;\n\t<T extends SQLWrapper>(\n\t\tleft: Exclude<T, SQL.Aliased | Column>,\n\t\tright: unknown,\n\t): SQL;\n}\n\n/**\n * Test that two values are equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is null, you may want to use\n * `isNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford\n * db.select().from(cars)\n * .where(eq(cars.make, 'Ford'))\n * ```\n *\n * @see isNull for a way to test equality to NULL.\n */\nexport const eq: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} = ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that two values are not equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is not null, you may want to use\n * `isNotNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars not made by Ford\n * db.select().from(cars)\n * .where(ne(cars.make, 'Ford'))\n * ```\n *\n * @see isNotNull for a way to test whether a value is not null.\n */\nexport const ne: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <> ${bindIfParam(right, left)}`;\n};\n\n/**\n * Combine a list of conditions with the `and` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * and(\n * eq(cars.make, 'Volvo'),\n * eq(cars.year, 1950),\n * )\n * )\n * ```\n */\nexport function and(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function and(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' and ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Combine a list of conditions with the `or` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * or(\n * eq(cars.make, 'GM'),\n * eq(cars.make, 'Ford'),\n * )\n * )\n * ```\n */\nexport function or(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function or(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' or ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Negate the meaning of an expression using the `not` keyword.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars _not_ made by GM or Ford.\n * db.select().from(cars)\n * .where(not(inArray(cars.make, ['GM', 'Ford'])))\n * ```\n */\nexport function not(condition: SQLWrapper): SQL {\n\treturn sql`not ${condition}`;\n}\n\n/**\n * Test that the first expression passed is greater than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made after 2000.\n * db.select().from(cars)\n * .where(gt(cars.year, 2000))\n * ```\n *\n * @see gte for greater-than-or-equal\n */\nexport const gt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} > ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is greater than\n * or equal to the second expression. Use `gt` to\n * test whether an expression is strictly greater\n * than another.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made on or after 2000.\n * db.select().from(cars)\n * .where(gte(cars.year, 2000))\n * ```\n *\n * @see gt for a strictly greater-than condition\n */\nexport const gte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} >= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lt(cars.year, 2000))\n * ```\n *\n * @see lte for less-than-or-equal\n */\nexport const lt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} < ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * or equal to the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lte(cars.year, 2000))\n * ```\n *\n * @see lt for a strictly less-than condition\n */\nexport const lte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value from a list passed as the second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford or GM.\n * db.select().from(cars)\n * .where(inArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see notInArray for the inverse of this test\n */\nexport function inArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function inArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: ReadonlyArray<GetColumnData<TColumn, 'raw'> | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray(\n\tcolumn: SQLWrapper,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`false`;\n\t\t}\n\t\treturn sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value that is not present in a list passed as the\n * second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by any company except Ford or GM.\n * db.select().from(cars)\n * .where(notInArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see inArray for the inverse of this test\n */\nexport function notInArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`true`;\n\t\t}\n\t\treturn sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} not in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether an expression is NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have no discontinuedAt date.\n * db.select().from(cars)\n * .where(isNull(cars.discontinuedAt))\n * ```\n *\n * @see isNotNull for the inverse of this test\n */\nexport function isNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is null`;\n}\n\n/**\n * Test whether an expression is not NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have been discontinued.\n * db.select().from(cars)\n * .where(isNotNull(cars.discontinuedAt))\n * ```\n *\n * @see isNull for the inverse of this test\n */\nexport function isNotNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is not null`;\n}\n\n/**\n * Test whether a subquery evaluates to have any rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column has a match in a cities\n * // table.\n * db\n * .select()\n * .from(users)\n * .where(\n * exists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see notExists for the inverse of this test\n */\nexport function exists(subquery: SQLWrapper): SQL {\n\treturn sql`exists ${subquery}`;\n}\n\n/**\n * Test whether a subquery doesn't include any result\n * rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column doesn't match\n * // a row in the cities table.\n * db\n * .select()\n * .from(users)\n * .where(\n * notExists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see exists for the inverse of this test\n */\nexport function notExists(subquery: SQLWrapper): SQL {\n\treturn sql`not exists ${subquery}`;\n}\n\n/**\n * Test whether an expression is between two values. This\n * is an easier way to express range tests, which would be\n * expressed mathematically as `x <= a <= y` but in SQL\n * would have to be like `a >= x AND a <= y`.\n *\n * Between is inclusive of the endpoints: if `column`\n * is equal to `min` or `max`, it will be TRUE.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made between 1990 and 2000\n * db.select().from(cars)\n * .where(between(cars.year, 1990, 2000))\n * ```\n *\n * @see notBetween for the inverse of this test\n */\nexport function between<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function between<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function between<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function between(column: SQLWrapper, min: unknown, max: unknown): SQL {\n\treturn sql`${column} between ${bindIfParam(min, column)} and ${\n\t\tbindIfParam(\n\t\t\tmax,\n\t\t\tcolumn,\n\t\t)\n\t}`;\n}\n\n/**\n * Test whether an expression is not between two values.\n *\n * This, like `between`, includes its endpoints, so if\n * the `column` is equal to `min` or `max`, in this case\n * it will evaluate to FALSE.\n *\n * ## Examples\n *\n * ```ts\n * // Exclude cars made in the 1970s\n * db.select().from(cars)\n * .where(notBetween(cars.year, 1970, 1979))\n * ```\n *\n * @see between for the inverse of this test\n */\nexport function notBetween<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function notBetween<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function notBetween<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function notBetween(\n\tcolumn: SQLWrapper,\n\tmin: unknown,\n\tmax: unknown,\n): SQL {\n\treturn sql`${column} not between ${\n\t\tbindIfParam(\n\t\t\tmin,\n\t\t\tcolumn,\n\t\t)\n\t} and ${bindIfParam(max, column)}`;\n}\n\n/**\n * Compare a column to a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(like(cars.name, '%Turbo%'))\n * ```\n *\n * @see ilike for a case-insensitive version of this condition\n */\nexport function like(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} like ${value}`;\n}\n\n/**\n * The inverse of like - this tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"ROver\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see like for the inverse condition\n * @see notIlike for a case-insensitive version of this condition\n */\nexport function notLike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not like ${value}`;\n}\n\n/**\n * Case-insensitively compare a column to a pattern,\n * which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * Unlike like, this performs a case-insensitive comparison.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(ilike(cars.name, '%Turbo%'))\n * ```\n *\n * @see like for a case-sensitive version of this condition\n */\nexport function ilike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} ilike ${value}`;\n}\n\n/**\n * The inverse of ilike - this case-insensitively tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"Rover\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see ilike for the inverse condition\n * @see notLike for a case-sensitive version of this condition\n */\nexport function notIlike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not ilike ${value}`;\n}\n\n/**\n * Test that a column or expression contains all elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\" and \"ORM\".\n * db.select().from(posts)\n * .where(arrayContains(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContained to find if an array contains all elements of a column or expression\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContains<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContains(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContains requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} @> ${array}`;\n\t}\n\n\treturn sql`${column} @> ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that the list passed as the second argument contains\n * all elements of a column or expression.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both,\n * // but filtering posts that have additional tags.\n * db.select().from(posts)\n * .where(arrayContained(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContained<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContained(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContained requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} <@ ${array}`;\n\t}\n\n\treturn sql`${column} <@ ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that a column or expression contains any elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both.\n * db.select().from(posts)\n * .where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayContained to find if an array contains all elements of a column or expression\n */\nexport function arrayOverlaps<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayOverlaps(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayOverlaps requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} && ${array}`;\n\t}\n\n\treturn sql`${column} && ${bindIfParam(values, column)}`;\n}\n", "import type { AnyColumn } from '../../column.ts';\nimport type { SQL, SQLWrapper } from '../sql.ts';\nimport { sql } from '../sql.ts';\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in ascending\n * order. By the SQL standard, ascending order is the\n * default, so it is not usually necessary to specify\n * ascending sort order.\n *\n * ## Examples\n *\n * ```ts\n * // Return cars, starting with the oldest models\n * // and going in ascending order to the newest.\n * db.select().from(cars)\n * .orderBy(asc(cars.year));\n * ```\n *\n * @see desc to sort in descending order\n */\nexport function asc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} asc`;\n}\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in descending\n * order.\n *\n * ## Examples\n *\n * ```ts\n * // Select users, with the most recently created\n * // records coming first.\n * db.select().from(users)\n * .orderBy(desc(users.createdAt));\n * ```\n *\n * @see asc to sort in ascending order\n */\nexport function desc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} desc`;\n}\n", "export * from './conditions.ts';\nexport * from './select.ts';\n", "import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n", "import type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport type { Relation } from './relations.ts';\nimport type { View } from './sql/sql.ts';\nimport { SQL, sql } from './sql/sql.ts';\nimport { Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class ColumnAliasProxyHandler<TColumn extends Column> implements ProxyHandler<TColumn> {\n\tstatic readonly [entityKind]: string = 'ColumnAliasProxyHandler';\n\n\tconstructor(private table: Table | View) {}\n\n\tget(columnObj: TColumn, prop: string | symbol): any {\n\t\tif (prop === 'table') {\n\t\t\treturn this.table;\n\t\t}\n\n\t\treturn columnObj[prop as keyof TColumn];\n\t}\n}\n\nexport class TableAliasProxyHandler<T extends Table | View> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'TableAliasProxyHandler';\n\n\tconstructor(private alias: string, private replaceOriginalName: boolean) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === Table.Symbol.IsAlias) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (prop === Table.Symbol.Name) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (this.replaceOriginalName && prop === Table.Symbol.OriginalName) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...target[ViewBaseConfig as keyof typeof target],\n\t\t\t\tname: this.alias,\n\t\t\t\tisAlias: true,\n\t\t\t};\n\t\t}\n\n\t\tif (prop === Table.Symbol.Columns) {\n\t\t\tconst columns = (target as Table)[Table.Symbol.Columns];\n\t\t\tif (!columns) {\n\t\t\t\treturn columns;\n\t\t\t}\n\n\t\t\tconst proxiedColumns: { [key: string]: any } = {};\n\n\t\t\tObject.keys(columns).map((key) => {\n\t\t\t\tproxiedColumns[key] = new Proxy(\n\t\t\t\t\tcolumns[key]!,\n\t\t\t\t\tnew ColumnAliasProxyHandler(new Proxy(target, this)),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn proxiedColumns;\n\t\t}\n\n\t\tconst value = target[prop as keyof typeof target];\n\t\tif (is(value, Column)) {\n\t\t\treturn new Proxy(value as AnyColumn, new ColumnAliasProxyHandler(new Proxy(target, this)));\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\nexport class RelationTableAliasProxyHandler<T extends Relation> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'RelationTableAliasProxyHandler';\n\n\tconstructor(private alias: string) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === 'sourceTable') {\n\t\t\treturn aliasedTable(target.sourceTable, this.alias);\n\t\t}\n\n\t\treturn target[prop as keyof typeof target];\n\t}\n}\n\nexport function aliasedTable<T extends Table | View>(\n\ttable: T,\n\ttableAlias: string,\n): T {\n\treturn new Proxy(table, new TableAliasProxyHandler(tableAlias, false)) as any;\n}\n\nexport function aliasedRelation<T extends Relation>(relation: T, tableAlias: string): T {\n\treturn new Proxy(relation, new RelationTableAliasProxyHandler(tableAlias));\n}\n\nexport function aliasedTableColumn<T extends AnyColumn>(column: T, tableAlias: string): T {\n\treturn new Proxy(\n\t\tcolumn,\n\t\tnew ColumnAliasProxyHandler(new Proxy(column.table, new TableAliasProxyHandler(tableAlias, false))),\n\t);\n}\n\nexport function mapColumnsInAliasedSQLToAlias(query: SQL.Aliased, alias: string): SQL.Aliased {\n\treturn new SQL.Aliased(mapColumnsInSQLToAlias(query.sql, alias), query.fieldAlias);\n}\n\nexport function mapColumnsInSQLToAlias(query: SQL, alias: string): SQL {\n\treturn sql.join(query.queryChunks.map((c) => {\n\t\tif (is(c, Column)) {\n\t\t\treturn aliasedTableColumn(c, alias);\n\t\t}\n\t\tif (is(c, SQL)) {\n\t\t\treturn mapColumnsInSQLToAlias(c, alias);\n\t\t}\n\t\tif (is(c, SQL.Aliased)) {\n\t\t\treturn mapColumnsInAliasedSQLToAlias(c, alias);\n\t\t}\n\t\treturn c;\n\t}));\n}\n", "import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class SelectionProxyHandler<T extends Subquery | Record<string, unknown> | View>\n\timplements ProxyHandler<Subquery | Record<string, unknown> | View>\n{\n\tstatic readonly [entityKind]: string = 'SelectionProxyHandler';\n\n\tprivate config: {\n\t\t/**\n\t\t * Table alias for the columns\n\t\t */\n\t\talias?: string;\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL.Aliased` and it's not a selection field (from a subquery)\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `alias` - return the field alias\n\t\t */\n\t\tsqlAliasedBehavior: 'sql' | 'alias';\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL` and it doesn't have an alias declared\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `error` - return a DrizzleTypeError on type level and throw an error on runtime\n\t\t */\n\t\tsqlBehavior: 'sql' | 'error';\n\n\t\t/**\n\t\t * Whether to replace the original name of the column with the alias\n\t\t * Should be set to `true` for views creation\n\t\t * @default false\n\t\t */\n\t\treplaceOriginalName?: boolean;\n\t};\n\n\tconstructor(config: SelectionProxyHandler<T>['config']) {\n\t\tthis.config = { ...config };\n\t}\n\n\tget(subquery: T, prop: string | symbol): any {\n\t\tif (prop === '_') {\n\t\t\treturn {\n\t\t\t\t...subquery['_' as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as Subquery)._.selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...subquery[ViewBaseConfig as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as View)[ViewBaseConfig].selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (typeof prop === 'symbol') {\n\t\t\treturn subquery[prop as keyof typeof subquery];\n\t\t}\n\n\t\tconst columns = is(subquery, Subquery)\n\t\t\t? subquery._.selectedFields\n\t\t\t: is(subquery, View)\n\t\t\t? subquery[ViewBaseConfig].selectedFields\n\t\t\t: subquery;\n\t\tconst value: unknown = columns[prop as keyof typeof columns];\n\n\t\tif (is(value, SQL.Aliased)) {\n\t\t\t// Never return the underlying SQL expression for a field previously selected in a subquery\n\t\t\tif (this.config.sqlAliasedBehavior === 'sql' && !value.isSelectionField) {\n\t\t\t\treturn value.sql;\n\t\t\t}\n\n\t\t\tconst newValue = value.clone();\n\t\t\tnewValue.isSelectionField = true;\n\t\t\treturn newValue;\n\t\t}\n\n\t\tif (is(value, SQL)) {\n\t\t\tif (this.config.sqlBehavior === 'sql') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`You tried to reference \"${prop}\" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using \".as('alias')\" method.`,\n\t\t\t);\n\t\t}\n\n\t\tif (is(value, Column)) {\n\t\t\tif (this.config.alias) {\n\t\t\t\treturn new Proxy(\n\t\t\t\t\tvalue,\n\t\t\t\t\tnew ColumnAliasProxyHandler(\n\t\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\t\tvalue.table,\n\t\t\t\t\t\t\tnew TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Proxy(value, new SelectionProxyHandler(this.config));\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport abstract class QueryPromise<T> implements Promise<T> {\n\tstatic readonly [entityKind]: string = 'QueryPromise';\n\n\t[Symbol.toStringTag] = 'QueryPromise';\n\n\tcatch<TResult = never>(\n\t\tonRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n\t): Promise<T | TResult> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<T> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n\n\tthen<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n\t\tonRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.execute().then(onFulfilled, onRejected);\n\t}\n\n\tabstract execute(): Promise<T>;\n}\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from './columns/index.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: SQLiteColumn[];\n\treadonly foreignTable: SQLiteTable;\n\treadonly foreignColumns: SQLiteColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKeyBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteForeignKeyBuilder';\n\t\tforeignTableName: 'TForeignTableName';\n\t};\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined;\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: SQLiteColumn[];\n\t\t\tforeignColumns: SQLiteColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as SQLiteTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(readonly table: SQLiteTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends SQLiteColumn[],\n> = { [Key in keyof TColumns]: AnySQLiteColumn<{ tableName: TTableName }> };\n\n/**\n * @deprecated please use `foreignKey({ columns: [], foreignColumns: [] })` syntax without callback\n * @param config\n * @returns\n */\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: () => {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey(\n\tconfig: any,\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tif (typeof config === 'function') {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tcolumns,\n\t\t\t\tforeignColumns,\n\t\t\t};\n\t\t}\n\t\treturn config;\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { SQLiteColumn } from './columns/common.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport function uniqueKeyName(table: SQLiteTable, columns: string[]) {\n\treturn `${table[TableName]}_${columns.join('_')}_unique`;\n}\n\nexport function unique(name?: string): UniqueOnConstraintBuilder {\n\treturn new UniqueOnConstraintBuilder(name);\n}\n\nexport class UniqueConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraintBuilder';\n\n\t/** @internal */\n\tcolumns: SQLiteColumn[];\n\n\tconstructor(\n\t\tcolumns: SQLiteColumn[],\n\t\tprivate name?: string,\n\t) {\n\t\tthis.columns = columns;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): UniqueConstraint {\n\t\treturn new UniqueConstraint(table, this.columns, this.name);\n\t}\n}\n\nexport class UniqueOnConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueOnConstraintBuilder';\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tname?: string,\n\t) {\n\t\tthis.name = name;\n\t}\n\n\ton(...columns: [SQLiteColumn, ...SQLiteColumn[]]) {\n\t\treturn new UniqueConstraintBuilder(columns, this.name);\n\t}\n}\n\nexport class UniqueConstraint {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraint';\n\n\treadonly columns: SQLiteColumn[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: SQLiteTable, columns: SQLiteColumn[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));\n\t}\n\n\tgetName() {\n\t\treturn this.name;\n\t}\n}\n", "import type {\n\tColumnBuilderBase,\n\tColumnBuilderBaseConfig,\n\tColumnBuilderExtraConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasGenerated,\n\tMakeColumnConfig,\n} from '~/column-builder.ts';\nimport { ColumnBuilder } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/sqlite-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/sqlite-core/foreign-keys.ts';\nimport type { AnySQLiteTable, SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Update } from '~/utils.ts';\nimport { uniqueKeyName } from '../unique-constraint.ts';\n\nexport interface ReferenceConfig {\n\tref: () => SQLiteColumn;\n\tactions: {\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport interface SQLiteColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'sqlite' }> {}\n\nexport interface SQLiteGeneratedColumnConfig {\n\tmode?: 'virtual' | 'stored';\n}\n\nexport abstract class SQLiteColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = object,\n> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }, TExtraConfig>\n\timplements SQLiteColumnBuilderBase<T, TTypeConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteColumnBuilder';\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tactions: ReferenceConfig['actions'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, actions });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(as: SQL | T['data'] | (() => SQL), config?: SQLiteGeneratedColumnConfig): HasGenerated<this, {\n\t\ttype: 'always';\n\t}> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: config?.mode ?? 'virtual',\n\t\t};\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: SQLiteColumn, table: SQLiteTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, actions }) => {\n\t\t\treturn ((ref, actions) => {\n\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\treturn { columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t});\n\t\t\t\tif (actions.onUpdate) {\n\t\t\t\t\tbuilder.onUpdate(actions.onUpdate);\n\t\t\t\t}\n\t\t\t\tif (actions.onDelete) {\n\t\t\t\t\tbuilder.onDelete(actions.onDelete);\n\t\t\t\t}\n\t\t\t\treturn builder.build(table);\n\t\t\t})(ref, actions);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteColumn<MakeColumnConfig<T, TTableName>>;\n}\n\n// To understand how to use `SQLiteColumn` and `AnySQLiteColumn`, see `Column` and `AnyColumn` documentation.\nexport abstract class SQLiteColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = {},\n\tTTypeConfig extends object = {},\n> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteColumn';\n\n\tconstructor(\n\t\toverride readonly table: SQLiteTable,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tif (!config.uniqueName) {\n\t\t\tconfig.uniqueName = uniqueKeyName(table, [config.name]);\n\t\t}\n\t\tsuper(table, config);\n\t}\n}\n\nexport type AnySQLiteColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = SQLiteColumn<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, textDecoder } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\ntype BlobMode = 'buffer' | 'json' | 'bigint';\n\nexport type SQLiteBigIntBuilderInitial<TName extends string> = SQLiteBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteBigInt';\n\tdata: bigint;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBigInt<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBigInt';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): bigint {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn BigInt(buf.toString('utf8'));\n\t\t}\n\n\t\treturn BigInt(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: bigint): Buffer {\n\t\treturn Buffer.from(value.toString());\n\t}\n}\n\nexport type SQLiteBlobJsonBuilderInitial<TName extends string> = SQLiteBlobJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteBlobJson';\n\tdata: unknown;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteBlobJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteBlobJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBlobJson<T extends ColumnBaseConfig<'json', 'SQLiteBlobJson'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJson';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn JSON.parse(buf.toString('utf8'));\n\t\t}\n\n\t\treturn JSON.parse(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: T['data']): Buffer {\n\t\treturn Buffer.from(JSON.stringify(value));\n\t}\n}\n\nexport type SQLiteBlobBufferBuilderInitial<TName extends string> = SQLiteBlobBufferBuilder<{\n\tname: TName;\n\tdataType: 'buffer';\n\tcolumnType: 'SQLiteBlobBuffer';\n\tdata: Buffer;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobBufferBuilder<T extends ColumnBuilderBaseConfig<'buffer', 'SQLiteBlobBuffer'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBufferBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'buffer', 'SQLiteBlobBuffer');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBlobBuffer<T extends ColumnBaseConfig<'buffer', 'SQLiteBlobBuffer'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBuffer';\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn Buffer.from(value as Uint8Array);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n}\n\nexport interface BlobConfig<TMode extends BlobMode = BlobMode> {\n\tmode: TMode;\n}\n\n/**\n * It's recommended to use `text('...', { mode: 'json' })` instead of `blob` in JSON mode, because it supports JSON functions:\n * >All JSON functions currently throw an error if any of their arguments are BLOBs because BLOBs are reserved for a future enhancement in which BLOBs will store the binary encoding for JSON.\n *\n * https://www.sqlite.org/json1.html\n */\nexport function blob(): SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TMode extends BlobMode = BlobMode>(\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<''>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<''>\n\t: SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TName extends string, TMode extends BlobMode = BlobMode>(\n\tname: TName,\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<TName>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<TName>\n\t: SQLiteBlobJsonBuilderInitial<TName>;\nexport function blob(a?: string | BlobConfig, b?: BlobConfig) {\n\tconst { name, config } = getColumnNameAndConfig<BlobConfig | undefined>(a, b);\n\tif (config?.mode === 'json') {\n\t\treturn new SQLiteBlobJsonBuilder(name);\n\t}\n\tif (config?.mode === 'bigint') {\n\t\treturn new SQLiteBigIntBuilder(name);\n\t}\n\treturn new SQLiteBlobBufferBuilder(name);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type ConvertCustomConfig<TName extends string, T extends Partial<CustomTypeValues>> =\n\t& {\n\t\tname: TName;\n\t\tdataType: 'custom';\n\t\tcolumnType: 'SQLiteCustomColumn';\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverData'];\n\t\tenumValues: undefined;\n\t}\n\t& (T['notNull'] extends true ? { notNull: true } : {})\n\t& (T['default'] extends true ? { hasDefault: true } : {});\n\nexport interface SQLiteCustomColumnInnerConfig {\n\tcustomTypeValues: CustomTypeValues;\n}\n\nexport class SQLiteCustomColumnBuilder<T extends ColumnBuilderBaseConfig<'custom', 'SQLiteCustomColumn'>>\n\textends SQLiteColumnBuilder<\n\t\tT,\n\t\t{\n\t\t\tfieldConfig: CustomTypeValues['config'];\n\t\t\tcustomTypeParams: CustomTypeParams<any>;\n\t\t},\n\t\t{\n\t\t\tsqliteColumnBuilderBrand: 'SQLiteCustomColumnBuilderBrand';\n\t\t}\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumnBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\tfieldConfig: CustomTypeValues['config'],\n\t\tcustomTypeParams: CustomTypeParams<any>,\n\t) {\n\t\tsuper(name, 'custom', 'SQLiteCustomColumn');\n\t\tthis.config.fieldConfig = fieldConfig;\n\t\tthis.config.customTypeParams = customTypeParams;\n\t}\n\n\t/** @internal */\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteCustomColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteCustomColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteCustomColumn<T extends ColumnBaseConfig<'custom', 'SQLiteCustomColumn'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumn';\n\n\tprivate sqlName: string;\n\tprivate mapTo?: (value: T['data']) => T['driverParam'];\n\tprivate mapFrom?: (value: T['driverParam']) => T['data'];\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteCustomColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.sqlName = config.customTypeParams.dataType(config.fieldConfig);\n\t\tthis.mapTo = config.customTypeParams.toDriver;\n\t\tthis.mapFrom = config.customTypeParams.fromDriver;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.sqlName;\n\t}\n\n\toverride mapFromDriverValue(value: T['driverParam']): T['data'] {\n\t\treturn typeof this.mapFrom === 'function' ? this.mapFrom(value) : value as T['data'];\n\t}\n\n\toverride mapToDriverValue(value: T['data']): T['driverParam'] {\n\t\treturn typeof this.mapTo === 'function' ? this.mapTo(value) : value as T['data'];\n\t}\n}\n\nexport type CustomTypeValues = {\n\t/**\n\t * Required type for custom column, that will infer proper type model\n\t *\n\t * Examples:\n\t *\n\t * If you want your column to be `string` type after selecting/or on inserting - use `data: string`. Like `text`, `varchar`\n\t *\n\t * If you want your column to be `number` type after selecting/or on inserting - use `data: number`. Like `integer`\n\t */\n\tdata: unknown;\n\n\t/**\n\t * Type helper, that represents what type database driver is accepting for specific database data type\n\t */\n\tdriverData?: unknown;\n\n\t/**\n\t * What config type should be used for {@link CustomTypeParams} `dataType` generation\n\t */\n\tconfig?: Record<string, any>;\n\n\t/**\n\t * Whether the config argument should be required or not\n\t * @default false\n\t */\n\tconfigRequired?: boolean;\n\n\t/**\n\t * If your custom data type should be notNull by default you can use `notNull: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tnotNull?: boolean;\n\n\t/**\n\t * If your custom data type has default you can use `default: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tdefault?: boolean;\n};\n\nexport interface CustomTypeParams<T extends CustomTypeValues> {\n\t/**\n\t * Database data type string representation, that is used for migrations\n\t * @example\n\t * ```\n\t * `jsonb`, `text`\n\t * ```\n\t *\n\t * If database data type needs additional params you can use them from `config` param\n\t * @example\n\t * ```\n\t * `varchar(256)`, `numeric(2,3)`\n\t * ```\n\t *\n\t * To make `config` be of specific type please use config generic in {@link CustomTypeValues}\n\t *\n\t * @example\n\t * Usage example\n\t * ```\n\t * dataType() {\n\t * return 'boolean';\n\t * },\n\t * ```\n\t * Or\n\t * ```\n\t * dataType(config) {\n\t * \t return typeof config.length !== 'undefined' ? `varchar(${config.length})` : `varchar`;\n\t * \t }\n\t * ```\n\t */\n\tdataType: (config: T['config'] | (Equal<T['configRequired'], true> extends true ? never : undefined)) => string;\n\n\t/**\n\t * Optional mapping function, between user input and driver\n\t * @example\n\t * For example, when using jsonb we need to map JS/TS object to string before writing to database\n\t * ```\n\t * toDriver(value: TData): string {\n\t * \t return JSON.stringify(value);\n\t * }\n\t * ```\n\t */\n\ttoDriver?: (value: T['data']) => T['driverData'] | SQL;\n\n\t/**\n\t * Optional mapping function, that is responsible for data mapping from database to JS/TS code\n\t * @example\n\t * For example, when using timestamp we need to map string Date representation to JS Date\n\t * ```\n\t * fromDriver(value: string): Date {\n\t * \treturn new Date(value);\n\t * },\n\t * ```\n\t */\n\tfromDriver?: (value: T['driverData']) => T['data'];\n}\n\n/**\n * Custom sqlite database data type generator\n */\nexport function customType<T extends CustomTypeValues = CustomTypeValues>(\n\tcustomTypeParams: CustomTypeParams<T>,\n): Equal<T['configRequired'], true> extends true ? {\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n\t: {\n\t\t(): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig?: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig?: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n{\n\treturn <TName extends string>(\n\t\ta?: TName | T['config'],\n\t\tb?: T['config'],\n\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>> => {\n\t\tconst { name, config } = getColumnNameAndConfig<T['config']>(a, b);\n\t\treturn new SQLiteCustomColumnBuilder(\n\t\t\tname as ConvertCustomConfig<TName, T>['name'],\n\t\t\tconfig,\n\t\t\tcustomTypeParams,\n\t\t);\n\t};\n}\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasDefault,\n\tIsPrimaryKey,\n\tMakeColumnConfig,\n\tNotNull,\n} from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport { sql } from '~/sql/sql.ts';\nimport type { OnConflict } from '~/sqlite-core/utils.ts';\nimport { type Equal, getColumnNameAndConfig, type Or } from '~/utils.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport interface PrimaryKeyConfig {\n\tautoIncrement?: boolean;\n\tonConflict?: OnConflict;\n}\n\nexport abstract class SQLiteBaseIntegerBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumnBuilder<\n\tT,\n\tTRuntimeConfig & { autoIncrement: boolean },\n\t{},\n\t{ primaryKeyHasDefault: true }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseIntegerBuilder';\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tsuper(name, dataType, columnType);\n\t\tthis.config.autoIncrement = false;\n\t}\n\n\toverride primaryKey(config?: PrimaryKeyConfig): IsPrimaryKey<HasDefault<NotNull<this>>> {\n\t\tif (config?.autoIncrement) {\n\t\t\tthis.config.autoIncrement = true;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\treturn super.primaryKey() as IsPrimaryKey<HasDefault<NotNull<this>>>;\n\t}\n\n\t/** @internal */\n\tabstract override build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBaseInteger<MakeColumnConfig<T, TTableName>>;\n}\n\nexport abstract class SQLiteBaseInteger<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumn<T, TRuntimeConfig & { autoIncrement: boolean }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseInteger';\n\n\treadonly autoIncrement: boolean = this.config.autoIncrement;\n\n\tgetSQLType(): string {\n\t\treturn 'integer';\n\t}\n}\n\nexport type SQLiteIntegerBuilderInitial<TName extends string> = SQLiteIntegerBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteInteger';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteIntegerBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteInteger'>>\n\textends SQLiteBaseIntegerBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteIntegerBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteInteger');\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteInteger<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteInteger<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteInteger<T extends ColumnBaseConfig<'number', 'SQLiteInteger'>> extends SQLiteBaseInteger<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteInteger';\n}\n\nexport type SQLiteTimestampBuilderInitial<TName extends string> = SQLiteTimestampBuilder<{\n\tname: TName;\n\tdataType: 'date';\n\tcolumnType: 'SQLiteTimestamp';\n\tdata: Date;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteTimestampBuilder<T extends ColumnBuilderBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestampBuilder';\n\n\tconstructor(name: T['name'], mode: 'timestamp' | 'timestamp_ms') {\n\t\tsuper(name, 'date', 'SQLiteTimestamp');\n\t\tthis.config.mode = mode;\n\t}\n\n\t/**\n\t * @deprecated Use `default()` with your own expression instead.\n\t *\n\t * Adds `DEFAULT (cast((julianday('now') - 2440587.5)*86400000 as integer))` to the column, which is the current epoch timestamp in milliseconds.\n\t */\n\tdefaultNow(): HasDefault<this> {\n\t\treturn this.default(sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`) as any;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTimestamp<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTimestamp<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTimestamp<T extends ColumnBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseInteger<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestamp';\n\n\treadonly mode: 'timestamp' | 'timestamp_ms' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): Date {\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn new Date(value * 1000);\n\t\t}\n\t\treturn new Date(value);\n\t}\n\n\toverride mapToDriverValue(value: Date): number {\n\t\tconst unix = value.getTime();\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn Math.floor(unix / 1000);\n\t\t}\n\t\treturn unix;\n\t}\n}\n\nexport type SQLiteBooleanBuilderInitial<TName extends string> = SQLiteBooleanBuilder<{\n\tname: TName;\n\tdataType: 'boolean';\n\tcolumnType: 'SQLiteBoolean';\n\tdata: boolean;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBooleanBuilder<T extends ColumnBuilderBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBooleanBuilder';\n\n\tconstructor(name: T['name'], mode: 'boolean') {\n\t\tsuper(name, 'boolean', 'SQLiteBoolean');\n\t\tthis.config.mode = mode;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBoolean<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBoolean<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBoolean<T extends ColumnBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseInteger<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBoolean';\n\n\treadonly mode: 'boolean' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): boolean {\n\t\treturn Number(value) === 1;\n\t}\n\n\toverride mapToDriverValue(value: boolean): number {\n\t\treturn value ? 1 : 0;\n\t}\n}\n\nexport interface IntegerConfig<\n\tTMode extends 'number' | 'timestamp' | 'timestamp_ms' | 'boolean' =\n\t\t| 'number'\n\t\t| 'timestamp'\n\t\t| 'timestamp_ms'\n\t\t| 'boolean',\n> {\n\tmode: TMode;\n}\n\nexport function integer(): SQLiteIntegerBuilderInitial<''>;\nexport function integer<TMode extends IntegerConfig['mode']>(\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<''>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<''>\n\t: SQLiteIntegerBuilderInitial<''>;\nexport function integer<TName extends string, TMode extends IntegerConfig['mode']>(\n\tname: TName,\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<TName>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<TName>\n\t: SQLiteIntegerBuilderInitial<TName>;\nexport function integer(a?: string | IntegerConfig, b?: IntegerConfig) {\n\tconst { name, config } = getColumnNameAndConfig<IntegerConfig | undefined>(a, b);\n\tif (config?.mode === 'timestamp' || config?.mode === 'timestamp_ms') {\n\t\treturn new SQLiteTimestampBuilder(name, config.mode);\n\t}\n\tif (config?.mode === 'boolean') {\n\t\treturn new SQLiteBooleanBuilder(name, config.mode);\n\t}\n\treturn new SQLiteIntegerBuilder(name);\n}\n\nexport const int = integer;\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteNumericBuilderInitial<TName extends string> = SQLiteNumericBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteNumeric';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBuilder<T extends ColumnBuilderBaseConfig<'string', 'SQLiteNumeric'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'SQLiteNumeric');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumeric<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumeric<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumeric<T extends ColumnBaseConfig<'string', 'SQLiteNumeric'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumeric';\n\n\toverride mapFromDriverValue(value: unknown): string {\n\t\tif (typeof value === 'string') return value;\n\n\t\treturn String(value);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericNumberBuilderInitial<TName extends string> = SQLiteNumericNumberBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteNumericNumber';\n\tdata: number;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericNumberBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteNumericNumber'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumberBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteNumericNumber');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericNumber<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericNumber<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericNumber<T extends ColumnBaseConfig<'number', 'SQLiteNumericNumber'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumber';\n\n\toverride mapFromDriverValue(value: unknown): number {\n\t\tif (typeof value === 'number') return value;\n\n\t\treturn Number(value);\n\t}\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericBigIntBuilderInitial<TName extends string> = SQLiteNumericBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteNumericBigInt';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteNumericBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteNumericBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteNumericBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigInt';\n\n\toverride mapFromDriverValue = BigInt;\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericConfig<T extends 'string' | 'number' | 'bigint' = 'string' | 'number' | 'bigint'> = {\n\tmode: T;\n};\n\nexport function numeric<TMode extends SQLiteNumericConfig['mode']>(\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<''>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<''>\n\t: SQLiteNumericBuilderInitial<''>;\nexport function numeric<TName extends string, TMode extends SQLiteNumericConfig['mode']>(\n\tname: TName,\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<TName>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<TName>\n\t: SQLiteNumericBuilderInitial<TName>;\nexport function numeric(a?: string | SQLiteNumericConfig, b?: SQLiteNumericConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteNumericConfig>(a, b);\n\tconst mode = config?.mode;\n\treturn mode === 'number'\n\t\t? new SQLiteNumericNumberBuilder(name)\n\t\t: mode === 'bigint'\n\t\t? new SQLiteNumericBigIntBuilder(name)\n\t\t: new SQLiteNumericBuilder(name);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteRealBuilderInitial<TName extends string> = SQLiteRealBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteReal';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteRealBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteReal'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRealBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteReal');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteReal<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteReal<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class SQLiteReal<T extends ColumnBaseConfig<'number', 'SQLiteReal'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteReal';\n\n\tgetSQLType(): string {\n\t\treturn 'real';\n\t}\n}\n\nexport function real(): SQLiteRealBuilderInitial<''>;\nexport function real<TName extends string>(name: TName): SQLiteRealBuilderInitial<TName>;\nexport function real(name?: string) {\n\treturn new SQLiteRealBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteTextBuilderInitial<\n\tTName extends string,\n\tTEnum extends [string, ...string[]],\n\tTLength extends number | undefined,\n> = SQLiteTextBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteText';\n\tdata: TEnum[number];\n\tdriverParam: string;\n\tenumValues: TEnum;\n\tlength: TLength;\n}>;\n\nexport class SQLiteTextBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined },\n> extends SQLiteColumnBuilder<\n\tT,\n\t{ length: T['length']; enumValues: T['enumValues'] },\n\t{ length: T['length'] }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTextBuilder';\n\n\tconstructor(name: T['name'], config: SQLiteTextConfig<'text', T['enumValues'], T['length']>) {\n\t\tsuper(name, 'string', 'SQLiteText');\n\t\tthis.config.enumValues = config.enum;\n\t\tthis.config.length = config.length;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }> {\n\t\treturn new SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteText<T extends ColumnBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined }>\n\textends SQLiteColumn<T, { length: T['length']; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteText';\n\n\toverride readonly enumValues = this.config.enumValues;\n\n\treadonly length: T['length'] = this.config.length;\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteTextBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `text${this.config.length ? `(${this.config.length})` : ''}`;\n\t}\n}\n\nexport type SQLiteTextJsonBuilderInitial<TName extends string> = SQLiteTextJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteTextJson';\n\tdata: unknown;\n\tdriverParam: string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class SQLiteTextJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteTextJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTextJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTextJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTextJson<T extends ColumnBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumn<T, { length: number | undefined; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJson';\n\n\tgetSQLType(): string {\n\t\treturn 'text';\n\t}\n\n\toverride mapFromDriverValue(value: string): T['data'] {\n\t\treturn JSON.parse(value);\n\t}\n\n\toverride mapToDriverValue(value: T['data']): string {\n\t\treturn JSON.stringify(value);\n\t}\n}\n\nexport type SQLiteTextConfig<\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n\tTLength extends number | undefined = number | undefined,\n> = TMode extends 'text' ? {\n\t\tmode?: TMode;\n\t\tlength?: TLength;\n\t\tenum?: TEnum;\n\t}\n\t: {\n\t\tmode?: TMode;\n\t};\n\nexport function text(): SQLiteTextBuilderInitial<'', [string, ...string[]], undefined>;\nexport function text<\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<''>\n\t: SQLiteTextBuilderInitial<'', Writable<T>, L>;\nexport function text<\n\tTName extends string,\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tname: TName,\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<TName>\n\t: SQLiteTextBuilderInitial<TName, Writable<T>, L>;\nexport function text(a?: string | SQLiteTextConfig, b: SQLiteTextConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteTextConfig>(a, b);\n\tif (config.mode === 'json') {\n\t\treturn new SQLiteTextJsonBuilder(name);\n\t}\n\treturn new SQLiteTextBuilder(name, config as any);\n}\n", "import { blob } from './blob.ts';\nimport { customType } from './custom.ts';\nimport { integer } from './integer.ts';\nimport { numeric } from './numeric.ts';\nimport { real } from './real.ts';\nimport { text } from './text.ts';\n\nexport function getSQLiteColumnBuilders() {\n\treturn {\n\t\tblob,\n\t\tcustomType,\n\t\tinteger,\n\t\tnumeric,\n\t\treal,\n\t\ttext,\n\t};\n}\n\nexport type SQLiteColumnBuilders = ReturnType<typeof getSQLiteColumnBuilders>;\n", "import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getSQLiteColumnBuilders, type SQLiteColumnBuilders } from './columns/all.ts';\nimport type { SQLiteColumn, SQLiteColumnBuilder, SQLiteColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type SQLiteTableExtraConfigValue =\n\t| IndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder;\n\nexport type SQLiteTableExtraConfig = Record<\n\tstring,\n\tSQLiteTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<SQLiteColumn<any>>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:SQLiteInlineForeignKeys');\n\nexport class SQLiteTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t});\n\n\t/** @internal */\n\toverride [Table.Symbol.Columns]!: NonNullable<T['columns']>;\n\n\t/** @internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]:\n\t\t| ((self: Record<string, SQLiteColumn>) => SQLiteTableExtraConfig)\n\t\t| undefined = undefined;\n}\n\nexport type AnySQLiteTable<TPartial extends Partial<TableConfig> = {}> = SQLiteTable<\n\tUpdateTableConfig<TableConfig, TPartial>\n>;\n\nexport type SQLiteTableWithColumns<T extends TableConfig> =\n\t& SQLiteTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t};\n\nexport interface SQLiteTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n}\n\nfunction sqliteTableBase<\n\tTTableName extends string,\n\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\tTSchema extends string | undefined,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: SQLiteColumnBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfig | SQLiteTableExtraConfigValue[])\n\t\t| undefined,\n\tschema?: TSchema,\n\tbaseName = name,\n): SQLiteTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchema;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\tdialect: 'sqlite';\n}> {\n\tconst rawTable = new SQLiteTable<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getSQLiteColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as SQLiteColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumns as unknown as BuildExtraConfigColumns<\n\t\tTTableName,\n\t\tTColumnsMap,\n\t\t'sqlite'\n\t>;\n\n\tif (extraConfig) {\n\t\ttable[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig as (\n\t\t\tself: Record<string, SQLiteColumn>,\n\t\t) => SQLiteTableExtraConfig;\n\t}\n\n\treturn table;\n}\n\nexport const sqliteTable: SQLiteTableFn = (name, columns, extraConfig) => {\n\treturn sqliteTableBase(name, columns, extraConfig);\n};\n\nexport function sqliteTableCreator(customizeTableName: (name: string) => string): SQLiteTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn sqliteTableBase(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport class CheckBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteCheckBuilder';\n\n\tprotected brand!: 'SQLiteConstraintBuilder';\n\n\tconstructor(public name: string, public value: SQL) {}\n\n\tbuild(table: SQLiteTable): Check {\n\t\treturn new Check(table, this);\n\t}\n}\n\nexport class Check {\n\tstatic readonly [entityKind]: string = 'SQLiteCheck';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteCheck';\n\t};\n\n\treadonly name: string;\n\treadonly value: SQL;\n\n\tconstructor(public table: SQLiteTable, builder: CheckBuilder) {\n\t\tthis.name = builder.name;\n\t\tthis.value = builder.value;\n\t}\n}\n\nexport function check(name: string, value: SQL): CheckBuilder {\n\treturn new CheckBuilder(name, value);\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { SQLiteColumn } from './columns/index.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport interface IndexConfig {\n\tname: string;\n\tcolumns: IndexColumn[];\n\tunique: boolean;\n\twhere: SQL | undefined;\n}\n\nexport type IndexColumn = SQLiteColumn | SQL;\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'SQLiteIndexBuilderOn';\n\n\tconstructor(private name: string, private unique: boolean) {}\n\n\ton(...columns: [IndexColumn, ...IndexColumn[]]): IndexBuilder {\n\t\treturn new IndexBuilder(this.name, columns, this.unique);\n\t}\n}\n\nexport class IndexBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteIndexBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteIndexBuilder';\n\t};\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(name: string, columns: IndexColumn[], unique: boolean) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\twhere: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'SQLiteIndex';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteIndex';\n\t};\n\n\treadonly config: IndexConfig & { table: SQLiteTable };\n\n\tconstructor(config: IndexConfig, table: SQLiteTable) {\n\t\tthis.config = { ...config, table };\n\t}\n}\n\nexport function index(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, false);\n}\n\nexport function uniqueIndex(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, true);\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from './columns/index.ts';\nimport { SQLiteTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnySQLiteColumn<{ tableName: TTableName }>,\n\tTColumns extends AnySQLiteColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnySQLiteColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'SQLitePrimaryKeyBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLitePrimaryKeyBuilder';\n\t};\n\n\t/** @internal */\n\tcolumns: SQLiteColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: SQLiteColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'SQLitePrimaryKey';\n\n\treadonly columns: SQLiteColumn[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: SQLiteTable, columns: SQLiteColumn[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name\n\t\t\t?? `${this.table[SQLiteTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n", "import { is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { Check } from './checks.ts';\nimport { CheckBuilder } from './checks.ts';\nimport type { ForeignKey } from './foreign-keys.ts';\nimport { ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { Index } from './indexes.ts';\nimport { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKey } from './primary-keys.ts';\nimport { PrimaryKeyBuilder } from './primary-keys.ts';\nimport { SQLiteTable } from './table.ts';\nimport { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\nimport type { SQLiteView } from './view.ts';\n\nexport function getTableConfig<TTable extends SQLiteTable>(table: TTable) {\n\tconst columns = Object.values(table[SQLiteTable.Symbol.Columns]);\n\tconst indexes: Index[] = [];\n\tconst checks: Check[] = [];\n\tconst primaryKeys: PrimaryKey[] = [];\n\tconst uniqueConstraints: UniqueConstraint[] = [];\n\tconst foreignKeys: ForeignKey[] = Object.values(table[SQLiteTable.Symbol.InlineForeignKeys]);\n\tconst name = table[Table.Symbol.Name];\n\n\tconst extraConfigBuilder = table[SQLiteTable.Symbol.ExtraConfigBuilder];\n\n\tif (extraConfigBuilder !== undefined) {\n\t\tconst extraConfig = extraConfigBuilder(table[SQLiteTable.Symbol.Columns]);\n\t\tconst extraValues = Array.isArray(extraConfig) ? extraConfig.flat(1) as any[] : Object.values(extraConfig);\n\t\tfor (const builder of Object.values(extraValues)) {\n\t\t\tif (is(builder, IndexBuilder)) {\n\t\t\t\tindexes.push(builder.build(table));\n\t\t\t} else if (is(builder, CheckBuilder)) {\n\t\t\t\tchecks.push(builder.build(table));\n\t\t\t} else if (is(builder, UniqueConstraintBuilder)) {\n\t\t\t\tuniqueConstraints.push(builder.build(table));\n\t\t\t} else if (is(builder, PrimaryKeyBuilder)) {\n\t\t\t\tprimaryKeys.push(builder.build(table));\n\t\t\t} else if (is(builder, ForeignKeyBuilder)) {\n\t\t\t\tforeignKeys.push(builder.build(table));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcolumns,\n\t\tindexes,\n\t\tforeignKeys,\n\t\tchecks,\n\t\tprimaryKeys,\n\t\tuniqueConstraints,\n\t\tname,\n\t};\n}\n\nexport function extractUsedTable(table: SQLiteTable | Subquery | SQLiteViewBase | SQL): string[] {\n\tif (is(table, SQLiteTable)) {\n\t\treturn [`${table[Table.Symbol.BaseName]}`];\n\t}\n\tif (is(table, Subquery)) {\n\t\treturn table._.usedTables ?? [];\n\t}\n\tif (is(table, SQL)) {\n\t\treturn table.usedTables ?? [];\n\t}\n\treturn [];\n}\n\nexport type OnConflict = 'rollback' | 'abort' | 'fail' | 'ignore' | 'replace';\n\nexport function getViewConfig<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n>(view: SQLiteView<TName, TExisting>) {\n\treturn {\n\t\t...view[ViewBaseConfig],\n\t\t// ...view[SQLiteViewConfig],\n\t};\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { type DrizzleTypeError, orderSelectedFields, type ValueOrArray } from '~/utils.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\n\nexport type SQLiteDeleteWithout<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T\n\t: Omit<\n\t\tSQLiteDeleteBase<\n\t\t\tT['_']['table'],\n\t\t\tT['_']['resultType'],\n\t\t\tT['_']['runResult'],\n\t\t\tT['_']['returning'],\n\t\t\tTDynamic,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>,\n\t\tT['_']['excludedMethods'] | K\n\t>;\n\nexport type SQLiteDelete<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n> = SQLiteDeleteBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteDeleteConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\ttable: SQLiteTable;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteDeleteReturningAll<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteReturning<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteExecute<T extends AnySQLiteDeleteBase> = T['_']['returning'] extends undefined\n\t? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteDeletePrepare<T extends AnySQLiteDeleteBase> = SQLitePreparedQuery<{\n\ttype: T['_']['resultType'];\n\trun: T['_']['runResult'];\n\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t: T['_']['returning'][];\n\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t: T['_']['returning'] | undefined;\n\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t: any[][];\n\texecute: SQLiteDeleteExecute<T>;\n}>;\n\nexport type SQLiteDeleteDynamic<T extends AnySQLiteDeleteBase> = SQLiteDelete<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type AnySQLiteDeleteBase = SQLiteDeleteBase<any, any, any, any, any, any>;\n\nexport interface SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\tdialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteDelete';\n\n\t/** @internal */\n\tconfig: SQLiteDeleteConfig;\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, withList };\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will delete only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be deleted.\n\t *\n\t * ```ts\n\t * // Delete all cars with green color\n\t * db.delete(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * db.delete(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Delete all BMW cars with a green color\n\t * db.delete(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Delete all cars with the green or blue color\n\t * db.delete(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteDeleteWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteDeleteWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the deleted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete#delete-with-return}\n\t *\n\t * @example\n\t * ```ts\n\t * // Delete all cars with the green color and return all fields\n\t * const deletedCars: Car[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Delete all cars with the green color and return only their id and brand fields\n\t * const deletedCarsIdsAndBrands: { id: number, brand: string }[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteDeleteReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteDeleteReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteDeleteReturning<this, TDynamic, any> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildDeleteQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteDeletePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'delete',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteDeletePrepare<this>;\n\t}\n\n\tprepare(): SQLiteDeletePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(placeholderValues?: Record<string, unknown>): Promise<SQLiteDeleteExecute<this>> {\n\t\treturn this._prepare().execute(placeholderValues) as SQLiteDeleteExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteDeleteDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "import type { Column } from '~/column.ts';\nimport { entityKind } from './entity.ts';\nimport { Table } from './table.ts';\nimport type { Casing } from './utils.ts';\n\nexport function toSnakeCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.map((word) => word.toLowerCase()).join('_');\n}\n\nexport function toCamelCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.reduce((acc, word, i) => {\n\t\tconst formattedWord = i === 0 ? word.toLowerCase() : `${word[0]!.toUpperCase()}${word.slice(1)}`;\n\t\treturn acc + formattedWord;\n\t}, '');\n}\n\nfunction noopCase(input: string) {\n\treturn input;\n}\n\nexport class CasingCache {\n\tstatic readonly [entityKind]: string = 'CasingCache';\n\n\t/** @internal */\n\tcache: Record<string, string> = {};\n\tprivate cachedTables: Record<string, true> = {};\n\tprivate convert: (input: string) => string;\n\n\tconstructor(casing?: Casing) {\n\t\tthis.convert = casing === 'snake_case'\n\t\t\t? toSnakeCase\n\t\t\t: casing === 'camelCase'\n\t\t\t? toCamelCase\n\t\t\t: noopCase;\n\t}\n\n\tgetColumnCasing(column: Column): string {\n\t\tif (!column.keyAsName) return column.name;\n\n\t\tconst schema = column.table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = column.table[Table.Symbol.OriginalName];\n\t\tconst key = `${schema}.${tableName}.${column.name}`;\n\n\t\tif (!this.cache[key]) {\n\t\t\tthis.cacheTable(column.table);\n\t\t}\n\t\treturn this.cache[key]!;\n\t}\n\n\tprivate cacheTable(table: Table) {\n\t\tconst schema = table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = table[Table.Symbol.OriginalName];\n\t\tconst tableKey = `${schema}.${tableName}`;\n\n\t\tif (!this.cachedTables[tableKey]) {\n\t\t\tfor (const column of Object.values(table[Table.Symbol.Columns])) {\n\t\t\t\tconst columnKey = `${tableKey}.${column.name}`;\n\t\t\t\tthis.cache[columnKey] = this.convert(column.name);\n\t\t\t}\n\t\t\tthis.cachedTables[tableKey] = true;\n\t\t}\n\t}\n\n\tclearCache() {\n\t\tthis.cache = {};\n\t\tthis.cachedTables = {};\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class DrizzleQueryError extends Error {\n\tconstructor(\n\t\tpublic query: string,\n\t\tpublic params: any[],\n\t\tpublic override cause?: Error,\n\t) {\n\t\tsuper(`Failed query: ${query}\\nparams: ${params}`);\n\t\tError.captureStackTrace(this, DrizzleQueryError);\n\n\t\t// ES2022+: preserves original error on `.cause`\n\t\tif (cause) (this as any).cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic override readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n", "import { type AnyColumn, Column } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport { type SQL, sql, type SQLWrapper } from '../sql.ts';\n\n/**\n * Returns the number of values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Number employees with null values\n * db.select({ value: count() }).from(employees)\n * // Number of employees where `name` is not null\n * db.select({ value: count(employees.name) }).from(employees)\n * ```\n *\n * @see countDistinct to get the number of non-duplicate values in `expression`\n */\nexport function count(expression?: SQLWrapper): SQL<number> {\n\treturn sql`count(${expression || sql.raw('*')})`.mapWith(Number);\n}\n\n/**\n * Returns the number of non-duplicate values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Number of employees where `name` is distinct\n * db.select({ value: countDistinct(employees.name) }).from(employees)\n * ```\n *\n * @see count to get the number of values in `expression`, including duplicates\n */\nexport function countDistinct(expression: SQLWrapper): SQL<number> {\n\treturn sql`count(distinct ${expression})`.mapWith(Number);\n}\n\n/**\n * Returns the average (arithmetic mean) of all non-null values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Average salary of an employee\n * db.select({ value: avg(employees.salary) }).from(employees)\n * ```\n *\n * @see avgDistinct to get the average of all non-null and non-duplicate values in `expression`\n */\nexport function avg(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`avg(${expression})`.mapWith(String);\n}\n\n/**\n * Returns the average (arithmetic mean) of all non-null and non-duplicate values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Average salary of an employee where `salary` is distinct\n * db.select({ value: avgDistinct(employees.salary) }).from(employees)\n * ```\n *\n * @see avg to get the average of all non-null values in `expression`, including duplicates\n */\nexport function avgDistinct(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`avg(distinct ${expression})`.mapWith(String);\n}\n\n/**\n * Returns the sum of all non-null values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Sum of every employee's salary\n * db.select({ value: sum(employees.salary) }).from(employees)\n * ```\n *\n * @see sumDistinct to get the sum of all non-null and non-duplicate values in `expression`\n */\nexport function sum(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`sum(${expression})`.mapWith(String);\n}\n\n/**\n * Returns the sum of all non-null and non-duplicate values in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // Sum of every employee's salary where `salary` is distinct (no duplicates)\n * db.select({ value: sumDistinct(employees.salary) }).from(employees)\n * ```\n *\n * @see sum to get the sum of all non-null values in `expression`, including duplicates\n */\nexport function sumDistinct(expression: SQLWrapper): SQL<string | null> {\n\treturn sql`sum(distinct ${expression})`.mapWith(String);\n}\n\n/**\n * Returns the maximum value in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // The employee with the highest salary\n * db.select({ value: max(employees.salary) }).from(employees)\n * ```\n */\nexport function max<T extends SQLWrapper>(expression: T): SQL<(T extends AnyColumn ? T['_']['data'] : string) | null> {\n\treturn sql`max(${expression})`.mapWith(is(expression, Column) ? expression : String) as any;\n}\n\n/**\n * Returns the minimum value in `expression`.\n *\n * ## Examples\n *\n * ```ts\n * // The employee with the lowest salary\n * db.select({ value: min(employees.salary) }).from(employees)\n * ```\n */\nexport function min<T extends SQLWrapper>(expression: T): SQL<(T extends AnyColumn ? T['_']['data'] : string) | null> {\n\treturn sql`min(${expression})`.mapWith(is(expression, Column) ? expression : String) as any;\n}\n", "import type { AnyColumn } from '~/column.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport { type SQL, sql, type SQLWrapper } from '../sql.ts';\n\nfunction toSql(value: number[] | string[]): string {\n\treturn JSON.stringify(value);\n}\n\n/**\n * Used in sorting and in querying, if used in sorting,\n * this specifies that the given column or expression should be sorted in an order\n * that minimizes the L2 distance to the given value.\n * If used in querying, this specifies that it should return the L2 distance\n * between the given column or expression and the given value.\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n * .orderBy(l2Distance(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({distance: l2Distance(cars.embedding, embedding)}).from(cars)\n * ```\n */\nexport function l2Distance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <-> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <-> ${value}`;\n}\n\n/**\n * L1 distance is one of the possible distance measures between two probability distribution vectors and it is\n * calculated as the sum of the absolute differences.\n * The smaller the distance between the observed probability vectors, the higher the accuracy of the synthetic data\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n * .orderBy(l1Distance(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({distance: l1Distance(cars.embedding, embedding)}).from(cars)\n * ```\n */\nexport function l1Distance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <+> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <+> ${value}`;\n}\n\n/**\n * Used in sorting and in querying, if used in sorting,\n * this specifies that the given column or expression should be sorted in an order\n * that minimizes the inner product distance to the given value.\n * If used in querying, this specifies that it should return the inner product distance\n * between the given column or expression and the given value.\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n * .orderBy(innerProduct(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({ distance: innerProduct(cars.embedding, embedding) }).from(cars)\n * ```\n */\nexport function innerProduct(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <#> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <#> ${value}`;\n}\n\n/**\n * Used in sorting and in querying, if used in sorting,\n * this specifies that the given column or expression should be sorted in an order\n * that minimizes the cosine distance to the given value.\n * If used in querying, this specifies that it should return the cosine distance\n * between the given column or expression and the given value.\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n * .orderBy(cosineDistance(cars.embedding, embedding));\n * ```\n *\n * ```ts\n * // Select distance of cars and embedding\n * // to the given embedding\n * db.select({distance: cosineDistance(cars.embedding, embedding)}).from(cars)\n * ```\n */\nexport function cosineDistance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <=> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <=> ${value}`;\n}\n\n/**\n * Hamming distance between two strings or vectors of equal length is the number of positions at which the\n * corresponding symbols are different. In other words, it measures the minimum number of\n * substitutions required to change one string into the other, or equivalently,\n * the minimum number of errors that could have transformed one string into the other\n *\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n * .orderBy(hammingDistance(cars.embedding, embedding));\n * ```\n */\nexport function hammingDistance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <~> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <~> ${value}`;\n}\n\n/**\n * ## Examples\n *\n * ```ts\n * // Sort cars by embedding similarity\n * // to the given embedding\n * db.select().from(cars)\n * .orderBy(jaccardDistance(cars.embedding, embedding));\n * ```\n */\nexport function jaccardDistance(\n\tcolumn: SQLWrapper | AnyColumn,\n\tvalue: number[] | string[] | TypedQueryBuilder<any> | string,\n): SQL {\n\tif (Array.isArray(value)) {\n\t\treturn sql`${column} <%> ${toSql(value)}`;\n\t}\n\treturn sql`${column} <%> ${value}`;\n}\n", "export * from './aggregate.ts';\nexport * from './vector.ts';\n", "export * from './expressions/index.ts';\nexport * from './functions/index.ts';\nexport * from './sql.ts';\n", "export * from './blob.ts';\nexport * from './common.ts';\nexport * from './custom.ts';\nexport * from './integer.ts';\nexport * from './numeric.ts';\nexport * from './real.ts';\nexport * from './text.ts';\n", "import { entityKind } from '~/entity.ts';\nimport type { ColumnsSelection } from '~/sql/sql.ts';\nimport { View } from '~/sql/sql.ts';\n\nexport abstract class SQLiteViewBase<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> extends View<TName, TExisting, TSelection> {\n\tstatic override readonly [entityKind]: string = 'SQLiteViewBase';\n\n\tdeclare _: View<TName, TExisting, TSelection>['_'] & {\n\t\tviewBrand: 'SQLiteView';\n\t};\n}\n", "import { aliasedTable, aliasedTableColumn, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from '~/alias.ts';\nimport { CasingCache } from '~/casing.ts';\nimport type { AnyColumn } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { MigrationConfig, MigrationMeta } from '~/migrator.ts';\nimport {\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tgetOperators,\n\tgetOrderByOperators,\n\tMany,\n\tnormalizeRelation,\n\tOne,\n\ttype Relation,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { Name, Placeholder } from '~/sql/index.ts';\nimport { and, eq } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk } from '~/sql/sql.ts';\nimport { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type {\n\tAnySQLiteSelectQueryBuilder,\n\tSQLiteDeleteConfig,\n\tSQLiteInsertConfig,\n\tSQLiteUpdateConfig,\n} from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, getTableUniqueName, Table } from '~/table.ts';\nimport { type Casing, orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type {\n\tSelectedFieldsOrdered,\n\tSQLiteSelectConfig,\n\tSQLiteSelectJoinConfig,\n} from './query-builders/select.types.ts';\nimport type { SQLiteSession } from './session.ts';\nimport { SQLiteViewBase } from './view-base.ts';\n\nexport interface SQLiteDialectConfig {\n\tcasing?: Casing;\n}\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\t/** @internal */\n\treadonly casing: CasingCache;\n\n\tconstructor(config?: SQLiteDialectConfig) {\n\t\tthis.casing = new CasingCache(config?.casing);\n\t}\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name}\"`;\n\t}\n\n\tescapeParam(_num: number): string {\n\t\treturn '?';\n\t}\n\n\tescapeString(str: string): string {\n\t\treturn `'${str.replace(/'/g, \"''\")}'`;\n\t}\n\n\tprivate buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {\n\t\tif (!queries?.length) return undefined;\n\n\t\tconst withSqlChunks = [sql`with `];\n\t\tfor (const [i, w] of queries.entries()) {\n\t\t\twithSqlChunks.push(sql`${sql.identifier(w._.alias)} as (${w._.sql})`);\n\t\t\tif (i < queries.length - 1) {\n\t\t\t\twithSqlChunks.push(sql`, `);\n\t\t\t}\n\t\t}\n\t\twithSqlChunks.push(sql` `);\n\t\treturn sql.join(withSqlChunks);\n\t}\n\n\tbuildDeleteQuery({ table, where, returning, withList, limit, orderBy }: SQLiteDeleteConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst tableColumns = table[Table.Symbol.Columns];\n\n\t\tconst columnNames = Object.keys(tableColumns).filter((colName) =>\n\t\t\tset[colName] !== undefined || tableColumns[colName]?.onUpdateFn !== undefined\n\t\t);\n\n\t\tconst setSize = columnNames.length;\n\t\treturn sql.join(columnNames.flatMap((colName, i) => {\n\t\t\tconst col = tableColumns[colName]!;\n\n\t\t\tconst onUpdateFnResult = col.onUpdateFn?.();\n\t\t\tconst value = set[colName] ?? (is(onUpdateFnResult, SQL) ? onUpdateFnResult : sql.param(onUpdateFnResult, col));\n\t\t\tconst res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value}`;\n\n\t\t\tif (i < setSize - 1) {\n\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t}\n\t\t\treturn [res];\n\t\t}));\n\t}\n\n\tbuildUpdateQuery({ table, set, where, returning, withList, joins, from, limit, orderBy }: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst fromSql = from && sql.join([sql.raw(' from '), this.buildFromTable(from)]);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\t/**\n\t * Builds selection SQL with provided fields/expressions\n\t *\n\t * Examples:\n\t *\n\t * `select <selection> from`\n\t *\n\t * `insert ... returning <selection>`\n\t *\n\t * If `isSingleTable` is true, then columns won't be prefixed with table name\n\t */\n\tprivate buildSelection(\n\t\tfields: SelectedFieldsOrdered,\n\t\t{ isSingleTable = false }: { isSingleTable?: boolean } = {},\n\t): SQL {\n\t\tconst columnsLen = fields.length;\n\n\t\tconst chunks = fields\n\t\t\t.flatMap(({ field }, i) => {\n\t\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tnew SQL(\n\t\t\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\t\t\treturn sql.identifier(this.casing.getColumnCasing(c));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(query);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (is(field, Column)) {\n\t\t\t\t\tconst tableName = field.table[Table.Symbol.Name];\n\t\t\t\t\tif (field.columnType === 'SQLiteNumericBigInt') {\n\t\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\t\tchunk.push(sql`cast(${sql.identifier(this.casing.getColumnCasing(field))} as text)`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\t\tsql`cast(${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\t\tchunk.push(sql.identifier(this.casing.getColumnCasing(field)));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchunk.push(sql`${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\t\tconst entries = Object.entries(field._.selectedFields) as [string, SQL.Aliased | Column | SQL][];\n\n\t\t\t\t\tif (entries.length === 1) {\n\t\t\t\t\t\tconst entry = entries[0]![1];\n\n\t\t\t\t\t\tconst fieldDecoder = is(entry, SQL)\n\t\t\t\t\t\t\t? entry.decoder\n\t\t\t\t\t\t\t: is(entry, Column)\n\t\t\t\t\t\t\t? { mapFromDriverValue: (v: any) => entry.mapFromDriverValue(v) }\n\t\t\t\t\t\t\t: entry.sql.decoder;\n\t\t\t\t\t\tif (fieldDecoder) field._.sql.decoder = fieldDecoder;\n\t\t\t\t\t}\n\t\t\t\t\tchunk.push(field);\n\t\t\t\t}\n\n\t\t\t\tif (i < columnsLen - 1) {\n\t\t\t\t\tchunk.push(sql`, `);\n\t\t\t\t}\n\n\t\t\t\treturn chunk;\n\t\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tprivate buildJoins(joins: SQLiteSelectJoinConfig[] | undefined): SQL | undefined {\n\t\tif (!joins || joins.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst joinsArray: SQL[] = [];\n\n\t\tif (joins) {\n\t\t\tfor (const [index, joinMeta] of joins.entries()) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t\tconst table = joinMeta.table;\n\t\t\t\tconst onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;\n\n\t\t\t\tif (is(table, SQLiteTable)) {\n\t\t\t\t\tconst tableName = table[SQLiteTable.Symbol.Name];\n\t\t\t\t\tconst tableSchema = table[SQLiteTable.Symbol.Schema];\n\t\t\t\t\tconst origTableName = table[SQLiteTable.Symbol.OriginalName];\n\t\t\t\t\tconst alias = tableName === origTableName ? undefined : joinMeta.alias;\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined}${\n\t\t\t\t\t\t\tsql.identifier(origTableName)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${table}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (index < joins.length - 1) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sql.join(joinsArray);\n\t}\n\n\tprivate buildLimit(limit: number | Placeholder | undefined): SQL | undefined {\n\t\treturn typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildOrderBy(orderBy: (SQLiteColumn | SQL | SQL.Aliased)[] | undefined): SQL | undefined {\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\n\t\tif (orderBy) {\n\t\t\tfor (const [index, orderByValue] of orderBy.entries()) {\n\t\t\t\torderByList.push(orderByValue);\n\n\t\t\t\tif (index < orderBy.length - 1) {\n\t\t\t\t\torderByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn orderByList.length > 0 ? sql` order by ${sql.join(orderByList)}` : undefined;\n\t}\n\n\tprivate buildFromTable(\n\t\ttable: SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined,\n\t): SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined {\n\t\tif (is(table, Table) && table[Table.Symbol.IsAlias]) {\n\t\t\treturn sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? '')}.`.if(table[Table.Symbol.Schema])}${\n\t\t\t\tsql.identifier(table[Table.Symbol.OriginalName])\n\t\t\t} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t}\n\n\t\treturn table;\n\t}\n\n\tbuildSelectQuery(\n\t\t{\n\t\t\twithList,\n\t\t\tfields,\n\t\t\tfieldsFlat,\n\t\t\twhere,\n\t\t\thaving,\n\t\t\ttable,\n\t\t\tjoins,\n\t\t\torderBy,\n\t\t\tgroupBy,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tdistinct,\n\t\t\tsetOperators,\n\t\t}: SQLiteSelectConfig,\n\t): SQL {\n\t\tconst fieldsList = fieldsFlat ?? orderSelectedFields<SQLiteColumn>(fields);\n\t\tfor (const f of fieldsList) {\n\t\t\tif (\n\t\t\t\tis(f.field, Column)\n\t\t\t\t&& getTableName(f.field.table)\n\t\t\t\t\t!== (is(table, Subquery)\n\t\t\t\t\t\t? table._.alias\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].name\n\t\t\t\t\t\t: is(table, SQL)\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getTableName(table))\n\t\t\t\t&& !((table) =>\n\t\t\t\t\tjoins?.some(({ alias }) =>\n\t\t\t\t\t\talias === (table[Table.Symbol.IsAlias] ? getTableName(table) : table[Table.Symbol.BaseName])\n\t\t\t\t\t))(f.field.table)\n\t\t\t) {\n\t\t\t\tconst tableName = getTableName(f.field.table);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Your \"${\n\t\t\t\t\t\tf.path.join('->')\n\t\t\t\t\t}\" field references a column \"${tableName}\".\"${f.field.name}\", but the table \"${tableName}\" is not part of the query! Did you forget to join it?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst isSingleTable = !joins || joins.length === 0;\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst distinctSql = distinct ? sql` distinct` : undefined;\n\n\t\tconst selection = this.buildSelection(fieldsList, { isSingleTable });\n\n\t\tconst tableSql = this.buildFromTable(table);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\n\n\t\tconst groupByList: (SQL | AnyColumn | SQL.Aliased)[] = [];\n\t\tif (groupBy) {\n\t\t\tfor (const [index, groupByValue] of groupBy.entries()) {\n\t\t\t\tgroupByList.push(groupByValue);\n\n\t\t\t\tif (index < groupBy.length - 1) {\n\t\t\t\t\tgroupByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupBySql = groupByList.length > 0 ? sql` group by ${sql.join(groupByList)}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\tconst finalQuery =\n\t\t\tsql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}`;\n\n\t\tif (setOperators.length > 0) {\n\t\t\treturn this.buildSetOperations(finalQuery, setOperators);\n\t\t}\n\n\t\treturn finalQuery;\n\t}\n\n\tbuildSetOperations(leftSelect: SQL, setOperators: SQLiteSelectConfig['setOperators']): SQL {\n\t\tconst [setOperator, ...rest] = setOperators;\n\n\t\tif (!setOperator) {\n\t\t\tthrow new Error('Cannot pass undefined values to any set operator');\n\t\t}\n\n\t\tif (rest.length === 0) {\n\t\t\treturn this.buildSetOperationQuery({ leftSelect, setOperator });\n\t\t}\n\n\t\t// Some recursive magic here\n\t\treturn this.buildSetOperations(\n\t\t\tthis.buildSetOperationQuery({ leftSelect, setOperator }),\n\t\t\trest,\n\t\t);\n\t}\n\n\tbuildSetOperationQuery({\n\t\tleftSelect,\n\t\tsetOperator: { type, isAll, rightSelect, limit, orderBy, offset },\n\t}: { leftSelect: SQL; setOperator: SQLiteSelectConfig['setOperators'][number] }): SQL {\n\t\t// SQLite doesn't support parenthesis in set operations\n\t\tconst leftChunk = sql`${leftSelect.getSQL()} `;\n\t\tconst rightChunk = sql`${rightSelect.getSQL()}`;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\tconst orderByValues: (SQL<unknown> | Name)[] = [];\n\n\t\t\t// The next bit is necessary because the sql operator replaces ${table.column} with `table`.`column`\n\t\t\t// which is invalid Sql syntax, Table from one of the SELECTs cannot be used in global ORDER clause\n\t\t\tfor (const singleOrderBy of orderBy) {\n\t\t\t\tif (is(singleOrderBy, SQLiteColumn)) {\n\t\t\t\t\torderByValues.push(sql.identifier(singleOrderBy.name));\n\t\t\t\t} else if (is(singleOrderBy, SQL)) {\n\t\t\t\t\tfor (let i = 0; i < singleOrderBy.queryChunks.length; i++) {\n\t\t\t\t\t\tconst chunk = singleOrderBy.queryChunks[i];\n\n\t\t\t\t\t\tif (is(chunk, SQLiteColumn)) {\n\t\t\t\t\t\t\tsingleOrderBy.queryChunks[i] = sql.identifier(this.casing.getColumnCasing(chunk));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t} else {\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torderBySql = sql` order by ${sql.join(orderByValues, sql`, `)}`;\n\t\t}\n\n\t\tconst limitSql = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\n\t\tconst operatorChunk = sql.raw(`${type} ${isAll ? 'all ' : ''}`);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\treturn sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;\n\t}\n\n\tbuildInsertQuery(\n\t\t{ table, values: valuesOrSelect, onConflict, returning, withList, select }: SQLiteInsertConfig,\n\t): SQL {\n\t\t// const isSingleValue = values.length === 1;\n\t\tconst valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];\n\t\tconst columns: Record<string, SQLiteColumn> = table[Table.Symbol.Columns];\n\n\t\tconst colEntries: [string, SQLiteColumn][] = Object.entries(columns).filter(([_, col]) =>\n\t\t\t!col.shouldDisableInsert()\n\t\t);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));\n\n\t\tif (select) {\n\t\t\tconst select = valuesOrSelect as AnySQLiteSelectQueryBuilder | SQL;\n\n\t\t\tif (is(select, SQL)) {\n\t\t\t\tvaluesSqlList.push(select);\n\t\t\t} else {\n\t\t\t\tvaluesSqlList.push(select.getSQL());\n\t\t\t}\n\t\t} else {\n\t\t\tconst values = valuesOrSelect as Record<string, Param | SQL>[];\n\t\t\tvaluesSqlList.push(sql.raw('values '));\n\n\t\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\t\tif (colValue === undefined || (is(colValue, Param) && colValue.value === undefined)) {\n\t\t\t\t\t\tlet defaultValue;\n\t\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\t\tdefaultValue = is(col.default, SQL) ? col.default : sql.param(col.default, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL) ? defaultFnResult : sql.param(defaultFnResult, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (!col.default && col.onUpdateFn !== undefined) {\n\t\t\t\t\t\t\tconst onUpdateFnResult = col.onUpdateFn();\n\t\t\t\t\t\t\tdefaultValue = is(onUpdateFnResult, SQL) ? onUpdateFnResult : sql.param(onUpdateFnResult, col);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvaluesSqlList.push(valueList);\n\t\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst valuesSql = sql.join(valuesSqlList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst onConflictSql = onConflict?.length\n\t\t\t? sql.join(onConflict)\n\t\t\t: undefined;\n\n\t\t// if (isSingleValue && valuesSqlList.length === 0){\n\t\t// \treturn sql`insert into ${table} default values ${onConflictSql}${returningSql}`;\n\t\t// }\n\n\t\treturn sql`${withSql}insert into ${table} ${insertOrder} ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL, invokeSource?: 'indexes' | undefined): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tcasing: this.casing,\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t\tinvokeSource,\n\t\t});\n\t}\n\n\tbuildRelationalQuery({\n\t\tfullSchema,\n\t\tschema,\n\t\ttableNamesMap,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\ttableAlias,\n\t\tnestedQueryRelation,\n\t\tjoinOn,\n\t}: {\n\t\tfullSchema: Record<string, unknown>;\n\t\tschema: TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig: true | DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: Relation;\n\t\tjoinOn?: SQL;\n\t}): BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: BuildRelationalQueryResult<SQLiteTable, SQLiteColumn>['selection'] = [];\n\t\tlet limit, offset, orderBy: SQLiteSelectConfig['orderBy'] = [], where;\n\t\tconst joins: SQLiteSelectJoinConfig[] = [];\n\n\t\tif (config === true) {\n\t\t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t\t\tselection = selectionEntries.map((\n\t\t\t\t[key, value],\n\t\t\t) => ({\n\t\t\t\tdbKey: value.name,\n\t\t\t\ttsKey: key,\n\t\t\t\tfield: aliasedTableColumn(value as SQLiteColumn, tableAlias),\n\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\tisJson: false,\n\t\t\t\tselection: [],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst aliasedColumns = Object.fromEntries(\n\t\t\t\tObject.entries(tableConfig.columns).map(([key, value]) => [key, aliasedTableColumn(value, tableAlias)]),\n\t\t\t);\n\n\t\t\tif (config.where) {\n\t\t\t\tconst whereSql = typeof config.where === 'function'\n\t\t\t\t\t? config.where(aliasedColumns, getOperators())\n\t\t\t\t\t: config.where;\n\t\t\t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t\t\t}\n\n\t\t\tconst fieldsSelection: { tsKey: string; value: SQLiteColumn | SQL.Aliased }[] = [];\n\t\t\tlet selectedColumns: string[] = [];\n\n\t\t\t// Figure out which columns to select\n\t\t\tif (config.columns) {\n\t\t\t\tlet isIncludeMode = false;\n\n\t\t\t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field in tableConfig.columns) {\n\t\t\t\t\t\tif (!isIncludeMode && value === true) {\n\t\t\t\t\t\t\tisIncludeMode = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedColumns.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (selectedColumns.length > 0) {\n\t\t\t\t\tselectedColumns = isIncludeMode\n\t\t\t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t\t\t\t\t\t: Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Select all columns if selection is not specified\n\t\t\t\tselectedColumns = Object.keys(tableConfig.columns);\n\t\t\t}\n\n\t\t\tfor (const field of selectedColumns) {\n\t\t\t\tconst column = tableConfig.columns[field]! as SQLiteColumn;\n\t\t\t\tfieldsSelection.push({ tsKey: field, value: column });\n\t\t\t}\n\n\t\t\tlet selectedRelations: {\n\t\t\t\ttsKey: string;\n\t\t\t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t\t\t\trelation: Relation;\n\t\t\t}[] = [];\n\n\t\t\t// Figure out which relations to select\n\t\t\tif (config.with) {\n\t\t\t\tselectedRelations = Object.entries(config.with)\n\t\t\t\t\t.filter((entry): entry is [typeof entry[0], NonNullable<typeof entry[1]>] => !!entry[1])\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({ tsKey, queryConfig, relation: tableConfig.relations[tsKey]! }));\n\t\t\t}\n\n\t\t\tlet extras;\n\n\t\t\t// Figure out which extras to select\n\t\t\tif (config.extras) {\n\t\t\t\textras = typeof config.extras === 'function'\n\t\t\t\t\t? config.extras(aliasedColumns, { sql })\n\t\t\t\t\t: config.extras;\n\t\t\t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t\t\t\t\tfieldsSelection.push({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Transform `fieldsSelection` into `selection`\n\t\t\t// `fieldsSelection` shouldn't be used after this point\n\t\t\tfor (const { tsKey, value } of fieldsSelection) {\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: is(value, SQL.Aliased) ? value.fieldAlias : tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column) ? aliasedTableColumn(value, tableAlias) : value,\n\t\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\t\tisJson: false,\n\t\t\t\t\tselection: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet orderByOrig = typeof config.orderBy === 'function'\n\t\t\t\t? config.orderBy(aliasedColumns, getOrderByOperators())\n\t\t\t\t: config.orderBy ?? [];\n\t\t\tif (!Array.isArray(orderByOrig)) {\n\t\t\t\torderByOrig = [orderByOrig];\n\t\t\t}\n\t\t\torderBy = orderByOrig.map((orderByValue) => {\n\t\t\t\tif (is(orderByValue, Column)) {\n\t\t\t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as SQLiteColumn;\n\t\t\t\t}\n\t\t\t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t\t\t});\n\n\t\t\tlimit = config.limit;\n\t\t\toffset = config.offset;\n\n\t\t\t// Process all relations\n\t\t\tfor (\n\t\t\t\tconst {\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tqueryConfig: selectedRelationConfigValue,\n\t\t\t\t\trelation,\n\t\t\t\t} of selectedRelations\n\t\t\t) {\n\t\t\t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t\t\t\tconst relationTableName = getTableUniqueName(relation.referencedTable);\n\t\t\t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t\t\t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t\t\t\t// const relationTable = schema[relationTableTsName]!;\n\t\t\t\tconst joinOn = and(\n\t\t\t\t\t...normalizedRelation.fields.map((field, i) =>\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t\t\t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst builtRelation = this.buildRelationalQuery({\n\t\t\t\t\tfullSchema,\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\ttable: fullSchema[relationTableTsName] as SQLiteTable,\n\t\t\t\t\ttableConfig: schema[relationTableTsName]!,\n\t\t\t\t\tqueryConfig: is(relation, One)\n\t\t\t\t\t\t? (selectedRelationConfigValue === true\n\t\t\t\t\t\t\t? { limit: 1 }\n\t\t\t\t\t\t\t: { ...selectedRelationConfigValue, limit: 1 })\n\t\t\t\t\t\t: selectedRelationConfigValue,\n\t\t\t\t\ttableAlias: relationTableAlias,\n\t\t\t\t\tjoinOn,\n\t\t\t\t\tnestedQueryRelation: relation,\n\t\t\t\t});\n\t\t\t\tconst field = (sql`(${builtRelation.sql})`).as(selectedRelationTsKey);\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: selectedRelationTsKey,\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tfield,\n\t\t\t\t\trelationTableTsKey: relationTableTsName,\n\t\t\t\t\tisJson: true,\n\t\t\t\t\tselection: builtRelation.selection,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (selection.length === 0) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t`No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\"). You need to have at least one item in \"columns\", \"with\" or \"extras\". If you need to select all columns, omit the \"columns\" key or set it to undefined.`,\n\t\t\t});\n\t\t}\n\n\t\tlet result;\n\n\t\twhere = and(joinOn, where);\n\n\t\tif (nestedQueryRelation) {\n\t\t\tlet field = sql`json_array(${\n\t\t\t\tsql.join(\n\t\t\t\t\tselection.map(({ field }) =>\n\t\t\t\t\t\tis(field, SQLiteColumn)\n\t\t\t\t\t\t\t? sql.identifier(this.casing.getColumnCasing(field))\n\t\t\t\t\t\t\t: is(field, SQL.Aliased)\n\t\t\t\t\t\t\t? field.sql\n\t\t\t\t\t\t\t: field\n\t\t\t\t\t),\n\t\t\t\t\tsql`, `,\n\t\t\t\t)\n\t\t\t})`;\n\t\t\tif (is(nestedQueryRelation, Many)) {\n\t\t\t\tfield = sql`coalesce(json_group_array(${field}), json_array())`;\n\t\t\t}\n\t\t\tconst nestedSelection = [{\n\t\t\t\tdbKey: 'data',\n\t\t\t\ttsKey: 'data',\n\t\t\t\tfield: field.as('data'),\n\t\t\t\tisJson: true,\n\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\tselection,\n\t\t\t}];\n\n\t\t\tconst needsSubquery = limit !== undefined || offset !== undefined || orderBy.length > 0;\n\n\t\t\tif (needsSubquery) {\n\t\t\t\tresult = this.buildSelectQuery({\n\t\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\t\tfields: {},\n\t\t\t\t\tfieldsFlat: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\t\tfield: sql.raw('*'),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit,\n\t\t\t\t\toffset,\n\t\t\t\t\torderBy,\n\t\t\t\t\tsetOperators: [],\n\t\t\t\t});\n\n\t\t\t\twhere = undefined;\n\t\t\t\tlimit = undefined;\n\t\t\t\toffset = undefined;\n\t\t\t\torderBy = undefined;\n\t\t\t} else {\n\t\t\t\tresult = aliasedTable(table, tableAlias);\n\t\t\t}\n\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: is(result, SQLiteTable) ? result : new Subquery(result, {}, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: nestedSelection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: selection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttableTsKey: tableConfig.tsName,\n\t\t\tsql: result,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'sync', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tconfig?: string | MigrationConfig,\n\t): void {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tsession.run(migrationTableCreate);\n\n\t\tconst dbMigrations = session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tsession.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsession.run(sql`COMMIT`);\n\t\t} catch (e) {\n\t\t\tsession.run(sql`ROLLBACK`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class SQLiteAsyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'async', any, any, any>,\n\t\tconfig?: string | MigrationConfig,\n\t): Promise<void> {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\n\t\tconst dbMigrations = await session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tawait tx.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SQL, SQLWrapper } from '~/sql/index.ts';\n\nexport abstract class TypedQueryBuilder<TSelection, TResult = unknown, TConfig = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'TypedQueryBuilder';\n\n\tdeclare _: {\n\t\tselectedFields: TSelection;\n\t\tresult: TResult;\n\t\tconfig?: TConfig;\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): TSelection {\n\t\treturn this._.selectedFields;\n\t}\n\n\tabstract getSQL(): SQL;\n}\n", "import type { CacheConfig, WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type {\n\tBuildSubquerySelection,\n\tGetSelectTableName,\n\tGetSelectTableSelection,\n\tJoinNullability,\n\tJoinType,\n\tSelectMode,\n\tSelectResult,\n\tSetOperator,\n} from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { SQL, View } from '~/sql/sql.ts';\nimport type { ColumnsSelection, Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLiteSession } from '~/sqlite-core/session.ts';\nimport type { SubqueryWithSelection } from '~/sqlite-core/subquery.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tapplyMixins,\n\tgetTableColumns,\n\tgetTableLikeName,\n\thaveSameKeys,\n\torderSelectedFields,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type {\n\tAnySQLiteSelect,\n\tCreateSQLiteSelectFromBuilderMode,\n\tGetSQLiteSetOperators,\n\tSelectedFields,\n\tSetOperatorRightSelect,\n\tSQLiteCreateSetOperatorFn,\n\tSQLiteSelectConfig,\n\tSQLiteSelectCrossJoinFn,\n\tSQLiteSelectDynamic,\n\tSQLiteSelectExecute,\n\tSQLiteSelectHKT,\n\tSQLiteSelectHKTBase,\n\tSQLiteSelectJoinFn,\n\tSQLiteSelectPrepare,\n\tSQLiteSelectWithout,\n\tSQLiteSetOperatorExcludedMethods,\n\tSQLiteSetOperatorWithResult,\n} from './select.types.ts';\n\nexport class SQLiteSelectBuilder<\n\tTSelection extends SelectedFields | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTBuilderMode extends 'db' | 'qb' = 'db',\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSelectBuilder';\n\n\tprivate fields: TSelection;\n\tprivate session: SQLiteSession<any, any, any, any> | undefined;\n\tprivate dialect: SQLiteDialect;\n\tprivate withList: Subquery[] | undefined;\n\tprivate distinct: boolean | undefined;\n\n\tconstructor(\n\t\tconfig: {\n\t\t\tfields: TSelection;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList?: Subquery[];\n\t\t\tdistinct?: boolean;\n\t\t},\n\t) {\n\t\tthis.fields = config.fields;\n\t\tthis.session = config.session;\n\t\tthis.dialect = config.dialect;\n\t\tthis.withList = config.withList;\n\t\tthis.distinct = config.distinct;\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): CreateSQLiteSelectFromBuilderMode<\n\t\tTBuilderMode,\n\t\tGetSelectTableName<TFrom>,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection extends undefined ? GetSelectTableSelection<TFrom> : TSelection,\n\t\tTSelection extends undefined ? 'single' : 'partial'\n\t> {\n\t\tconst isPartialSelect = !!this.fields;\n\n\t\tlet fields: SelectedFields;\n\t\tif (this.fields) {\n\t\t\tfields = this.fields;\n\t\t} else if (is(source, Subquery)) {\n\t\t\t// This is required to use the proxy handler to get the correct field values from the subquery\n\t\t\tfields = Object.fromEntries(\n\t\t\t\tObject.keys(source._.selectedFields).map((\n\t\t\t\t\tkey,\n\t\t\t\t) => [key, source[key as unknown as keyof typeof source] as unknown as SelectedFields[string]]),\n\t\t\t);\n\t\t} else if (is(source, SQLiteViewBase)) {\n\t\t\tfields = source[ViewBaseConfig].selectedFields as SelectedFields;\n\t\t} else if (is(source, SQL)) {\n\t\t\tfields = {};\n\t\t} else {\n\t\t\tfields = getTableColumns<SQLiteTable>(source);\n\t\t}\n\n\t\treturn new SQLiteSelectBase({\n\t\t\ttable: source,\n\t\t\tfields,\n\t\t\tisPartialSelect,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\twithList: this.withList,\n\t\t\tdistinct: this.distinct,\n\t\t}) as any;\n\t}\n}\n\nexport abstract class SQLiteSelectQueryBuilderBase<\n\tTHKT extends SQLiteSelectHKTBase,\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends TypedQueryBuilder<TSelectedFields, TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelectQueryBuilder';\n\n\toverride readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly hkt: THKT;\n\t\treadonly tableName: TTableName;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly selection: TSelection;\n\t\treadonly selectMode: TSelectMode;\n\t\treadonly nullabilityMap: TNullabilityMap;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly config: SQLiteSelectConfig;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteSelectConfig;\n\tprotected joinsNotNullableMap: Record<string, boolean>;\n\tprivate tableName: string | undefined;\n\tprivate isPartialSelect: boolean;\n\tprotected session: SQLiteSession<any, any, any, any> | undefined;\n\tprotected dialect: SQLiteDialect;\n\tprotected cacheConfig?: WithCacheConfig = undefined;\n\tprotected usedTables: Set<string> = new Set();\n\n\tconstructor(\n\t\t{ table, fields, isPartialSelect, session, dialect, withList, distinct }: {\n\t\t\ttable: SQLiteSelectConfig['table'];\n\t\t\tfields: SQLiteSelectConfig['fields'];\n\t\t\tisPartialSelect: boolean;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList: Subquery[] | undefined;\n\t\t\tdistinct: boolean | undefined;\n\t\t},\n\t) {\n\t\tsuper();\n\t\tthis.config = {\n\t\t\twithList,\n\t\t\ttable,\n\t\t\tfields: { ...fields },\n\t\t\tdistinct,\n\t\t\tsetOperators: [],\n\t\t};\n\t\tthis.isPartialSelect = isPartialSelect;\n\t\tthis.session = session;\n\t\tthis.dialect = dialect;\n\t\tthis._ = {\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\tconfig: this.config,\n\t\t} as this['_'];\n\t\tthis.tableName = getTableLikeName(table);\n\t\tthis.joinsNotNullableMap = typeof this.tableName === 'string' ? { [this.tableName]: true } : {};\n\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\t}\n\n\t/** @internal */\n\tgetUsedTables() {\n\t\treturn [...this.usedTables];\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): 'cross' extends TJoinType ? SQLiteSelectCrossJoinFn<this, TDynamic>\n\t\t: SQLiteSelectJoinFn<this, TDynamic, TJoinType>\n\t{\n\t\treturn (\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton?: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst baseTableName = this.tableName;\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\t// store all tables used in a query\n\t\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins?.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (!this.isPartialSelect) {\n\t\t\t\t// If this is the first join and this is not a partial select and we're not selecting from raw SQL, \"move\" the fields from the main table to the nested object\n\t\t\t\tif (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === 'string') {\n\t\t\t\t\tthis.config.fields = {\n\t\t\t\t\t\t[baseTableName]: this.config.fields,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (typeof tableName === 'string' && !is(table, SQL)) {\n\t\t\t\t\tconst selection = is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, View)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: table[Table.Symbol.Columns];\n\t\t\t\t\tthis.config.fields[tableName] = selection;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.fields,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as TSelection,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!this.config.joins) {\n\t\t\t\tthis.config.joins = [];\n\t\t\t}\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\tif (typeof tableName === 'string') {\n\t\t\t\tswitch (joinType) {\n\t\t\t\t\tcase 'left': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'right': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'cross':\n\t\t\t\t\tcase 'inner': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'full': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Executes a `left join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the table with the corresponding row from the joined table, if a match is found. If no matching row exists, it sets all columns of the joined table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#left-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tleftJoin = this.createJoin('left');\n\n\t/**\n\t * Executes a `right join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the joined table with the corresponding row from the main table, if a match is found. If no matching row exists, it sets all columns of the main table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#right-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\trightJoin = this.createJoin('right');\n\n\t/**\n\t * Executes an `inner join` operation, creating a new table by combining rows from two tables that have matching values.\n\t *\n\t * Calling this method retrieves rows that have corresponding entries in both joined tables. Rows without matching entries in either table are excluded, resulting in a table that includes only matching pairs.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#inner-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tinnerJoin = this.createJoin('inner');\n\n\t/**\n\t * Executes a `full join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging rows with matching values and filling in `null` for non-matching columns.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#full-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Executes a `cross join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging all rows from each table.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#cross-join}\n\t *\n\t * @param table the table to join.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users, each user with every pet\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .crossJoin(pets)\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .crossJoin(pets)\n\t * ```\n\t */\n\tcrossJoin = this.createJoin('cross');\n\n\tprivate createSetOperator(\n\t\ttype: SetOperator,\n\t\tisAll: boolean,\n\t): <TValue extends SQLiteSetOperatorWithResult<TResult>>(\n\t\trightSelection:\n\t\t\t| ((setOperators: GetSQLiteSetOperators) => SetOperatorRightSelect<TValue, TResult>)\n\t\t\t| SetOperatorRightSelect<TValue, TResult>,\n\t) => SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\treturn (rightSelection) => {\n\t\t\tconst rightSelect = (typeof rightSelection === 'function'\n\t\t\t\t? rightSelection(getSQLiteSetOperators())\n\t\t\t\t: rightSelection) as TypedQueryBuilder<\n\t\t\t\t\tany,\n\t\t\t\t\tTResult\n\t\t\t\t>;\n\n\t\t\tif (!haveSameKeys(this.getSelectedFields(), rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.setOperators.push({ type, isAll, rightSelect });\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Adds `union` set operator to the query.\n\t *\n\t * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique names from customers and users tables\n\t * await db.select({ name: users.name })\n\t * .from(users)\n\t * .union(\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * // or\n\t * import { union } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await union(\n\t * db.select({ name: users.name }).from(users),\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * ```\n\t */\n\tunion = this.createSetOperator('union', false);\n\n\t/**\n\t * Adds `union all` set operator to the query.\n\t *\n\t * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all transaction ids from both online and in-store sales\n\t * await db.select({ transaction: onlineSales.transactionId })\n\t * .from(onlineSales)\n\t * .unionAll(\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * // or\n\t * import { unionAll } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await unionAll(\n\t * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * ```\n\t */\n\tunionAll = this.createSetOperator('union', true);\n\n\t/**\n\t * Adds `intersect` set operator to the query.\n\t *\n\t * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select course names that are offered in both departments A and B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .intersect(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { intersect } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await intersect(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\tintersect = this.createSetOperator('intersect', false);\n\n\t/**\n\t * Adds `except` set operator to the query.\n\t *\n\t * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all courses offered in department A but not in department B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .except(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { except } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await except(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\texcept = this.createSetOperator('except', false);\n\n\t/** @internal */\n\taddSetOperators(setOperators: SQLiteSelectConfig['setOperators']): SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\tthis.config.setOperators.push(...setOperators);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#filtering}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be selected.\n\t *\n\t * ```ts\n\t * // Select all cars with green color\n\t * await db.select().from(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.select().from(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Select all BMW cars with a green color\n\t * await db.select().from(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Select all cars with the green or blue color\n\t * await db.select().from(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(\n\t\twhere: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'where'> {\n\t\tif (typeof where === 'function') {\n\t\t\twhere = where(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `having` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition. It is typically used with aggregate functions to filter the aggregated data based on a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @param having the `having` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all brands with more than one car\n\t * await db.select({\n\t * \tbrand: cars.brand,\n\t * \tcount: sql<number>`cast(count(${cars.id}) as int)`,\n\t * })\n\t * .from(cars)\n\t * .groupBy(cars.brand)\n\t * .having(({ count }) => gt(count, 1));\n\t * ```\n\t */\n\thaving(\n\t\thaving: ((aliases: this['_']['selection']) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'having'> {\n\t\tif (typeof having === 'function') {\n\t\t\thaving = having(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.having = having;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `group by` clause to the query.\n\t *\n\t * Calling this method will group rows that have the same values into summary rows, often used for aggregation purposes.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Group and count people by their last names\n\t * await db.select({\n\t * lastName: people.lastName,\n\t * count: sql<number>`cast(count(*) as int)`\n\t * })\n\t * .from(people)\n\t * .groupBy(people.lastName);\n\t * ```\n\t */\n\tgroupBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst groupBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t\tthis.config.groupBy = Array.isArray(groupBy) ? groupBy : [groupBy];\n\t\t} else {\n\t\t\tthis.config.groupBy = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `order by` clause to the query.\n\t *\n\t * Calling this method will sort the result-set in ascending or descending order. By default, the sort order is ascending.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#order-by}\n\t *\n\t * @example\n\t *\n\t * ```\n\t * // Select cars ordered by year\n\t * await db.select().from(cars).orderBy(cars.year);\n\t * ```\n\t *\n\t * You can specify whether results are in ascending or descending order with the `asc()` and `desc()` operators.\n\t *\n\t * ```ts\n\t * // Select cars ordered by year in descending order\n\t * await db.select().from(cars).orderBy(desc(cars.year));\n\t *\n\t * // Select cars ordered by year and price\n\t * await db.select().from(cars).orderBy(asc(cars.year), desc(cars.price));\n\t * ```\n\t */\n\torderBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `limit` clause to the query.\n\t *\n\t * Calling this method will set the maximum number of rows that will be returned by this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param limit the `limit` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the first 10 people from this query.\n\t * await db.select().from(people).limit(10);\n\t * ```\n\t */\n\tlimit(limit: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'limit'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.limit = limit;\n\t\t} else {\n\t\t\tthis.config.limit = limit;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `offset` clause to the query.\n\t *\n\t * Calling this method will skip a number of rows when returning results from this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param offset the `offset` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the 10th-20th people from this query.\n\t * await db.select().from(people).offset(10).limit(10);\n\t * ```\n\t */\n\toffset(offset: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'offset'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.offset = offset;\n\t\t} else {\n\t\t\tthis.config.offset = offset;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildSelectQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\tas<TAlias extends string>(\n\t\talias: TAlias,\n\t): SubqueryWithSelection<this['_']['selectedFields'], TAlias> {\n\t\tconst usedTables: string[] = [];\n\t\tusedTables.push(...extractUsedTable(this.config.table));\n\t\tif (this.config.joins) { for (const it of this.config.joins) usedTables.push(...extractUsedTable(it.table)); }\n\n\t\treturn new Proxy(\n\t\t\tnew Subquery(this.getSQL(), this.config.fields, alias, false, [...new Set(usedTables)]),\n\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as SubqueryWithSelection<this['_']['selectedFields'], TAlias>;\n\t}\n\n\t/** @internal */\n\toverride getSelectedFields(): this['_']['selectedFields'] {\n\t\treturn new Proxy(\n\t\t\tthis.config.fields,\n\t\t\tnew SelectionProxyHandler({ alias: this.tableName, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): SQLiteSelectDynamic<this> {\n\t\treturn this;\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends\n\tSQLiteSelectQueryBuilderBase<\n\t\tSQLiteSelectHKT,\n\t\tTTableName,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection,\n\t\tTSelectMode,\n\t\tTNullabilityMap,\n\t\tTDynamic,\n\t\tTExcludedMethods,\n\t\tTResult,\n\t\tTSelectedFields\n\t>,\n\tQueryPromise<TResult>\n{}\n\nexport class SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends SQLiteSelectQueryBuilderBase<\n\tSQLiteSelectHKT,\n\tTTableName,\n\tTResultType,\n\tTRunResult,\n\tTSelection,\n\tTSelectMode,\n\tTNullabilityMap,\n\tTDynamic,\n\tTExcludedMethods,\n\tTResult,\n\tTSelectedFields\n> implements RunnableQuery<TResult, 'sqlite'>, SQLWrapper {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelect';\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteSelectPrepare<this> {\n\t\tif (!this.session) {\n\t\t\tthrow new Error('Cannot execute a query on a query builder. Please use a database instance instead.');\n\t\t}\n\t\tconst fieldsList = orderSelectedFields<SQLiteColumn>(this.config.fields);\n\t\tconst query = this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tfieldsList,\n\t\t\t'all',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'select',\n\t\t\t\ttables: [...this.usedTables],\n\t\t\t},\n\t\t\tthis.cacheConfig,\n\t\t);\n\t\tquery.joinsNotNullableMap = this.joinsNotNullableMap;\n\t\treturn query as ReturnType<this['prepare']>;\n\t}\n\n\t$withCache(config?: { config?: CacheConfig; tag?: string; autoInvalidate?: boolean } | false) {\n\t\tthis.cacheConfig = config === undefined\n\t\t\t? { config: {}, enable: true, autoInvalidate: true }\n\t\t\t: config === false\n\t\t\t? { enable: false }\n\t\t\t: { enable: true, autoInvalidate: true, ...config };\n\t\treturn this;\n\t}\n\n\tprepare(): SQLiteSelectPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\tasync execute(): Promise<SQLiteSelectExecute<this>> {\n\t\treturn this.all() as SQLiteSelectExecute<this>;\n\t}\n}\n\napplyMixins(SQLiteSelectBase, [QueryPromise]);\n\nfunction createSetOperator(type: SetOperator, isAll: boolean): SQLiteCreateSetOperatorFn {\n\treturn (leftSelect, rightSelect, ...restSelects) => {\n\t\tconst setOperators = [rightSelect, ...restSelects].map((select) => ({\n\t\t\ttype,\n\t\t\tisAll,\n\t\t\trightSelect: select as AnySQLiteSelect,\n\t\t}));\n\n\t\tfor (const setOperator of setOperators) {\n\t\t\tif (!haveSameKeys((leftSelect as any).getSelectedFields(), setOperator.rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn (leftSelect as AnySQLiteSelect).addSetOperators(setOperators) as any;\n\t};\n}\n\nconst getSQLiteSetOperators = () => ({\n\tunion,\n\tunionAll,\n\tintersect,\n\texcept,\n});\n\n/**\n * Adds `union` set operator to the query.\n *\n * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n *\n * @example\n *\n * ```ts\n * // Select all unique names from customers and users tables\n * import { union } from 'drizzle-orm/sqlite-core'\n *\n * await union(\n * db.select({ name: users.name }).from(users),\n * db.select({ name: customers.name }).from(customers)\n * );\n * // or\n * await db.select({ name: users.name })\n * .from(users)\n * .union(\n * db.select({ name: customers.name }).from(customers)\n * );\n * ```\n */\nexport const union = createSetOperator('union', false);\n\n/**\n * Adds `union all` set operator to the query.\n *\n * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n *\n * @example\n *\n * ```ts\n * // Select all transaction ids from both online and in-store sales\n * import { unionAll } from 'drizzle-orm/sqlite-core'\n *\n * await unionAll(\n * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * // or\n * await db.select({ transaction: onlineSales.transactionId })\n * .from(onlineSales)\n * .unionAll(\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * ```\n */\nexport const unionAll = createSetOperator('union', true);\n\n/**\n * Adds `intersect` set operator to the query.\n *\n * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n *\n * @example\n *\n * ```ts\n * // Select course names that are offered in both departments A and B\n * import { intersect } from 'drizzle-orm/sqlite-core'\n *\n * await intersect(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .intersect(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const intersect = createSetOperator('intersect', false);\n\n/**\n * Adds `except` set operator to the query.\n *\n * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n *\n * @example\n *\n * ```ts\n * // Select all courses offered in department A but not in department B\n * import { except } from 'drizzle-orm/sqlite-core'\n *\n * await except(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .except(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const except = createSetOperator('except', false);\n", "import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL } from '~/sql/sql.ts';\nimport type { SQLiteDialectConfig } from '~/sqlite-core/dialect.ts';\nimport { SQLiteDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { WithBuilder } from '~/sqlite-core/subquery.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport { SQLiteSelectBuilder } from './select.ts';\nimport type { SelectedFields } from './select.types.ts';\n\nexport class QueryBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteQueryBuilder';\n\n\tprivate dialect: SQLiteDialect | undefined;\n\tprivate dialectConfig: SQLiteDialectConfig | undefined;\n\n\tconstructor(dialect?: SQLiteDialect | SQLiteDialectConfig) {\n\t\tthis.dialect = is(dialect, SQLiteDialect) ? dialect : undefined;\n\t\tthis.dialectConfig = is(dialect, SQLiteDialect) ? undefined : dialect;\n\t}\n\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst queryBuilder = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(queryBuilder);\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t) as any;\n\t\t};\n\t\treturn { as };\n\t};\n\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\tfunction select(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\treturn { select, selectDistinct };\n\t}\n\n\tselect(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: undefined, dialect: this.getDialect() });\n\t}\n\n\tselectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: undefined,\n\t\t\tdialect: this.getDialect(),\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t// Lazy load dialect to avoid circular dependency\n\tprivate getDialect() {\n\t\tif (!this.dialect) {\n\t\t\tthis.dialect = new SQLiteSyncDialect(this.dialectConfig);\n\t\t}\n\n\t\treturn this.dialect;\n\t}\n}\n", "import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport { Param, SQL, sql } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { IndexColumn } from '~/sqlite-core/indexes.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Columns, Table } from '~/table.ts';\nimport { type DrizzleTypeError, haveSameKeys, mapUpdateSet, orderSelectedFields, type Simplify } from '~/utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { QueryBuilder } from './query-builder.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\nimport type { SQLiteUpdateSetSource } from './update.ts';\n\nexport interface SQLiteInsertConfig<TTable extends SQLiteTable = SQLiteTable> {\n\ttable: TTable;\n\tvalues: Record<string, Param | SQL>[] | SQLiteInsertSelectQueryBuilder<TTable> | SQL;\n\twithList?: Subquery[];\n\tonConflict?: SQL[];\n\treturning?: SelectedFieldsOrdered;\n\tselect?: boolean;\n}\n\nexport type SQLiteInsertValue<TTable extends SQLiteTable> = Simplify<\n\t{\n\t\t[Key in keyof TTable['$inferInsert']]: TTable['$inferInsert'][Key] | SQL | Placeholder;\n\t}\n>;\n\nexport type SQLiteInsertSelectQueryBuilder<TTable extends SQLiteTable> = TypedQueryBuilder<\n\t{ [K in keyof TTable['$inferInsert']]: AnySQLiteColumn | SQL | SQL.Aliased | TTable['$inferInsert'][K] }\n>;\n\nexport class SQLiteInsertBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteInsertBuilder';\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tvalues(value: SQLiteInsertValue<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(values: SQLiteInsertValue<TTable>[]): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(\n\t\tvalues: SQLiteInsertValue<TTable> | SQLiteInsertValue<TTable>[],\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tvalues = Array.isArray(values) ? values : [values];\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('values() must be called with at least one value');\n\t\t}\n\t\tconst mappedValues = values.map((entry) => {\n\t\t\tconst result: Record<string, Param | SQL> = {};\n\t\t\tconst cols = this.table[Table.Symbol.Columns];\n\t\t\tfor (const colKey of Object.keys(entry)) {\n\t\t\t\tconst colValue = entry[colKey as keyof typeof entry];\n\t\t\t\tresult[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\n\t\t// if (mappedValues.length > 1 && mappedValues.some((t) => Object.keys(t).length === 0)) {\n\t\t// \tthrow new Error(\n\t\t// \t\t`One of the values you want to insert is empty. In SQLite you can insert only one empty object per statement. For this case Drizzle with use \"INSERT INTO ... DEFAULT VALUES\" syntax`,\n\t\t// \t);\n\t\t// }\n\n\t\treturn new SQLiteInsertBase(this.table, mappedValues, this.session, this.dialect, this.withList);\n\t}\n\n\tselect(\n\t\tselectQuery: (qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable>,\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: (qb: QueryBuilder) => SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQLiteInsertSelectQueryBuilder<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(\n\t\tselectQuery:\n\t\t\t| SQL\n\t\t\t| SQLiteInsertSelectQueryBuilder<TTable>\n\t\t\t| ((qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable> | SQL),\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tconst select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;\n\n\t\tif (\n\t\t\t!is(select, SQL)\n\t\t\t&& !haveSameKeys(this.table[Columns], select._.selectedFields)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'Insert select error: selected fields are not the same or are in a different order compared to the table definition',\n\t\t\t);\n\t\t}\n\n\t\treturn new SQLiteInsertBase(this.table, select, this.session, this.dialect, this.withList, true);\n\t}\n}\n\nexport type SQLiteInsertWithout<T extends AnySQLiteInsert, TDynamic extends boolean, K extends keyof T & string> =\n\tTDynamic extends true ? T\n\t\t: Omit<\n\t\t\tSQLiteInsertBase<\n\t\t\t\tT['_']['table'],\n\t\t\t\tT['_']['resultType'],\n\t\t\t\tT['_']['runResult'],\n\t\t\t\tT['_']['returning'],\n\t\t\t\tTDynamic,\n\t\t\t\tT['_']['excludedMethods'] | K\n\t\t\t>,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>;\n\nexport type SQLiteInsertReturning<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertReturningAll<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertOnConflictDoUpdateConfig<T extends AnySQLiteInsert> = {\n\ttarget: IndexColumn | IndexColumn[];\n\t/** @deprecated - use either `targetWhere` or `setWhere` */\n\twhere?: SQL;\n\t// TODO: add tests for targetWhere and setWhere\n\ttargetWhere?: SQL;\n\tsetWhere?: SQL;\n\tset: SQLiteUpdateSetSource<T['_']['table']>;\n};\n\nexport type SQLiteInsertDynamic<T extends AnySQLiteInsert> = SQLiteInsert<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteInsertExecute<T extends AnySQLiteInsert> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteInsertPrepare<T extends AnySQLiteInsert> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteInsertExecute<T>;\n\t}\n>;\n\nexport type AnySQLiteInsert = SQLiteInsertBase<any, any, any, any, any, any>;\n\nexport type SQLiteInsert<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning = any,\n> = SQLiteInsertBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tSQLWrapper,\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>\n{\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteInsert';\n\n\t/** @internal */\n\tconfig: SQLiteInsertConfig<TTable>;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tvalues: SQLiteInsertConfig['values'],\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t\tselect?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, values: values as any, withList, select };\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the inserted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#insert-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and return all fields\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t *\n\t * // Insert one row and return only the id\n\t * const insertedCarId: { id: number }[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning({ id: cars.id });\n\t * ```\n\t */\n\treturning(): SQLiteInsertReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteInsertReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteInsertWithout<AnySQLiteInsert, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do nothing` clause to the query.\n\t *\n\t * Calling this method simply avoids inserting a row as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#on-conflict-do-nothing}\n\t *\n\t * @param config The `target` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and cancel the insert if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing();\n\t *\n\t * // Explicitly specify conflict target\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing({ target: cars.id });\n\t * ```\n\t */\n\tonConflictDoNothing(config: { target?: IndexColumn | IndexColumn[]; where?: SQL } = {}): this {\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tif (config.target === undefined) {\n\t\t\tthis.config.onConflict.push(sql` on conflict do nothing`);\n\t\t} else {\n\t\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\t\tconst whereSql = config.where ? sql` where ${config.where}` : sql``;\n\t\t\tthis.config.onConflict.push(sql` on conflict ${targetSql} do nothing${whereSql}`);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds an `on conflict do update` clause to the query.\n\t *\n\t * Calling this method will update the existing row that conflicts with the row proposed for insertion as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#upserts-and-conflicts}\n\t *\n\t * @param config The `target`, `set` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Update the row if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'Porsche' }\n\t * });\n\t *\n\t * // Upsert with 'where' clause\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'newBMW' },\n\t * where: sql`${cars.createdAt} > '2023-01-01'::date`,\n\t * });\n\t * ```\n\t */\n\tonConflictDoUpdate(config: SQLiteInsertOnConflictDoUpdateConfig<this>): this {\n\t\tif (config.where && (config.targetWhere || config.setWhere)) {\n\t\t\tthrow new Error(\n\t\t\t\t'You cannot use both \"where\" and \"targetWhere\"/\"setWhere\" at the same time - \"where\" is deprecated, use \"targetWhere\" or \"setWhere\" instead.',\n\t\t\t);\n\t\t}\n\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\tconst targetWhereSql = config.targetWhere ? sql` where ${config.targetWhere}` : undefined;\n\t\tconst setWhereSql = config.setWhere ? sql` where ${config.setWhere}` : undefined;\n\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\tconst setSql = this.dialect.buildUpdateSet(this.config.table, mapUpdateSet(this.config.table, config.set));\n\t\tthis.config.onConflict.push(\n\t\t\tsql` on conflict ${targetSql}${targetWhereSql} do update set ${setSql}${whereSql}${setWhereSql}`,\n\t\t);\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildInsertQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteInsertPrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteInsertPrepare<this>;\n\t}\n\n\tprepare(): SQLiteInsertPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteInsertExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteInsertExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteInsertDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "//# sourceMappingURL=select.types.js.map", "import type { GetColumnData } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { JoinType, SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\ttype DrizzleTypeError,\n\tgetTableLikeName,\n\tmapUpdateSet,\n\torderSelectedFields,\n\ttype UpdateSet,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type { SelectedFields, SelectedFieldsOrdered, SQLiteSelectJoinConfig } from './select.types.ts';\n\nexport interface SQLiteUpdateConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\tset: UpdateSet;\n\ttable: SQLiteTable;\n\tfrom?: SQLiteTable | Subquery | SQLiteViewBase | SQL;\n\tjoins: SQLiteSelectJoinConfig[];\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteUpdateSetSource<TTable extends SQLiteTable> =\n\t& {\n\t\t[Key in keyof TTable['$inferInsert']]?:\n\t\t\t| GetColumnData<TTable['_']['columns'][Key], 'query'>\n\t\t\t| SQL\n\t\t\t| SQLiteColumn\n\t\t\t| undefined;\n\t}\n\t& {};\n\nexport class SQLiteUpdateBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteUpdateBuilder';\n\n\tdeclare readonly _: {\n\t\treadonly table: TTable;\n\t};\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tset(\n\t\tvalues: SQLiteUpdateSetSource<TTable>,\n\t): SQLiteUpdateWithout<\n\t\tSQLiteUpdateBase<TTable, TResultType, TRunResult>,\n\t\tfalse,\n\t\t'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'\n\t> {\n\t\treturn new SQLiteUpdateBase(\n\t\t\tthis.table,\n\t\t\tmapUpdateSet(this.table, values),\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t) as any;\n\t}\n}\n\nexport type SQLiteUpdateWithout<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods'] | K\n\t>,\n\tT['_']['excludedMethods'] | K\n>;\n\nexport type SQLiteUpdateWithJoins<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tTFrom,\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n\t>,\n\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n>;\n\nexport type SQLiteUpdateReturningAll<T extends AnySQLiteUpdate, TDynamic extends boolean> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateReturning<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFields,\n> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateExecute<T extends AnySQLiteUpdate> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteUpdatePrepare<T extends AnySQLiteUpdate> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteUpdateExecute<T>;\n\t}\n>;\n\nexport type SQLiteUpdateJoinFn<\n\tT extends AnySQLiteUpdate,\n> = <\n\tTJoinedTable extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n>(\n\ttable: TJoinedTable,\n\ton:\n\t\t| (\n\t\t\t(\n\t\t\t\tupdateTable: T['_']['table']['_']['columns'],\n\t\t\t\tfrom: T['_']['from'] extends SQLiteTable ? T['_']['from']['_']['columns']\n\t\t\t\t\t: T['_']['from'] extends Subquery | SQLiteViewBase ? T['_']['from']['_']['selectedFields']\n\t\t\t\t\t: never,\n\t\t\t) => SQL | undefined\n\t\t)\n\t\t| SQL\n\t\t| undefined,\n) => T;\n\nexport type SQLiteUpdateDynamic<T extends AnySQLiteUpdate> = SQLiteUpdate<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteUpdate<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = any,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = SQLiteUpdateBase<TTable, TResultType, TRunResult, TFrom, TReturning, true, never>;\n\nexport type AnySQLiteUpdate = SQLiteUpdateBase<any, any, any, any, any, any, any>;\n\nexport interface SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends SQLWrapper, QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]> {\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly from: TFrom;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteUpdate';\n\n\t/** @internal */\n\tconfig: SQLiteUpdateConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tset: UpdateSet,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { set, table, withList, joins: [] };\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): SQLiteUpdateWithJoins<this, TDynamic, TFrom> {\n\t\tthis.config.from = source;\n\t\treturn this as any;\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): SQLiteUpdateJoinFn<this> {\n\t\treturn ((\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton: ((updateTable: TTable, from: TFrom) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\tconst from = this.config.from\n\t\t\t\t\t? is(table, SQLiteTable)\n\t\t\t\t\t\t? table[Table.Symbol.Columns]\n\t\t\t\t\t\t: is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: undefined\n\t\t\t\t\t: undefined;\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t\tfrom && new Proxy(\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\treturn this as any;\n\t\t}) as any;\n\t}\n\n\tleftJoin = this.createJoin('left');\n\n\trightJoin = this.createJoin('right');\n\n\tinnerJoin = this.createJoin('inner');\n\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Adds a 'where' clause to the query.\n\t *\n\t * Calling this method will update only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param where the 'where' clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be updated.\n\t *\n\t * ```ts\n\t * // Update all cars with green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'));\n\t * // or\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Update all BMW cars with a green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Update all cars with the green or blue color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteUpdateWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteUpdateWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the updated rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update#update-with-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Update all cars with the green color and return all fields\n\t * const updatedCars: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Update all cars with the green color and return only their id and brand fields\n\t * const updatedCarsIdsAndBrands: { id: number, brand: string }[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteUpdateReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFields>(\n\t\tfields: TSelectedFields,\n\t): SQLiteUpdateReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFields = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteUpdateWithout<AnySQLiteUpdate, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildUpdateQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteUpdatePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteUpdatePrepare<this>;\n\t}\n\n\tprepare(): SQLiteUpdatePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteUpdateExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteUpdateExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteUpdateDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "export * from './delete.ts';\nexport * from './insert.ts';\nexport * from './query-builder.ts';\nexport * from './select.ts';\nexport * from './select.types.ts';\nexport * from './update.ts';\n", "import { entityKind } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\nimport type { SQLiteView } from '../view.ts';\n\nexport class SQLiteCountBuilder<\n\tTSession extends SQLiteSession<any, any, any, any>,\n> extends SQL<number> implements Promise<number>, SQLWrapper {\n\tprivate sql: SQL<number>;\n\n\tstatic override readonly [entityKind] = 'SQLiteCountBuilderAsync';\n\t[Symbol.toStringTag] = 'SQLiteCountBuilderAsync';\n\n\tprivate session: TSession;\n\n\tprivate static buildEmbeddedCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`(select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters})`;\n\t}\n\n\tprivate static buildCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters}`;\n\t}\n\n\tconstructor(\n\t\treadonly params: {\n\t\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper;\n\t\t\tfilters?: SQL<unknown>;\n\t\t\tsession: TSession;\n\t\t},\n\t) {\n\t\tsuper(SQLiteCountBuilder.buildEmbeddedCount(params.source, params.filters).queryChunks);\n\n\t\tthis.session = params.session;\n\n\t\tthis.sql = SQLiteCountBuilder.buildCount(\n\t\t\tparams.source,\n\t\t\tparams.filters,\n\t\t);\n\t}\n\n\tthen<TResult1 = number, TResult2 = never>(\n\t\tonfulfilled?: ((value: number) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn Promise.resolve(this.session.count(this.sql)).then(\n\t\t\tonfulfilled,\n\t\t\tonrejected,\n\t\t);\n\t}\n\n\tcatch(\n\t\tonRejected?: ((reason: any) => never | PromiseLike<never>) | null | undefined,\n\t): Promise<number> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<number> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Query, QueryWithTypings, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilder';\n\n\tconstructor(\n\t\tprotected mode: TMode,\n\t\tprotected fullSchema: Record<string, unknown>,\n\t\tprotected schema: TSchema,\n\t\tprotected tableNamesMap: Record<string, string>,\n\t\tprotected table: SQLiteTable,\n\t\tprotected tableConfig: TableRelationalConfig,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprotected session: SQLiteSession<'async', unknown, TFullSchema, TSchema>,\n\t) {}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', true, TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', true, TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TSelection extends Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>(\n\t\tconfig?: KnownKeysOnly<TSelection, Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQuery';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\n\tconstructor(\n\t\tprivate fullSchema: Record<string, unknown>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\t/** @internal */\n\t\tpublic table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<'sync' | 'async', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tprivate config: DBQueryConfig<'many', true> | true,\n\t\tmode: 'many' | 'first',\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t}).sql as SQL;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = false,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\ttrue,\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) =>\n\t\t\t\t\tmapRelationalRow(this.schema, this.tableConfig, row, query.selection, mapColumnValue)\n\t\t\t\t);\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t});\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql as SQL);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare(false).get() as TResult;\n\t\t}\n\t\treturn this._prepare(false).all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQuery';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '../dialect.ts';\n\ntype SQLiteRawAction = 'all' | 'get' | 'values' | 'run';\nexport interface SQLiteRawConfig {\n\taction: SQLiteRawAction;\n}\n\nexport interface SQLiteRaw<TResult> extends QueryPromise<TResult>, RunnableQuery<TResult, 'sqlite'>, SQLWrapper {}\n\nexport class SQLiteRaw<TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper, PreparedQuery\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRaw';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteRawConfig;\n\n\tconstructor(\n\t\tpublic execute: () => Promise<TResult>,\n\t\t/** @internal */\n\t\tpublic getSQL: () => SQL,\n\t\taction: SQLiteRawAction,\n\t\tprivate dialect: SQLiteAsyncDialect,\n\t\tprivate mapBatchResult: (result: unknown) => unknown,\n\t) {\n\t\tsuper();\n\t\tthis.config = { action };\n\t}\n\n\tgetQuery() {\n\t\treturn { ...this.dialect.sqlToQuery(this.getSQL()), method: this.config.action };\n\t}\n\n\tmapResult(result: unknown, isFromBatch?: boolean) {\n\t\treturn isFromBatch ? this.mapBatchResult(result) : result;\n\t}\n\n\t_prepare(): PreparedQuery {\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn false;\n\t}\n}\n", "import type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport {\n\tQueryBuilder,\n\tSQLiteDeleteBase,\n\tSQLiteInsertBuilder,\n\tSQLiteSelectBuilder,\n\tSQLiteUpdateBuilder,\n} from '~/sqlite-core/query-builders/index.ts';\nimport type {\n\tDBResult,\n\tResult,\n\tSQLiteSession,\n\tSQLiteTransaction,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { DrizzleTypeError } from '~/utils.ts';\nimport { SQLiteCountBuilder } from './query-builders/count.ts';\nimport { RelationalQueryBuilder } from './query-builders/query.ts';\nimport { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFields } from './query-builders/select.types.ts';\nimport type { WithBuilder } from './subquery.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\n\nexport class BaseSQLiteDatabase<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends TablesRelationalConfig = ExtractTablesWithRelations<TFullSchema>,\n> {\n\tstatic readonly [entityKind]: string = 'BaseSQLiteDatabase';\n\n\tdeclare readonly _: {\n\t\treadonly schema: TSchema | undefined;\n\t\treadonly fullSchema: TFullSchema;\n\t\treadonly tableNamesMap: Record<string, string>;\n\t};\n\n\tquery: TFullSchema extends Record<string, never>\n\t\t? DrizzleTypeError<'Seems like the schema generic is missing - did you forget to add it to your DB type?'>\n\t\t: {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\n\tconstructor(\n\t\tprivate resultKind: TResultKind,\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t\t/** @internal */\n\t\treadonly session: SQLiteSession<TResultKind, TRunResult, TFullSchema, TSchema>,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t) {\n\t\tthis._ = schema\n\t\t\t? {\n\t\t\t\tschema: schema.schema,\n\t\t\t\tfullSchema: schema.fullSchema as TFullSchema,\n\t\t\t\ttableNamesMap: schema.tableNamesMap,\n\t\t\t}\n\t\t\t: {\n\t\t\t\tschema: undefined,\n\t\t\t\tfullSchema: {} as TFullSchema,\n\t\t\t\ttableNamesMap: {},\n\t\t\t};\n\t\tthis.query = {} as typeof this['query'];\n\t\tconst query = this.query as {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\t\tif (this._.schema) {\n\t\t\tfor (const [tableName, columns] of Object.entries(this._.schema)) {\n\t\t\t\tquery[tableName as keyof TSchema] = new RelationalQueryBuilder(\n\t\t\t\t\tresultKind,\n\t\t\t\t\tschema!.fullSchema,\n\t\t\t\t\tthis._.schema,\n\t\t\t\t\tthis._.tableNamesMap,\n\t\t\t\t\tschema!.fullSchema[tableName] as SQLiteTable,\n\t\t\t\t\tcolumns,\n\t\t\t\t\tdialect,\n\t\t\t\t\tsession as SQLiteSession<any, any, any, any> as any,\n\t\t\t\t) as typeof query[keyof TSchema];\n\t\t\t}\n\t\t}\n\t\tthis.$cache = { invalidate: async (_params: any) => {} };\n\t}\n\n\t/**\n\t * Creates a subquery that defines a temporary named result set as a CTE.\n\t *\n\t * It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param alias The alias for the subquery.\n\t *\n\t * Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Create a subquery with alias 'sq' and use it in the select query\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t *\n\t * To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:\n\t *\n\t * ```ts\n\t * // Select an arbitrary SQL value as a field in a CTE and reference it in the main query\n\t * const sq = db.$with('sq').as(db.select({\n\t * name: sql<string>`upper(${users.name})`.as('name'),\n\t * })\n\t * .from(users));\n\t *\n\t * const result = await db.with(sq).select({ name: sq.name }).from(sq);\n\t * ```\n\t */\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst self = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(new QueryBuilder(self.dialect));\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t);\n\t\t};\n\t\treturn { as };\n\t};\n\n\t$count(\n\t\tsource: SQLiteTable | SQLiteViewBase | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t) {\n\t\treturn new SQLiteCountBuilder({ source, filters, session: this.session });\n\t}\n\n\t/**\n\t * Incorporates a previously defined CTE (using `$with`) into the main query.\n\t *\n\t * This method allows the main query to reference a temporary named result set.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param queries The CTEs to incorporate into the main query.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Define a subquery 'sq' as a CTE using $with\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * // Incorporate the CTE 'sq' into the main query and select from it\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t */\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Creates a select query.\n\t\t *\n\t\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all columns and all rows from the 'cars' table\n\t\t * const allCars: Car[] = await db.select().from(cars);\n\t\t *\n\t\t * // Select specific columns and all rows from the 'cars' table\n\t\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * brand: cars.brand\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t *\n\t\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t\t *\n\t\t * ```ts\n\t\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t */\n\t\tfunction select(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction select(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct` expression to the select query.\n\t\t *\n\t\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all unique rows from the 'cars' table\n\t\t * await db.selectDistinct()\n\t\t * .from(cars)\n\t\t * .orderBy(cars.id, cars.brand, cars.color);\n\t\t *\n\t\t * // Select all unique brands from the 'cars' table\n\t\t * await db.selectDistinct({ brand: cars.brand })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction selectDistinct(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates an update query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t\t *\n\t\t * Use `.set()` method to specify which values to update.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t\t *\n\t\t * @param table The table to update.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Update all rows in the 'cars' table\n\t\t * await db.update(cars).set({ color: 'red' });\n\t\t *\n\t\t * // Update rows with filters and conditions\n\t\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t\t *\n\t\t * // Update with returning clause\n\t\t * const updatedCar: Car[] = await db.update(cars)\n\t\t * .set({ color: 'red' })\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction update<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteUpdateBuilder(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates an insert query.\n\t\t *\n\t\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t\t *\n\t\t * @param table The table to insert into.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Insert one row\n\t\t * await db.insert(cars).values({ brand: 'BMW' });\n\t\t *\n\t\t * // Insert multiple rows\n\t\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t\t *\n\t\t * // Insert with returning clause\n\t\t * const insertedCar: Car[] = await db.insert(cars)\n\t\t * .values({ brand: 'BMW' })\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction insert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteInsertBuilder(into, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates a delete query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t\t *\n\t\t * @param table The table to delete from.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Delete all rows in the 'cars' table\n\t\t * await db.delete(cars);\n\t\t *\n\t\t * // Delete rows with filters and conditions\n\t\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t\t *\n\t\t * // Delete with returning clause\n\t\t * const deletedCar: Car[] = await db.delete(cars)\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction delete_<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteDeleteBase(from, self.session, self.dialect, queries);\n\t\t}\n\n\t\treturn { select, selectDistinct, update, insert, delete: delete_ };\n\t}\n\n\t/**\n\t * Creates a select query.\n\t *\n\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all columns and all rows from the 'cars' table\n\t * const allCars: Car[] = await db.select().from(cars);\n\t *\n\t * // Select specific columns and all rows from the 'cars' table\n\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t * id: cars.id,\n\t * brand: cars.brand\n\t * })\n\t * .from(cars);\n\t * ```\n\t *\n\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t *\n\t * ```ts\n\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t * id: cars.id,\n\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t * })\n\t * .from(cars);\n\t * ```\n\t */\n\tselect(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselect(fields?: SelectedFields): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: this.session, dialect: this.dialect });\n\t}\n\n\t/**\n\t * Adds `distinct` expression to the select query.\n\t *\n\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique rows from the 'cars' table\n\t * await db.selectDistinct()\n\t * .from(cars)\n\t * .orderBy(cars.id, cars.brand, cars.color);\n\t *\n\t * // Select all unique brands from the 'cars' table\n\t * await db.selectDistinct({ brand: cars.brand })\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t * ```\n\t */\n\tselectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselectDistinct(\n\t\tfields?: SelectedFields,\n\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t/**\n\t * Creates an update query.\n\t *\n\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t *\n\t * Use `.set()` method to specify which values to update.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param table The table to update.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Update all rows in the 'cars' table\n\t * await db.update(cars).set({ color: 'red' });\n\t *\n\t * // Update rows with filters and conditions\n\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t *\n\t * // Update with returning clause\n\t * const updatedCar: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tupdate<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteUpdateBuilder(table, this.session, this.dialect);\n\t}\n\n\t$cache: { invalidate: Cache['onMutate'] };\n\n\t/**\n\t * Creates an insert query.\n\t *\n\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t *\n\t * @param table The table to insert into.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Insert one row\n\t * await db.insert(cars).values({ brand: 'BMW' });\n\t *\n\t * // Insert multiple rows\n\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t *\n\t * // Insert with returning clause\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t * ```\n\t */\n\tinsert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteInsertBuilder(into, this.session, this.dialect);\n\t}\n\n\t/**\n\t * Creates a delete query.\n\t *\n\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param table The table to delete from.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Delete all rows in the 'cars' table\n\t * await db.delete(cars);\n\t *\n\t * // Delete rows with filters and conditions\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t *\n\t * // Delete with returning clause\n\t * const deletedCar: Car[] = await db.delete(cars)\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tdelete<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteDeleteBase(from, this.session, this.dialect);\n\t}\n\n\trun(query: SQLWrapper | string): DBResult<TResultKind, TRunResult> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.run(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'run',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawRunValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, TRunResult>;\n\t\t}\n\t\treturn this.session.run(sequel) as DBResult<TResultKind, TRunResult>;\n\t}\n\n\tall<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.all(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'all',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawAllValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.all(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\tget<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.get(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'get',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawGetValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, T>;\n\t\t}\n\t\treturn this.session.get(sequel) as DBResult<TResultKind, T>;\n\t}\n\n\tvalues<T extends unknown[] = unknown[]>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.values(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'values',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawValuesValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.values(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\ttransaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T> {\n\t\treturn this.session.transaction(transaction, config);\n\t}\n}\n\nexport type SQLiteWithReplicas<Q> = Q & { $primary: Q; $replicas: Q[] };\n\nexport const withReplicas = <\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tQ extends BaseSQLiteDatabase<\n\t\tTResultKind,\n\t\tTRunResult,\n\t\tTFullSchema,\n\t\tTSchema extends Record<string, unknown> ? ExtractTablesWithRelations<TFullSchema> : TSchema\n\t>,\n>(\n\tprimary: Q,\n\treplicas: [Q, ...Q[]],\n\tgetReplica: (replicas: Q[]) => Q = () => replicas[Math.floor(Math.random() * replicas.length)]!,\n): SQLiteWithReplicas<Q> => {\n\tconst select: Q['select'] = (...args: []) => getReplica(replicas).select(...args);\n\tconst selectDistinct: Q['selectDistinct'] = (...args: []) => getReplica(replicas).selectDistinct(...args);\n\tconst $count: Q['$count'] = (...args: [any]) => getReplica(replicas).$count(...args);\n\tconst $with: Q['with'] = (...args: []) => getReplica(replicas).with(...args);\n\n\tconst update: Q['update'] = (...args: [any]) => primary.update(...args);\n\tconst insert: Q['insert'] = (...args: [any]) => primary.insert(...args);\n\tconst $delete: Q['delete'] = (...args: [any]) => primary.delete(...args);\n\tconst run: Q['run'] = (...args: [any]) => primary.run(...args);\n\tconst all: Q['all'] = (...args: [any]) => primary.all(...args);\n\tconst get: Q['get'] = (...args: [any]) => primary.get(...args);\n\tconst values: Q['values'] = (...args: [any]) => primary.values(...args);\n\tconst transaction: Q['transaction'] = (...args: [any]) => primary.transaction(...args);\n\n\treturn {\n\t\t...primary,\n\t\tupdate,\n\t\tinsert,\n\t\tdelete: $delete,\n\t\trun,\n\t\tall,\n\t\tget,\n\t\tvalues,\n\t\ttransaction,\n\t\t$primary: primary,\n\t\t$replicas: replicas,\n\t\tselect,\n\t\tselectDistinct,\n\t\t$count,\n\t\twith: $with,\n\t\tget query() {\n\t\t\treturn getReplica(replicas).query;\n\t\t},\n\t};\n};\n", "import { entityKind } from '~/entity.ts';\nimport type { Table } from '~/index.ts';\nimport type { CacheConfig } from './types.ts';\n\nexport abstract class Cache {\n\tstatic readonly [entityKind]: string = 'Cache';\n\n\tabstract strategy(): 'explicit' | 'all';\n\n\t/**\n\t * Invoked if we should check cache for cached response\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract get(\n\t\tkey: string,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tisAutoInvalidate?: boolean,\n\t): Promise<any[] | undefined>;\n\n\t/**\n\t * Invoked if new query should be inserted to cache\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract put(\n\t\thashedQuery: string,\n\t\tresponse: any,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tconfig?: CacheConfig,\n\t): Promise<void>;\n\n\t/**\n\t * Invoked if insert, update, delete was invoked\n\t * @param tables\n\t */\n\tabstract onMutate(\n\t\tparams: MutationOption,\n\t): Promise<void>;\n}\n\nexport class NoopCache extends Cache {\n\toverride strategy() {\n\t\treturn 'all' as const;\n\t}\n\n\tstatic override readonly [entityKind]: string = 'NoopCache';\n\n\toverride async get(_key: string): Promise<any[] | undefined> {\n\t\treturn undefined;\n\t}\n\toverride async put(\n\t\t_hashedQuery: string,\n\t\t_response: any,\n\t\t_tables: string[],\n\t\t_config?: any,\n\t): Promise<void> {\n\t\t// noop\n\t}\n\toverride async onMutate(_params: MutationOption): Promise<void> {\n\t\t// noop\n\t}\n}\n\nexport type MutationOption = { tags?: string | string[]; tables?: Table<any> | Table<any>[] | string | string[] };\n\nexport async function hashQuery(sql: string, params?: any[]) {\n\tconst dataToHash = `${sql}-${JSON.stringify(params)}`;\n\tconst encoder = new TextEncoder();\n\tconst data = encoder.encode(dataToHash);\n\tconst hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\tconst hashArray = [...new Uint8Array(hashBuffer)];\n\tconst hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n\n\treturn hashHex;\n}\n", "export * from './cache.ts';\n", "import { TableAliasProxyHandler } from '~/alias.ts';\nimport type { BuildAliasTable } from './query-builders/select.types.ts';\n\nimport type { SQLiteTable } from './table.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\n\nexport function alias<TTable extends SQLiteTable | SQLiteViewBase, TAlias extends string>(\n\ttable: TTable,\n\talias: TAlias,\n): BuildAliasTable<TTable, TAlias> {\n\treturn new Proxy(table, new TableAliasProxyHandler(alias, false)) as any;\n}\n", "import { type Cache, hashQuery, NoopCache } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError, DrizzleQueryError, TransactionRollbackError } from '~/errors.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { BaseSQLiteDatabase } from './db.ts';\nimport type { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFieldsOrdered } from './query-builders/select.types.ts';\n\nexport interface PreparedQueryConfig {\n\ttype: 'sync' | 'async';\n\trun: unknown;\n\tall: unknown;\n\tget: unknown;\n\tvalues: unknown;\n\texecute: unknown;\n}\n\nexport class ExecuteResultSync<T> extends QueryPromise<T> {\n\tstatic override readonly [entityKind]: string = 'ExecuteResultSync';\n\n\tconstructor(private resultCb: () => T) {\n\t\tsuper();\n\t}\n\n\toverride async execute(): Promise<T> {\n\t\treturn this.resultCb();\n\t}\n\n\tsync(): T {\n\t\treturn this.resultCb();\n\t}\n}\n\nexport type ExecuteResult<TType extends 'sync' | 'async', TResult> = TType extends 'async' ? Promise<TResult>\n\t: ExecuteResultSync<TResult>;\n\nexport abstract class SQLitePreparedQuery<T extends PreparedQueryConfig> implements PreparedQuery {\n\tstatic readonly [entityKind]: string = 'PreparedQuery';\n\n\t/** @internal */\n\tjoinsNotNullableMap?: Record<string, boolean>;\n\n\tconstructor(\n\t\tprivate mode: 'sync' | 'async',\n\t\tprivate executeMethod: SQLiteExecuteMethod,\n\t\tprotected query: Query,\n\t\tprivate cache?: Cache,\n\t\t// per query related metadata\n\t\tprivate queryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\t// it means that no $withCache options were passed and it should be just enabled\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enable: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enable) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tif (this.cache === undefined || is(this.cache, NoopCache) || this.queryMetadata === undefined) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any mutations, if globally is false\n\t\tif (this.cacheConfig && !this.cacheConfig.enable) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (\n\t\t\t(\n\t\t\t\tthis.queryMetadata.type === 'insert' || this.queryMetadata.type === 'update'\n\t\t\t\t|| this.queryMetadata.type === 'delete'\n\t\t\t) && this.queryMetadata.tables.length > 0\n\t\t) {\n\t\t\ttry {\n\t\t\t\tconst [res] = await Promise.all([\n\t\t\t\t\tquery(),\n\t\t\t\t\tthis.cache.onMutate({ tables: this.queryMetadata.tables }),\n\t\t\t\t]);\n\t\t\t\treturn res;\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any reads if globally disabled\n\t\tif (!this.cacheConfig) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\tif (this.queryMetadata.type === 'select') {\n\t\t\tconst fromCache = await this.cache.get(\n\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\tthis.queryMetadata.tables,\n\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\tthis.cacheConfig.autoInvalidate,\n\t\t\t);\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tlet result;\n\t\t\t\ttry {\n\t\t\t\t\tresult = await query();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t}\n\n\t\t\t\t// put actual key\n\t\t\t\tawait this.cache.put(\n\t\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tthis.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [],\n\t\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\t\tthis.cacheConfig.config,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\t\ttry {\n\t\t\treturn await query();\n\t\t} catch (e) {\n\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t}\n\t}\n\n\tgetQuery(): Query {\n\t\treturn this.query;\n\t}\n\n\tabstract run(placeholderValues?: Record<string, unknown>): Result<T['type'], T['run']>;\n\n\tmapRunResult(result: unknown, _isFromBatch?: boolean): unknown {\n\t\treturn result;\n\t}\n\n\tabstract all(placeholderValues?: Record<string, unknown>): Result<T['type'], T['all']>;\n\n\tmapAllResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract get(placeholderValues?: Record<string, unknown>): Result<T['type'], T['get']>;\n\n\tmapGetResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract values(placeholderValues?: Record<string, unknown>): Result<T['type'], T['values']>;\n\n\texecute(placeholderValues?: Record<string, unknown>): ExecuteResult<T['type'], T['execute']> {\n\t\tif (this.mode === 'async') {\n\t\t\treturn this[this.executeMethod](placeholderValues) as ExecuteResult<T['type'], T['execute']>;\n\t\t}\n\t\treturn new ExecuteResultSync(() => this[this.executeMethod](placeholderValues));\n\t}\n\n\tmapResult(response: unknown, isFromBatch?: boolean) {\n\t\tswitch (this.executeMethod) {\n\t\t\tcase 'run': {\n\t\t\t\treturn this.mapRunResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'all': {\n\t\t\t\treturn this.mapAllResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'get': {\n\t\t\t\treturn this.mapGetResult(response, isFromBatch);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @internal */\n\tabstract isResponseInArrayMode(): boolean;\n}\n\nexport interface SQLiteTransactionConfig {\n\tbehavior?: 'deferred' | 'immediate' | 'exclusive';\n}\n\nexport type SQLiteExecuteMethod = 'run' | 'all' | 'get';\n\nexport abstract class SQLiteSession<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSession';\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t) {}\n\n\tabstract prepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }>;\n\n\tprepareOneTimeQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }> {\n\t\treturn this.prepareQuery(\n\t\t\tquery,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T>;\n\n\trun(query: SQL): Result<TResultKind, TRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn this.prepareOneTimeQuery(staticQuery, undefined, 'run', false).run() as Result<TResultKind, TRunResult>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\t/** @internal */\n\textractRawRunValueFromBatchResult(result: unknown) {\n\t\treturn result;\n\t}\n\n\tall<T = unknown>(query: SQL): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).all() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawAllValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tget<T = unknown>(query: SQL): Result<TResultKind, T> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).get() as Result<\n\t\t\tTResultKind,\n\t\t\tT\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawGetValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tvalues<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).values() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\tasync count(sql: SQL) {\n\t\tconst result = await this.values(sql) as [[number]];\n\n\t\treturn result[0][0];\n\t}\n\n\t/** @internal */\n\textractRawValuesValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n}\n\nexport type Result<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: Promise<TResult> }[TKind];\n\nexport type DBResult<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: SQLiteRaw<TResult> }[TKind];\n\nexport abstract class SQLiteTransaction<\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends BaseSQLiteDatabase<TResultType, TRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTransaction';\n\n\tconstructor(\n\t\tresultType: TResultType,\n\t\tdialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultType],\n\t\tsession: SQLiteSession<TResultType, TRunResult, TFullSchema, TSchema>,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t) {\n\t\tsuper(resultType, dialect, session, schema);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n}\n", "//# sourceMappingURL=subquery.js.map", "import type { BuildColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { AddAliasToSelection } from '~/query-builders/select.types.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL } from '~/sql/sql.ts';\nimport { getTableColumns } from '~/utils.ts';\nimport type { SQLiteColumn, SQLiteColumnBuilderBase } from './columns/common.ts';\nimport { QueryBuilder } from './query-builders/query-builder.ts';\nimport { sqliteTable } from './table.ts';\nimport { SQLiteViewBase } from './view-base.ts';\n\nexport interface ViewBuilderConfig {\n\talgorithm?: 'undefined' | 'merge' | 'temptable';\n\tdefiner?: string;\n\tsqlSecurity?: 'definer' | 'invoker';\n\twithCheckOption?: 'cascaded' | 'local';\n}\n\nexport class ViewBuilderCore<\n\tTConfig extends { name: string; columns?: unknown },\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteViewBuilderCore';\n\n\tdeclare readonly _: {\n\t\treadonly name: TConfig['name'];\n\t\treadonly columns: TConfig['columns'];\n\t};\n\n\tconstructor(\n\t\tprotected name: TConfig['name'],\n\t) {}\n\n\tprotected config: ViewBuilderConfig = {};\n}\n\nexport class ViewBuilder<TName extends string = string> extends ViewBuilderCore<{ name: TName }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteViewBuilder';\n\n\tas<TSelection extends ColumnsSelection>(\n\t\tqb: TypedQueryBuilder<TSelection> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelection>),\n\t): SQLiteViewWithSelection<TName, false, AddAliasToSelection<TSelection, TName, 'sqlite'>> {\n\t\tif (typeof qb === 'function') {\n\t\t\tqb = qb(new QueryBuilder());\n\t\t}\n\t\tconst selectionProxy = new SelectionProxyHandler<TSelection>({\n\t\t\talias: this.name,\n\t\t\tsqlBehavior: 'error',\n\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\treplaceOriginalName: true,\n\t\t});\n\t\t// const aliasedSelectedFields = new Proxy(qb.getSelectedFields(), selectionProxy);\n\t\tconst aliasedSelectedFields = qb.getSelectedFields();\n\t\treturn new Proxy(\n\t\t\tnew SQLiteView({\n\t\t\t\t// sqliteConfig: this.config,\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: undefined,\n\t\t\t\t\tselectedFields: aliasedSelectedFields,\n\t\t\t\t\tquery: qb.getSQL().inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tselectionProxy as any,\n\t\t) as SQLiteViewWithSelection<TName, false, AddAliasToSelection<TSelection, TName, 'sqlite'>>;\n\t}\n}\n\nexport class ManualViewBuilder<\n\tTName extends string = string,\n\tTColumns extends Record<string, SQLiteColumnBuilderBase> = Record<string, SQLiteColumnBuilderBase>,\n> extends ViewBuilderCore<\n\t{ name: TName; columns: TColumns }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteManualViewBuilder';\n\n\tprivate columns: Record<string, SQLiteColumn>;\n\n\tconstructor(\n\t\tname: TName,\n\t\tcolumns: TColumns,\n\t) {\n\t\tsuper(name);\n\t\tthis.columns = getTableColumns(sqliteTable(name, columns)) as BuildColumns<TName, TColumns, 'sqlite'>;\n\t}\n\n\texisting(): SQLiteViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'sqlite'>> {\n\t\treturn new Proxy(\n\t\t\tnew SQLiteView({\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: undefined,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: undefined,\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as SQLiteViewWithSelection<TName, true, BuildColumns<TName, TColumns, 'sqlite'>>;\n\t}\n\n\tas(query: SQL): SQLiteViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'sqlite'>> {\n\t\treturn new Proxy(\n\t\t\tnew SQLiteView({\n\t\t\t\tconfig: {\n\t\t\t\t\tname: this.name,\n\t\t\t\t\tschema: undefined,\n\t\t\t\t\tselectedFields: this.columns,\n\t\t\t\t\tquery: query.inlineParams(),\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew SelectionProxyHandler({\n\t\t\t\talias: this.name,\n\t\t\t\tsqlBehavior: 'error',\n\t\t\t\tsqlAliasedBehavior: 'alias',\n\t\t\t\treplaceOriginalName: true,\n\t\t\t}),\n\t\t) as SQLiteViewWithSelection<TName, false, BuildColumns<TName, TColumns, 'sqlite'>>;\n\t}\n}\n\nexport class SQLiteView<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> extends SQLiteViewBase<TName, TExisting, TSelection> {\n\tstatic override readonly [entityKind]: string = 'SQLiteView';\n\n\tconstructor({ config }: {\n\t\tconfig: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t};\n\t}) {\n\t\tsuper(config);\n\t}\n}\n\nexport type SQLiteViewWithSelection<\n\tTName extends string,\n\tTExisting extends boolean,\n\tTSelection extends ColumnsSelection,\n> = SQLiteView<TName, TExisting, TSelection> & TSelection;\n\nexport function sqliteView<TName extends string>(name: TName): ViewBuilder<TName>;\nexport function sqliteView<TName extends string, TColumns extends Record<string, SQLiteColumnBuilderBase>>(\n\tname: TName,\n\tcolumns: TColumns,\n): ManualViewBuilder<TName, TColumns>;\nexport function sqliteView(\n\tname: string,\n\tselection?: Record<string, SQLiteColumnBuilderBase>,\n): ViewBuilder | ManualViewBuilder {\n\tif (selection) {\n\t\treturn new ManualViewBuilder(name, selection);\n\t}\n\treturn new ViewBuilder(name);\n}\n\nexport const view = sqliteView;\n", "export * from './alias.ts';\nexport * from './checks.ts';\nexport * from './columns/index.ts';\nexport * from './db.ts';\nexport * from './dialect.ts';\nexport * from './foreign-keys.ts';\nexport * from './indexes.ts';\nexport * from './primary-keys.ts';\nexport * from './query-builders/index.ts';\nexport * from './session.ts';\nexport * from './subquery.ts';\nexport * from './table.ts';\nexport * from './unique-constraint.ts';\nexport * from './utils.ts';\nexport * from './view.ts';\n", "import type { Client, InArgs, InStatement, ResultSet, Transaction } from '@libsql/client';\nimport type { BatchItem as BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface LibSQLSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class LibSQLSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: LibSQLSessionOptions,\n\t\tprivate tx: Transaction | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): LibSQLPreparedQuery<T> {\n\t\treturn new LibSQLPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tthis.tx,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.batch(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\tasync migrate<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: InStatement[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tbuiltQueries.push({ sql: builtQuery.sql, args: builtQuery.params as InArgs });\n\t\t}\n\n\t\tconst batchResults = await this.client.migrate(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: LibSQLTransaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\t_config?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\t// TODO: support transaction behavior\n\t\tconst libsqlTx = await this.client.transaction();\n\t\tconst session = new LibSQLSession<TFullSchema, TSchema>(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.schema,\n\t\t\tthis.options,\n\t\t\tlibsqlTx,\n\t\t);\n\t\tconst tx = new LibSQLTransaction<TFullSchema, TSchema>('async', this.dialect, session, this.schema);\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait libsqlTx.commit();\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait libsqlTx.rollback();\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as ResultSet).rows;\n\t}\n}\n\nexport class LibSQLTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', ResultSet, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLTransaction';\n\n\toverride async transaction<T>(transaction: (tx: LibSQLTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new LibSQLTransaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class LibSQLPreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: ResultSet; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'LibSQLPreparedQuery';\n\n\tconstructor(\n\t\tprivate client: Client,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\t/** @internal */ public fields: SelectedFieldsOrdered | undefined,\n\t\tprivate tx: Transaction | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\t/** @internal */ public customResultMapper?: (\n\t\t\trows: unknown[][],\n\t\t\tmapColumnValue?: (value: unknown) => unknown,\n\t\t) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<ResultSet> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\t\treturn this.tx ? this.tx.execute(stmt) : this.client.execute(stmt);\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapAllResult(rows));\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn (rows as unknown[]).map((row) => normalizeRow(row));\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['all'];\n\t\t}\n\n\t\treturn (rows as unknown[]).map((row) => {\n\t\t\treturn mapResultRow(\n\t\t\t\tthis.fields!,\n\t\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\t\tthis.joinsNotNullableMap,\n\t\t\t);\n\t\t});\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, logger, query, tx, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\tconst stmt: InStatement = { sql: query.sql, args: params as InArgs };\n\t\t\t\treturn (tx ? tx.execute(stmt) : client.execute(stmt)).then(({ rows }) => this.mapGetResult(rows));\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\n\t\treturn this.mapGetResult(rows);\n\t}\n\n\toverride mapGetResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = (rows as ResultSet).rows;\n\t\t}\n\n\t\tconst row = (rows as unknown[])[0];\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn normalizeRow(row);\n\t\t}\n\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][], normalizeFieldValue) as T['get'];\n\t\t}\n\n\t\treturn mapResultRow(\n\t\t\tthis.fields!,\n\t\t\tArray.prototype.slice.call(row).map((v) => normalizeFieldValue(v)),\n\t\t\tthis.joinsNotNullableMap,\n\t\t);\n\t}\n\n\tasync values(placeholderValues?: Record<string, unknown>): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\tconst stmt: InStatement = { sql: this.query.sql, args: params as InArgs };\n\t\t\treturn (this.tx ? this.tx.execute(stmt) : this.client.execute(stmt)).then(({ rows }) => rows) as Promise<\n\t\t\t\tT['values']\n\t\t\t>;\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nfunction normalizeRow(obj: any) {\n\t// The libSQL node-sqlite3 compatibility wrapper returns rows\n\t// that can be accessed both as objects and arrays. Let's\n\t// turn them into objects what's what other SQLite drivers\n\t// do.\n\treturn Object.keys(obj).reduce((acc: Record<string, any>, key) => {\n\t\tif (Object.prototype.propertyIsEnumerable.call(obj, key)) {\n\t\t\tacc[key] = obj[key];\n\t\t}\n\t\treturn acc;\n\t}, {});\n}\n\nfunction normalizeFieldValue(value: unknown) {\n\tif (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { // eslint-disable-line no-instanceof/no-instanceof\n\t\tif (typeof Buffer !== 'undefined') {\n\t\t\tif (!(value instanceof Buffer)) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\treturn Buffer.from(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\treturn new TextDecoder().decode(value);\n\t\t}\n\t\tthrow new Error('TextDecoder is not available. Please provide either Buffer or TextDecoder polyfill.');\n\t}\n\treturn value;\n}\n", "import type { Client, ResultSet } from '@libsql/client';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { LibSQLSession } from './session.ts';\n\nexport class LibSQLDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', ResultSet, TSchema> {\n\tstatic override readonly [entityKind]: string = 'LibSQLDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: LibSQLSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\n/** @internal */\nexport function construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n>(client: Client, config: DrizzleConfig<TSchema> = {}): LibSQLDatabase<TSchema> & {\n\t$client: Client;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst session = new LibSQLSession(client, dialect, schema, { logger, cache: config.cache }, undefined);\n\tconst db = new LibSQLDatabase('async', dialect, session, schema) as LibSQLDatabase<TSchema>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\treturn db as any;\n}\n", "import { type Client, type Config, createClient } from '@libsql/client';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { construct as construct, type LibSQLDatabase } from './driver-core.ts';\n\nexport { LibSQLDatabase } from './driver-core.ts';\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends Client = Client,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& DrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | Config;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): LibSQLDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst instance = createClient({\n\t\t\turl: params[0],\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& { connection?: Config; client?: TClient }\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tconst instance = typeof connection === 'string' ? createClient({ url: connection }) : createClient(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): LibSQLDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n", "export * from './driver.ts';\nexport * from './session.ts';\n", "import { createClient } from \"@libsql/client\";\nimport { drizzle } from \"drizzle-orm/libsql\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { SqliteClient, SqliteOpenOptions, SqliteRow } from \"./types.js\";\n\ntype LibsqlResult = {\n rows?: unknown[];\n columns?: unknown[];\n};\n\nexport function openNodeSqlite(options: SqliteOpenOptions): SqliteClient {\n const url = resolveLibsqlUrl(options);\n const client = createClient({\n url,\n authToken: options.authToken,\n });\n const orm = drizzle(client);\n\n return {\n driver: \"node\",\n readOnly: options.readOnly ?? true,\n orm,\n async execute(sql, params) {\n const result = (await client.execute({\n sql,\n args: params ?? [],\n })) as LibsqlResult;\n const rows = normalizeLibsqlRows(result) as SqliteRow[];\n const columns = normalizeLibsqlColumns(result, rows);\n return { rows, columns };\n },\n close() {\n client.close();\n },\n };\n}\n\nfunction resolveLibsqlUrl(options: SqliteOpenOptions): string {\n if (options.url) {\n return options.url;\n }\n if (!options.filename) {\n throw new Error(\"Missing sqlite filename.\");\n }\n\n const filePath = path.resolve(options.filename);\n const fileUrl = pathToFileURL(filePath);\n return fileUrl.toString();\n}\n\nfunction normalizeLibsqlColumns(\n result: LibsqlResult,\n rows: SqliteRow[],\n): string[] {\n if (Array.isArray(result.columns)) {\n const columns = result.columns\n .map((column) => {\n if (typeof column === \"string\") {\n return column;\n }\n if (column && typeof column === \"object\" && \"name\" in column) {\n return String((column as { name?: unknown }).name ?? \"\");\n }\n return \"\";\n })\n .filter((column) => column !== \"\");\n\n if (columns.length) {\n return columns;\n }\n }\n\n return rows[0] ? Object.keys(rows[0]) : [];\n}\n\nfunction normalizeLibsqlRows(result: LibsqlResult): SqliteRow[] {\n const rows = Array.isArray(result.rows) ? result.rows : [];\n if (!rows.length) {\n return [];\n }\n\n const firstRow = rows[0];\n if (firstRow && typeof firstRow === \"object\" && !Array.isArray(firstRow)) {\n return rows as SqliteRow[];\n }\n\n const columns = Array.isArray(result.columns)\n ? result.columns.map((column) => {\n if (typeof column === \"string\") {\n return column;\n }\n if (column && typeof column === \"object\" && \"name\" in column) {\n return String((column as { name?: unknown }).name ?? \"\");\n }\n return \"\";\n })\n : [];\n\n if (!columns.length) {\n return [];\n }\n\n return rows.map((row) => {\n const values = Array.isArray(row) ? row : [];\n const mapped: SqliteRow = {};\n for (let index = 0; index < columns.length; index += 1) {\n const column = columns[index];\n if (column) {\n mapped[column] = values[index];\n }\n }\n return mapped;\n });\n}\n", "import type { SqliteClient, SqliteOpenOptions } from \"./types.js\";\n\ntype BunGlobal = {\n Bun?: unknown;\n};\n\nexport async function openSqlite(\n options: SqliteOpenOptions,\n): Promise<SqliteClient> {\n if (options.d1) {\n const mod = await import(\"./d1.js\");\n return mod.openD1Sqlite(options);\n }\n\n const isBun = typeof (globalThis as BunGlobal).Bun !== \"undefined\";\n\n if (isBun) {\n const bunModule = \"./bun.js\";\n const mod = await import(bunModule);\n return mod.openBunSqlite(options);\n }\n\n const mod = await import(\"./node.js\");\n return mod.openNodeSqlite(options);\n}\n", "import type { SqliteClient, SqliteRow } from \"./sqlite/types.js\";\n\nexport type ColumnInfo = {\n name: string;\n type: string;\n notNull: boolean;\n defaultValue: string | null;\n primaryKey: boolean;\n primaryKeyIndex: number;\n};\n\nexport type ForeignKeyInfo = {\n table: string;\n from: string;\n to: string;\n onUpdate: string;\n onDelete: string;\n match: string;\n seq: number;\n id: number;\n};\n\nexport type TableInfo = {\n name: string;\n type: \"table\" | \"view\" | \"virtual\";\n sql: string | null;\n columns: ColumnInfo[];\n primaryKeys: string[];\n foreignKeys: ForeignKeyInfo[];\n isFts: boolean;\n};\n\nexport type DatabaseSchema = {\n tables: Record<string, TableInfo>;\n};\n\nconst SQLITE_INTERNAL_PREFIX = \"sqlite_\";\n\nfunction asString(value: unknown, fallback = \"\"): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (value == null) {\n return fallback;\n }\n return String(value);\n}\n\nfunction asNumber(value: unknown, fallback = 0): number {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n return fallback;\n}\n\nfunction asNullableString(value: unknown): string | null {\n if (value == null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n return String(value);\n}\n\nfunction isVirtualTable(sql: string | null): boolean {\n if (!sql) {\n return false;\n }\n return /create\\s+virtual\\s+table/i.test(sql);\n}\n\nfunction isFtsTable(sql: string | null): boolean {\n if (!sql) {\n return false;\n }\n return /using\\s+fts/i.test(sql);\n}\n\nasync function listTables(client: SqliteClient): Promise<SqliteRow[]> {\n const { rows } = await client.execute(\n \"select name, type, sql from sqlite_master where type in ('table', 'view') order by name\",\n );\n return rows.filter((row) => {\n const name = asString(row.name);\n return !name.startsWith(SQLITE_INTERNAL_PREFIX);\n });\n}\n\nasync function tableColumns(\n client: SqliteClient,\n tableName: string,\n): Promise<ColumnInfo[]> {\n const { rows } = await client.execute(\n `pragma table_info(${escapeIdentifier(tableName)})`,\n );\n return rows.map((row) => ({\n name: asString(row.name),\n type: asString(row.type),\n notNull: asNumber(row.notnull) === 1,\n defaultValue: asNullableString(row.dflt_value),\n primaryKey: asNumber(row.pk) > 0,\n primaryKeyIndex: asNumber(row.pk),\n }));\n}\n\nasync function tableForeignKeys(\n client: SqliteClient,\n tableName: string,\n): Promise<ForeignKeyInfo[]> {\n const { rows } = await client.execute(\n `pragma foreign_key_list(${escapeIdentifier(tableName)})`,\n );\n return rows.map((row) => ({\n table: asString(row.table),\n from: asString(row.from),\n to: asString(row.to),\n onUpdate: asString(row.on_update),\n onDelete: asString(row.on_delete),\n match: asString(row.match),\n seq: asNumber(row.seq),\n id: asNumber(row.id),\n }));\n}\n\nexport async function introspectDatabase(\n client: SqliteClient,\n): Promise<DatabaseSchema> {\n const rows = await listTables(client);\n const tables: Record<string, TableInfo> = {};\n\n for (const row of rows) {\n const name = asString(row.name);\n const type = asString(row.type);\n const sql = asNullableString(row.sql);\n const virtual = type === \"table\" && isVirtualTable(sql);\n const infoType: TableInfo[\"type\"] =\n type === \"view\" ? \"view\" : virtual ? \"virtual\" : \"table\";\n const columns = await tableColumns(client, name);\n const foreignKeys = await tableForeignKeys(client, name);\n const primaryKeys = columns\n .filter((column) => column.primaryKey)\n .sort((a, b) => a.primaryKeyIndex - b.primaryKeyIndex)\n .map((column) => column.name);\n const isFts = isFtsTable(sql);\n\n tables[name] = {\n name,\n type: infoType,\n sql,\n columns,\n primaryKeys,\n foreignKeys,\n isFts,\n };\n }\n\n return { tables };\n}\n\nfunction escapeIdentifier(name: string): string {\n const escaped = name.replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n}\n", "import { openSqlite } from \"../db/sqlite/index.js\";\nimport { introspectDatabase } from \"../db/introspection.js\";\nimport type { InspectData } from \"./inspect.js\";\nimport type {\n CannedQuery,\n DatabaseMetadata,\n Metadata,\n TableMetadata,\n} from \"./metadata.js\";\n\nimport type { DatabaseSchema } from \"../db/introspection.js\";\nimport type { D1Database, SqliteClient } from \"../db/sqlite/types.js\";\n\nexport type DatabaseConfig = {\n name: string;\n filename: string;\n mutable?: boolean;\n d1?: D1Database;\n};\n\nexport class DatabaseRegistry {\n private configs: Map<string, DatabaseConfig>;\n private schemaCache: Map<string, DatabaseSchema>;\n private hashCache: Map<string, string | null>;\n private metadata: Metadata | null;\n private inspectData: InspectData | null;\n private schemaOverrides: Record<string, DatabaseSchema> | null;\n\n constructor(\n configs: DatabaseConfig[],\n metadata?: Metadata | null,\n inspectData?: InspectData | null,\n schemaOverrides?: Record<string, DatabaseSchema> | null,\n ) {\n this.configs = new Map(configs.map((config) => [config.name, config]));\n this.schemaCache = new Map();\n this.hashCache = new Map();\n this.metadata = metadata ?? null;\n this.inspectData = inspectData ?? null;\n this.schemaOverrides = schemaOverrides ?? null;\n }\n\n listDatabases(): DatabaseConfig[] {\n return Array.from(this.configs.values());\n }\n\n getDatabase(name: string): DatabaseConfig | undefined {\n return this.configs.get(name);\n }\n\n async openClient(name: string): Promise<SqliteClient> {\n const config = this.getDatabase(name);\n if (!config) {\n throw new Error(`Unknown database: ${name}`);\n }\n const options = {\n filename: config.filename,\n readOnly: true,\n };\n return openSqlite({\n ...options,\n ...(config.d1 ? { d1: config.d1 } : {}),\n });\n }\n\n async getSchema(name: string): Promise<DatabaseSchema> {\n const override = this.schemaOverrides?.[name];\n if (override) {\n return override;\n }\n const cached = this.schemaCache.get(name);\n if (cached) {\n return cached;\n }\n const client = await this.openClient(name);\n try {\n const schema = await introspectDatabase(client);\n this.schemaCache.set(name, schema);\n return schema;\n } finally {\n client.close();\n }\n }\n\n async getDatabaseColor(name: string): Promise<string> {\n const hash = await this.getDatabaseHash(name);\n if (hash) {\n return hash.slice(0, 6);\n }\n const fallback = await sha256Hex(name);\n return fallback.slice(0, 6);\n }\n\n async getDatabaseHash(name: string): Promise<string | null> {\n if (this.hashCache.has(name)) {\n return this.hashCache.get(name) ?? null;\n }\n const config = this.getDatabase(name);\n if (!config) {\n this.hashCache.set(name, null);\n return null;\n }\n if (config.mutable || config.filename === \":memory:\") {\n this.hashCache.set(name, null);\n return null;\n }\n if (config.d1) {\n this.hashCache.set(name, null);\n return null;\n }\n const inspectHash = this.inspectData?.[name]?.hash;\n if (inspectHash) {\n this.hashCache.set(name, inspectHash);\n return inspectHash;\n }\n const hash = await hashFile(config.filename);\n if (!hash) {\n this.hashCache.set(name, null);\n return null;\n }\n this.hashCache.set(name, hash);\n return hash;\n }\n\n getMetadata(): Metadata | null {\n return this.metadata;\n }\n\n getDatabaseMetadata(name: string): DatabaseMetadata | null {\n return this.metadata?.databases?.[name] ?? null;\n }\n\n getInspectData(name: string): InspectData[string] | null {\n return this.inspectData?.[name] ?? null;\n }\n\n getInspectTableCount(databaseName: string, tableName: string): number | null {\n const count = this.inspectData?.[databaseName]?.tables?.[tableName]?.count;\n return typeof count === \"number\" ? count : null;\n }\n\n getTableMetadata(databaseName: string, tableName: string): TableMetadata | null {\n return (\n this.metadata?.databases?.[databaseName]?.tables?.[tableName] ?? null\n );\n }\n\n getCannedQueries(databaseName: string): Record<string, CannedQuery> {\n return this.metadata?.databases?.[databaseName]?.queries ?? {};\n }\n\n getCannedQuery(\n databaseName: string,\n queryName: string,\n ): CannedQuery | null {\n return this.getCannedQueries(databaseName)[queryName] ?? null;\n }\n}\n\nasync function hashFile(path: string): Promise<string | null> {\n if (!isNodeRuntime()) {\n return null;\n }\n try {\n const fs = await import(\"node:fs/promises\");\n const data = await fs.readFile(path);\n return sha256Hex(data);\n } catch {\n return null;\n }\n}\n\nasync function sha256Hex(input: ArrayBuffer | Uint8Array | string): Promise<string> {\n const buffer =\n typeof input === \"string\"\n ? toArrayBuffer(new TextEncoder().encode(input))\n : input instanceof ArrayBuffer\n ? input\n : toArrayBuffer(input);\n const digest = await subtleDigest(buffer);\n return bufferToHex(digest);\n}\n\nasync function subtleDigest(data: ArrayBuffer): Promise<ArrayBuffer> {\n if (globalThis.crypto?.subtle) {\n return globalThis.crypto.subtle.digest(\"SHA-256\", data);\n }\n const mod = await import(\"node:crypto\");\n return mod.webcrypto.subtle.digest(\"SHA-256\", data);\n}\n\nfunction toArrayBuffer(data: Uint8Array): ArrayBuffer {\n const copy = new Uint8Array(data.length);\n copy.set(data);\n return copy.buffer;\n}\n\nfunction bufferToHex(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n return Array.from(bytes)\n .map((value) => value.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nfunction isNodeRuntime(): boolean {\n return typeof process !== \"undefined\" && !!process.versions?.node;\n}\n", "'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n", "'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n const tags = {};\n visit.visit(doc.contents, (_key, node) => {\n if (identity.isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit.visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n", "'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n", "'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n", "'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n", "'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n", "'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n", "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n", "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n", "'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n", "'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n", "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.Scalar.BLOCK_FOLDED:\n case Scalar.Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexports.stringifyString = stringifyString;\n", "'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n", "'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n", "'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n", "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n if (i < items.length - 1)\n str += ',';\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n reqNewline = true;\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n", "'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!identity.isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n", "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(identity.SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && identity.isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS.toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode.createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = identity.isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!identity.isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n", "'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n", "'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n", "'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n", "'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n", "'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof node_buffer.Buffer === 'function') {\n return node_buffer.Buffer.from(src, 'base64');\n }\n else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof node_buffer.Buffer === 'function') {\n str =\n buf instanceof node_buffer.Buffer\n ? buf.toString('base64')\n : node_buffer.Buffer.from(buf.buffer).toString('base64');\n }\n else if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexports.binary = binary;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n if (identity.isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (identity.isPair(item))\n continue;\n else if (identity.isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(Pair.createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (identity.isPair(pair)) {\n key = toJS.toJS(pair.key, '', ctx);\n value = toJS.toJS(pair.value, key, ctx);\n }\n else {\n key = toJS.toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs$1.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs$1 = pairs.resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs$1.items) {\n if (identity.isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs$1);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar.Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar.Scalar(false),\n stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n", "'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (identity.isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair.Pair(key.key, null);\n else\n pair = new Pair.Pair(key, null);\n const prev = YAMLMap.findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = YAMLMap.findPair(this.items, key);\n return !keepPair && identity.isPair(pair)\n ? identity.isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = YAMLMap.findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair.Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(Pair.createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (identity.isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n", "'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber.stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n", "'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n", "'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n ['core', schema.schema],\n ['failsafe', [map.map, seq.seq, string.string]],\n ['json', schema$1.schema],\n ['yaml11', schema$2.schema],\n ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n binary: binary.binary,\n bool: bool.boolTag,\n float: float.float,\n floatExp: float.floatExp,\n floatNaN: float.floatNaN,\n floatTime: timestamp.floatTime,\n int: int.int,\n intHex: int.intHex,\n intOct: int.intOct,\n intTime: timestamp.intTime,\n map: map.map,\n merge: merge.merge,\n null: _null.nullTag,\n omap: omap.omap,\n pairs: pairs.pairs,\n seq: seq.seq,\n set: set.set,\n timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary.binary,\n 'tag:yaml.org,2002:merge': merge.merge,\n 'tag:yaml.org,2002:omap': omap.omap,\n 'tag:yaml.org,2002:pairs': pairs.pairs,\n 'tag:yaml.org,2002:set': set.set,\n 'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge.merge)\n ? schemaTags.concat(merge.merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge.merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? tags.getTags(compat, 'compat')\n : compat\n ? tags.getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n this.tags = tags.getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, identity.MAP, { value: map.map });\n Object.defineProperty(this, identity.SCALAR, { value: string.string });\n Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexports.Schema = Schema;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = stringify.createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(stringifyComment.indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (identity.isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += stringifyComment.lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify.stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(stringifyComment.indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n", "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n", "'use strict';\n\nclass YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '\u2026' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '\u2026';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '\u2026\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n", "'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexports.resolveProps = resolveProps;\n", "'use strict';\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n", "'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n utilContainsNewline.containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n", "'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps.resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n", "'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps.resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n", "'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // \u2192 key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n", "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n", "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = { x: 2, u: 4, U: 8 }[next];\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n", "'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n", "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n", "'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n", "'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n", "'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n", "'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n", "'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` \u2013 Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` \u2013 Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` \u2013 Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` \u2013 The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n", "'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n", "'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n", "'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n", "'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n", "'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n", "'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n", "export type Actor = {\n id: string;\n name?: string;\n};\n\nexport type PermissionAction =\n | \"view-instance\"\n | \"view-database\"\n | \"view-table\"\n | \"view-row\"\n | \"execute-sql\";\n\nexport type Resource =\n | { type: \"instance\" }\n | { type: \"database\"; database: string }\n | { type: \"table\"; database: string; table: string };\n\nexport class AuthManager {\n private tokens = new Map<string, Actor>();\n private rootEnabled: boolean;\n private rootToken: string | null = null;\n\n constructor(options?: { rootEnabled?: boolean }) {\n this.rootEnabled = options?.rootEnabled ?? false;\n }\n\n enableRoot(): string {\n this.rootEnabled = true;\n if (!this.rootToken) {\n this.rootToken = generateToken();\n this.tokens.set(this.rootToken, { id: \"root\" });\n }\n return this.rootToken;\n }\n\n actorFromRequest(request: Request): Actor | null {\n const cookie = request.headers.get(\"cookie\") ?? \"\";\n const token = parseCookie(cookie, \"ds_actor\");\n if (!token) {\n return null;\n }\n return this.tokens.get(token) ?? null;\n }\n\n issueToken(actor: Actor): string {\n const token = generateToken();\n this.tokens.set(token, actor);\n return token;\n }\n\n validateToken(token: string): Actor | null {\n return this.tokens.get(token) ?? null;\n }\n\n isRootActor(actor: Actor | null): boolean {\n return this.rootEnabled && actor?.id === \"root\";\n }\n\n allowed(action: PermissionAction, _resource: Resource, actor: Actor | null): boolean {\n if (this.isRootActor(actor)) {\n return true;\n }\n return DEFAULT_ALLOW_ACTIONS.has(action);\n }\n}\n\nconst DEFAULT_ALLOW_ACTIONS = new Set<PermissionAction>([\n \"view-instance\",\n \"view-database\",\n \"view-table\",\n \"view-row\",\n \"execute-sql\",\n]);\n\nexport const DEFAULT_ACTIONS: PermissionAction[] = Array.from(\n DEFAULT_ALLOW_ACTIONS,\n);\n\nfunction parseCookie(cookie: string, key: string): string | null {\n const parts = cookie.split(\";\").map((part) => part.trim());\n for (const part of parts) {\n const [name, ...rest] = part.split(\"=\");\n if (name === key) {\n return decodeURIComponent(rest.join(\"=\"));\n }\n }\n return null;\n}\n\nfunction generateToken(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return Array.from(bytes)\n .map((value) => value.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n", "// src/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n", "// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(\"?\", 8);\n if (keyIndex2 === -1) {\n return void 0;\n }\n if (!url.startsWith(key, keyIndex2 + 1)) {\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode\n};\n", "// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n /**\n * `.raw` can get the raw Request object.\n *\n * @see {@link https://hono.dev/docs/api/request#raw}\n *\n * @example\n * ```ts\n * // For Cloudflare Workers\n * app.post('/', async (c) => {\n * const metadata = c.req.raw.cf?.hostMetadata?\n * ...\n * })\n * ```\n */\n raw;\n #validatedData;\n // Short name of validatedData\n #matchResult;\n routeIndex = 0;\n /**\n * `.path` can get the pathname of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#path}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const pathname = c.req.path // `/about/me`\n * })\n * ```\n */\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n this.#validatedData = {};\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n /**\n * `.json()` can parse Request body of type `application/json`\n *\n * @see {@link https://hono.dev/docs/api/request#json}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.json()\n * })\n * ```\n */\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n /**\n * `.text()` can parse Request body of type `text/plain`\n *\n * @see {@link https://hono.dev/docs/api/request#text}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.text()\n * })\n * ```\n */\n text() {\n return this.#cachedBody(\"text\");\n }\n /**\n * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n *\n * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.arrayBuffer()\n * })\n * ```\n */\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n /**\n * Parses the request body as a `Blob`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.blob();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#blob\n */\n blob() {\n return this.#cachedBody(\"blob\");\n }\n /**\n * Parses the request body as `FormData`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.formData();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#formdata\n */\n formData() {\n return this.#cachedBody(\"formData\");\n }\n /**\n * Adds validated data to the request.\n *\n * @param target - The target of the validation.\n * @param data - The validated data to add.\n */\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n /**\n * `.url()` can get the request url strings.\n *\n * @see {@link https://hono.dev/docs/api/request#url}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const url = c.req.url // `http://localhost:8787/about/me`\n * ...\n * })\n * ```\n */\n get url() {\n return this.raw.url;\n }\n /**\n * `.method()` can get the method name of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#method}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const method = c.req.method // `GET`\n * })\n * ```\n */\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n /**\n * `.matchedRoutes()` can return a matched route in the handler\n *\n * @deprecated\n *\n * Use matchedRoutes helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n *\n * @example\n * ```ts\n * app.use('*', async function logger(c, next) {\n * await next()\n * c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n * const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n * console.log(\n * method,\n * ' ',\n * path,\n * ' '.repeat(Math.max(10 - path.length, 0)),\n * name,\n * i === c.req.routeIndex ? '<- respond from here' : ''\n * )\n * })\n * })\n * ```\n */\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n /**\n * `routePath()` can retrieve the path registered within the handler\n *\n * @deprecated\n *\n * Use routePath helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#routepath}\n *\n * @example\n * ```ts\n * app.get('/posts/:id', (c) => {\n * return c.json({ path: c.req.routePath })\n * })\n * ```\n */\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nvar cloneRawRequest = async (req) => {\n if (!req.raw.bodyUsed) {\n return req.raw.clone();\n }\n const cacheKey = Object.keys(req.bodyCache)[0];\n if (!cacheKey) {\n throw new HTTPException(500, {\n message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n });\n }\n const requestInit = {\n body: await req[cacheKey](),\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers: req.header(),\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \"&quot;\";\n break;\n case 39:\n escape = \"&#39;\";\n break;\n case 38:\n escape = \"&amp;\";\n break;\n case 60:\n escape = \"&lt;\";\n break;\n case 62:\n escape = \"&gt;\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar Context = class {\n #rawRequest;\n #req;\n /**\n * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n *\n * @see {@link https://hono.dev/docs/api/context#env}\n *\n * @example\n * ```ts\n * // Environment object for Cloudflare Workers\n * app.get('*', async c => {\n * const counter = c.env.COUNTER\n * })\n * ```\n */\n env = {};\n #var;\n finalized = false;\n /**\n * `.error` can get the error object from the middleware if the Handler throws an error.\n *\n * @see {@link https://hono.dev/docs/api/context#error}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * await next()\n * if (c.error) {\n * // do something...\n * }\n * })\n * ```\n */\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n /**\n * Creates an instance of the Context class.\n *\n * @param req - The Request object.\n * @param options - Optional configuration options for the context.\n */\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n /**\n * `.req` is the instance of {@link HonoRequest}.\n */\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#event}\n * The FetchEvent associated with the current request.\n *\n * @throws Will throw an error if the context does not have a FetchEvent.\n */\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#executionctx}\n * The ExecutionContext associated with the current request.\n *\n * @throws Will throw an error if the context does not have an ExecutionContext.\n */\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#res}\n * The Response object for the current request.\n */\n get res() {\n return this.#res ||= new Response(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n /**\n * Sets the Response object for the current request.\n *\n * @param _res - The Response object to set.\n */\n set res(_res) {\n if (this.#res && _res) {\n _res = new Response(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n /**\n * `.render()` can create a response within a layout.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * return c.render('Hello!')\n * })\n * ```\n */\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n /**\n * Sets the layout for the response.\n *\n * @param layout - The layout to set.\n * @returns The layout function.\n */\n setLayout = (layout) => this.#layout = layout;\n /**\n * Gets the current layout for the response.\n *\n * @returns The current layout function.\n */\n getLayout = () => this.#layout;\n /**\n * `.setRenderer()` can set the layout in the custom middleware.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```tsx\n * app.use('*', async (c, next) => {\n * c.setRenderer((content) => {\n * return c.html(\n * <html>\n * <body>\n * <p>{content}</p>\n * </body>\n * </html>\n * )\n * })\n * await next()\n * })\n * ```\n */\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n /**\n * `.header()` can set headers.\n *\n * @see {@link https://hono.dev/docs/api/context#header}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n *\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = new Response(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n /**\n * `.set()` can set the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * c.set('message', 'Hono is hot!!')\n * await next()\n * })\n * ```\n */\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n /**\n * `.get()` can use the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * const message = c.get('message')\n * return c.text(`The message is \"${message}\"`)\n * })\n * ```\n */\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n /**\n * `.var` can access the value of a variable.\n *\n * @see {@link https://hono.dev/docs/api/context#var}\n *\n * @example\n * ```ts\n * const result = c.var.client.oneMethod()\n * ```\n */\n // c.var.propName is a read-only\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return new Response(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n /**\n * `.body()` can return the HTTP response.\n * You can set headers with `.header()` and set HTTP status code with `.status`.\n * This can also be set in `.text()`, `.json()` and so on.\n *\n * @see {@link https://hono.dev/docs/api/context#body}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n * // Set HTTP status code\n * c.status(201)\n *\n * // Return the response body\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n /**\n * `.text()` can render text as `Content-Type:text/plain`.\n *\n * @see {@link https://hono.dev/docs/api/context#text}\n *\n * @example\n * ```ts\n * app.get('/say', (c) => {\n * return c.text('Hello!')\n * })\n * ```\n */\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n /**\n * `.json()` can render JSON as `Content-Type:application/json`.\n *\n * @see {@link https://hono.dev/docs/api/context#json}\n *\n * @example\n * ```ts\n * app.get('/api', (c) => {\n * return c.json({ message: 'Hello!' })\n * })\n * ```\n */\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n /**\n * `.redirect()` can Redirect, default status code is 302.\n *\n * @see {@link https://hono.dev/docs/api/context#redirect}\n *\n * @example\n * ```ts\n * app.get('/redirect', (c) => {\n * return c.redirect('/')\n * })\n * app.get('/redirect-permanently', (c) => {\n * return c.redirect('/', 301)\n * })\n * ```\n */\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n // Multibyes should be encoded\n // eslint-disable-next-line no-control-regex\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n /**\n * `.notFound()` can return the Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/context#notfound}\n *\n * @example\n * ```ts\n * app.get('/notfound', (c) => {\n * return c.notFound()\n * })\n * ```\n */\n notFound = () => {\n this.#notFoundHandler ??= () => new Response();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n /**\n * `.basePath()` allows base paths to be specified.\n *\n * @see {@link https://hono.dev/docs/api/routing#base-path}\n *\n * @param {string} path - base Path\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * const api = new Hono().basePath('/api')\n * ```\n */\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n /**\n * `.onError()` handles an error and returns a customized Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#error-handling}\n *\n * @param {ErrorHandler} handler - request Handler for error\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.onError((err, c) => {\n * console.error(`${err}`)\n * return c.text('Custom Error Message', 500)\n * })\n * ```\n */\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n /**\n * `.notFound()` allows you to customize a Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#not-found}\n *\n * @param {NotFoundHandler} handler - request handler for not-found\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.notFound((c) => {\n * return c.text('Custom 404 Message', 404)\n * })\n * ```\n */\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n /**\n * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n *\n * @see {@link https://hono.dev/docs/api/hono#mount}\n *\n * @param {string} path - base Path\n * @param {Function} applicationHandler - other Request Handler\n * @param {MountOptions} [options] - options of `.mount()`\n * @returns {Hono} mounted Hono instance\n *\n * @example\n * ```ts\n * import { Router as IttyRouter } from 'itty-router'\n * import { Hono } from 'hono'\n * // Create itty-router application\n * const ittyRouter = IttyRouter()\n * // GET /itty-router/hello\n * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n *\n * const app = new Hono()\n * app.mount('/itty-router', ittyRouter.handle)\n * ```\n *\n * @example\n * ```ts\n * const app = new Hono()\n * // Send the request to another application without modification.\n * app.mount('/app', anotherApp, {\n * replaceRequest: (req) => req,\n * })\n * ```\n */\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/reg-exp-router/prepared-router.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { RegExpRouter } from \"./router.js\";\nvar PreparedRegExpRouter = class {\n name = \"PreparedRegExpRouter\";\n #matchers;\n #relocateMap;\n constructor(matchers, relocateMap) {\n this.#matchers = matchers;\n this.#relocateMap = relocateMap;\n }\n #addWildcard(method, handlerData) {\n const matcher = this.#matchers[method];\n matcher[1].forEach((list) => list && list.push(handlerData));\n Object.values(matcher[2]).forEach((list) => list[0].push(handlerData));\n }\n #addPath(method, path, handler, indexes, map) {\n const matcher = this.#matchers[method];\n if (!map) {\n matcher[2][path][0].push([handler, {}]);\n } else {\n indexes.forEach((index) => {\n if (typeof index === \"number\") {\n matcher[1][index].push([handler, map]);\n } else {\n ;\n matcher[2][index || path][0].push([handler, map]);\n }\n });\n }\n }\n add(method, path, handler) {\n if (!this.#matchers[method]) {\n const all = this.#matchers[METHOD_NAME_ALL];\n const staticMap = {};\n for (const key in all[2]) {\n staticMap[key] = [all[2][key][0].slice(), emptyParam];\n }\n this.#matchers[method] = [\n all[0],\n all[1].map((list) => Array.isArray(list) ? list.slice() : 0),\n staticMap\n ];\n }\n if (path === \"/*\" || path === \"*\") {\n const handlerData = [handler, {}];\n if (method === METHOD_NAME_ALL) {\n for (const m in this.#matchers) {\n this.#addWildcard(m, handlerData);\n }\n } else {\n this.#addWildcard(method, handlerData);\n }\n return;\n }\n const data = this.#relocateMap[path];\n if (!data) {\n throw new Error(`Path ${path} is not registered`);\n }\n for (const [indexes, map] of data) {\n if (method === METHOD_NAME_ALL) {\n for (const m in this.#matchers) {\n this.#addPath(m, path, handler, indexes, map);\n }\n } else {\n this.#addPath(method, path, handler, indexes, map);\n }\n }\n }\n buildAllMatchers() {\n return this.#matchers;\n }\n match = match;\n};\nvar buildInitParams = ({ paths }) => {\n const RegExpRouterWithMatcherExport = class extends RegExpRouter {\n buildAndExportAllMatchers() {\n return this.buildAllMatchers();\n }\n };\n const router = new RegExpRouterWithMatcherExport();\n for (const path of paths) {\n router.add(METHOD_NAME_ALL, path, path);\n }\n const matchers = router.buildAndExportAllMatchers();\n const all = matchers[METHOD_NAME_ALL];\n const relocateMap = {};\n for (const path of paths) {\n if (path === \"/*\" || path === \"*\") {\n continue;\n }\n all[1].forEach((list, i) => {\n list.forEach(([p, map]) => {\n if (p === path) {\n if (relocateMap[path]) {\n relocateMap[path][0][1] = {\n ...relocateMap[path][0][1],\n ...map\n };\n } else {\n relocateMap[path] = [[[], map]];\n }\n if (relocateMap[path][0][0].findIndex((j) => j === i) === -1) {\n relocateMap[path][0][0].push(i);\n }\n }\n });\n });\n for (const path2 in all[2]) {\n all[2][path2][0].forEach(([p]) => {\n if (p === path) {\n relocateMap[path] ||= [[[]]];\n const value = path2 === path ? \"\" : path2;\n if (relocateMap[path][0][0].findIndex((v) => v === value) === -1) {\n relocateMap[path][0][0].push(value);\n }\n }\n });\n }\n }\n for (let i = 0, len = all[1].length; i < len; i++) {\n all[1][i] = all[1][i] ? [] : 0;\n }\n for (const path in all[2]) {\n all[2][path][0] = [];\n }\n return [matchers, relocateMap];\n};\nvar serializeInitParams = ([matchers, relocateMap]) => {\n const matchersStr = JSON.stringify(\n matchers,\n (_, value) => value instanceof RegExp ? `##${value.toString()}##` : value\n ).replace(/\"##(.+?)##\"/g, (_, str) => str.replace(/\\\\\\\\/g, \"\\\\\"));\n const relocateMapStr = JSON.stringify(relocateMap);\n return `[${matchersStr},${relocateMapStr}]`;\n};\nexport {\n PreparedRegExpRouter,\n buildInitParams,\n serializeInitParams\n};\n", "// src/router/reg-exp-router/index.ts\nimport { RegExpRouter } from \"./router.js\";\nimport { PreparedRegExpRouter, buildInitParams, serializeInitParams } from \"./prepared-router.js\";\nexport {\n PreparedRegExpRouter,\n RegExpRouter,\n buildInitParams,\n serializeInitParams\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/smart-router/index.ts\nimport { SmartRouter } from \"./router.js\";\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar Node = class _Node {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new _Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #getHandlerSets(node, method, nodeParams, params) {\n const handlerSets = [];\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n return handlerSets;\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(nextNode.#children[\"*\"], method, node.#params)\n );\n }\n handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params));\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params));\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n const restPathString = parts.slice(i).join(\"/\");\n if (matcher instanceof RegExp) {\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params));\n if (Object.keys(child.#children).length) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params));\n if (child.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(child.#children[\"*\"], method, params, node.#params)\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n curNodes = tempNodes.concat(curNodesQueue.shift() ?? []);\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/router/trie-router/index.ts\nimport { TrieRouter } from \"./router.js\";\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "// src/index.ts\nimport { Hono } from \"./hono.js\";\nexport {\n Hono\n};\n", "// src/helper/html/index.ts\nimport { escapeToBuffer, raw, resolveCallbackSync, stringBufferToString } from \"../../utils/html.js\";\nvar html = (strings, ...values) => {\n const buffer = [\"\"];\n for (let i = 0, len = strings.length - 1; i < len; i++) {\n buffer[0] += strings[i];\n const children = Array.isArray(values[i]) ? values[i].flat(Infinity) : [values[i]];\n for (let i2 = 0, len2 = children.length; i2 < len2; i2++) {\n const child = children[i2];\n if (typeof child === \"string\") {\n escapeToBuffer(child, buffer);\n } else if (typeof child === \"number\") {\n ;\n buffer[0] += child;\n } else if (typeof child === \"boolean\" || child === null || child === void 0) {\n continue;\n } else if (typeof child === \"object\" && child.isEscaped) {\n if (child.callbacks) {\n buffer.unshift(\"\", child);\n } else {\n const tmp = child.toString();\n if (tmp instanceof Promise) {\n buffer.unshift(\"\", tmp);\n } else {\n buffer[0] += tmp;\n }\n }\n } else if (child instanceof Promise) {\n buffer.unshift(\"\", child);\n } else {\n escapeToBuffer(child.toString(), buffer);\n }\n }\n }\n buffer[0] += strings.at(-1);\n return buffer.length === 1 ? \"callbacks\" in buffer ? raw(resolveCallbackSync(raw(buffer[0], buffer.callbacks))) : raw(buffer[0]) : stringBufferToString(buffer, buffer.callbacks);\n};\nexport {\n html,\n raw\n};\n", "// src/jsx/constants.ts\nvar DOM_RENDERER = /* @__PURE__ */ Symbol(\"RENDERER\");\nvar DOM_ERROR_HANDLER = /* @__PURE__ */ Symbol(\"ERROR_HANDLER\");\nvar DOM_STASH = /* @__PURE__ */ Symbol(\"STASH\");\nvar DOM_INTERNAL_TAG = /* @__PURE__ */ Symbol(\"INTERNAL\");\nvar DOM_MEMO = /* @__PURE__ */ Symbol(\"MEMO\");\nvar PERMALINK = /* @__PURE__ */ Symbol(\"PERMALINK\");\nexport {\n DOM_ERROR_HANDLER,\n DOM_INTERNAL_TAG,\n DOM_MEMO,\n DOM_RENDERER,\n DOM_STASH,\n PERMALINK\n};\n", "// src/jsx/dom/utils.ts\nimport { DOM_INTERNAL_TAG } from \"../constants.js\";\nvar setInternalTagFlag = (fn) => {\n ;\n fn[DOM_INTERNAL_TAG] = true;\n return fn;\n};\nexport {\n setInternalTagFlag\n};\n", "// src/jsx/dom/context.ts\nimport { DOM_ERROR_HANDLER } from \"../constants.js\";\nimport { globalContexts } from \"../context.js\";\nimport { setInternalTagFlag } from \"./utils.js\";\nvar createContextProviderFunction = (values) => ({ value, children }) => {\n if (!children) {\n return void 0;\n }\n const props = {\n children: [\n {\n tag: setInternalTagFlag(() => {\n values.push(value);\n }),\n props: {}\n }\n ]\n };\n if (Array.isArray(children)) {\n props.children.push(...children.flat());\n } else {\n props.children.push(children);\n }\n props.children.push({\n tag: setInternalTagFlag(() => {\n values.pop();\n }),\n props: {}\n });\n const res = { tag: \"\", props, type: \"\" };\n res[DOM_ERROR_HANDLER] = (err) => {\n values.pop();\n throw err;\n };\n return res;\n};\nvar createContext = (defaultValue) => {\n const values = [defaultValue];\n const context = createContextProviderFunction(values);\n context.values = values;\n context.Provider = context;\n globalContexts.push(context);\n return context;\n};\nexport {\n createContext,\n createContextProviderFunction\n};\n", "// src/jsx/context.ts\nimport { raw } from \"../helper/html/index.js\";\nimport { JSXFragmentNode } from \"./base.js\";\nimport { DOM_RENDERER } from \"./constants.js\";\nimport { createContextProviderFunction } from \"./dom/context.js\";\nvar globalContexts = [];\nvar createContext = (defaultValue) => {\n const values = [defaultValue];\n const context = ((props) => {\n values.push(props.value);\n let string;\n try {\n string = props.children ? (Array.isArray(props.children) ? new JSXFragmentNode(\"\", {}, props.children) : props.children).toString() : \"\";\n } finally {\n values.pop();\n }\n if (string instanceof Promise) {\n return string.then((resString) => raw(resString, resString.callbacks));\n } else {\n return raw(string);\n }\n });\n context.values = values;\n context.Provider = context;\n context[DOM_RENDERER] = createContextProviderFunction(values);\n globalContexts.push(context);\n return context;\n};\nvar useContext = (context) => {\n return context.values.at(-1);\n};\nexport {\n createContext,\n globalContexts,\n useContext\n};\n", "// src/jsx/intrinsic-element/common.ts\nvar deDupeKeyMap = {\n title: [],\n script: [\"src\"],\n style: [\"data-href\"],\n link: [\"href\"],\n meta: [\"name\", \"httpEquiv\", \"charset\", \"itemProp\"]\n};\nvar domRenderers = {};\nvar dataPrecedenceAttr = \"data-precedence\";\nexport {\n dataPrecedenceAttr,\n deDupeKeyMap,\n domRenderers\n};\n", "// src/jsx/children.ts\nvar toArray = (children) => Array.isArray(children) ? children : [children];\nvar Children = {\n map: (children, fn) => toArray(children).map(fn),\n forEach: (children, fn) => {\n toArray(children).forEach(fn);\n },\n count: (children) => toArray(children).length,\n only: (_children) => {\n const children = toArray(_children);\n if (children.length !== 1) {\n throw new Error(\"Children.only() expects only one child\");\n }\n return children[0];\n },\n toArray\n};\nexport {\n Children,\n toArray\n};\n", "// src/jsx/intrinsic-element/components.ts\nimport { raw } from \"../../helper/html/index.js\";\nimport { JSXNode, getNameSpaceContext } from \"../base.js\";\nimport { toArray } from \"../children.js\";\nimport { PERMALINK } from \"../constants.js\";\nimport { useContext } from \"../context.js\";\nimport { dataPrecedenceAttr, deDupeKeyMap } from \"./common.js\";\nvar metaTagMap = /* @__PURE__ */ new WeakMap();\nvar insertIntoHead = (tagName, tag, props, precedence) => ({ buffer, context }) => {\n if (!buffer) {\n return;\n }\n const map = metaTagMap.get(context) || {};\n metaTagMap.set(context, map);\n const tags = map[tagName] ||= [];\n let duped = false;\n const deDupeKeys = deDupeKeyMap[tagName];\n if (deDupeKeys.length > 0) {\n LOOP: for (const [, tagProps] of tags) {\n for (const key of deDupeKeys) {\n if ((tagProps?.[key] ?? null) === props?.[key]) {\n duped = true;\n break LOOP;\n }\n }\n }\n }\n if (duped) {\n buffer[0] = buffer[0].replaceAll(tag, \"\");\n } else if (deDupeKeys.length > 0) {\n tags.push([tag, props, precedence]);\n } else {\n tags.unshift([tag, props, precedence]);\n }\n if (buffer[0].indexOf(\"</head>\") !== -1) {\n let insertTags;\n if (precedence === void 0) {\n insertTags = tags.map(([tag2]) => tag2);\n } else {\n const precedences = [];\n insertTags = tags.map(([tag2, , precedence2]) => {\n let order = precedences.indexOf(precedence2);\n if (order === -1) {\n precedences.push(precedence2);\n order = precedences.length - 1;\n }\n return [tag2, order];\n }).sort((a, b) => a[1] - b[1]).map(([tag2]) => tag2);\n }\n insertTags.forEach((tag2) => {\n buffer[0] = buffer[0].replaceAll(tag2, \"\");\n });\n buffer[0] = buffer[0].replace(/(?=<\\/head>)/, insertTags.join(\"\"));\n }\n};\nvar returnWithoutSpecialBehavior = (tag, children, props) => raw(new JSXNode(tag, props, toArray(children ?? [])).toString());\nvar documentMetadataTag = (tag, children, props, sort) => {\n if (\"itemProp\" in props) {\n return returnWithoutSpecialBehavior(tag, children, props);\n }\n let { precedence, blocking, ...restProps } = props;\n precedence = sort ? precedence ?? \"\" : void 0;\n if (sort) {\n restProps[dataPrecedenceAttr] = precedence;\n }\n const string = new JSXNode(tag, restProps, toArray(children || [])).toString();\n if (string instanceof Promise) {\n return string.then(\n (resString) => raw(string, [\n ...resString.callbacks || [],\n insertIntoHead(tag, resString, restProps, precedence)\n ])\n );\n } else {\n return raw(string, [insertIntoHead(tag, string, restProps, precedence)]);\n }\n};\nvar title = ({ children, ...props }) => {\n const nameSpaceContext = getNameSpaceContext();\n if (nameSpaceContext) {\n const context = useContext(nameSpaceContext);\n if (context === \"svg\" || context === \"head\") {\n return new JSXNode(\n \"title\",\n props,\n toArray(children ?? [])\n );\n }\n }\n return documentMetadataTag(\"title\", children, props, false);\n};\nvar script = ({\n children,\n ...props\n}) => {\n const nameSpaceContext = getNameSpaceContext();\n if ([\"src\", \"async\"].some((k) => !props[k]) || nameSpaceContext && useContext(nameSpaceContext) === \"head\") {\n return returnWithoutSpecialBehavior(\"script\", children, props);\n }\n return documentMetadataTag(\"script\", children, props, false);\n};\nvar style = ({\n children,\n ...props\n}) => {\n if (![\"href\", \"precedence\"].every((k) => k in props)) {\n return returnWithoutSpecialBehavior(\"style\", children, props);\n }\n props[\"data-href\"] = props.href;\n delete props.href;\n return documentMetadataTag(\"style\", children, props, true);\n};\nvar link = ({ children, ...props }) => {\n if ([\"onLoad\", \"onError\"].some((k) => k in props) || props.rel === \"stylesheet\" && (!(\"precedence\" in props) || \"disabled\" in props)) {\n return returnWithoutSpecialBehavior(\"link\", children, props);\n }\n return documentMetadataTag(\"link\", children, props, \"precedence\" in props);\n};\nvar meta = ({ children, ...props }) => {\n const nameSpaceContext = getNameSpaceContext();\n if (nameSpaceContext && useContext(nameSpaceContext) === \"head\") {\n return returnWithoutSpecialBehavior(\"meta\", children, props);\n }\n return documentMetadataTag(\"meta\", children, props, false);\n};\nvar newJSXNode = (tag, { children, ...props }) => (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new JSXNode(tag, props, toArray(children ?? []))\n);\nvar form = (props) => {\n if (typeof props.action === \"function\") {\n props.action = PERMALINK in props.action ? props.action[PERMALINK] : void 0;\n }\n return newJSXNode(\"form\", props);\n};\nvar formActionableElement = (tag, props) => {\n if (typeof props.formAction === \"function\") {\n props.formAction = PERMALINK in props.formAction ? props.formAction[PERMALINK] : void 0;\n }\n return newJSXNode(tag, props);\n};\nvar input = (props) => formActionableElement(\"input\", props);\nvar button = (props) => formActionableElement(\"button\", props);\nexport {\n button,\n form,\n input,\n link,\n meta,\n script,\n style,\n title\n};\n", "// src/jsx/utils.ts\nvar normalizeElementKeyMap = /* @__PURE__ */ new Map([\n [\"className\", \"class\"],\n [\"htmlFor\", \"for\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"itemProp\", \"itemprop\"],\n [\"fetchPriority\", \"fetchpriority\"],\n [\"noModule\", \"nomodule\"],\n [\"formAction\", \"formaction\"]\n]);\nvar normalizeIntrinsicElementKey = (key) => normalizeElementKeyMap.get(key) || key;\nvar styleObjectForEach = (style, fn) => {\n for (const [k, v] of Object.entries(style)) {\n const key = k[0] === \"-\" || !/[A-Z]/.test(k) ? k : k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n fn(\n key,\n v == null ? null : typeof v === \"number\" ? !key.match(\n /^(?:a|border-im|column(?:-c|s)|flex(?:$|-[^b])|grid-(?:ar|[^a])|font-w|li|or|sca|st|ta|wido|z)|ty$/\n ) ? `${v}px` : `${v}` : v\n );\n }\n};\nexport {\n normalizeIntrinsicElementKey,\n styleObjectForEach\n};\n", "// src/jsx/base.ts\nimport { raw } from \"../helper/html/index.js\";\nimport { escapeToBuffer, resolveCallbackSync, stringBufferToString } from \"../utils/html.js\";\nimport { DOM_RENDERER, DOM_MEMO } from \"./constants.js\";\nimport { createContext, globalContexts, useContext } from \"./context.js\";\nimport { domRenderers } from \"./intrinsic-element/common.js\";\nimport * as intrinsicElementTags from \"./intrinsic-element/components.js\";\nimport { normalizeIntrinsicElementKey, styleObjectForEach } from \"./utils.js\";\nvar nameSpaceContext = void 0;\nvar getNameSpaceContext = () => nameSpaceContext;\nvar toSVGAttributeName = (key) => /[A-Z]/.test(key) && // Presentation attributes are findable in style object. \"clip-path\", \"font-size\", \"stroke-width\", etc.\n// Or other un-deprecated kebab-case attributes. \"overline-position\", \"paint-order\", \"strikethrough-position\", etc.\nkey.match(\n /^(?:al|basel|clip(?:Path|Rule)$|co|do|fill|fl|fo|gl|let|lig|i|marker[EMS]|o|pai|pointe|sh|st[or]|text[^L]|tr|u|ve|w)/\n) ? key.replace(/([A-Z])/g, \"-$1\").toLowerCase() : key;\nvar emptyTags = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\"\n];\nvar booleanAttributes = [\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"defer\",\n \"disabled\",\n \"download\",\n \"formnovalidate\",\n \"hidden\",\n \"inert\",\n \"ismap\",\n \"itemscope\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"selected\"\n];\nvar childrenToStringToBuffer = (children, buffer) => {\n for (let i = 0, len = children.length; i < len; i++) {\n const child = children[i];\n if (typeof child === \"string\") {\n escapeToBuffer(child, buffer);\n } else if (typeof child === \"boolean\" || child === null || child === void 0) {\n continue;\n } else if (child instanceof JSXNode) {\n child.toStringToBuffer(buffer);\n } else if (typeof child === \"number\" || child.isEscaped) {\n ;\n buffer[0] += child;\n } else if (child instanceof Promise) {\n buffer.unshift(\"\", child);\n } else {\n childrenToStringToBuffer(child, buffer);\n }\n }\n};\nvar JSXNode = class {\n tag;\n props;\n key;\n children;\n isEscaped = true;\n localContexts;\n constructor(tag, props, children) {\n this.tag = tag;\n this.props = props;\n this.children = children;\n }\n get type() {\n return this.tag;\n }\n // Added for compatibility with libraries that rely on React's internal structure\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get ref() {\n return this.props.ref || null;\n }\n toString() {\n const buffer = [\"\"];\n this.localContexts?.forEach(([context, value]) => {\n context.values.push(value);\n });\n try {\n this.toStringToBuffer(buffer);\n } finally {\n this.localContexts?.forEach(([context]) => {\n context.values.pop();\n });\n }\n return buffer.length === 1 ? \"callbacks\" in buffer ? resolveCallbackSync(raw(buffer[0], buffer.callbacks)).toString() : buffer[0] : stringBufferToString(buffer, buffer.callbacks);\n }\n toStringToBuffer(buffer) {\n const tag = this.tag;\n const props = this.props;\n let { children } = this;\n buffer[0] += `<${tag}`;\n const normalizeKey = nameSpaceContext && useContext(nameSpaceContext) === \"svg\" ? (key) => toSVGAttributeName(normalizeIntrinsicElementKey(key)) : (key) => normalizeIntrinsicElementKey(key);\n for (let [key, v] of Object.entries(props)) {\n key = normalizeKey(key);\n if (key === \"children\") {\n } else if (key === \"style\" && typeof v === \"object\") {\n let styleStr = \"\";\n styleObjectForEach(v, (property, value) => {\n if (value != null) {\n styleStr += `${styleStr ? \";\" : \"\"}${property}:${value}`;\n }\n });\n buffer[0] += ' style=\"';\n escapeToBuffer(styleStr, buffer);\n buffer[0] += '\"';\n } else if (typeof v === \"string\") {\n buffer[0] += ` ${key}=\"`;\n escapeToBuffer(v, buffer);\n buffer[0] += '\"';\n } else if (v === null || v === void 0) {\n } else if (typeof v === \"number\" || v.isEscaped) {\n buffer[0] += ` ${key}=\"${v}\"`;\n } else if (typeof v === \"boolean\" && booleanAttributes.includes(key)) {\n if (v) {\n buffer[0] += ` ${key}=\"\"`;\n }\n } else if (key === \"dangerouslySetInnerHTML\") {\n if (children.length > 0) {\n throw new Error(\"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\");\n }\n children = [raw(v.__html)];\n } else if (v instanceof Promise) {\n buffer[0] += ` ${key}=\"`;\n buffer.unshift('\"', v);\n } else if (typeof v === \"function\") {\n if (!key.startsWith(\"on\") && key !== \"ref\") {\n throw new Error(`Invalid prop '${key}' of type 'function' supplied to '${tag}'.`);\n }\n } else {\n buffer[0] += ` ${key}=\"`;\n escapeToBuffer(v.toString(), buffer);\n buffer[0] += '\"';\n }\n }\n if (emptyTags.includes(tag) && children.length === 0) {\n buffer[0] += \"/>\";\n return;\n }\n buffer[0] += \">\";\n childrenToStringToBuffer(children, buffer);\n buffer[0] += `</${tag}>`;\n }\n};\nvar JSXFunctionNode = class extends JSXNode {\n toStringToBuffer(buffer) {\n const { children } = this;\n const props = { ...this.props };\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children;\n }\n const res = this.tag.call(null, props);\n if (typeof res === \"boolean\" || res == null) {\n return;\n } else if (res instanceof Promise) {\n if (globalContexts.length === 0) {\n buffer.unshift(\"\", res);\n } else {\n const currentContexts = globalContexts.map((c) => [c, c.values.at(-1)]);\n buffer.unshift(\n \"\",\n res.then((childRes) => {\n if (childRes instanceof JSXNode) {\n childRes.localContexts = currentContexts;\n }\n return childRes;\n })\n );\n }\n } else if (res instanceof JSXNode) {\n res.toStringToBuffer(buffer);\n } else if (typeof res === \"number\" || res.isEscaped) {\n buffer[0] += res;\n if (res.callbacks) {\n buffer.callbacks ||= [];\n buffer.callbacks.push(...res.callbacks);\n }\n } else {\n escapeToBuffer(res, buffer);\n }\n }\n};\nvar JSXFragmentNode = class extends JSXNode {\n toStringToBuffer(buffer) {\n childrenToStringToBuffer(this.children, buffer);\n }\n};\nvar jsx = (tag, props, ...children) => {\n props ??= {};\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children;\n }\n const key = props.key;\n delete props[\"key\"];\n const node = jsxFn(tag, props, children);\n node.key = key;\n return node;\n};\nvar initDomRenderer = false;\nvar jsxFn = (tag, props, children) => {\n if (!initDomRenderer) {\n for (const k in domRenderers) {\n ;\n intrinsicElementTags[k][DOM_RENDERER] = domRenderers[k];\n }\n initDomRenderer = true;\n }\n if (typeof tag === \"function\") {\n return new JSXFunctionNode(tag, props, children);\n } else if (intrinsicElementTags[tag]) {\n return new JSXFunctionNode(\n intrinsicElementTags[tag],\n props,\n children\n );\n } else if (tag === \"svg\" || tag === \"head\") {\n nameSpaceContext ||= createContext(\"\");\n return new JSXNode(tag, props, [\n new JSXFunctionNode(\n nameSpaceContext,\n {\n value: tag\n },\n children\n )\n ]);\n } else {\n return new JSXNode(tag, props, children);\n }\n};\nvar shallowEqual = (a, b) => {\n if (a === b) {\n return true;\n }\n const aKeys = Object.keys(a).sort();\n const bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (let i = 0, len = aKeys.length; i < len; i++) {\n if (aKeys[i] === \"children\" && bKeys[i] === \"children\" && !a.children?.length && !b.children?.length) {\n continue;\n } else if (a[aKeys[i]] !== b[aKeys[i]]) {\n return false;\n }\n }\n return true;\n};\nvar memo = (component, propsAreEqual = shallowEqual) => {\n let computed = null;\n let prevProps = void 0;\n const wrapper = ((props) => {\n if (prevProps && !propsAreEqual(prevProps, props)) {\n computed = null;\n }\n prevProps = props;\n return computed ||= component(props);\n });\n wrapper[DOM_MEMO] = propsAreEqual;\n wrapper[DOM_RENDERER] = component;\n return wrapper;\n};\nvar Fragment = ({\n children\n}) => {\n return new JSXFragmentNode(\n \"\",\n {\n children\n },\n Array.isArray(children) ? children : children ? [children] : []\n );\n};\nvar isValidElement = (element) => {\n return !!(element && typeof element === \"object\" && \"tag\" in element && \"props\" in element);\n};\nvar cloneElement = (element, props, ...children) => {\n let childrenToClone;\n if (children.length > 0) {\n childrenToClone = children;\n } else {\n const c = element.props.children;\n childrenToClone = Array.isArray(c) ? c : [c];\n }\n return jsx(\n element.tag,\n { ...element.props, ...props },\n ...childrenToClone\n );\n};\nvar reactAPICompatVersion = \"19.0.0-hono-jsx\";\nexport {\n Fragment,\n JSXFragmentNode,\n JSXNode,\n booleanAttributes,\n cloneElement,\n getNameSpaceContext,\n isValidElement,\n jsx,\n jsxFn,\n memo,\n reactAPICompatVersion,\n shallowEqual\n};\n", "// src/jsx/dom/render.ts\nimport { toArray } from \"../children.js\";\nimport {\n DOM_ERROR_HANDLER,\n DOM_INTERNAL_TAG,\n DOM_MEMO,\n DOM_RENDERER,\n DOM_STASH\n} from \"../constants.js\";\nimport { globalContexts as globalJSXContexts, useContext } from \"../context.js\";\nimport { STASH_EFFECT } from \"../hooks/index.js\";\nimport { normalizeIntrinsicElementKey, styleObjectForEach } from \"../utils.js\";\nimport { createContext } from \"./context.js\";\nvar HONO_PORTAL_ELEMENT = \"_hp\";\nvar eventAliasMap = {\n Change: \"Input\",\n DoubleClick: \"DblClick\"\n};\nvar nameSpaceMap = {\n svg: \"2000/svg\",\n math: \"1998/Math/MathML\"\n};\nvar buildDataStack = [];\nvar refCleanupMap = /* @__PURE__ */ new WeakMap();\nvar nameSpaceContext = void 0;\nvar getNameSpaceContext = () => nameSpaceContext;\nvar isNodeString = (node) => \"t\" in node;\nvar eventCache = {\n // pre-define events that are used very frequently\n onClick: [\"click\", false]\n};\nvar getEventSpec = (key) => {\n if (!key.startsWith(\"on\")) {\n return void 0;\n }\n if (eventCache[key]) {\n return eventCache[key];\n }\n const match = key.match(/^on([A-Z][a-zA-Z]+?(?:PointerCapture)?)(Capture)?$/);\n if (match) {\n const [, eventName, capture] = match;\n return eventCache[key] = [(eventAliasMap[eventName] || eventName).toLowerCase(), !!capture];\n }\n return void 0;\n};\nvar toAttributeName = (element, key) => nameSpaceContext && element instanceof SVGElement && /[A-Z]/.test(key) && (key in element.style || // Presentation attributes are findable in style object. \"clip-path\", \"font-size\", \"stroke-width\", etc.\nkey.match(/^(?:o|pai|str|u|ve)/)) ? key.replace(/([A-Z])/g, \"-$1\").toLowerCase() : key;\nvar applyProps = (container, attributes, oldAttributes) => {\n attributes ||= {};\n for (let key in attributes) {\n const value = attributes[key];\n if (key !== \"children\" && (!oldAttributes || oldAttributes[key] !== value)) {\n key = normalizeIntrinsicElementKey(key);\n const eventSpec = getEventSpec(key);\n if (eventSpec) {\n if (oldAttributes?.[key] !== value) {\n if (oldAttributes) {\n container.removeEventListener(eventSpec[0], oldAttributes[key], eventSpec[1]);\n }\n if (value != null) {\n if (typeof value !== \"function\") {\n throw new Error(`Event handler for \"${key}\" is not a function`);\n }\n container.addEventListener(eventSpec[0], value, eventSpec[1]);\n }\n }\n } else if (key === \"dangerouslySetInnerHTML\" && value) {\n container.innerHTML = value.__html;\n } else if (key === \"ref\") {\n let cleanup;\n if (typeof value === \"function\") {\n cleanup = value(container) || (() => value(null));\n } else if (value && \"current\" in value) {\n value.current = container;\n cleanup = () => value.current = null;\n }\n refCleanupMap.set(container, cleanup);\n } else if (key === \"style\") {\n const style = container.style;\n if (typeof value === \"string\") {\n style.cssText = value;\n } else {\n style.cssText = \"\";\n if (value != null) {\n styleObjectForEach(value, style.setProperty.bind(style));\n }\n }\n } else {\n if (key === \"value\") {\n const nodeName = container.nodeName;\n if (nodeName === \"INPUT\" || nodeName === \"TEXTAREA\" || nodeName === \"SELECT\") {\n ;\n container.value = value === null || value === void 0 || value === false ? null : value;\n if (nodeName === \"TEXTAREA\") {\n container.textContent = value;\n continue;\n } else if (nodeName === \"SELECT\") {\n if (container.selectedIndex === -1) {\n ;\n container.selectedIndex = 0;\n }\n continue;\n }\n }\n } else if (key === \"checked\" && container.nodeName === \"INPUT\" || key === \"selected\" && container.nodeName === \"OPTION\") {\n ;\n container[key] = value;\n }\n const k = toAttributeName(container, key);\n if (value === null || value === void 0 || value === false) {\n container.removeAttribute(k);\n } else if (value === true) {\n container.setAttribute(k, \"\");\n } else if (typeof value === \"string\" || typeof value === \"number\") {\n container.setAttribute(k, value);\n } else {\n container.setAttribute(k, value.toString());\n }\n }\n }\n }\n if (oldAttributes) {\n for (let key in oldAttributes) {\n const value = oldAttributes[key];\n if (key !== \"children\" && !(key in attributes)) {\n key = normalizeIntrinsicElementKey(key);\n const eventSpec = getEventSpec(key);\n if (eventSpec) {\n container.removeEventListener(eventSpec[0], value, eventSpec[1]);\n } else if (key === \"ref\") {\n refCleanupMap.get(container)?.();\n } else {\n container.removeAttribute(toAttributeName(container, key));\n }\n }\n }\n }\n};\nvar invokeTag = (context, node) => {\n node[DOM_STASH][0] = 0;\n buildDataStack.push([context, node]);\n const func = node.tag[DOM_RENDERER] || node.tag;\n const props = func.defaultProps ? {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...func.defaultProps,\n ...node.props\n } : node.props;\n try {\n return [func.call(null, props)];\n } finally {\n buildDataStack.pop();\n }\n};\nvar getNextChildren = (node, container, nextChildren, childrenToRemove, callbacks) => {\n if (node.vR?.length) {\n childrenToRemove.push(...node.vR);\n delete node.vR;\n }\n if (typeof node.tag === \"function\") {\n node[DOM_STASH][1][STASH_EFFECT]?.forEach((data) => callbacks.push(data));\n }\n node.vC.forEach((child) => {\n if (isNodeString(child)) {\n nextChildren.push(child);\n } else {\n if (typeof child.tag === \"function\" || child.tag === \"\") {\n child.c = container;\n const currentNextChildrenIndex = nextChildren.length;\n getNextChildren(child, container, nextChildren, childrenToRemove, callbacks);\n if (child.s) {\n for (let i = currentNextChildrenIndex; i < nextChildren.length; i++) {\n nextChildren[i].s = true;\n }\n child.s = false;\n }\n } else {\n nextChildren.push(child);\n if (child.vR?.length) {\n childrenToRemove.push(...child.vR);\n delete child.vR;\n }\n }\n }\n });\n};\nvar findInsertBefore = (node) => {\n for (; ; node = node.tag === HONO_PORTAL_ELEMENT || !node.vC || !node.pP ? node.nN : node.vC[0]) {\n if (!node) {\n return null;\n }\n if (node.tag !== HONO_PORTAL_ELEMENT && node.e) {\n return node.e;\n }\n }\n};\nvar removeNode = (node) => {\n if (!isNodeString(node)) {\n node[DOM_STASH]?.[1][STASH_EFFECT]?.forEach((data) => data[2]?.());\n refCleanupMap.get(node.e)?.();\n if (node.p === 2) {\n node.vC?.forEach((n) => n.p = 2);\n }\n node.vC?.forEach(removeNode);\n }\n if (!node.p) {\n node.e?.remove();\n delete node.e;\n }\n if (typeof node.tag === \"function\") {\n updateMap.delete(node);\n fallbackUpdateFnArrayMap.delete(node);\n delete node[DOM_STASH][3];\n node.a = true;\n }\n};\nvar apply = (node, container, isNew) => {\n node.c = container;\n applyNodeObject(node, container, isNew);\n};\nvar findChildNodeIndex = (childNodes, child) => {\n if (!child) {\n return;\n }\n for (let i = 0, len = childNodes.length; i < len; i++) {\n if (childNodes[i] === child) {\n return i;\n }\n }\n return;\n};\nvar cancelBuild = /* @__PURE__ */ Symbol();\nvar applyNodeObject = (node, container, isNew) => {\n const next = [];\n const remove = [];\n const callbacks = [];\n getNextChildren(node, container, next, remove, callbacks);\n remove.forEach(removeNode);\n const childNodes = isNew ? void 0 : container.childNodes;\n let offset;\n let insertBeforeNode = null;\n if (isNew) {\n offset = -1;\n } else if (!childNodes.length) {\n offset = 0;\n } else {\n const offsetByNextNode = findChildNodeIndex(childNodes, findInsertBefore(node.nN));\n if (offsetByNextNode !== void 0) {\n insertBeforeNode = childNodes[offsetByNextNode];\n offset = offsetByNextNode;\n } else {\n offset = findChildNodeIndex(childNodes, next.find((n) => n.tag !== HONO_PORTAL_ELEMENT && n.e)?.e) ?? -1;\n }\n if (offset === -1) {\n isNew = true;\n }\n }\n for (let i = 0, len = next.length; i < len; i++, offset++) {\n const child = next[i];\n let el;\n if (child.s && child.e) {\n el = child.e;\n child.s = false;\n } else {\n const isNewLocal = isNew || !child.e;\n if (isNodeString(child)) {\n if (child.e && child.d) {\n child.e.textContent = child.t;\n }\n child.d = false;\n el = child.e ||= document.createTextNode(child.t);\n } else {\n el = child.e ||= child.n ? document.createElementNS(child.n, child.tag) : document.createElement(child.tag);\n applyProps(el, child.props, child.pP);\n applyNodeObject(child, el, isNewLocal);\n }\n }\n if (child.tag === HONO_PORTAL_ELEMENT) {\n offset--;\n } else if (isNew) {\n if (!el.parentNode) {\n container.appendChild(el);\n }\n } else if (childNodes[offset] !== el && childNodes[offset - 1] !== el) {\n if (childNodes[offset + 1] === el) {\n container.appendChild(childNodes[offset]);\n } else {\n container.insertBefore(el, insertBeforeNode || childNodes[offset] || null);\n }\n }\n }\n if (node.pP) {\n delete node.pP;\n }\n if (callbacks.length) {\n const useLayoutEffectCbs = [];\n const useEffectCbs = [];\n callbacks.forEach(([, useLayoutEffectCb, , useEffectCb, useInsertionEffectCb]) => {\n if (useLayoutEffectCb) {\n useLayoutEffectCbs.push(useLayoutEffectCb);\n }\n if (useEffectCb) {\n useEffectCbs.push(useEffectCb);\n }\n useInsertionEffectCb?.();\n });\n useLayoutEffectCbs.forEach((cb) => cb());\n if (useEffectCbs.length) {\n requestAnimationFrame(() => {\n useEffectCbs.forEach((cb) => cb());\n });\n }\n }\n};\nvar isSameContext = (oldContexts, newContexts) => !!(oldContexts && oldContexts.length === newContexts.length && oldContexts.every((ctx, i) => ctx[1] === newContexts[i][1]));\nvar fallbackUpdateFnArrayMap = /* @__PURE__ */ new WeakMap();\nvar build = (context, node, children) => {\n const buildWithPreviousChildren = !children && node.pC;\n if (children) {\n node.pC ||= node.vC;\n }\n let foundErrorHandler;\n try {\n children ||= typeof node.tag == \"function\" ? invokeTag(context, node) : toArray(node.props.children);\n if (children[0]?.tag === \"\" && children[0][DOM_ERROR_HANDLER]) {\n foundErrorHandler = children[0][DOM_ERROR_HANDLER];\n context[5].push([context, foundErrorHandler, node]);\n }\n const oldVChildren = buildWithPreviousChildren ? [...node.pC] : node.vC ? [...node.vC] : void 0;\n const vChildren = [];\n let prevNode;\n for (let i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n children.splice(i, 1, ...children[i].flat());\n }\n let child = buildNode(children[i]);\n if (child) {\n if (typeof child.tag === \"function\" && // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !child.tag[DOM_INTERNAL_TAG]) {\n if (globalJSXContexts.length > 0) {\n child[DOM_STASH][2] = globalJSXContexts.map((c) => [c, c.values.at(-1)]);\n }\n if (context[5]?.length) {\n child[DOM_STASH][3] = context[5].at(-1);\n }\n }\n let oldChild;\n if (oldVChildren && oldVChildren.length) {\n const i2 = oldVChildren.findIndex(\n isNodeString(child) ? (c) => isNodeString(c) : child.key !== void 0 ? (c) => c.key === child.key && c.tag === child.tag : (c) => c.tag === child.tag\n );\n if (i2 !== -1) {\n oldChild = oldVChildren[i2];\n oldVChildren.splice(i2, 1);\n }\n }\n if (oldChild) {\n if (isNodeString(child)) {\n if (oldChild.t !== child.t) {\n ;\n oldChild.t = child.t;\n oldChild.d = true;\n }\n child = oldChild;\n } else {\n const pP = oldChild.pP = oldChild.props;\n oldChild.props = child.props;\n oldChild.f ||= child.f || node.f;\n if (typeof child.tag === \"function\") {\n const oldContexts = oldChild[DOM_STASH][2];\n oldChild[DOM_STASH][2] = child[DOM_STASH][2] || [];\n oldChild[DOM_STASH][3] = child[DOM_STASH][3];\n if (!oldChild.f && ((oldChild.o || oldChild) === child.o || // The code generated by the react compiler is memoized under this condition.\n oldChild.tag[DOM_MEMO]?.(pP, oldChild.props)) && // The `memo` function is memoized under this condition.\n isSameContext(oldContexts, oldChild[DOM_STASH][2])) {\n oldChild.s = true;\n }\n }\n child = oldChild;\n }\n } else if (!isNodeString(child) && nameSpaceContext) {\n const ns = useContext(nameSpaceContext);\n if (ns) {\n child.n = ns;\n }\n }\n if (!isNodeString(child) && !child.s) {\n build(context, child);\n delete child.f;\n }\n vChildren.push(child);\n if (prevNode && !prevNode.s && !child.s) {\n for (let p = prevNode; p && !isNodeString(p); p = p.vC?.at(-1)) {\n p.nN = child;\n }\n }\n prevNode = child;\n }\n }\n node.vR = buildWithPreviousChildren ? [...node.vC, ...oldVChildren || []] : oldVChildren || [];\n node.vC = vChildren;\n if (buildWithPreviousChildren) {\n delete node.pC;\n }\n } catch (e) {\n node.f = true;\n if (e === cancelBuild) {\n if (foundErrorHandler) {\n return;\n } else {\n throw e;\n }\n }\n const [errorHandlerContext, errorHandler, errorHandlerNode] = node[DOM_STASH]?.[3] || [];\n if (errorHandler) {\n const fallbackUpdateFn = () => update([0, false, context[2]], errorHandlerNode);\n const fallbackUpdateFnArray = fallbackUpdateFnArrayMap.get(errorHandlerNode) || [];\n fallbackUpdateFnArray.push(fallbackUpdateFn);\n fallbackUpdateFnArrayMap.set(errorHandlerNode, fallbackUpdateFnArray);\n const fallback = errorHandler(e, () => {\n const fnArray = fallbackUpdateFnArrayMap.get(errorHandlerNode);\n if (fnArray) {\n const i = fnArray.indexOf(fallbackUpdateFn);\n if (i !== -1) {\n fnArray.splice(i, 1);\n return fallbackUpdateFn();\n }\n }\n });\n if (fallback) {\n if (context[0] === 1) {\n context[1] = true;\n } else {\n build(context, errorHandlerNode, [fallback]);\n if ((errorHandler.length === 1 || context !== errorHandlerContext) && errorHandlerNode.c) {\n apply(errorHandlerNode, errorHandlerNode.c, false);\n return;\n }\n }\n throw cancelBuild;\n }\n }\n throw e;\n } finally {\n if (foundErrorHandler) {\n context[5].pop();\n }\n }\n};\nvar buildNode = (node) => {\n if (node === void 0 || node === null || typeof node === \"boolean\") {\n return void 0;\n } else if (typeof node === \"string\" || typeof node === \"number\") {\n return { t: node.toString(), d: true };\n } else {\n if (\"vR\" in node) {\n node = {\n tag: node.tag,\n props: node.props,\n key: node.key,\n f: node.f,\n type: node.tag,\n ref: node.props.ref,\n o: node.o || node\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n }\n if (typeof node.tag === \"function\") {\n ;\n node[DOM_STASH] = [0, []];\n } else {\n const ns = nameSpaceMap[node.tag];\n if (ns) {\n nameSpaceContext ||= createContext(\"\");\n node.props.children = [\n {\n tag: nameSpaceContext,\n props: {\n value: node.n = `http://www.w3.org/${ns}`,\n children: node.props.children\n }\n }\n ];\n }\n }\n return node;\n }\n};\nvar replaceContainer = (node, from, to) => {\n if (node.c === from) {\n node.c = to;\n node.vC.forEach((child) => replaceContainer(child, from, to));\n }\n};\nvar updateSync = (context, node) => {\n node[DOM_STASH][2]?.forEach(([c, v]) => {\n c.values.push(v);\n });\n try {\n build(context, node, void 0);\n } catch {\n return;\n }\n if (node.a) {\n delete node.a;\n return;\n }\n node[DOM_STASH][2]?.forEach(([c]) => {\n c.values.pop();\n });\n if (context[0] !== 1 || !context[1]) {\n apply(node, node.c, false);\n }\n};\nvar updateMap = /* @__PURE__ */ new WeakMap();\nvar currentUpdateSets = [];\nvar update = async (context, node) => {\n context[5] ||= [];\n const existing = updateMap.get(node);\n if (existing) {\n existing[0](void 0);\n }\n let resolve;\n const promise = new Promise((r) => resolve = r);\n updateMap.set(node, [\n resolve,\n () => {\n if (context[2]) {\n context[2](context, node, (context2) => {\n updateSync(context2, node);\n }).then(() => resolve(node));\n } else {\n updateSync(context, node);\n resolve(node);\n }\n }\n ]);\n if (currentUpdateSets.length) {\n ;\n currentUpdateSets.at(-1).add(node);\n } else {\n await Promise.resolve();\n const latest = updateMap.get(node);\n if (latest) {\n updateMap.delete(node);\n latest[1]();\n }\n }\n return promise;\n};\nvar renderNode = (node, container) => {\n const context = [];\n context[5] = [];\n context[4] = true;\n build(context, node, void 0);\n context[4] = false;\n const fragment = document.createDocumentFragment();\n apply(node, fragment, true);\n replaceContainer(node, fragment, container);\n container.replaceChildren(fragment);\n};\nvar render = (jsxNode, container) => {\n renderNode(buildNode({ tag: \"\", props: { children: jsxNode } }), container);\n};\nvar flushSync = (callback) => {\n const set = /* @__PURE__ */ new Set();\n currentUpdateSets.push(set);\n callback();\n set.forEach((node) => {\n const latest = updateMap.get(node);\n if (latest) {\n updateMap.delete(node);\n latest[1]();\n }\n });\n currentUpdateSets.pop();\n};\nvar createPortal = (children, container, key) => ({\n tag: HONO_PORTAL_ELEMENT,\n props: {\n children\n },\n key,\n e: container,\n p: 1\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n});\nexport {\n build,\n buildDataStack,\n buildNode,\n createPortal,\n flushSync,\n getNameSpaceContext,\n render,\n renderNode,\n update\n};\n", "// src/jsx/hooks/index.ts\nimport { DOM_STASH } from \"../constants.js\";\nimport { buildDataStack, update } from \"../dom/render.js\";\nvar STASH_SATE = 0;\nvar STASH_EFFECT = 1;\nvar STASH_CALLBACK = 2;\nvar STASH_MEMO = 3;\nvar STASH_REF = 4;\nvar resolvedPromiseValueMap = /* @__PURE__ */ new WeakMap();\nvar isDepsChanged = (prevDeps, deps) => !prevDeps || !deps || prevDeps.length !== deps.length || deps.some((dep, i) => dep !== prevDeps[i]);\nvar viewTransitionState = void 0;\nvar documentStartViewTransition = (cb) => {\n if (document?.startViewTransition) {\n return document.startViewTransition(cb);\n } else {\n cb();\n return { finished: Promise.resolve() };\n }\n};\nvar updateHook = void 0;\nvar viewTransitionHook = (context, node, cb) => {\n const state = [true, false];\n let lastVC = node.vC;\n return documentStartViewTransition(() => {\n if (lastVC === node.vC) {\n viewTransitionState = state;\n cb(context);\n viewTransitionState = void 0;\n lastVC = node.vC;\n }\n }).finished.then(() => {\n if (state[1] && lastVC === node.vC) {\n state[0] = false;\n viewTransitionState = state;\n cb(context);\n viewTransitionState = void 0;\n }\n });\n};\nvar startViewTransition = (callback) => {\n updateHook = viewTransitionHook;\n try {\n callback();\n } finally {\n updateHook = void 0;\n }\n};\nvar useViewTransition = () => {\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n return [false, () => {\n }];\n }\n if (viewTransitionState) {\n viewTransitionState[1] = true;\n }\n return [!!viewTransitionState?.[0], startViewTransition];\n};\nvar pendingStack = [];\nvar runCallback = (type, callback) => {\n let resolve;\n const promise = new Promise((r) => resolve = r);\n pendingStack.push([type, promise]);\n try {\n const res = callback();\n if (res instanceof Promise) {\n res.then(resolve, resolve);\n } else {\n resolve();\n }\n } finally {\n pendingStack.pop();\n }\n};\nvar startTransition = (callback) => {\n runCallback(1, callback);\n};\nvar startTransitionHook = (callback) => {\n runCallback(2, callback);\n};\nvar useTransition = () => {\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n return [false, () => {\n }];\n }\n const [error, setError] = useState();\n const [state, updateState] = useState();\n if (error) {\n throw error[0];\n }\n const startTransitionLocalHook = useCallback(\n (callback) => {\n startTransitionHook(() => {\n updateState((state2) => !state2);\n let res = callback();\n if (res instanceof Promise) {\n res = res.catch((e) => {\n setError([e]);\n });\n }\n return res;\n });\n },\n [state]\n );\n const [context] = buildData;\n return [context[0] === 2, startTransitionLocalHook];\n};\nvar useDeferredValue = (value, ...rest) => {\n const [values, setValues] = useState(\n rest.length ? [rest[0], rest[0]] : [value, value]\n );\n if (Object.is(values[1], value)) {\n return values[1];\n }\n pendingStack.push([3, Promise.resolve()]);\n updateHook = async (context, _, cb) => {\n cb(context);\n values[0] = value;\n };\n setValues([values[0], value]);\n updateHook = void 0;\n pendingStack.pop();\n return values[0];\n};\nvar useState = (initialState) => {\n const resolveInitialState = () => typeof initialState === \"function\" ? initialState() : initialState;\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n return [resolveInitialState(), () => {\n }];\n }\n const [, node] = buildData;\n const stateArray = node[DOM_STASH][1][STASH_SATE] ||= [];\n const hookIndex = node[DOM_STASH][0]++;\n return stateArray[hookIndex] ||= [\n resolveInitialState(),\n (newState) => {\n const localUpdateHook = updateHook;\n const stateData = stateArray[hookIndex];\n if (typeof newState === \"function\") {\n newState = newState(stateData[0]);\n }\n if (!Object.is(newState, stateData[0])) {\n stateData[0] = newState;\n if (pendingStack.length) {\n const [pendingType, pendingPromise] = pendingStack.at(-1);\n Promise.all([\n pendingType === 3 ? node : update([pendingType, false, localUpdateHook], node),\n pendingPromise\n ]).then(([node2]) => {\n if (!node2 || !(pendingType === 2 || pendingType === 3)) {\n return;\n }\n const lastVC = node2.vC;\n const addUpdateTask = () => {\n setTimeout(() => {\n if (lastVC !== node2.vC) {\n return;\n }\n update([pendingType === 3 ? 1 : 0, false, localUpdateHook], node2);\n });\n };\n requestAnimationFrame(addUpdateTask);\n });\n } else {\n update([0, false, localUpdateHook], node);\n }\n }\n }\n ];\n};\nvar useReducer = (reducer, initialArg, init) => {\n const handler = useCallback(\n (action) => {\n setState((state2) => reducer(state2, action));\n },\n [reducer]\n );\n const [state, setState] = useState(() => init ? init(initialArg) : initialArg);\n return [state, handler];\n};\nvar useEffectCommon = (index, effect, deps) => {\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n return;\n }\n const [, node] = buildData;\n const effectDepsArray = node[DOM_STASH][1][STASH_EFFECT] ||= [];\n const hookIndex = node[DOM_STASH][0]++;\n const [prevDeps, , prevCleanup] = effectDepsArray[hookIndex] ||= [];\n if (isDepsChanged(prevDeps, deps)) {\n if (prevCleanup) {\n prevCleanup();\n }\n const runner = () => {\n data[index] = void 0;\n data[2] = effect();\n };\n const data = [deps, void 0, void 0, void 0, void 0];\n data[index] = runner;\n effectDepsArray[hookIndex] = data;\n }\n};\nvar useEffect = (effect, deps) => useEffectCommon(3, effect, deps);\nvar useLayoutEffect = (effect, deps) => useEffectCommon(1, effect, deps);\nvar useInsertionEffect = (effect, deps) => useEffectCommon(4, effect, deps);\nvar useCallback = (callback, deps) => {\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n return callback;\n }\n const [, node] = buildData;\n const callbackArray = node[DOM_STASH][1][STASH_CALLBACK] ||= [];\n const hookIndex = node[DOM_STASH][0]++;\n const prevDeps = callbackArray[hookIndex];\n if (isDepsChanged(prevDeps?.[1], deps)) {\n callbackArray[hookIndex] = [callback, deps];\n } else {\n callback = callbackArray[hookIndex][0];\n }\n return callback;\n};\nvar useRef = (initialValue) => {\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n return { current: initialValue };\n }\n const [, node] = buildData;\n const refArray = node[DOM_STASH][1][STASH_REF] ||= [];\n const hookIndex = node[DOM_STASH][0]++;\n return refArray[hookIndex] ||= { current: initialValue };\n};\nvar use = (promise) => {\n const cachedRes = resolvedPromiseValueMap.get(promise);\n if (cachedRes) {\n if (cachedRes.length === 2) {\n throw cachedRes[1];\n }\n return cachedRes[0];\n }\n promise.then(\n (res) => resolvedPromiseValueMap.set(promise, [res]),\n (e) => resolvedPromiseValueMap.set(promise, [void 0, e])\n );\n throw promise;\n};\nvar useMemo = (factory, deps) => {\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n return factory();\n }\n const [, node] = buildData;\n const memoArray = node[DOM_STASH][1][STASH_MEMO] ||= [];\n const hookIndex = node[DOM_STASH][0]++;\n const prevDeps = memoArray[hookIndex];\n if (isDepsChanged(prevDeps?.[1], deps)) {\n memoArray[hookIndex] = [factory(), deps];\n }\n return memoArray[hookIndex][0];\n};\nvar idCounter = 0;\nvar useId = () => useMemo(() => `:r${(idCounter++).toString(32)}:`, []);\nvar useDebugValue = (_value, _formatter) => {\n};\nvar createRef = () => {\n return { current: null };\n};\nvar forwardRef = (Component) => {\n return (props) => {\n const { ref, ...rest } = props;\n return Component(rest, ref);\n };\n};\nvar useImperativeHandle = (ref, createHandle, deps) => {\n useEffect(() => {\n ref.current = createHandle();\n return () => {\n ref.current = null;\n };\n }, deps);\n};\nvar useSyncExternalStore = (subscribe, getSnapshot, getServerSnapshot) => {\n const buildData = buildDataStack.at(-1);\n if (!buildData) {\n if (!getServerSnapshot) {\n throw new Error(\"getServerSnapshot is required for server side rendering\");\n }\n return getServerSnapshot();\n }\n const [serverSnapshotIsUsed] = useState(!!(buildData[0][4] && getServerSnapshot));\n const [state, setState] = useState(\n () => serverSnapshotIsUsed ? getServerSnapshot() : getSnapshot()\n );\n useEffect(() => {\n if (serverSnapshotIsUsed) {\n setState(getSnapshot());\n }\n return subscribe(() => {\n setState(getSnapshot());\n });\n }, []);\n return state;\n};\nexport {\n STASH_EFFECT,\n createRef,\n forwardRef,\n startTransition,\n startViewTransition,\n use,\n useCallback,\n useDebugValue,\n useDeferredValue,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n useTransition,\n useViewTransition\n};\n", "// src/jsx/dom/hooks/index.ts\nimport { PERMALINK } from \"../../constants.js\";\nimport { useContext } from \"../../context.js\";\nimport { useCallback, useState } from \"../../hooks/index.js\";\nimport { createContext } from \"../context.js\";\nvar FormContext = createContext({\n pending: false,\n data: null,\n method: null,\n action: null\n});\nvar actions = /* @__PURE__ */ new Set();\nvar registerAction = (action) => {\n actions.add(action);\n action.finally(() => actions.delete(action));\n};\nvar useFormStatus = () => {\n return useContext(FormContext);\n};\nvar useOptimistic = (state, updateState) => {\n const [optimisticState, setOptimisticState] = useState(state);\n if (actions.size > 0) {\n Promise.all(actions).finally(() => {\n setOptimisticState(state);\n });\n } else {\n setOptimisticState(state);\n }\n const cb = useCallback((newData) => {\n setOptimisticState((currentState) => updateState(currentState, newData));\n }, []);\n return [optimisticState, cb];\n};\nvar useActionState = (fn, initialState, permalink) => {\n const [state, setState] = useState(initialState);\n const actionState = async (data) => {\n setState(await fn(state, data));\n };\n actionState[PERMALINK] = permalink;\n return [state, actionState];\n};\nexport {\n FormContext,\n registerAction,\n useActionState,\n useFormStatus,\n useOptimistic\n};\n", "// src/jsx/dom/intrinsic-element/components.ts\nimport { useContext } from \"../../context.js\";\nimport { use, useCallback, useMemo, useState } from \"../../hooks/index.js\";\nimport { dataPrecedenceAttr, deDupeKeyMap, domRenderers } from \"../../intrinsic-element/common.js\";\nimport { FormContext, registerAction } from \"../hooks/index.js\";\nimport { createPortal, getNameSpaceContext } from \"../render.js\";\nvar clearCache = () => {\n blockingPromiseMap = /* @__PURE__ */ Object.create(null);\n createdElements = /* @__PURE__ */ Object.create(null);\n};\nvar composeRef = (ref, cb) => {\n return useMemo(\n () => (e) => {\n let refCleanup;\n if (ref) {\n if (typeof ref === \"function\") {\n refCleanup = ref(e) || (() => {\n ref(null);\n });\n } else if (ref && \"current\" in ref) {\n ref.current = e;\n refCleanup = () => {\n ref.current = null;\n };\n }\n }\n const cbCleanup = cb(e);\n return () => {\n cbCleanup?.();\n refCleanup?.();\n };\n },\n [ref]\n );\n};\nvar blockingPromiseMap = /* @__PURE__ */ Object.create(null);\nvar createdElements = /* @__PURE__ */ Object.create(null);\nvar documentMetadataTag = (tag, props, preserveNodeType, supportSort, supportBlocking) => {\n if (props?.itemProp) {\n return {\n tag,\n props,\n type: tag,\n ref: props.ref\n };\n }\n const head = document.head;\n let { onLoad, onError, precedence, blocking, ...restProps } = props;\n let element = null;\n let created = false;\n const deDupeKeys = deDupeKeyMap[tag];\n let existingElements = void 0;\n if (deDupeKeys.length > 0) {\n const tags = head.querySelectorAll(tag);\n LOOP: for (const e of tags) {\n for (const key of deDupeKeyMap[tag]) {\n if (e.getAttribute(key) === props[key]) {\n element = e;\n break LOOP;\n }\n }\n }\n if (!element) {\n const cacheKey = deDupeKeys.reduce(\n (acc, key) => props[key] === void 0 ? acc : `${acc}-${key}-${props[key]}`,\n tag\n );\n created = !createdElements[cacheKey];\n element = createdElements[cacheKey] ||= (() => {\n const e = document.createElement(tag);\n for (const key of deDupeKeys) {\n if (props[key] !== void 0) {\n e.setAttribute(key, props[key]);\n }\n if (props.rel) {\n e.setAttribute(\"rel\", props.rel);\n }\n }\n return e;\n })();\n }\n } else {\n existingElements = head.querySelectorAll(tag);\n }\n precedence = supportSort ? precedence ?? \"\" : void 0;\n if (supportSort) {\n restProps[dataPrecedenceAttr] = precedence;\n }\n const insert = useCallback(\n (e) => {\n if (deDupeKeys.length > 0) {\n let found = false;\n for (const existingElement of head.querySelectorAll(tag)) {\n if (found && existingElement.getAttribute(dataPrecedenceAttr) !== precedence) {\n head.insertBefore(e, existingElement);\n return;\n }\n if (existingElement.getAttribute(dataPrecedenceAttr) === precedence) {\n found = true;\n }\n }\n head.appendChild(e);\n } else if (existingElements) {\n let found = false;\n for (const existingElement of existingElements) {\n if (existingElement === e) {\n found = true;\n break;\n }\n }\n if (!found) {\n head.insertBefore(\n e,\n head.contains(existingElements[0]) ? existingElements[0] : head.querySelector(tag)\n );\n }\n existingElements = void 0;\n }\n },\n [precedence]\n );\n const ref = composeRef(props.ref, (e) => {\n const key = deDupeKeys[0];\n if (preserveNodeType === 2) {\n e.innerHTML = \"\";\n }\n if (created || existingElements) {\n insert(e);\n }\n if (!onError && !onLoad) {\n return;\n }\n let promise = blockingPromiseMap[e.getAttribute(key)] ||= new Promise(\n (resolve, reject) => {\n e.addEventListener(\"load\", resolve);\n e.addEventListener(\"error\", reject);\n }\n );\n if (onLoad) {\n promise = promise.then(onLoad);\n }\n if (onError) {\n promise = promise.catch(onError);\n }\n promise.catch(() => {\n });\n });\n if (supportBlocking && blocking === \"render\") {\n const key = deDupeKeyMap[tag][0];\n if (props[key]) {\n const value = props[key];\n const promise = blockingPromiseMap[value] ||= new Promise((resolve, reject) => {\n insert(element);\n element.addEventListener(\"load\", resolve);\n element.addEventListener(\"error\", reject);\n });\n use(promise);\n }\n }\n const jsxNode = {\n tag,\n type: tag,\n props: {\n ...restProps,\n ref\n },\n ref\n };\n jsxNode.p = preserveNodeType;\n if (element) {\n jsxNode.e = element;\n }\n return createPortal(\n jsxNode,\n head\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n );\n};\nvar title = (props) => {\n const nameSpaceContext = getNameSpaceContext();\n const ns = nameSpaceContext && useContext(nameSpaceContext);\n if (ns?.endsWith(\"svg\")) {\n return {\n tag: \"title\",\n props,\n type: \"title\",\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref: props.ref\n };\n }\n return documentMetadataTag(\"title\", props, void 0, false, false);\n};\nvar script = (props) => {\n if (!props || [\"src\", \"async\"].some((k) => !props[k])) {\n return {\n tag: \"script\",\n props,\n type: \"script\",\n ref: props.ref\n };\n }\n return documentMetadataTag(\"script\", props, 1, false, true);\n};\nvar style = (props) => {\n if (!props || ![\"href\", \"precedence\"].every((k) => k in props)) {\n return {\n tag: \"style\",\n props,\n type: \"style\",\n ref: props.ref\n };\n }\n props[\"data-href\"] = props.href;\n delete props.href;\n return documentMetadataTag(\"style\", props, 2, true, true);\n};\nvar link = (props) => {\n if (!props || [\"onLoad\", \"onError\"].some((k) => k in props) || props.rel === \"stylesheet\" && (!(\"precedence\" in props) || \"disabled\" in props)) {\n return {\n tag: \"link\",\n props,\n type: \"link\",\n ref: props.ref\n };\n }\n return documentMetadataTag(\"link\", props, 1, \"precedence\" in props, true);\n};\nvar meta = (props) => {\n return documentMetadataTag(\"meta\", props, void 0, false, false);\n};\nvar customEventFormAction = /* @__PURE__ */ Symbol();\nvar form = (props) => {\n const { action, ...restProps } = props;\n if (typeof action !== \"function\") {\n ;\n restProps.action = action;\n }\n const [state, setState] = useState([null, false]);\n const onSubmit = useCallback(\n async (ev) => {\n const currentAction = ev.isTrusted ? action : ev.detail[customEventFormAction];\n if (typeof currentAction !== \"function\") {\n return;\n }\n ev.preventDefault();\n const formData = new FormData(ev.target);\n setState([formData, true]);\n const actionRes = currentAction(formData);\n if (actionRes instanceof Promise) {\n registerAction(actionRes);\n await actionRes;\n }\n setState([null, true]);\n },\n []\n );\n const ref = composeRef(props.ref, (el) => {\n el.addEventListener(\"submit\", onSubmit);\n return () => {\n el.removeEventListener(\"submit\", onSubmit);\n };\n });\n const [data, isDirty] = state;\n state[1] = false;\n return {\n tag: FormContext,\n props: {\n value: {\n pending: data !== null,\n data,\n method: data ? \"post\" : null,\n action: data ? action : null\n },\n children: {\n tag: \"form\",\n props: {\n ...restProps,\n ref\n },\n type: \"form\",\n ref\n }\n },\n f: isDirty\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n};\nvar formActionableElement = (tag, {\n formAction,\n ...props\n}) => {\n if (typeof formAction === \"function\") {\n const onClick = useCallback((ev) => {\n ev.preventDefault();\n ev.currentTarget.form.dispatchEvent(\n new CustomEvent(\"submit\", { detail: { [customEventFormAction]: formAction } })\n );\n }, []);\n props.ref = composeRef(props.ref, (el) => {\n el.addEventListener(\"click\", onClick);\n return () => {\n el.removeEventListener(\"click\", onClick);\n };\n });\n }\n return {\n tag,\n props,\n type: tag,\n ref: props.ref\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n};\nvar input = (props) => formActionableElement(\"input\", props);\nvar button = (props) => formActionableElement(\"button\", props);\nObject.assign(domRenderers, {\n title,\n script,\n style,\n link,\n meta,\n form,\n input,\n button\n});\nexport {\n button,\n clearCache,\n composeRef,\n form,\n input,\n link,\n meta,\n script,\n style,\n title\n};\n", "// src/jsx/dom/jsx-dev-runtime.ts\nimport * as intrinsicElementTags from \"./intrinsic-element/components.js\";\nvar jsxDEV = (tag, props, key) => {\n if (typeof tag === \"string\" && intrinsicElementTags[tag]) {\n tag = intrinsicElementTags[tag];\n }\n return {\n tag,\n type: tag,\n props,\n key,\n ref: props.ref\n };\n};\nvar Fragment = (props) => jsxDEV(\"\", props, void 0);\nexport {\n Fragment,\n jsxDEV\n};\n", "// src/jsx/dom/jsx-runtime.ts\nimport { jsxDEV, Fragment } from \"./jsx-dev-runtime.js\";\nimport { jsxDEV as jsxDEV2 } from \"./jsx-dev-runtime.js\";\nexport {\n Fragment,\n jsxDEV as jsx,\n jsxDEV2 as jsxs\n};\n", "// src/jsx/dom/components.ts\nimport { DOM_ERROR_HANDLER } from \"../constants.js\";\nimport { Fragment } from \"./jsx-runtime.js\";\nvar ErrorBoundary = (({ children, fallback, fallbackRender, onError }) => {\n const res = Fragment({ children });\n res[DOM_ERROR_HANDLER] = (err) => {\n if (err instanceof Promise) {\n throw err;\n }\n onError?.(err);\n return fallbackRender?.(err) || fallback;\n };\n return res;\n});\nvar Suspense = (({\n children,\n fallback\n}) => {\n const res = Fragment({ children });\n res[DOM_ERROR_HANDLER] = (err, retry) => {\n if (!(err instanceof Promise)) {\n throw err;\n }\n err.finally(retry);\n return fallback;\n };\n return res;\n});\nexport {\n ErrorBoundary,\n Suspense\n};\n", "// src/jsx/streaming.ts\nimport { raw } from \"../helper/html/index.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"../utils/html.js\";\nimport { JSXNode } from \"./base.js\";\nimport { childrenToString } from \"./components.js\";\nimport { DOM_RENDERER, DOM_STASH } from \"./constants.js\";\nimport { createContext, useContext } from \"./context.js\";\nimport { Suspense as SuspenseDomRenderer } from \"./dom/components.js\";\nimport { buildDataStack } from \"./dom/render.js\";\nvar StreamingContext = createContext(null);\nvar suspenseCounter = 0;\nvar Suspense = async ({\n children,\n fallback\n}) => {\n if (!Array.isArray(children)) {\n children = [children];\n }\n const nonce = useContext(StreamingContext)?.scriptNonce;\n let resArray = [];\n const stackNode = { [DOM_STASH]: [0, []] };\n const popNodeStack = (value) => {\n buildDataStack.pop();\n return value;\n };\n try {\n stackNode[DOM_STASH][0] = 0;\n buildDataStack.push([[], stackNode]);\n resArray = children.map(\n (c) => c == null || typeof c === \"boolean\" ? \"\" : c.toString()\n );\n } catch (e) {\n if (e instanceof Promise) {\n resArray = [\n e.then(() => {\n stackNode[DOM_STASH][0] = 0;\n buildDataStack.push([[], stackNode]);\n return childrenToString(children).then(popNodeStack);\n })\n ];\n } else {\n throw e;\n }\n } finally {\n popNodeStack();\n }\n if (resArray.some((res) => res instanceof Promise)) {\n const index = suspenseCounter++;\n const fallbackStr = await fallback.toString();\n return raw(`<template id=\"H:${index}\"></template>${fallbackStr}<!--/$-->`, [\n ...fallbackStr.callbacks || [],\n ({ phase, buffer, context }) => {\n if (phase === HtmlEscapedCallbackPhase.BeforeStream) {\n return;\n }\n return Promise.all(resArray).then(async (htmlArray) => {\n htmlArray = htmlArray.flat();\n const content = htmlArray.join(\"\");\n if (buffer) {\n buffer[0] = buffer[0].replace(\n new RegExp(`<template id=\"H:${index}\"></template>.*?<!--/\\\\$-->`),\n content\n );\n }\n let html = buffer ? \"\" : `<template data-hono-target=\"H:${index}\">${content}</template><script${nonce ? ` nonce=\"${nonce}\"` : \"\"}>\n((d,c,n) => {\nc=d.currentScript.previousSibling\nd=d.getElementById('H:${index}')\nif(!d)return\ndo{n=d.nextSibling;n.remove()}while(n.nodeType!=8||n.nodeValue!='/$')\nd.replaceWith(c.content)\n})(document)\n</script>`;\n const callbacks = htmlArray.map((html2) => html2.callbacks || []).flat();\n if (!callbacks.length) {\n return html;\n }\n if (phase === HtmlEscapedCallbackPhase.Stream) {\n html = await resolveCallback(html, HtmlEscapedCallbackPhase.BeforeStream, true, context);\n }\n return raw(html, callbacks);\n });\n }\n ]);\n } else {\n return raw(resArray.join(\"\"));\n }\n};\nSuspense[DOM_RENDERER] = SuspenseDomRenderer;\nvar textEncoder = new TextEncoder();\nvar renderToReadableStream = (content, onError = console.trace) => {\n const reader = new ReadableStream({\n async start(controller) {\n try {\n if (content instanceof JSXNode) {\n content = content.toString();\n }\n const context = typeof content === \"object\" ? content : {};\n const resolved = await resolveCallback(\n content,\n HtmlEscapedCallbackPhase.BeforeStream,\n true,\n context\n );\n controller.enqueue(textEncoder.encode(resolved));\n let resolvedCount = 0;\n const callbacks = [];\n const then = (promise) => {\n callbacks.push(\n promise.catch((err) => {\n console.log(err);\n onError(err);\n return \"\";\n }).then(async (res) => {\n res = await resolveCallback(\n res,\n HtmlEscapedCallbackPhase.BeforeStream,\n true,\n context\n );\n res.callbacks?.map((c) => c({ phase: HtmlEscapedCallbackPhase.Stream, context })).filter(Boolean).forEach(then);\n resolvedCount++;\n controller.enqueue(textEncoder.encode(res));\n })\n );\n };\n resolved.callbacks?.map((c) => c({ phase: HtmlEscapedCallbackPhase.Stream, context })).filter(Boolean).forEach(then);\n while (resolvedCount !== callbacks.length) {\n await Promise.all(callbacks);\n }\n } catch (e) {\n onError(e);\n }\n controller.close();\n }\n });\n return reader;\n};\nexport {\n StreamingContext,\n Suspense,\n renderToReadableStream\n};\n", "// src/jsx/components.ts\nimport { raw } from \"../helper/html/index.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"../utils/html.js\";\nimport { DOM_RENDERER } from \"./constants.js\";\nimport { useContext } from \"./context.js\";\nimport { ErrorBoundary as ErrorBoundaryDomRenderer } from \"./dom/components.js\";\nimport { StreamingContext } from \"./streaming.js\";\nvar errorBoundaryCounter = 0;\nvar childrenToString = async (children) => {\n try {\n return children.flat().map((c) => c == null || typeof c === \"boolean\" ? \"\" : c.toString());\n } catch (e) {\n if (e instanceof Promise) {\n await e;\n return childrenToString(children);\n } else {\n throw e;\n }\n }\n};\nvar ErrorBoundary = async ({ children, fallback, fallbackRender, onError }) => {\n if (!children) {\n return raw(\"\");\n }\n if (!Array.isArray(children)) {\n children = [children];\n }\n const nonce = useContext(StreamingContext)?.scriptNonce;\n let fallbackStr;\n const fallbackRes = (error) => {\n onError?.(error);\n return (fallbackStr || fallbackRender?.(error) || \"\").toString();\n };\n let resArray = [];\n try {\n resArray = children.map(\n (c) => c == null || typeof c === \"boolean\" ? \"\" : c.toString()\n );\n } catch (e) {\n fallbackStr = await fallback?.toString();\n if (e instanceof Promise) {\n resArray = [\n e.then(() => childrenToString(children)).catch((e2) => fallbackRes(e2))\n ];\n } else {\n resArray = [fallbackRes(e)];\n }\n }\n if (resArray.some((res) => res instanceof Promise)) {\n fallbackStr ||= await fallback?.toString();\n const index = errorBoundaryCounter++;\n const replaceRe = RegExp(`(<template id=\"E:${index}\"></template>.*?)(.*?)(<!--E:${index}-->)`);\n const caught = false;\n const catchCallback = ({ error: error2, buffer }) => {\n if (caught) {\n return \"\";\n }\n const fallbackResString = fallbackRes(error2);\n if (buffer) {\n buffer[0] = buffer[0].replace(replaceRe, fallbackResString);\n }\n return buffer ? \"\" : `<template data-hono-target=\"E:${index}\">${fallbackResString}</template><script>\n((d,c,n) => {\nc=d.currentScript.previousSibling\nd=d.getElementById('E:${index}')\nif(!d)return\ndo{n=d.nextSibling;n.remove()}while(n.nodeType!=8||n.nodeValue!='E:${index}')\nd.replaceWith(c.content)\n})(document)\n</script>`;\n };\n let error;\n const promiseAll = Promise.all(resArray).catch((e) => error = e);\n return raw(`<template id=\"E:${index}\"></template><!--E:${index}-->`, [\n ({ phase, buffer, context }) => {\n if (phase === HtmlEscapedCallbackPhase.BeforeStream) {\n return;\n }\n return promiseAll.then(async (htmlArray) => {\n if (error) {\n throw error;\n }\n htmlArray = htmlArray.flat();\n const content = htmlArray.join(\"\");\n let html = buffer ? \"\" : `<template data-hono-target=\"E:${index}\">${content}</template><script${nonce ? ` nonce=\"${nonce}\"` : \"\"}>\n((d,c) => {\nc=d.currentScript.previousSibling\nd=d.getElementById('E:${index}')\nif(!d)return\nd.parentElement.insertBefore(c.content,d.nextSibling)\n})(document)\n</script>`;\n if (htmlArray.every((html2) => !html2.callbacks?.length)) {\n if (buffer) {\n buffer[0] = buffer[0].replace(replaceRe, content);\n }\n return html;\n }\n if (buffer) {\n buffer[0] = buffer[0].replace(\n replaceRe,\n (_all, pre, _, post) => `${pre}${content}${post}`\n );\n }\n const callbacks = htmlArray.map((html2) => html2.callbacks || []).flat();\n if (phase === HtmlEscapedCallbackPhase.Stream) {\n html = await resolveCallback(\n html,\n HtmlEscapedCallbackPhase.BeforeStream,\n true,\n context\n );\n }\n let resolvedCount = 0;\n const promises = callbacks.map(\n (c) => (...args) => c(...args)?.then((content2) => {\n resolvedCount++;\n if (buffer) {\n if (resolvedCount === callbacks.length) {\n buffer[0] = buffer[0].replace(replaceRe, (_all, _pre, content3) => content3);\n }\n buffer[0] += content2;\n return raw(\"\", content2.callbacks);\n }\n return raw(\n content2 + (resolvedCount !== callbacks.length ? \"\" : `<script>\n((d,c,n) => {\nd=d.getElementById('E:${index}')\nif(!d)return\nn=d.nextSibling\nwhile(n.nodeType!=8||n.nodeValue!='E:${index}'){n=n.nextSibling}\nn.remove()\nd.remove()\n})(document)\n</script>`),\n content2.callbacks\n );\n }).catch((error2) => catchCallback({ error: error2, buffer }))\n );\n return raw(html, promises);\n }).catch((error2) => catchCallback({ error: error2, buffer }));\n }\n ]);\n } else {\n return raw(resArray.join(\"\"));\n }\n};\nErrorBoundary[DOM_RENDERER] = ErrorBoundaryDomRenderer;\nexport {\n ErrorBoundary,\n childrenToString\n};\n", "// src/jsx/index.ts\nimport { Fragment, cloneElement, isValidElement, jsx, memo, reactAPICompatVersion } from \"./base.js\";\nimport { Children } from \"./children.js\";\nimport { ErrorBoundary } from \"./components.js\";\nimport { createContext, useContext } from \"./context.js\";\nimport { useActionState, useOptimistic } from \"./dom/hooks/index.js\";\nimport {\n createRef,\n forwardRef,\n startTransition,\n startViewTransition,\n use,\n useCallback,\n useDebugValue,\n useDeferredValue,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n useTransition,\n useViewTransition\n} from \"./hooks/index.js\";\nimport { Suspense } from \"./streaming.js\";\nvar jsx_default = {\n version: reactAPICompatVersion,\n memo,\n Fragment,\n StrictMode: Fragment,\n isValidElement,\n createElement: jsx,\n cloneElement,\n ErrorBoundary,\n createContext,\n useContext,\n useState,\n useEffect,\n useRef,\n useCallback,\n useReducer,\n useId,\n useDebugValue,\n use,\n startTransition,\n useTransition,\n useDeferredValue,\n startViewTransition,\n useViewTransition,\n useMemo,\n useLayoutEffect,\n useInsertionEffect,\n createRef,\n forwardRef,\n useImperativeHandle,\n useSyncExternalStore,\n useActionState,\n useOptimistic,\n Suspense,\n Children\n};\nexport {\n Children,\n ErrorBoundary,\n Fragment,\n Fragment as StrictMode,\n Suspense,\n cloneElement,\n createContext,\n jsx as createElement,\n createRef,\n jsx_default as default,\n forwardRef,\n isValidElement,\n jsx,\n memo,\n startTransition,\n startViewTransition,\n use,\n useActionState,\n useCallback,\n useContext,\n useDebugValue,\n useDeferredValue,\n useEffect,\n useId,\n useImperativeHandle,\n useInsertionEffect,\n useLayoutEffect,\n useMemo,\n useOptimistic,\n useReducer,\n useRef,\n useState,\n useSyncExternalStore,\n useTransition,\n useViewTransition,\n reactAPICompatVersion as version\n};\n", "// src/middleware/jsx-renderer/index.ts\nimport { html, raw } from \"../../helper/html/index.js\";\nimport { Fragment, createContext, jsx, useContext } from \"../../jsx/index.js\";\nimport { renderToReadableStream } from \"../../jsx/streaming.js\";\nvar RequestContext = createContext(null);\nvar createRenderer = (c, Layout, component, options) => (children, props) => {\n const docType = typeof options?.docType === \"string\" ? options.docType : options?.docType === false ? \"\" : \"<!DOCTYPE html>\";\n const currentLayout = component ? jsx(\n (props2) => component(props2, c),\n {\n Layout,\n ...props\n },\n children\n ) : children;\n const body = html`${raw(docType)}${jsx(\n RequestContext.Provider,\n { value: c },\n currentLayout\n )}`;\n if (options?.stream) {\n if (options.stream === true) {\n c.header(\"Transfer-Encoding\", \"chunked\");\n c.header(\"Content-Type\", \"text/html; charset=UTF-8\");\n c.header(\"Content-Encoding\", \"Identity\");\n } else {\n for (const [key, value] of Object.entries(options.stream)) {\n c.header(key, value);\n }\n }\n return c.body(renderToReadableStream(body));\n } else {\n return c.html(body);\n }\n};\nvar jsxRenderer = (component, options) => function jsxRenderer2(c, next) {\n const Layout = c.getLayout() ?? Fragment;\n if (component) {\n c.setLayout((props) => {\n return component({ ...props, Layout }, c);\n });\n }\n c.setRenderer(createRenderer(c, Layout, component, options));\n return next();\n};\nvar useRequestContext = () => {\n const c = useContext(RequestContext);\n if (!c) {\n throw new Error(\"RequestContext is not provided.\");\n }\n return c;\n};\nexport {\n RequestContext,\n jsxRenderer,\n useRequestContext\n};\n", "const RESERVED_WORDS = new Set(\n (\n \"abort action add after all alter analyze and as asc attach autoincrement \" +\n \"before begin between by cascade case cast check collate column commit \" +\n \"conflict constraint create cross current_date current_time \" +\n \"current_timestamp database default deferrable deferred delete desc detach \" +\n \"distinct drop each else end escape except exclusive exists explain fail \" +\n \"for foreign from full glob group having if ignore immediate in index \" +\n \"indexed initially inner insert instead intersect into is isnull join key \" +\n \"left like limit match natural no not notnull null of offset on or order \" +\n \"outer plan pragma primary query raise recursive references regexp reindex \" +\n \"release rename replace restrict right rollback row savepoint select set \" +\n \"table temp temporary then to transaction trigger union unique update using \" +\n \"vacuum values view virtual when where with without\"\n ).split(\" \"),\n);\n\nconst BORING_IDENTIFIER = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nexport function escapeSqliteIdentifier(value: string): string {\n if (BORING_IDENTIFIER.test(value) && !RESERVED_WORDS.has(value.toLowerCase())) {\n return value;\n }\n return `[${value}]`;\n}\n", "import type { DatabaseSchema } from \"../db/introspection.js\";\nimport { escapeSqliteIdentifier } from \"./sqlite-escape.js\";\n\nexport type FilterOp =\n | \"exact\"\n | \"not\"\n | \"contains\"\n | \"notcontains\"\n | \"endswith\"\n | \"startswith\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"like\"\n | \"notlike\"\n | \"glob\"\n | \"in\"\n | \"notin\"\n | \"arraycontains\"\n | \"arraynotcontains\"\n | \"date\"\n | \"isnull\"\n | \"notnull\"\n | \"isblank\"\n | \"notblank\";\n\nexport type FilterCondition = {\n column: string;\n op: FilterOp;\n values: string[];\n};\n\nexport type WhereClause = {\n sql: string;\n params: unknown[];\n};\n\nexport function buildWhereClause(\n schema: DatabaseSchema,\n tableName: string,\n filters: FilterCondition[],\n): WhereClause {\n if (filters.length === 0) {\n return { sql: \"\", params: [] };\n }\n\n const table = schema.tables[tableName];\n if (!table) {\n return { sql: \"\", params: [] };\n }\n\n const columnSet = new Set(table.columns.map((col) => col.name));\n const clauses: string[] = [];\n const params: unknown[] = [];\n\n for (const filter of filters) {\n if (!columnSet.has(filter.column)) {\n continue;\n }\n const clause = buildFilterClause(tableName, filter, params);\n if (clause) {\n clauses.push(clause);\n }\n }\n\n if (clauses.length === 0) {\n return { sql: \"\", params: [] };\n }\n\n return {\n sql: clauses.join(\" and \"),\n params,\n };\n}\n\nexport function buildSearchClause(\n schema: DatabaseSchema,\n tableName: string,\n input: { search: string | null; searchColumns: Record<string, string> },\n): WhereClause {\n const search = input.search?.trim() ?? \"\";\n const searchColumns = input.searchColumns;\n if (!search && Object.keys(searchColumns).length === 0) {\n return { sql: \"\", params: [] };\n }\n\n const table = schema.tables[tableName];\n if (!table) {\n return { sql: \"\", params: [] };\n }\n\n const ftsTable = detectFtsTable(schema, tableName);\n if (ftsTable) {\n const clauses: string[] = [];\n const params: string[] = [];\n if (search) {\n clauses.push(\n `rowid in (select rowid from ${escapeSqliteIdentifier(\n ftsTable,\n )} where ${escapeSqliteIdentifier(ftsTable)} match ?)`,\n );\n params.push(search);\n }\n for (const [column, value] of Object.entries(searchColumns)) {\n clauses.push(\n `rowid in (select rowid from ${escapeSqliteIdentifier(\n ftsTable,\n )} where ${escapeSqliteIdentifier(column)} match ?)`,\n );\n params.push(value);\n }\n if (clauses.length === 0) {\n return { sql: \"\", params: [] };\n }\n return { sql: `(${clauses.join(\" and \")})`, params };\n }\n\n const textColumns = table.columns\n .filter((col) => isTextType(col.type))\n .map((col) => col.name);\n const clauses: string[] = [];\n const params: string[] = [];\n\n if (search) {\n clauses.push(\n textColumns.map((column) => `${escapeSqliteIdentifier(column)} like ?`).join(\" or \"),\n );\n textColumns.forEach(() => params.push(`%${search}%`));\n }\n\n for (const [column, value] of Object.entries(searchColumns)) {\n if (!textColumns.includes(column)) {\n continue;\n }\n clauses.push(`${escapeSqliteIdentifier(column)} like ?`);\n params.push(`%${value}%`);\n }\n\n if (clauses.length === 0) {\n return { sql: \"\", params: [] };\n }\n\n return { sql: `(${clauses.join(\" and \")})`, params };\n}\n\nfunction isTextType(type: string): boolean {\n const normalized = type.toLowerCase();\n return (\n normalized.includes(\"char\") ||\n normalized.includes(\"text\") ||\n normalized.includes(\"clob\")\n );\n}\n\nfunction detectFtsTable(schema: DatabaseSchema, tableName: string): string | null {\n const candidate = `${tableName}_fts`;\n const fts = schema.tables[candidate];\n if (fts?.isFts) {\n return candidate;\n }\n return null;\n}\n\nfunction buildFilterClause(\n tableName: string,\n filter: FilterCondition,\n params: unknown[],\n): string | null {\n const columnSql = escapeSqliteIdentifier(filter.column);\n const values = filter.values;\n switch (filter.op) {\n case \"exact\":\n return addValueClause(`${columnSql} = ?`, values, params);\n case \"not\":\n return addValueClause(`${columnSql} != ?`, values, params);\n case \"contains\":\n return addValueClause(`${columnSql} like ?`, values, params, (v) => `%${v}%`);\n case \"notcontains\":\n return addValueClause(\n `${columnSql} not like ?`,\n values,\n params,\n (v) => `%${v}%`,\n );\n case \"endswith\":\n return addValueClause(`${columnSql} like ?`, values, params, (v) => `%${v}`);\n case \"startswith\":\n return addValueClause(`${columnSql} like ?`, values, params, (v) => `${v}%`);\n case \"gt\":\n return addValueClause(`${columnSql} > ?`, values, params);\n case \"gte\":\n return addValueClause(`${columnSql} >= ?`, values, params);\n case \"lt\":\n return addValueClause(`${columnSql} < ?`, values, params);\n case \"lte\":\n return addValueClause(`${columnSql} <= ?`, values, params);\n case \"like\":\n return addValueClause(`${columnSql} like ?`, values, params);\n case \"notlike\":\n return addValueClause(`${columnSql} not like ?`, values, params);\n case \"glob\":\n return addValueClause(`${columnSql} glob ?`, values, params);\n case \"in\":\n return addInClause(`${columnSql} in`, values, params);\n case \"notin\":\n return addInClause(`${columnSql} not in`, values, params);\n case \"arraycontains\":\n return addValueClause(\n `? in (select value from json_each(${escapeSqliteIdentifier(\n tableName,\n )}.${columnSql}))`,\n values,\n params,\n );\n case \"arraynotcontains\":\n return addValueClause(\n `? not in (select value from json_each(${escapeSqliteIdentifier(\n tableName,\n )}.${columnSql}))`,\n values,\n params,\n );\n case \"date\":\n return addValueClause(`date(${columnSql}) = ?`, values, params);\n case \"isnull\":\n return `${columnSql} is null`;\n case \"notnull\":\n return `${columnSql} is not null`;\n case \"isblank\":\n return `(${columnSql} is null or ${columnSql} = \"\")`;\n case \"notblank\":\n return `(${columnSql} is not null and ${columnSql} != \"\")`;\n default:\n return null;\n }\n}\n\nfunction addValueClause(\n sql: string,\n values: string[],\n params: unknown[],\n transform?: (value: string) => string,\n): string | null {\n if (values.length === 0) {\n return null;\n }\n if (values.length === 1) {\n const value = values[0];\n if (value === undefined) {\n return null;\n }\n params.push(transform ? transform(value) : value);\n return sql;\n }\n const clauses = values.map(() => sql);\n values.forEach((value) => {\n params.push(transform ? transform(value) : value);\n });\n return `(${clauses.join(\" and \")})`;\n}\n\nfunction addInClause(\n prefix: string,\n values: string[],\n params: unknown[],\n): string | null {\n const parsed = parseListValues(values);\n if (parsed.length === 0) {\n return null;\n }\n const placeholders = parsed.map(() => \"?\").join(\", \");\n params.push(...parsed);\n return `${prefix} (${placeholders})`;\n}\n\nfunction parseListValues(values: string[]): string[] {\n if (values.length === 1) {\n const rawValue = values[0];\n if (rawValue === undefined) {\n return [];\n }\n const raw = rawValue.trim();\n if (raw.startsWith(\"[\") && raw.endsWith(\"]\")) {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.map((value) => String(value));\n }\n } catch {\n return raw.split(\",\").map((value) => value.trim());\n }\n }\n return raw.split(\",\").map((value) => value.trim());\n }\n return values.map((value) => value.trim());\n}\n", "import type { DatabaseSchema } from \"../db/introspection.js\";\nimport type { SqliteClient, SqliteRow } from \"../db/sqlite/types.js\";\nimport type { FilterCondition } from \"./filters.js\";\nimport { buildSearchClause, buildWhereClause } from \"./filters.js\";\nimport { escapeSqliteIdentifier } from \"./sqlite-escape.js\";\n\nexport type TablePage = {\n rows: SqliteRow[];\n columns: string[];\n truncated: boolean;\n next: number | null;\n};\n\nexport type TableQuery = {\n sql: string;\n params: Record<string, string>;\n countSql: string;\n};\n\nexport const COUNT_LIMIT = 10000;\n\nconst DEFAULT_PAGE_SIZE = 100;\nconst MAX_RETURNED_ROWS = 1000;\n\nexport function buildTableQuery(\n schema: DatabaseSchema,\n tableName: string,\n options: {\n size?: number;\n next?: number;\n filters?: FilterCondition[];\n search?: { search: string | null; searchColumns: Record<string, string> };\n columns?: string[];\n rawWhere?: string[];\n sort?: { column: string; desc: boolean } | null;\n },\n): TableQuery {\n const table = schema.tables[tableName];\n if (!table) {\n throw new Error(`Unknown table: ${tableName}`);\n }\n\n const requestedSize =\n options.size && options.size > 0 ? options.size : DEFAULT_PAGE_SIZE;\n const pageSize = Math.min(requestedSize, MAX_RETURNED_ROWS);\n const offset = options.next ?? 0;\n const isView = table.type === \"view\";\n const orderColumns =\n table.primaryKeys.length > 0 ? table.primaryKeys : isView ? [] : [\"rowid\"];\n const sortColumn = options.sort?.column ?? null;\n const orderBy = sortColumn\n ? `${escapeSqliteIdentifier(sortColumn)}${options.sort?.desc ? \" desc\" : \"\"}`\n : orderColumns.map((col) => escapeSqliteIdentifier(col)).join(\", \");\n const where = buildWhereClause(schema, tableName, options.filters ?? []);\n const search = buildSearchClause(schema, tableName, {\n search: options.search?.search ?? null,\n searchColumns: options.search?.searchColumns ?? {},\n });\n const params: Record<string, string> = {};\n let paramIndex = 0;\n const withNamedParams = (sql: string, values: unknown[]): string => {\n let valueIndex = 0;\n return sql.replace(/\\?/g, () => {\n const name = `p${paramIndex}`;\n const value = values[valueIndex];\n params[name] = value == null ? \"\" : String(value);\n paramIndex += 1;\n valueIndex += 1;\n return `:${name}`;\n });\n };\n const namedWhere = where.sql ? withNamedParams(where.sql, where.params) : \"\";\n const namedSearch = search.sql ? withNamedParams(search.sql, search.params) : \"\";\n const extraWheres = options.rawWhere ?? [];\n const clauses = [namedWhere, namedSearch, ...extraWheres]\n .filter(Boolean)\n .join(\" and \");\n const whereSql = clauses ? `where ${clauses}` : \"\";\n const selectedColumns = normalizeColumns(\n table,\n options.columns ?? table.columns.map((column) => column.name),\n !isView,\n );\n const selectColumns = selectedColumns\n .map((col) => escapeSqliteIdentifier(col))\n .join(\", \");\n const orderBySql = orderBy ? ` order by ${orderBy}` : \"\";\n const offsetSql = offset > 0 ? ` offset ${offset}` : \"\";\n const fromSql = `from ${escapeSqliteIdentifier(tableName)}`;\n const sql = `select ${selectColumns} ${fromSql}${\n whereSql ? ` ${whereSql}` : \"\"\n }${orderBySql} limit ${pageSize + 1}${offsetSql}`;\n const countSql = `select count(*) ${fromSql}${whereSql ? ` ${whereSql}` : \"\"}`;\n\n return { sql, params, countSql };\n}\n\nexport async function fetchTablePage(\n client: SqliteClient,\n schema: DatabaseSchema,\n tableName: string,\n options: {\n size?: number;\n next?: number;\n filters?: FilterCondition[];\n search?: { search: string | null; searchColumns: Record<string, string> };\n columns?: string[];\n rawWhere?: string[];\n sort?: { column: string; desc: boolean } | null;\n },\n): Promise<TablePage> {\n const table = schema.tables[tableName];\n if (!table) {\n throw new Error(`Unknown table: ${tableName}`);\n }\n\n const requestedSize =\n options.size && options.size > 0 ? options.size : DEFAULT_PAGE_SIZE;\n const pageSize = Math.min(requestedSize, MAX_RETURNED_ROWS);\n const offset = options.next ?? 0;\n const isView = table.type === \"view\";\n const orderColumns =\n table.primaryKeys.length > 0 ? table.primaryKeys : isView ? [] : [\"rowid\"];\n const sortColumn = options.sort?.column ?? null;\n const orderBy = sortColumn\n ? `${escapeSqliteIdentifier(sortColumn)}${options.sort?.desc ? \" desc\" : \"\"}`\n : orderColumns.map((col) => escapeSqliteIdentifier(col)).join(\", \");\n const where = buildWhereClause(schema, tableName, options.filters ?? []);\n const search = buildSearchClause(schema, tableName, {\n search: options.search?.search ?? null,\n searchColumns: options.search?.searchColumns ?? {},\n });\n const extraWheres = options.rawWhere ?? [];\n const clauses = [where.sql, search.sql, ...extraWheres]\n .filter(Boolean)\n .join(\" and \");\n const whereSql = clauses ? `where ${clauses}` : \"\";\n const selectedColumns = normalizeColumns(\n table,\n options.columns ?? table.columns.map((column) => column.name),\n !isView,\n );\n const selectColumns = selectedColumns\n .map((col) => escapeSqliteIdentifier(col))\n .join(\", \");\n const orderBySql = orderBy ? ` order by ${orderBy}` : \"\";\n const fromSql = `from ${escapeSqliteIdentifier(tableName)}`;\n const sql = `select ${selectColumns} ${fromSql}${\n whereSql ? ` ${whereSql}` : \"\"\n }${orderBySql} limit ? offset ?`;\n const { rows, columns } = await client.execute(sql, [\n ...where.params,\n ...search.params,\n pageSize + 1,\n offset,\n ]);\n const truncated = rows.length > pageSize;\n const pageRows = truncated ? rows.slice(0, pageSize) : rows;\n const next = truncated ? offset + pageSize : null;\n\n return {\n rows: pageRows,\n columns: selectedColumns.length ? selectedColumns : columns,\n truncated,\n next,\n };\n}\n\nexport async function fetchRow(\n client: SqliteClient,\n schema: DatabaseSchema,\n tableName: string,\n rowId: string,\n): Promise<SqliteRow | null> {\n const table = schema.tables[tableName];\n if (!table) {\n throw new Error(`Unknown table: ${tableName}`);\n }\n\n const primaryKeys =\n table.primaryKeys.length > 0 ? table.primaryKeys : [\"rowid\"];\n const values = rowId.split(\",\");\n if (values.length !== primaryKeys.length) {\n throw new Error(\"Invalid row identifier\");\n }\n\n const whereClause = primaryKeys\n .map((pk) => `${escapeSqliteIdentifier(pk)} = ?`)\n .join(\" and \");\n const sql = `select * from ${escapeSqliteIdentifier(\n tableName,\n )} where ${whereClause} limit 1`;\n const { rows } = await client.execute(sql, values);\n\n return rows[0] ?? null;\n}\n\nexport async function fetchTableCount(\n client: SqliteClient,\n schema: DatabaseSchema,\n tableName: string,\n options: {\n filters?: FilterCondition[];\n search?: { search: string | null; searchColumns: Record<string, string> };\n rawWhere?: string[];\n },\n): Promise<number> {\n const table = schema.tables[tableName];\n if (!table) {\n throw new Error(`Unknown table: ${tableName}`);\n }\n const where = buildWhereClause(schema, tableName, options.filters ?? []);\n const search = buildSearchClause(schema, tableName, {\n search: options.search?.search ?? null,\n searchColumns: options.search?.searchColumns ?? {},\n });\n const extraWheres = options.rawWhere ?? [];\n const clauses = [where.sql, search.sql, ...extraWheres]\n .filter(Boolean)\n .join(\" and \");\n const whereSql = clauses ? `where ${clauses}` : \"\";\n const countFromSql = `from ${escapeSqliteIdentifier(tableName)}`;\n const sql = `select count(*) as count from (select * ${countFromSql}${\n whereSql ? ` ${whereSql}` : \"\"\n } limit ${COUNT_LIMIT + 1})`;\n const { rows } = await client.execute(sql, [\n ...where.params,\n ...search.params,\n ]);\n const first = rows[0];\n const count = typeof first?.count === \"number\" ? first.count : Number(first?.count ?? 0);\n return Number.isNaN(count) ? 0 : count;\n}\n\nfunction normalizeColumns(\n table: DatabaseSchema[\"tables\"][string],\n columns: string[],\n includeRowid: boolean,\n): string[] {\n const all = new Set(table.columns.map((col) => col.name));\n const primaryKeys = table.primaryKeys;\n const selected = Array.from(new Set(columns.filter((col) => all.has(col))));\n if (primaryKeys.length === 0) {\n if (includeRowid && !selected.includes(\"rowid\")) {\n selected.unshift(\"rowid\");\n }\n } else {\n primaryKeys.forEach((pk) => {\n if (!selected.includes(pk)) {\n selected.unshift(pk);\n }\n });\n }\n return selected;\n}\n", "import type { DatabaseSchema } from \"../db/introspection.js\";\nimport type { SqliteClient } from \"../db/sqlite/types.js\";\nimport type { FilterCondition } from \"./filters.js\";\nimport { buildSearchClause, buildWhereClause } from \"./filters.js\";\n\nexport type FacetValue = {\n value: unknown;\n label: string;\n count: number;\n toggle_url: string;\n selected: boolean;\n};\n\nexport type FacetResult = {\n name: string;\n results: FacetValue[];\n truncated: boolean;\n};\n\nexport type FacetResults = {\n results: Record<string, FacetResult>;\n};\n\nexport async function computeFacetResults(options: {\n client: SqliteClient;\n schema: DatabaseSchema;\n tableName: string;\n facetColumns: string[];\n filters: FilterCondition[];\n facetSize: number;\n baseUrl: URL;\n search?: { search: string | null; searchColumns: Record<string, string> };\n rawWhere?: string[];\n}): Promise<FacetResults | null> {\n const { schema, tableName, facetColumns } = options;\n const table = schema.tables[tableName];\n if (!table || facetColumns.length === 0) {\n return null;\n }\n\n const columnSet = new Set(table.columns.map((col) => col.name));\n const results: Record<string, FacetResult> = {};\n\n for (const column of facetColumns) {\n if (!columnSet.has(column)) {\n continue;\n }\n const where = buildWhereClause(schema, tableName, options.filters);\n const search = buildSearchClause(schema, tableName, {\n search: options.search?.search ?? null,\n searchColumns: options.search?.searchColumns ?? {},\n });\n const clauses = [where.sql, search.sql, ...(options.rawWhere ?? [])]\n .filter(Boolean)\n .join(\" and \");\n const whereSql = clauses ? `where ${clauses}` : \"\";\n const sql = `select ${escapeIdentifier(column)} as value, count(*) as count\n from ${escapeIdentifier(tableName)}\n ${whereSql}\n group by ${escapeIdentifier(column)}\n order by count desc\n limit ?`;\n const { rows } = await options.client.execute(sql, [\n ...where.params,\n ...search.params,\n options.facetSize + 1,\n ]);\n const truncated = rows.length > options.facetSize;\n const sliced = truncated ? rows.slice(0, options.facetSize) : rows;\n const columnFilters = options.filters.find((f) => f.column === column);\n const selectedValues = new Set(columnFilters?.values ?? []);\n\n results[column] = {\n name: column,\n truncated,\n results: sliced.map((row) => {\n const value = row.value;\n const valueKey = value == null ? \"null\" : String(value);\n const selected = selectedValues.has(valueKey);\n return {\n value,\n label: valueKey,\n count: Number(row.count ?? 0),\n selected,\n toggle_url: buildToggleUrl(options.baseUrl, column, valueKey, selected),\n };\n }),\n };\n }\n\n return Object.keys(results).length > 0 ? { results } : null;\n}\n\nfunction buildToggleUrl(\n baseUrl: URL,\n column: string,\n value: string,\n selected: boolean,\n): string {\n const nextUrl = new URL(baseUrl.toString());\n const params = nextUrl.searchParams;\n const existing = params.getAll(column);\n\n params.delete(column);\n if (selected) {\n existing\n .filter((item) => item !== value)\n .forEach((item) => params.append(column, item));\n } else {\n existing.forEach((item) => params.append(column, item));\n params.append(column, value);\n }\n\n return nextUrl.toString();\n}\n\nfunction escapeIdentifier(name: string): string {\n const escaped = name.replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n}\n", "import type { SqliteClient, SqliteRow } from \"../db/sqlite/types.js\";\n\nexport type QueryResult = {\n rows: SqliteRow[];\n columns: string[];\n truncated: boolean;\n sql: string;\n params: Record<string, string | null>;\n};\n\nconst DEFAULT_MAX_ROWS = 1000;\n\nexport async function executeSelectQuery(options: {\n client: SqliteClient;\n sql: string;\n params: Record<string, string | null>;\n maxRows?: number;\n}): Promise<QueryResult> {\n const trimmed = options.sql.trim();\n if (!isSafeSelect(trimmed)) {\n throw new Error(\"Statement must be a SELECT\");\n }\n if (hasMultipleStatements(trimmed)) {\n throw new Error(\"Only one SQL statement is allowed\");\n }\n if (containsPragma(trimmed)) {\n throw new Error(\"Statement contains disallowed PRAGMA\");\n }\n\n const { sql, orderedParams, params } = replaceNamedParams(trimmed, options.params);\n const maxRows = options.maxRows ?? DEFAULT_MAX_ROWS;\n const { sql: limitedSql, params: limitedParams } = applyLimit(sql, orderedParams, maxRows);\n const { rows, columns } = await options.client.execute(limitedSql, limitedParams);\n const truncated = rows.length > maxRows;\n const sliced = truncated ? rows.slice(0, maxRows) : rows;\n\n return {\n rows: sliced,\n columns,\n truncated,\n sql,\n params,\n };\n}\n\nfunction isSafeSelect(sql: string): boolean {\n const lower = sql.toLowerCase();\n return lower.startsWith(\"select\") || lower.startsWith(\"with\");\n}\n\nfunction hasMultipleStatements(sql: string): boolean {\n const parts = sql.split(\";\").filter((part) => part.trim().length > 0);\n return parts.length > 1;\n}\n\nfunction containsPragma(sql: string): boolean {\n return /\\bpragma\\b/i.test(sql);\n}\n\nfunction replaceNamedParams(\n sql: string,\n values: Record<string, string | null>,\n): { sql: string; orderedParams: (string | null)[]; params: Record<string, string | null> } {\n const names: string[] = [];\n const replaced = sql.replace(/:([a-zA-Z0-9_]+)/g, (_match, name: string) => {\n names.push(name);\n return \"?\";\n });\n const orderedParams = names.map((name) => values[name] ?? null);\n const params: Record<string, string | null> = {};\n names.forEach((name, index) => {\n params[name] = orderedParams[index] ?? null;\n });\n return { sql: replaced, orderedParams, params };\n}\n\nfunction applyLimit(\n sql: string,\n params: (string | null)[],\n maxRows: number,\n): { sql: string; params: (string | null)[] } {\n if (/\\blimit\\b/i.test(sql)) {\n return { sql, params };\n }\n return { sql: `${sql} limit ?`, params: [...params, String(maxRows + 1)] };\n}\n", "import type { FilterCondition, FilterOp } from \"../core/filters.js\";\n\nexport type SearchInput = {\n search: string | null;\n searchColumns: Record<string, string>;\n};\n\nconst RESERVED_PREFIX = \"_\";\n\nexport function parseFiltersFromSearchParams(\n params: URLSearchParams,\n): FilterCondition[] {\n const filters: FilterCondition[] = [];\n const adHocColumn = params.get(\"_filter_column\");\n const adHocValue = params.get(\"_filter_value\");\n const adHocOp = params.get(\"_filter_op\") ?? \"exact\";\n if (adHocColumn && (adHocValue !== null || isNoArgOp(adHocOp))) {\n filters.push({\n column: adHocColumn,\n op: normalizeOp(adHocOp),\n values: adHocValue === null ? [] : [adHocValue],\n });\n }\n for (const [key, value] of params.entries()) {\n if (key.startsWith(\"_filter_column_\")) {\n const suffix = key.split(\"_\").pop() ?? \"\";\n const column = value;\n const op = params.get(`_filter_op_${suffix}`) ?? \"exact\";\n const filterValue = params.get(`_filter_value_${suffix}`);\n if (column && (filterValue !== null || isNoArgOp(op))) {\n filters.push({\n column,\n op: normalizeOp(op),\n values: filterValue === null ? [] : [filterValue],\n });\n }\n }\n }\n\n const filterMap = new Map<string, { op: FilterOp; values: string[] }>();\n for (const [key, value] of params.entries()) {\n if (key.startsWith(RESERVED_PREFIX) && !key.includes(\"__\")) {\n continue;\n }\n const { column, op } = splitFilterKey(key);\n const entry = filterMap.get(`${column}__${op}`) ?? {\n op,\n values: [],\n };\n if (value !== null || isNoArgOp(entry.op)) {\n entry.values.push(value ?? \"\");\n }\n filterMap.set(`${column}__${op}`, entry);\n }\n\n for (const [key, entry] of filterMap.entries()) {\n const column = key.split(\"__\")[0] ?? \"\";\n if (!column) {\n continue;\n }\n filters.push({ column, op: entry.op, values: entry.values });\n }\n\n return filters;\n}\n\nexport function parseSearchFromSearchParams(\n params: URLSearchParams,\n): SearchInput {\n const search = params.get(\"_search\");\n const searchColumns: Record<string, string> = {};\n\n for (const [key, value] of params.entries()) {\n if (!key.startsWith(\"_search_\")) {\n continue;\n }\n if (key === \"_searchmode\") {\n continue;\n }\n const column = key.slice(\"_search_\".length);\n if (!column) {\n continue;\n }\n searchColumns[column] = value;\n }\n\n return { search, searchColumns };\n}\n\nfunction splitFilterKey(key: string): { column: string; op: FilterOp } {\n if (key.includes(\"__\")) {\n const [column, op] = key.split(\"__\", 2);\n if (!column) {\n return { column: key, op: \"exact\" };\n }\n if (!op) {\n return { column, op: \"exact\" };\n }\n return { column, op: normalizeOp(op) };\n }\n return { column: key, op: \"exact\" };\n}\n\nfunction normalizeOp(op: string): FilterOp {\n const normalized = op.endsWith(\"__1\") ? op.slice(0, -3) : op;\n switch (normalized) {\n case \"exact\":\n case \"not\":\n case \"contains\":\n case \"notcontains\":\n case \"endswith\":\n case \"startswith\":\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n case \"like\":\n case \"notlike\":\n case \"glob\":\n case \"in\":\n case \"notin\":\n case \"arraycontains\":\n case \"arraynotcontains\":\n case \"date\":\n case \"isnull\":\n case \"notnull\":\n case \"isblank\":\n case \"notblank\":\n return normalized;\n default:\n return \"exact\";\n }\n}\n\nfunction isNoArgOp(op: string): boolean {\n const normalized = op.endsWith(\"__1\") ? op.slice(0, -3) : op;\n return (\n normalized === \"isnull\" ||\n normalized === \"notnull\" ||\n normalized === \"isblank\" ||\n normalized === \"notblank\"\n );\n}\n", "import type { DatabaseSchema } from \"../db/introspection.js\";\n\nexport function resolveSelectedColumns(options: {\n schema: DatabaseSchema;\n tableName: string;\n cols: string[];\n noCols: string[];\n}): string[] {\n const table = options.schema.tables[options.tableName];\n if (!table) {\n return [];\n }\n const allColumns = table.columns.map((col) => col.name);\n let selected = allColumns.slice();\n\n if (options.cols.length > 0) {\n selected = options.cols.filter((col) => allColumns.includes(col));\n } else if (options.noCols.length > 0) {\n const noCols = new Set(options.noCols);\n selected = selected.filter((col) => !noCols.has(col));\n }\n\n // Ensure primary keys are always included\n const primaryKeys = table.primaryKeys;\n if (primaryKeys.length === 0) {\n if (!selected.includes(\"rowid\")) {\n selected.unshift(\"rowid\");\n }\n } else {\n primaryKeys.forEach((pk) => {\n if (!selected.includes(pk)) {\n selected.unshift(pk);\n }\n });\n }\n\n return Array.from(new Set(selected));\n}\n", "import type { DatabaseSchema } from \"../db/introspection.js\";\nimport type { DatabaseRegistry } from \"./registry.js\";\n\nexport type SortState = { column: string; desc: boolean } | null;\n\nexport function resolveSort(options: {\n registry: DatabaseRegistry;\n schema: DatabaseSchema;\n databaseName: string;\n tableName: string;\n sort: string | null;\n sortDesc: string | null;\n sortByDesc?: string | null;\n}): SortState {\n const { registry, schema, databaseName, tableName, sort, sortDesc } = options;\n const table = schema.tables[tableName];\n if (!table) {\n return null;\n }\n\n const tableMetadata = registry.getTableMetadata(databaseName, tableName);\n const sortableColumns = tableMetadata?.sortable_columns;\n if (Array.isArray(sortableColumns) && sortableColumns.length === 0) {\n return null;\n }\n const allowedColumns = new Set(\n Array.isArray(sortableColumns) && sortableColumns.length > 0\n ? sortableColumns\n : table.columns.map((col) => col.name),\n );\n if (table.primaryKeys.length === 0) {\n allowedColumns.add(\"rowid\");\n }\n\n if (sort && sortDesc) {\n throw new Error(\"Cannot use _sort and _sort_desc at the same time\");\n }\n\n const sortColumn =\n sort ?? sortDesc ?? tableMetadata?.sort ?? tableMetadata?.sort_desc;\n if (!sortColumn || !allowedColumns.has(sortColumn)) {\n return null;\n }\n\n const desc = sortDesc\n ? true\n : Boolean(\n options.sortByDesc ||\n (!sort && !sortDesc && sortColumn === tableMetadata?.sort_desc),\n );\n return { column: sortColumn, desc };\n}\n\nexport function sortableColumnsForTable(options: {\n registry: DatabaseRegistry;\n schema: DatabaseSchema;\n databaseName: string;\n tableName: string;\n}): string[] {\n const table = options.schema.tables[options.tableName];\n if (!table) {\n return [];\n }\n const tableMetadata = options.registry.getTableMetadata(\n options.databaseName,\n options.tableName,\n );\n const sortableColumns = tableMetadata?.sortable_columns;\n if (Array.isArray(sortableColumns)) {\n return sortableColumns;\n }\n const columns = table.columns.map((col) => col.name);\n if (table.primaryKeys.length === 0 && !columns.includes(\"rowid\")) {\n return [\"rowid\", ...columns];\n }\n return columns;\n}\n", "import type { SqliteRow } from \"../db/sqlite/types.js\";\n\nexport type ShapeName = \"objects\" | \"arrays\" | \"array\" | \"arrayfirst\" | \"object\";\n\nexport type ShapeResult = {\n body: unknown;\n isWrapped: boolean;\n};\n\nexport function applyShape(options: {\n rows: SqliteRow[];\n columns: string[];\n shape: ShapeName;\n primaryKeys: string[];\n}): ShapeResult {\n const { rows, columns, shape, primaryKeys } = options;\n\n switch (shape) {\n case \"objects\":\n return { body: rows, isWrapped: true };\n case \"arrays\":\n return {\n body: rows.map((row) => columns.map((column) => row[column])),\n isWrapped: true,\n };\n case \"array\":\n return { body: rows, isWrapped: false };\n case \"arrayfirst\":\n if (columns.length === 0) {\n return { body: [], isWrapped: false };\n }\n return {\n body: rows.map((row) => row[columns[0]!]),\n isWrapped: false,\n };\n case \"object\": {\n const keyed: Record<string, SqliteRow> = {};\n const keys = primaryKeys.length > 0 ? primaryKeys : [\"rowid\"];\n rows.forEach((row, index) => {\n const value =\n keys.length === 1\n ? row[keys[0]!]\n : keys.map((key) => row[key]).join(\",\");\n const key = value == null ? String(index) : String(value);\n keyed[key] = row;\n });\n return { body: keyed, isWrapped: false };\n }\n default:\n return { body: rows, isWrapped: true };\n }\n}\n\nexport function parseShape(value: string | null): ShapeName {\n switch (value) {\n case \"arrays\":\n case \"array\":\n case \"arrayfirst\":\n case \"object\":\n return value;\n default:\n return \"objects\";\n }\n}\n\nexport function applyJsonColumns(\n rows: SqliteRow[],\n jsonColumns: string[],\n): SqliteRow[] {\n if (jsonColumns.length === 0) {\n return rows;\n }\n\n return rows.map((row) => {\n const next: SqliteRow = { ...row };\n for (const column of jsonColumns) {\n const value = next[column];\n if (typeof value === \"string\") {\n const parsed = tryParseJson(value);\n if (parsed !== undefined) {\n next[column] = parsed;\n }\n }\n }\n return next;\n });\n}\n\nfunction tryParseJson(value: string): unknown | undefined {\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n}\n", "export function jsonResponse(\n body: unknown,\n init?: ResponseInit & { headers?: HeadersInit },\n): Response {\n const headers = new Headers(init?.headers);\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json; charset=utf-8\");\n }\n return new Response(JSON.stringify(body), {\n ...init,\n headers,\n });\n}\n", "import type { DatabaseSchema } from \"../db/introspection.js\";\nimport type { SqliteClient, SqliteRow } from \"../db/sqlite/types.js\";\nimport type { Actor, AuthManager } from \"./auth.js\";\nimport type { DatabaseRegistry } from \"./registry.js\";\n\nexport type LabelExpansionResult = {\n rows: SqliteRow[];\n expandedColumns: string[];\n expandableColumns: string[];\n};\n\ntype ForeignKeySpec = {\n column: string;\n otherTable: string;\n otherColumn: string;\n labelColumn: string | null;\n};\n\nexport function resolveLabelExpansion(\n registry: DatabaseRegistry,\n schema: DatabaseSchema,\n databaseName: string,\n tableName: string,\n options: {\n columns: string[];\n labelColumns: string[];\n labelsOn: boolean;\n auth: AuthManager;\n actor: Actor | null;\n },\n): { expandableColumns: string[]; expandedColumns: string[]; specs: ForeignKeySpec[] } {\n const table = schema.tables[tableName];\n if (!table) {\n return { expandableColumns: [], expandedColumns: [], specs: [] };\n }\n const expandableColumns = table.foreignKeys.map((fk) => fk.from);\n const requested =\n options.labelColumns.length > 0\n ? options.labelColumns\n : options.labelsOn\n ? expandableColumns\n : [];\n if (requested.length === 0) {\n return { expandableColumns, expandedColumns: [], specs: [] };\n }\n const expandedColumns: string[] = [];\n const specs: ForeignKeySpec[] = [];\n for (const fk of table.foreignKeys) {\n if (!requested.includes(fk.from)) {\n continue;\n }\n if (!options.columns.includes(fk.from)) {\n continue;\n }\n if (\n !options.auth.allowed(\n \"view-table\",\n { type: \"table\", database: databaseName, table: fk.table },\n options.actor,\n )\n ) {\n continue;\n }\n const labelColumn = labelColumnForTable(\n registry,\n schema,\n databaseName,\n fk.table,\n );\n expandedColumns.push(fk.from);\n specs.push({\n column: fk.from,\n otherTable: fk.table,\n otherColumn: fk.to,\n labelColumn,\n });\n }\n return { expandableColumns, expandedColumns, specs };\n}\n\nexport async function applyLabelExpansion(\n client: SqliteClient,\n rows: SqliteRow[],\n specs: ForeignKeySpec[],\n): Promise<SqliteRow[]> {\n if (specs.length === 0 || rows.length === 0) {\n return rows;\n }\n const labelMap = new Map<string, string>();\n for (const spec of specs) {\n const values = Array.from(\n new Set(\n rows\n .map((row) => row[spec.column])\n .filter((value) => value != null),\n ),\n );\n if (values.length === 0) {\n continue;\n }\n if (!spec.labelColumn) {\n values.forEach((value) => {\n labelMap.set(labelKey(spec.column, value), String(value));\n });\n continue;\n }\n const placeholders = values.map(() => \"?\").join(\", \");\n const sql = `select ${escapeIdentifier(spec.otherColumn)} as value, ${escapeIdentifier(\n spec.labelColumn,\n )} as label from ${escapeIdentifier(\n spec.otherTable,\n )} where ${escapeIdentifier(spec.otherColumn)} in (${placeholders})`;\n const { rows: labelRows } = await client.execute(sql, values);\n for (const row of labelRows) {\n labelMap.set(labelKey(spec.column, row.value), String(row.label));\n }\n }\n\n return rows.map((row) => {\n const next: SqliteRow = { ...row };\n for (const spec of specs) {\n const value = row[spec.column];\n if (value == null) {\n continue;\n }\n const label = labelMap.get(labelKey(spec.column, value));\n if (label !== undefined) {\n next[spec.column] = { value, label };\n }\n }\n return next;\n });\n}\n\nfunction labelColumnForTable(\n registry: DatabaseRegistry,\n schema: DatabaseSchema,\n databaseName: string,\n tableName: string,\n): string | null {\n const metadata = registry.getTableMetadata(databaseName, tableName);\n if (metadata?.label_column) {\n return metadata.label_column;\n }\n const table = schema.tables[tableName];\n if (!table) {\n return null;\n }\n const columns = table.columns;\n const nameOrTitle = columns.find((column) => {\n const lower = column.name.toLowerCase();\n return lower === \"name\" || lower === \"title\";\n });\n if (nameOrTitle) {\n return nameOrTitle.name;\n }\n if (\n columns.length === 2 &&\n columns.some((column) => [\"id\", \"pk\"].includes(column.name.toLowerCase()))\n ) {\n const other = columns.find(\n (column) => ![\"id\", \"pk\"].includes(column.name.toLowerCase()),\n );\n if (other) {\n return other.name;\n }\n }\n const textColumn = columns.find((column) =>\n /char|text|clob/i.test(column.type),\n );\n return textColumn ? textColumn.name : null;\n}\n\nfunction labelKey(column: string, value: unknown): string {\n return `${column}::${String(value)}`;\n}\n\nfunction escapeIdentifier(name: string): string {\n const escaped = name.replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n}\n", "type RegistryLike = {\n getDatabase(name: string): unknown;\n getDatabaseHash(name: string): Promise<string | null>;\n};\n\nexport type HashUrlConfig = {\n enabled: boolean;\n hashLength?: number;\n defaultCacheTtlSeconds?: number;\n};\n\nexport type HashUrlContext = {\n useHashedUrls: boolean;\n hashLength: number;\n defaultCacheTtlSeconds: number;\n normalizedPathname: string;\n databaseName: string | null;\n databaseUrlName: string | null;\n isHashedPath: boolean;\n cacheControl: string | null;\n};\n\nexport type HashUrlResolution = {\n context: HashUrlContext;\n redirectUrl: string | null;\n notFound: boolean;\n};\n\nconst DEFAULT_HASH_LENGTH = 7;\nconst DEFAULT_HASHED_TTL_SECONDS = 60 * 60 * 24 * 365;\n\nexport async function resolveHashUrlContext(\n registry: RegistryLike,\n url: URL,\n config: HashUrlConfig,\n): Promise<HashUrlResolution> {\n const hashLength = config.hashLength ?? DEFAULT_HASH_LENGTH;\n const defaultCacheTtlSeconds =\n config.defaultCacheTtlSeconds ?? DEFAULT_HASHED_TTL_SECONDS;\n const hashEnabled = config.enabled || parseBooleanParam(url.searchParams.get(\"_hash\"));\n const trimmedPathname = trimTrailingSlash(url.pathname);\n if (shouldSkipHashing(trimmedPathname)) {\n return {\n context: {\n useHashedUrls: hashEnabled,\n hashLength,\n defaultCacheTtlSeconds,\n normalizedPathname: trimmedPathname,\n databaseName: null,\n databaseUrlName: null,\n isHashedPath: false,\n cacheControl: null,\n },\n redirectUrl: null,\n notFound: false,\n };\n }\n\n const { basePath, suffix } = splitExtension(trimmedPathname);\n const encodedSegments = basePath.split(\"/\").filter(Boolean);\n const decodedSegments = encodedSegments.map((segment) => decodeURIComponent(segment));\n const requestedSegment = decodedSegments[0] ?? null;\n\n let databaseName = requestedSegment;\n let isHashedPath = false;\n let parsedHash: string | null = null;\n\n if (databaseName && !registry.getDatabase(databaseName)) {\n const parsed = parseHashedSegment(databaseName, hashLength);\n if (parsed && registry.getDatabase(parsed.databaseName)) {\n databaseName = parsed.databaseName;\n isHashedPath = true;\n parsedHash = parsed.hash;\n }\n }\n\n let expectedHashPrefix: string | null = null;\n if (databaseName) {\n const hash = await registry.getDatabaseHash(databaseName);\n expectedHashPrefix = hash ? hash.slice(0, hashLength) : null;\n }\n\n if (isHashedPath && expectedHashPrefix) {\n if (parsedHash?.toLowerCase() !== expectedHashPrefix.toLowerCase()) {\n return {\n context: {\n useHashedUrls: hashEnabled || isHashedPath,\n hashLength,\n defaultCacheTtlSeconds,\n normalizedPathname: trimmedPathname,\n databaseName,\n databaseUrlName: databaseName,\n isHashedPath,\n cacheControl: null,\n },\n redirectUrl: null,\n notFound: true,\n };\n }\n }\n\n const useHashedUrls = hashEnabled || isHashedPath;\n const databaseUrlName =\n databaseName && expectedHashPrefix && useHashedUrls\n ? `${databaseName}-${expectedHashPrefix}`\n : databaseName;\n\n const normalizedSegments = [...encodedSegments];\n if (databaseName && encodedSegments.length > 0) {\n const encodedName = encodeURIComponent(databaseName);\n normalizedSegments[0] = encodedName;\n }\n const normalizedPathname = buildPath(normalizedSegments, suffix);\n\n let redirectUrl: string | null = null;\n if (hashEnabled && databaseName && expectedHashPrefix && !isHashedPath) {\n const encodedHashed = encodeURIComponent(`${databaseName}-${expectedHashPrefix}`);\n const hashedSegments = [...encodedSegments];\n if (hashedSegments.length > 0) {\n hashedSegments[0] = encodedHashed;\n } else {\n hashedSegments.push(encodedHashed);\n }\n const redirectPath = buildPath(hashedSegments, suffix);\n const redirect = new URL(url.toString());\n redirect.pathname = redirectPath;\n redirect.searchParams.delete(\"_hash\");\n redirectUrl = redirect.toString();\n }\n\n const cacheControl = isHashedPath && expectedHashPrefix\n ? `public, max-age=${defaultCacheTtlSeconds}, immutable`\n : null;\n\n return {\n context: {\n useHashedUrls,\n hashLength,\n defaultCacheTtlSeconds,\n normalizedPathname,\n databaseName,\n databaseUrlName,\n isHashedPath,\n cacheControl,\n },\n redirectUrl,\n notFound: false,\n };\n}\n\nexport async function resolveDatabaseUrlName(\n registry: RegistryLike,\n databaseName: string,\n useHashedUrls: boolean,\n hashLength = DEFAULT_HASH_LENGTH,\n): Promise<string> {\n if (!useHashedUrls) {\n return databaseName;\n }\n const hash = await registry.getDatabaseHash(databaseName);\n if (!hash) {\n return databaseName;\n }\n return `${databaseName}-${hash.slice(0, hashLength)}`;\n}\n\nfunction trimTrailingSlash(pathname: string): string {\n if (pathname === \"/\") {\n return pathname;\n }\n return pathname.endsWith(\"/\") ? pathname.slice(0, -1) : pathname;\n}\n\nfunction splitExtension(pathname: string): { basePath: string; suffix: string } {\n if (pathname === \"/.json\") {\n return { basePath: \"/\", suffix: \".json\" };\n }\n if (pathname.endsWith(\".json\")) {\n return { basePath: pathname.slice(0, -5), suffix: \".json\" };\n }\n if (pathname.endsWith(\".csv\")) {\n return { basePath: pathname.slice(0, -4), suffix: \".csv\" };\n }\n return { basePath: pathname, suffix: \"\" };\n}\n\nfunction buildPath(segments: string[], suffix: string): string {\n if (segments.length === 0) {\n return suffix ? `/${suffix}` : \"/\";\n }\n return `/${segments.join(\"/\")}${suffix}`;\n}\n\nfunction parseHashedSegment(\n segment: string,\n hashLength: number,\n): { databaseName: string; hash: string } | null {\n const separatorIndex = segment.length - hashLength - 1;\n if (separatorIndex <= 0) {\n return null;\n }\n if (segment[separatorIndex] !== \"-\") {\n return null;\n }\n const hash = segment.slice(separatorIndex + 1);\n if (!/^[0-9a-f]+$/i.test(hash)) {\n return null;\n }\n return {\n databaseName: segment.slice(0, separatorIndex),\n hash,\n };\n}\n\nfunction parseBooleanParam(value: string | null): boolean {\n if (!value) {\n return false;\n }\n return [\"1\", \"true\", \"on\", \"yes\"].includes(value.toLowerCase());\n}\n\nfunction shouldSkipHashing(pathname: string): boolean {\n if (pathname === \"/\") {\n return false;\n }\n if (pathname === \"/static\" || pathname.startsWith(\"/static/\")) {\n return true;\n }\n return pathname === \"/-\" || pathname.startsWith(\"/-/\");\n}\n", "export type TimingEntry = {\n name: string;\n time_ms: number;\n};\n\nexport class Timings {\n private entries: TimingEntry[] = [];\n\n async time<T>(name: string, task: () => Promise<T> | T): Promise<T> {\n const start = nowMs();\n try {\n return await task();\n } finally {\n const elapsed = nowMs() - start;\n this.entries.push({ name, time_ms: roundMs(elapsed) });\n }\n }\n\n add(name: string, timeMs: number): void {\n this.entries.push({ name, time_ms: roundMs(timeMs) });\n }\n\n toJSON(): TimingEntry[] {\n return [...this.entries];\n }\n\n isEmpty(): boolean {\n return this.entries.length === 0;\n }\n}\n\nfunction nowMs(): number {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n return Date.now();\n}\n\nfunction roundMs(value: number): number {\n return Math.round(value * 1000) / 1000;\n}\n", "import { DatabaseRegistry } from \"../core/registry.js\";\nimport { fetchRow, fetchTablePage } from \"../core/table.js\";\nimport { computeFacetResults } from \"../core/facets.js\";\nimport { executeSelectQuery } from \"../core/query.js\";\nimport { parseFiltersFromSearchParams, parseSearchFromSearchParams } from \"./search.js\";\nimport { resolveSelectedColumns } from \"../core/columns.js\";\nimport { resolveSort } from \"../core/sort.js\";\nimport type { AuthManager } from \"../core/auth.js\";\nimport { applyJsonColumns, applyShape, parseShape } from \"./shape.js\";\nimport { jsonResponse } from \"./response.js\";\nimport type { DatabaseSchema } from \"../db/introspection.js\";\nimport { applyLabelExpansion, resolveLabelExpansion } from \"../core/labels.js\";\nimport type { HashUrlContext } from \"./hash-urls.js\";\nimport { resolveDatabaseUrlName } from \"./hash-urls.js\";\nimport { Timings } from \"./timings.js\";\n\nexport type ApiHandler = (\n request: Request,\n hashContext?: HashUrlContext | null,\n) => Promise<Response>;\n\nexport function createApiHandler(registry: DatabaseRegistry, auth: AuthManager): ApiHandler {\n return async (request, hashContext) => {\n const url = new URL(request.url);\n const { basePath, isJson } = parseJsonPath(\n hashContext?.normalizedPathname ?? url.pathname,\n );\n const actor = auth.actorFromRequest(request);\n\n if (!isJson) {\n return jsonResponse(\n { ok: false, error: \"Only .json endpoints are implemented.\" },\n { status: 400 },\n );\n }\n\n const segments = basePath.split(\"/\").filter(Boolean).map(decodeURIComponent);\n if (segments.length === 0) {\n if (!auth.allowed(\"view-instance\", { type: \"instance\" }, actor)) {\n return jsonResponse(\n { ok: false, error: \"view-instance is not allowed\" },\n { status: 403 },\n );\n }\n return jsonResponse(await buildIndexJson(registry, hashContext));\n }\n\n const databaseName = segments[0];\n if (!databaseName) {\n return jsonResponse(\n { ok: false, error: \"Database not found\" },\n { status: 404 },\n );\n }\n const tableName = segments[1];\n const rowId = segments[2];\n const config = registry.getDatabase(databaseName);\n if (!config) {\n return jsonResponse(\n { ok: false, error: \"Database not found\" },\n { status: 404 },\n );\n }\n\n if (!tableName) {\n const sql = url.searchParams.get(\"sql\");\n if (sql && sql.trim()) {\n return handleQueryJson(registry, databaseName, url, auth, actor);\n }\n if (\n !auth.allowed(\n \"view-database\",\n { type: \"database\", database: databaseName },\n actor,\n )\n ) {\n return jsonResponse(\n { ok: false, error: \"view-database is not allowed\" },\n { status: 403 },\n );\n }\n const schema = await registry.getSchema(databaseName);\n return jsonResponse(buildDatabaseJson(databaseName, schema, registry));\n }\n\n if (tableName === \"-\" && rowId === \"query\") {\n return handleQueryJson(registry, databaseName, url, auth, actor);\n }\n\n const client = await registry.openClient(databaseName);\n try {\n const schema = await registry.getSchema(databaseName);\n const table = schema.tables[tableName];\n if (!table) {\n const canned = registry.getCannedQuery(databaseName, tableName);\n if (canned) {\n return handleCannedQueryJson(\n registry,\n databaseName,\n tableName,\n url,\n auth,\n actor,\n );\n }\n return jsonResponse(\n { ok: false, error: \"Table not found\" },\n { status: 404 },\n );\n }\n\n if (\n !auth.allowed(\n \"view-table\",\n { type: \"table\", database: databaseName, table: tableName },\n actor,\n )\n ) {\n return jsonResponse(\n { ok: false, error: \"view-table is not allowed\" },\n { status: 403 },\n );\n }\n\n if (rowId) {\n if (\n !auth.allowed(\n \"view-row\",\n { type: \"table\", database: databaseName, table: tableName },\n actor,\n )\n ) {\n return jsonResponse(\n { ok: false, error: \"view-row is not allowed\" },\n { status: 403 },\n );\n }\n const timings = new Timings();\n const row = await timings.time(\"row\", () =>\n fetchRow(client, schema, tableName, rowId),\n );\n if (!row) {\n return jsonResponse(\n { ok: false, error: \"Row not found\" },\n { status: 404 },\n );\n }\n return jsonResponse({ ok: true, rows: [row], timings: timings.toJSON() });\n }\n\n const shapeParam = url.searchParams.get(\"_shape\");\n const shape = shapeParam ? parseShape(shapeParam) : \"arrays\";\n const sizeParam = url.searchParams.get(\"_size\");\n const nextParam = url.searchParams.get(\"_next\");\n const size = sizeParam ? Number(sizeParam) : undefined;\n const next = nextParam ? Number(nextParam) : undefined;\n const jsonColumns = url.searchParams.getAll(\"_json\");\n const filters = parseFiltersFromSearchParams(url.searchParams);\n const search = parseSearchFromSearchParams(url.searchParams);\n const cols = url.searchParams.getAll(\"_col\");\n const noCols = url.searchParams.getAll(\"_nocol\");\n const rawWhere = url.searchParams.getAll(\"_where\");\n const labelColumns = url.searchParams.getAll(\"_label\");\n const labelsOn = parseBooleanParam(url.searchParams.get(\"_labels\"));\n const nl = parseBooleanParam(url.searchParams.get(\"_nl\"));\n let sort: { column: string; desc: boolean } | null = null;\n try {\n sort = resolveSort(\n {\n registry,\n schema,\n databaseName,\n tableName,\n sort: url.searchParams.get(\"_sort\"),\n sortDesc: url.searchParams.get(\"_sort_desc\"),\n sortByDesc: url.searchParams.get(\"_sort_by_desc\"),\n },\n );\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n { status: 400 },\n );\n }\n if (rawWhere.length > 0) {\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"table\", database: databaseName, table: tableName },\n actor,\n );\n if (!allowed) {\n return jsonResponse(\n { ok: false, error: \"_where is not allowed\" },\n { status: 403 },\n );\n }\n }\n const facetColumns = [\n ...new Set([\n ...url.searchParams.getAll(\"_facet\"),\n ...getMetadataFacets(registry, databaseName, tableName),\n ]),\n ];\n const facetSizeParam = url.searchParams.get(\"_facet_size\");\n const facetSize = facetSizeParam ? Number(facetSizeParam) : 30;\n const selectedColumns = resolveSelectedColumns({\n schema,\n tableName,\n cols,\n noCols,\n });\n const pageOptions: Parameters<typeof fetchTablePage>[3] = {\n filters,\n search,\n columns: selectedColumns,\n rawWhere,\n sort,\n };\n if (typeof size === \"number\" && Number.isFinite(size)) {\n pageOptions.size = size;\n }\n if (typeof next === \"number\" && Number.isFinite(next)) {\n pageOptions.next = next;\n }\n const timings = new Timings();\n const page = await timings.time(\"rows\", () =>\n fetchTablePage(client, schema, tableName, pageOptions),\n );\n const labelConfig = resolveLabelExpansion(\n registry,\n schema,\n databaseName,\n tableName,\n {\n columns: page.columns,\n labelColumns,\n labelsOn,\n auth,\n actor,\n },\n );\n const labeledRows = await timings.time(\"labels\", () =>\n applyLabelExpansion(client, page.rows, labelConfig.specs),\n );\n const rows = applyJsonColumns(labeledRows, jsonColumns);\n const { body, isWrapped } = applyShape({\n rows,\n columns: page.columns,\n shape,\n primaryKeys: table.primaryKeys,\n });\n const facetResults = await timings.time(\"facets\", () =>\n computeFacetResults({\n client,\n schema,\n tableName,\n facetColumns,\n filters,\n facetSize: Number.isFinite(facetSize) ? facetSize : 30,\n baseUrl: url,\n search,\n rawWhere,\n }),\n );\n\n if (nl && shape === \"array\" && Array.isArray(body)) {\n const text =\n body.map((item) => JSON.stringify(item)).join(\"\\n\") +\n (body.length ? \"\\n\" : \"\");\n return new Response(text, {\n headers: {\n \"content-type\": \"application/x-ndjson; charset=utf-8\",\n },\n });\n }\n\n if (isWrapped) {\n const payload: Record<string, unknown> = {\n ok: true,\n rows: body,\n truncated: page.truncated,\n next: page.next,\n columns: page.columns,\n primary_keys: table.primaryKeys,\n expanded_columns: labelConfig.expandedColumns,\n expandable_columns: labelConfig.expandableColumns,\n };\n if (facetResults) {\n payload.facet_results = facetResults;\n }\n if (!timings.isEmpty()) {\n payload.timings = timings.toJSON();\n }\n return jsonResponse(payload);\n }\n\n return jsonResponse(body);\n } finally {\n client.close();\n }\n };\n}\n\nfunction parseJsonPath(pathname: string): {\n basePath: string;\n isJson: boolean;\n} {\n const trimmed = pathname.endsWith(\"/\") && pathname !== \"/\" ? pathname.slice(0, -1) : pathname;\n const isJson = trimmed === \"/.json\" || trimmed.endsWith(\".json\");\n if (!isJson) {\n return { basePath: trimmed, isJson: false };\n }\n if (trimmed === \"/.json\") {\n return { basePath: \"/\", isJson: true };\n }\n return { basePath: trimmed.slice(0, -5), isJson: true };\n}\n\nfunction parseBooleanParam(value: string | null): boolean {\n if (!value) {\n return false;\n }\n return [\"1\", \"true\", \"on\", \"yes\"].includes(value.toLowerCase());\n}\n\nasync function buildIndexJson(\n registry: DatabaseRegistry,\n hashContext?: HashUrlContext | null,\n) {\n const useHashedUrls = hashContext?.useHashedUrls ?? false;\n const hashLength = hashContext?.hashLength;\n const databases = await Promise.all(\n registry.listDatabases().map(async (db) => ({\n name: db.name,\n path: `/${encodeURIComponent(\n await resolveDatabaseUrlName(\n registry,\n db.name,\n useHashedUrls,\n hashLength,\n ),\n )}`,\n })),\n );\n return {\n ok: true,\n metadata: registry.getMetadata() ?? {},\n databases,\n };\n}\n\nfunction buildDatabaseJson(\n databaseName: string,\n schema: DatabaseSchema,\n registry: DatabaseRegistry,\n) {\n return {\n ok: true,\n database: databaseName,\n metadata: registry.getDatabaseMetadata(databaseName) ?? {},\n tables: Object.values(schema.tables).map((table) => ({\n name: table.name,\n type: table.type,\n columns: table.columns.map((col) => col.name),\n primary_keys: table.primaryKeys,\n foreign_keys: table.foreignKeys,\n is_fts: table.isFts,\n })),\n };\n}\n\nasync function handleQueryJson(\n registry: DatabaseRegistry,\n databaseName: string,\n url: URL,\n auth: AuthManager,\n actor: ReturnType<AuthManager[\"actorFromRequest\"]>,\n): Promise<Response> {\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"database\", database: databaseName },\n actor,\n );\n if (!allowed) {\n return jsonResponse(\n { ok: false, error: \"execute-sql is not allowed\" },\n { status: 403 },\n );\n }\n const sql = url.searchParams.get(\"sql\");\n if (!sql) {\n return jsonResponse(\n { ok: false, error: \"Missing sql parameter\" },\n { status: 400 },\n );\n }\n const params: Record<string, string | null> = {};\n for (const [key, value] of url.searchParams.entries()) {\n if (key === \"sql\" || key.startsWith(\"_\")) {\n continue;\n }\n params[key] = value;\n }\n const client = await registry.openClient(databaseName);\n try {\n const timings = new Timings();\n const result = await timings.time(\"sql\", () =>\n executeSelectQuery({ client, sql, params }),\n );\n return jsonResponse({\n ok: true,\n rows: result.rows,\n truncated: result.truncated,\n query: {\n sql: result.sql,\n params: result.params,\n },\n timings: timings.toJSON(),\n });\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n { status: 400 },\n );\n } finally {\n client.close();\n }\n}\n\nasync function handleCannedQueryJson(\n registry: DatabaseRegistry,\n databaseName: string,\n queryName: string,\n url: URL,\n auth: AuthManager,\n actor: ReturnType<AuthManager[\"actorFromRequest\"]>,\n): Promise<Response> {\n const canned = registry.getCannedQuery(databaseName, queryName);\n if (!canned) {\n return jsonResponse(\n { ok: false, error: \"Query not found\" },\n { status: 404 },\n );\n }\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"database\", database: databaseName },\n actor,\n );\n if (!allowed) {\n return jsonResponse(\n { ok: false, error: \"execute-sql is not allowed\" },\n { status: 403 },\n );\n }\n const params: Record<string, string | null> = {};\n for (const [key, value] of url.searchParams.entries()) {\n if (key.startsWith(\"_\")) {\n continue;\n }\n params[key] = value;\n }\n const client = await registry.openClient(databaseName);\n try {\n const timings = new Timings();\n const result = await timings.time(\"sql\", () =>\n executeSelectQuery({\n client,\n sql: canned.sql,\n params,\n }),\n );\n return jsonResponse({\n ok: true,\n rows: result.rows,\n truncated: result.truncated,\n query: {\n sql: result.sql,\n params: result.params,\n },\n timings: timings.toJSON(),\n title: canned.title ?? queryName,\n description: canned.description ?? null,\n description_html: canned.description_html ?? null,\n });\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n { status: 400 },\n );\n } finally {\n client.close();\n }\n}\n\nfunction getMetadataFacets(\n registry: DatabaseRegistry,\n databaseName: string,\n tableName: string,\n): string[] {\n const tableMetadata = registry.getTableMetadata(databaseName, tableName);\n const facets = tableMetadata?.facets;\n if (!Array.isArray(facets)) {\n return [];\n }\n return facets.filter((facet): facet is string => typeof facet === \"string\");\n}\n", "import type { DatabaseRegistry } from \"../core/registry.js\";\nimport { fetchTablePage } from \"../core/table.js\";\nimport { parseFiltersFromSearchParams, parseSearchFromSearchParams } from \"./search.js\";\nimport { resolveSelectedColumns } from \"../core/columns.js\";\nimport { resolveSort } from \"../core/sort.js\";\nimport type { AuthManager } from \"../core/auth.js\";\nimport { applyLabelExpansion, resolveLabelExpansion } from \"../core/labels.js\";\nimport { executeSelectQuery } from \"../core/query.js\";\nimport type { HashUrlContext } from \"./hash-urls.js\";\n\nexport type CsvHandler = (\n request: Request,\n hashContext?: HashUrlContext | null,\n) => Promise<Response>;\n\nconst DEFAULT_CSV_LIMIT = 1000;\n\nexport function createCsvHandler(\n registry: DatabaseRegistry,\n auth: AuthManager,\n): CsvHandler {\n return async (request, hashContext) => {\n const url = new URL(request.url);\n const { basePath, isCsv } = parseCsvPath(\n hashContext?.normalizedPathname ?? url.pathname,\n );\n if (!isCsv) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n const segments = basePath.split(\"/\").filter(Boolean).map(decodeURIComponent);\n const databaseName = segments[0];\n const tableName = segments[1];\n const rowId = segments[2];\n const sql = url.searchParams.get(\"sql\") ?? \"\";\n if (!databaseName || (!tableName && !sql.trim())) {\n return new Response(\"CSV export requires a database and table path.\", {\n status: 400,\n });\n }\n if (rowId) {\n return new Response(\"CSV export is not supported for single rows.\", {\n status: 400,\n });\n }\n\n const config = registry.getDatabase(databaseName);\n if (!config) {\n return new Response(\"Database not found.\", { status: 404 });\n }\n\n const client = await registry.openClient(databaseName);\n try {\n if (!tableName && sql.trim()) {\n const actor = auth.actorFromRequest(request);\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"database\", database: databaseName },\n actor,\n );\n if (!allowed) {\n return new Response(\"execute-sql is not allowed.\", { status: 403 });\n }\n const params = collectQueryParams(url.searchParams);\n const result = await executeSelectQuery({\n client,\n sql,\n params,\n maxRows: DEFAULT_CSV_LIMIT,\n });\n const csv = rowsToCsv(result.columns, result.rows);\n const headers = new Headers({\n \"content-type\": \"text/csv; charset=utf-8\",\n });\n if (url.searchParams.has(\"_dl\")) {\n headers.set(\n \"content-disposition\",\n `attachment; filename=\"${databaseName}.csv\"`,\n );\n }\n return new Response(csv, { headers });\n }\n if (!tableName) {\n return new Response(\"CSV export requires a table when no SQL is provided.\", {\n status: 400,\n });\n }\n const schema = await registry.getSchema(databaseName);\n const table = schema.tables[tableName];\n if (!table) {\n return new Response(\"Table not found.\", { status: 404 });\n }\n const actor = auth.actorFromRequest(request);\n\n const sizeParam = url.searchParams.get(\"_size\");\n const size = parseSizeParam(sizeParam, DEFAULT_CSV_LIMIT);\n const filters = parseFiltersFromSearchParams(url.searchParams);\n const search = parseSearchFromSearchParams(url.searchParams);\n const cols = url.searchParams.getAll(\"_col\");\n const noCols = url.searchParams.getAll(\"_nocol\");\n const rawWhere = url.searchParams.getAll(\"_where\");\n const labelColumns = url.searchParams.getAll(\"_label\");\n const labelsOn = parseBooleanParam(url.searchParams.get(\"_labels\"));\n const stream = parseBooleanParam(url.searchParams.get(\"_stream\"));\n const download = url.searchParams.has(\"_dl\");\n const sort = resolveSort({\n registry,\n schema,\n databaseName,\n tableName,\n sort: url.searchParams.get(\"_sort\"),\n sortDesc: url.searchParams.get(\"_sort_desc\"),\n sortByDesc: url.searchParams.get(\"_sort_by_desc\"),\n });\n if (rawWhere.length > 0) {\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"table\", database: databaseName, table: tableName },\n actor,\n );\n if (!allowed) {\n return new Response(\"_where is not allowed.\", { status: 403 });\n }\n }\n const selectedColumns = resolveSelectedColumns({\n schema,\n tableName,\n cols,\n noCols,\n });\n const labelConfig = resolveLabelExpansion(\n registry,\n schema,\n databaseName,\n tableName,\n {\n columns: selectedColumns.length ? selectedColumns : table.columns.map((c) => c.name),\n labelColumns,\n labelsOn,\n auth,\n actor,\n },\n );\n if (stream) {\n if (url.searchParams.get(\"_next\")) {\n return new Response(\"_next is not allowed when streaming CSV.\", {\n status: 400,\n });\n }\n const streamResponse = await streamCsv({\n client,\n schema,\n tableName,\n filters,\n search,\n columns: selectedColumns,\n rawWhere,\n sort,\n size: Number.isFinite(size) ? size : DEFAULT_CSV_LIMIT,\n labelConfig,\n });\n const headers = new Headers(streamResponse.headers);\n if (download) {\n headers.set(\n \"content-disposition\",\n `attachment; filename=\"${tableName}.csv\"`,\n );\n }\n return new Response(streamResponse.body, {\n headers,\n });\n }\n const page = await fetchTablePage(client, schema, tableName, {\n size: Number.isFinite(size) ? size : DEFAULT_CSV_LIMIT,\n filters,\n search,\n columns: selectedColumns,\n rawWhere,\n sort,\n });\n const labeledRows = await applyLabelExpansion(\n client,\n page.rows,\n labelConfig.specs,\n );\n const csv = rowsToCsv(page.columns, labeledRows, labelConfig.expandedColumns);\n const headers = new Headers({\n \"content-type\": \"text/csv; charset=utf-8\",\n });\n if (download) {\n headers.set(\n \"content-disposition\",\n `attachment; filename=\"${tableName}.csv\"`,\n );\n }\n return new Response(csv, { headers });\n } finally {\n client.close();\n }\n };\n}\n\nfunction parseCsvPath(pathname: string): {\n basePath: string;\n isCsv: boolean;\n} {\n const trimmed =\n pathname.endsWith(\"/\") && pathname !== \"/\" ? pathname.slice(0, -1) : pathname;\n const isCsv = trimmed.endsWith(\".csv\");\n if (!isCsv) {\n return { basePath: trimmed, isCsv: false };\n }\n return { basePath: trimmed.slice(0, -4), isCsv: true };\n}\n\nfunction collectQueryParams(params: URLSearchParams): Record<string, string | null> {\n const collected: Record<string, string | null> = {};\n for (const [key, value] of params.entries()) {\n if (key === \"sql\" || key.startsWith(\"_\")) {\n continue;\n }\n collected[key] = value;\n }\n return collected;\n}\n\nfunction rowsToCsv(\n columns: string[],\n rows: Record<string, unknown>[],\n expandedColumns: string[] = [],\n): string {\n const lines: string[] = [];\n const headings = buildCsvHeadings(columns, expandedColumns);\n lines.push(headings.map((column) => csvValue(column)).join(\",\"));\n for (const row of rows) {\n const values = csvRowWithLabels(columns, expandedColumns, row);\n lines.push(values.map((value) => csvValue(value)).join(\",\"));\n }\n return lines.join(\"\\n\");\n}\n\nfunction csvValue(value: unknown): string {\n if (value == null) {\n return \"\";\n }\n const text = String(value);\n if (/[\",\\n]/.test(text)) {\n return `\"${text.replace(/\"/g, '\"\"')}\"`;\n }\n return text;\n}\n\nasync function streamCsv(options: {\n client: Parameters<typeof fetchTablePage>[0];\n schema: Parameters<typeof fetchTablePage>[1];\n tableName: string;\n filters: ReturnType<typeof parseFiltersFromSearchParams>;\n search: ReturnType<typeof parseSearchFromSearchParams>;\n columns: string[];\n rawWhere: string[];\n sort: ReturnType<typeof resolveSort>;\n size: number;\n labelConfig: ReturnType<typeof resolveLabelExpansion>;\n}): Promise<Response> {\n const encoder = new TextEncoder();\n let first = true;\n let next: number | null = null;\n const stream = new ReadableStream({\n async start(controller) {\n try {\n while (first || next !== null) {\n const pageOptions: Parameters<typeof fetchTablePage>[3] = {\n size: options.size,\n filters: options.filters,\n search: options.search,\n columns: options.columns,\n rawWhere: options.rawWhere,\n sort: options.sort,\n };\n if (next !== null) {\n pageOptions.next = next;\n }\n const page = await fetchTablePage(\n options.client,\n options.schema,\n options.tableName,\n pageOptions,\n );\n const labeledRows = await applyLabelExpansion(\n options.client,\n page.rows,\n options.labelConfig.specs,\n );\n if (first) {\n const headings = buildCsvHeadings(\n page.columns,\n options.labelConfig.expandedColumns,\n );\n controller.enqueue(\n encoder.encode(headings.map((value) => csvValue(value)).join(\",\") + \"\\n\"),\n );\n first = false;\n }\n for (const row of labeledRows) {\n const values = csvRowWithLabels(\n page.columns,\n options.labelConfig.expandedColumns,\n row,\n );\n controller.enqueue(\n encoder.encode(values.map((value) => csvValue(value)).join(\",\") + \"\\n\"),\n );\n }\n next = page.next;\n if (next === null) {\n break;\n }\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n return new Response(stream, {\n headers: {\n \"content-type\": \"text/csv; charset=utf-8\",\n },\n });\n}\n\nfunction buildCsvHeadings(columns: string[], expandedColumns: string[]): string[] {\n if (expandedColumns.length === 0) {\n return columns;\n }\n const expanded = new Set(expandedColumns);\n const headings: string[] = [];\n for (const column of columns) {\n headings.push(column);\n if (expanded.has(column)) {\n headings.push(`${column}_label`);\n }\n }\n return headings;\n}\n\nfunction csvRowWithLabels(\n columns: string[],\n expandedColumns: string[],\n row: Record<string, unknown>,\n): unknown[] {\n if (expandedColumns.length === 0) {\n return columns.map((column) => row[column]);\n }\n const expanded = new Set(expandedColumns);\n const values: unknown[] = [];\n for (const column of columns) {\n const cell = row[column];\n if (expanded.has(column)) {\n if (cell == null) {\n values.push(\"\", \"\");\n } else if (typeof cell === \"object\" && cell !== null) {\n const value = (cell as { value?: unknown }).value;\n const label = (cell as { label?: unknown }).label;\n values.push(value ?? \"\", label ?? \"\");\n } else {\n values.push(cell, \"\");\n }\n } else {\n values.push(cell);\n }\n }\n return values;\n}\n\nfunction parseBooleanParam(value: string | null): boolean {\n if (!value) {\n return false;\n }\n return [\"1\", \"true\", \"on\", \"yes\"].includes(value.toLowerCase());\n}\n\nfunction parseSizeParam(value: string | null, fallback: number): number {\n if (!value) {\n return fallback;\n }\n if (value === \"max\") {\n return fallback;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n", "import type { DatabaseSchema } from \"../db/introspection.js\";\n\nexport type IncomingForeignKey = {\n otherTable: string;\n column: string;\n otherColumn: string;\n};\n\nexport function getIncomingForeignKeys(\n schema: DatabaseSchema,\n tableName: string,\n): IncomingForeignKey[] {\n const incoming: IncomingForeignKey[] = [];\n for (const [otherTableName, table] of Object.entries(schema.tables)) {\n if (!table.foreignKeys.length) {\n continue;\n }\n const idCounts = new Map<number, number>();\n for (const fk of table.foreignKeys) {\n idCounts.set(fk.id, (idCounts.get(fk.id) ?? 0) + 1);\n }\n for (const fk of table.foreignKeys) {\n if (idCounts.get(fk.id) !== 1) {\n continue;\n }\n if (fk.table !== tableName) {\n continue;\n }\n incoming.push({\n otherTable: otherTableName,\n column: fk.to,\n otherColumn: fk.from,\n });\n }\n }\n return incoming;\n}\n", "import type { SqliteClient } from \"./sqlite/types.js\";\n\nexport async function getTableDefinition(\n client: SqliteClient,\n tableName: string,\n type: \"table\" | \"view\" = \"table\",\n): Promise<string | null> {\n const { rows } = await client.execute(\n \"select sql from sqlite_master where name = ? and type = ?\",\n [tableName, type],\n );\n const raw = rows[0]?.sql;\n if (!raw) {\n return null;\n }\n const bits = [`${raw};`];\n if (type === \"table\") {\n const { rows: indexRows } = await client.execute(\n \"select sql from sqlite_master where tbl_name = ? and type = 'index' and sql is not null\",\n [tableName],\n );\n for (const row of indexRows) {\n if (row.sql) {\n bits.push(`${row.sql};`);\n }\n }\n }\n return bits.join(\"\\n\");\n}\n", "// src/jsx/jsx-dev-runtime.ts\nimport { jsxFn } from \"./base.js\";\nimport { Fragment } from \"./base.js\";\nfunction jsxDEV(tag, props, key) {\n let node;\n if (!props || !(\"children\" in props)) {\n node = jsxFn(tag, props, []);\n } else {\n const children = props.children;\n node = Array.isArray(children) ? jsxFn(tag, props, children) : jsxFn(tag, props, [children]);\n }\n node.key = key;\n return node;\n}\nexport {\n Fragment,\n jsxDEV\n};\n", "// src/jsx/jsx-runtime.ts\nimport { jsxDEV, Fragment } from \"./jsx-dev-runtime.js\";\nimport { jsxDEV as jsxDEV2 } from \"./jsx-dev-runtime.js\";\nimport { html, raw } from \"../helper/html/index.js\";\nimport { escapeToBuffer, stringBufferToString } from \"../utils/html.js\";\nimport { styleObjectForEach } from \"./utils.js\";\nvar jsxAttr = (key, v) => {\n const buffer = [`${key}=\"`];\n if (key === \"style\" && typeof v === \"object\") {\n let styleStr = \"\";\n styleObjectForEach(v, (property, value) => {\n if (value != null) {\n styleStr += `${styleStr ? \";\" : \"\"}${property}:${value}`;\n }\n });\n escapeToBuffer(styleStr, buffer);\n buffer[0] += '\"';\n } else if (typeof v === \"string\") {\n escapeToBuffer(v, buffer);\n buffer[0] += '\"';\n } else if (v === null || v === void 0) {\n return raw(\"\");\n } else if (typeof v === \"number\" || v.isEscaped) {\n buffer[0] += `${v}\"`;\n } else if (v instanceof Promise) {\n buffer.unshift('\"', v);\n } else {\n escapeToBuffer(v.toString(), buffer);\n buffer[0] += '\"';\n }\n return buffer.length === 1 ? raw(buffer[0]) : stringBufferToString(buffer, void 0);\n};\nvar jsxEscape = (value) => value;\nexport {\n Fragment,\n jsxDEV as jsx,\n jsxAttr,\n jsxEscape,\n html as jsxTemplate,\n jsxDEV2 as jsxs\n};\n", "/** @jsxImportSource hono/jsx */\nimport { Fragment } from \"hono/jsx\";\nimport type { JSX } from \"hono/jsx/jsx-dev-runtime\";\nimport type { Context } from \"hono\";\nimport type { StatusCode } from \"hono/utils/http-status\";\nimport { stat } from \"node:fs/promises\";\n\nimport {\n COUNT_LIMIT,\n buildTableQuery,\n fetchRow,\n fetchTableCount,\n fetchTablePage,\n} from \"../core/table.js\";\nimport type { DatabaseSchema } from \"../db/introspection.js\";\nimport type { SqliteClient } from \"../db/sqlite/types.js\";\nimport type { DatabaseRegistry } from \"../core/registry.js\";\nimport type { DatabaseMetadata, Metadata, TableMetadata } from \"../core/metadata.js\";\nimport { computeFacetResults } from \"../core/facets.js\";\nimport { executeSelectQuery } from \"../core/query.js\";\nimport { resolveSelectedColumns } from \"../core/columns.js\";\nimport { resolveSort, sortableColumnsForTable } from \"../core/sort.js\";\nimport type { AuthManager } from \"../core/auth.js\";\nimport { getIncomingForeignKeys } from \"../core/foreign-keys.js\";\nimport { applyLabelExpansion, resolveLabelExpansion } from \"../core/labels.js\";\nimport type { HashUrlContext } from \"./hash-urls.js\";\nimport { resolveDatabaseUrlName } from \"./hash-urls.js\";\nimport { getTableDefinition } from \"../db/definitions.js\";\nimport {\n parseFiltersFromSearchParams,\n parseSearchFromSearchParams,\n} from \"./search.js\";\nimport { Timings, type TimingEntry } from \"./timings.js\";\n\nfunction renderPage(\n c: Context,\n node: Parameters<Context[\"render\"]>[0],\n status?: StatusCode,\n): ReturnType<Context[\"render\"]> {\n if (status !== undefined) {\n c.status(status);\n }\n return c.render(node);\n}\n\nexport async function handleHtmlRequest(\n c: Context,\n registry: DatabaseRegistry,\n auth: AuthManager,\n options: { hashContext?: HashUrlContext | null } = {},\n): Promise<Response> {\n const url = new URL(c.req.url);\n const hashContext = options.hashContext ?? null;\n const { basePath, isJson } = parseJsonPath(\n hashContext?.normalizedPathname ?? url.pathname,\n );\n if (isJson) {\n return renderPage(\n c,\n <PageShell crumbs={[{ label: \"home\", href: \"/\" }]} title=\"Error\">\n <ErrorMessage message=\"JSON paths are not handled here.\" />\n </PageShell>,\n 404,\n );\n }\n\n const segments = basePath.split(\"/\").filter(Boolean).map(decodeURIComponent);\n if (segments.length === 0) {\n if (!auth.allowed(\"view-instance\", { type: \"instance\" }, auth.actorFromRequest(c.req.raw))) {\n return renderPage(\n c,\n <PageShell crumbs={[{ label: \"home\", href: \"/\" }]} title=\"Forbidden\">\n <ErrorMessage message=\"view-instance is not allowed.\" />\n </PageShell>,\n 403,\n );\n }\n const useHashedUrls = hashContext?.useHashedUrls ?? false;\n const hashLength = hashContext?.hashLength;\n const databases = await Promise.all(\n registry.listDatabases().map(async (db) => {\n const urlName = await resolveDatabaseUrlName(\n registry,\n db.name,\n useHashedUrls,\n hashLength,\n );\n return buildIndexDatabaseInfo(registry, db.name, urlName);\n }),\n );\n const siteTitle = registry.getMetadata()?.title ?? \"Datasette TS\";\n const pageTitle =\n databases.length === 1\n ? `Datasette TS: ${databases[0]?.name ?? \"\"}`.trim()\n : siteTitle;\n c.set(\"title\", pageTitle);\n c.set(\"bodyClass\", \"index\");\n c.set(\"alternateJson\", \"/.json\");\n return renderPage(\n c,\n <IndexView\n metadata={registry.getMetadata()}\n databases={databases}\n title={siteTitle}\n />,\n );\n }\n\n const databaseName = segments[0];\n if (!databaseName) {\n return renderPage(\n c,\n <PageShell crumbs={[{ label: \"home\", href: \"/\" }]} title=\"Not Found\">\n <ErrorMessage message=\"Database not found.\" />\n </PageShell>,\n 404,\n );\n }\n const tableName = segments[1];\n const rowId = segments[2];\n const databaseUrlName = await resolveDatabaseUrlName(\n registry,\n databaseName,\n hashContext?.useHashedUrls ?? false,\n hashContext?.hashLength,\n );\n const config = registry.getDatabase(databaseName);\n if (!config) {\n return renderPage(\n c,\n <PageShell crumbs={[{ label: \"home\", href: \"/\" }]} title=\"Not Found\">\n <ErrorMessage message=\"Database not found.\" />\n </PageShell>,\n 404,\n );\n }\n\n if (!tableName) {\n const sql = url.searchParams.get(\"sql\");\n if (sql && sql.trim()) {\n return renderQueryEditor(c, registry, databaseName, databaseUrlName, auth);\n }\n if (\n !auth.allowed(\n \"view-database\",\n { type: \"database\", database: databaseName },\n auth.actorFromRequest(c.req.raw),\n )\n ) {\n return renderPage(\n c,\n <PageShell\n crumbs={[{ label: \"home\", href: \"/\" }]}\n title=\"Forbidden\"\n >\n <ErrorMessage message=\"view-database is not allowed.\" />\n </PageShell>,\n 403,\n );\n }\n c.set(\"title\", databaseName);\n c.set(\"bodyClass\", `db db-${toCssClass(databaseName)}`);\n c.set(\"alternateJson\", databaseJsonPath(databaseUrlName));\n return renderDatabase(c, registry, databaseName, databaseUrlName, auth);\n }\n\n if (tableName === \"-\" && rowId === \"query\") {\n return renderQueryEditor(c, registry, databaseName, databaseUrlName, auth);\n }\n\n const client = await registry.openClient(databaseName);\n try {\n const schema = await registry.getSchema(databaseName);\n const table = schema.tables[tableName];\n if (!table) {\n const canned = registry.getCannedQuery(databaseName, tableName);\n if (canned) {\n return renderCannedQuery(\n c,\n registry,\n databaseName,\n databaseUrlName,\n tableName,\n canned,\n auth,\n );\n }\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n ]}\n title=\"Not Found\"\n >\n <ErrorMessage message=\"Table not found.\" />\n </PageShell>,\n 404,\n );\n }\n\n if (rowId) {\n if (\n !auth.allowed(\n \"view-row\",\n { type: \"table\", database: databaseName, table: tableName },\n auth.actorFromRequest(c.req.raw),\n )\n ) {\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n {\n label: tableName,\n href: databaseTablePath(databaseUrlName, tableName),\n },\n ]}\n title=\"Forbidden\"\n >\n <ErrorMessage message=\"view-row is not allowed.\" />\n </PageShell>,\n 403,\n );\n }\n const timings = new Timings();\n const row = await timings.time(\"row\", () =>\n fetchRow(client, schema, tableName, rowId),\n );\n if (!row) {\n return renderPage(c, <ErrorMessage message=\"Row not found.\" />, 404);\n }\n const table = schema.tables[tableName];\n if (!table) {\n return renderPage(c, <ErrorMessage message=\"Table not found.\" />, 404);\n }\n const rowColumns = table.columns.map((column) => column.name);\n const labelConfig = resolveLabelExpansion(\n registry,\n schema,\n databaseName,\n tableName,\n {\n columns: rowColumns,\n labelColumns: [],\n labelsOn: true,\n auth,\n actor: auth.actorFromRequest(c.req.raw),\n },\n );\n const labeledRow =\n (\n await timings.time(\"labels\", () =>\n applyLabelExpansion(\n client,\n [row],\n labelConfig.specs,\n ),\n )\n )[0] ?? row;\n c.set(\"headStyle\", responsiveTableStyle(rowColumns));\n c.set(\"title\", `${databaseName}: ${tableName}`);\n const databaseColor = await registry.getDatabaseColor(databaseName);\n c.set(\n \"bodyClass\",\n `row db-${toCssClass(databaseName)} table-${toCssClass(tableName)}`,\n );\n c.set(\n \"alternateJson\",\n databaseRowJsonPath(databaseUrlName, tableName, rowId),\n );\n const foreignKeyTables = await timings.time(\"foreign_keys\", () =>\n fetchIncomingForeignKeyTables(\n client,\n schema,\n databaseUrlName,\n tableName,\n labeledRow,\n ),\n );\n return renderPage(\n c,\n <RowView\n databaseName={databaseName}\n databaseUrlName={databaseUrlName}\n tableName={tableName}\n row={labeledRow}\n rowId={rowId}\n columns={rowColumns}\n columnDetails={table.columns}\n primaryKeys={table.primaryKeys}\n databaseColor={databaseColor}\n metadata={registry.getTableMetadata(databaseName, tableName)}\n foreignKeyTables={foreignKeyTables}\n labelSpecs={labelConfig.specs}\n timings={timings.isEmpty() ? undefined : timings.toJSON()}\n />,\n );\n }\n\n const sizeParam = url.searchParams.get(\"_size\");\n const nextParam = url.searchParams.get(\"_next\");\n const size = sizeParam ? Number(sizeParam) : undefined;\n const next = nextParam ? Number(nextParam) : undefined;\n const filters = parseFiltersFromSearchParams(url.searchParams);\n const search = parseSearchFromSearchParams(url.searchParams);\n const cols = url.searchParams.getAll(\"_col\");\n const noCols = url.searchParams.getAll(\"_nocol\");\n const rawWhere = url.searchParams.getAll(\"_where\");\n const labelColumns = url.searchParams.getAll(\"_label\");\n const labelsParam = url.searchParams.get(\"_labels\");\n const labelsOn =\n labelsParam !== null ? parseBooleanParam(labelsParam) : true;\n const sort = resolveSort({\n registry,\n schema,\n databaseName,\n tableName,\n sort: url.searchParams.get(\"_sort\"),\n sortDesc: url.searchParams.get(\"_sort_desc\"),\n sortByDesc: url.searchParams.get(\"_sort_by_desc\"),\n });\n const actor = auth.actorFromRequest(c.req.raw);\n if (\n !auth.allowed(\n \"view-table\",\n { type: \"table\", database: databaseName, table: tableName },\n actor,\n )\n ) {\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n ]}\n title=\"Forbidden\"\n >\n <ErrorMessage message=\"view-table is not allowed.\" />\n </PageShell>,\n 403,\n );\n }\n if (rawWhere.length > 0) {\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"table\", database: databaseName, table: tableName },\n actor,\n );\n if (!allowed) {\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n {\n label: tableName,\n href: databaseTablePath(databaseUrlName, tableName),\n },\n ]}\n title=\"Forbidden\"\n >\n <ErrorMessage message=\"_where is not allowed.\" />\n </PageShell>,\n 403,\n );\n }\n }\n const facetColumns = [\n ...new Set([\n ...url.searchParams.getAll(\"_facet\"),\n ...getMetadataFacets(registry, databaseName, tableName),\n ]),\n ];\n const facetSizeParam = url.searchParams.get(\"_facet_size\");\n const facetSize = facetSizeParam ? Number(facetSizeParam) : 30;\n const selectedColumns = resolveSelectedColumns({\n schema,\n tableName,\n cols,\n noCols,\n });\n const pageOptions: Parameters<typeof fetchTablePage>[3] = {\n filters,\n search,\n columns: selectedColumns,\n rawWhere,\n sort,\n };\n if (typeof size === \"number\" && Number.isFinite(size)) {\n pageOptions.size = size;\n }\n if (typeof next === \"number\" && Number.isFinite(next)) {\n pageOptions.next = next;\n }\n const timings = new Timings();\n const page = await timings.time(\"rows\", () =>\n fetchTablePage(client, schema, tableName, pageOptions),\n );\n const labelConfig = resolveLabelExpansion(\n registry,\n schema,\n databaseName,\n tableName,\n {\n columns: page.columns,\n labelColumns,\n labelsOn,\n auth,\n actor,\n },\n );\n const labeledRows = await timings.time(\"labels\", () =>\n applyLabelExpansion(\n client,\n page.rows,\n labelConfig.specs,\n ),\n );\n const hasFilters =\n filters.length > 0 ||\n rawWhere.length > 0 ||\n Boolean(search.search);\n const isMutable = registry.getDatabase(databaseName)?.mutable ?? false;\n const inspectCount =\n !isMutable && !hasFilters\n ? registry.getInspectTableCount(databaseName, tableName)\n : null;\n const count =\n inspectCount ??\n (await timings.time(\"count\", () =>\n fetchTableCount(client, schema, tableName, {\n filters,\n search,\n rawWhere,\n }),\n ));\n const rowSummaryForTitle = formatRowSummary({\n count,\n filters,\n sort,\n displayLimitAsGreater: false,\n });\n c.set(\"title\", `${databaseName}: ${tableName}: ${rowSummaryForTitle}`);\n const databaseColor = await registry.getDatabaseColor(databaseName);\n c.set(\n \"bodyClass\",\n `table db-${toCssClass(databaseName)} table-${toCssClass(tableName)}`,\n );\n c.set(\n \"alternateJson\",\n databaseTableJsonPath(databaseUrlName, tableName),\n );\n c.set(\"includeTableJs\", true);\n c.set(\"allowFacet\", true);\n const displayColumns =\n table.primaryKeys.length !== 1 ? [\"Link\", ...page.columns] : page.columns;\n c.set(\"headStyle\", responsiveTableStyle(displayColumns));\n const facetResults = await timings.time(\"facets\", () =>\n computeFacetResults({\n client,\n schema,\n tableName,\n facetColumns,\n filters,\n facetSize: Number.isFinite(facetSize) ? facetSize : 30,\n baseUrl: url,\n search,\n rawWhere,\n }),\n );\n const allowExecuteSql = auth.allowed(\n \"execute-sql\",\n { type: \"table\", database: databaseName, table: tableName },\n actor,\n );\n const tableDefinition =\n table.type !== \"view\"\n ? await getTableDefinition(client, tableName, \"table\")\n : null;\n const viewDefinition =\n table.type === \"view\"\n ? await getTableDefinition(client, tableName, \"view\")\n : null;\n let viewSql: TableViewProps[\"viewSql\"] = null;\n let countSql: TableViewProps[\"countSql\"] = null;\n if (allowExecuteSql) {\n const queryOptions: Parameters<typeof buildTableQuery>[2] = {\n ...pageOptions,\n columns: selectedColumns,\n };\n if (typeof size === \"number\" && Number.isFinite(size)) {\n queryOptions.size = size;\n }\n if (typeof next === \"number\" && Number.isFinite(next)) {\n queryOptions.next = next;\n }\n const query = buildTableQuery(schema, tableName, queryOptions);\n viewSql = { sql: query.sql, params: query.params };\n countSql = query.countSql;\n }\n return renderPage(\n c,\n <TableView\n databaseName={databaseName}\n databaseUrlName={databaseUrlName}\n tableName={tableName}\n tableDefinition={tableDefinition}\n viewDefinition={viewDefinition}\n allowExecuteSql={allowExecuteSql}\n rows={labeledRows}\n columns={page.columns}\n allColumns={table.columns.map((col) => col.name)}\n columnDetails={table.columns}\n sortableColumns={sortableColumnsForTable({\n registry,\n schema,\n databaseName,\n tableName,\n })}\n primaryKeys={table.primaryKeys}\n databaseColor={databaseColor}\n next={page.next}\n count={count}\n countSql={countSql}\n metadata={registry.getTableMetadata(databaseName, tableName)}\n facetResults={facetResults}\n filters={filters}\n requestUrl={url.toString()}\n persistedParamsForSearch={collectPersistedParams(url, { includeSearch: false })}\n persistedParamsForFilters={collectPersistedParams(url, { includeSearch: true })}\n exportParams={collectExportParams(url)}\n exportLabelsOn={labelConfig.expandableColumns.length > 0}\n exportLabelsChecked={labelsOn && labelConfig.expandableColumns.length > 0}\n expandableColumns={labelConfig.expandableColumns}\n expandedColumns={labelConfig.expandedColumns}\n labelSpecs={labelConfig.specs}\n search={search.search ?? \"\"}\n rawWhere={rawWhere}\n sort={sort}\n viewSql={viewSql}\n timings={timings.isEmpty() ? undefined : timings.toJSON()}\n />,\n );\n } finally {\n client.close();\n }\n}\n\nfunction IndexView(props: {\n metadata: Metadata | null;\n databases: Array<{\n name: string;\n urlName: string;\n tablesCount: number;\n tablesAndViewsTruncated: string[];\n tablesAndViewsMore: boolean;\n color: string;\n }>;\n title: string;\n}) {\n return (\n <PageShell crumbs={[{ label: \"home\", href: \"/\" }]} title={props.title}>\n <h1>{props.title}</h1>\n {props.databases.map((db) => {\n return (\n <Fragment>\n <h2\n style={`padding-left: 10px; border-left: 10px solid #${db.color}`}\n >\n <a href={databasePath(db.urlName)}>{db.name}</a>\n </h2>\n <p>\n {formatCount(db.tablesCount)} table\n {db.tablesCount === 1 ? \"\" : \"s\"}\n </p>\n {db.tablesCount > 0 ? (\n <p>\n {db.tablesAndViewsTruncated.map((tableName, index) => (\n <Fragment>\n <a\n href={databaseTablePath(db.urlName, tableName)}\n >\n {tableName}\n </a>\n {index < db.tablesAndViewsTruncated.length - 1 ? \", \" : null}\n </Fragment>\n ))}\n {db.tablesAndViewsMore ? (\n <Fragment>\n ,{\" \"}\n <a href={databasePath(db.urlName)}>...</a>\n </Fragment>\n ) : null}\n </p>\n ) : null}\n </Fragment>\n );\n })}\n </PageShell>\n );\n}\n\nasync function renderDatabase(\n c: Context,\n registry: DatabaseRegistry,\n databaseName: string,\n databaseUrlName: string,\n auth: AuthManager,\n): Promise<Response> {\n const schema = await registry.getSchema(databaseName);\n const metadata = registry.getDatabaseMetadata(databaseName);\n const cannedQueries = registry.getCannedQueries(databaseName);\n const databaseColor = await registry.getDatabaseColor(databaseName);\n const tables = Object.values(schema.tables).sort((a, b) =>\n a.name.localeCompare(b.name),\n );\n const allowExecuteSql = auth.allowed(\n \"execute-sql\",\n { type: \"database\", database: databaseName },\n auth.actorFromRequest(c.req.raw),\n );\n const editorSchemaJson = JSON.stringify(buildEditorSchema(schema));\n const defaultSql =\n tables.length > 0\n ? `select * from ${escapeSqliteIdentifier(tables[0]?.name ?? \"\")}`\n : \"select sqlite_version()\";\n\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n ]}\n title={metadata?.title ?? databaseName}\n >\n <div\n class=\"page-header\"\n style={`border-color: #${databaseColor}`}\n >\n <h1>{metadata?.title ?? databaseName}</h1>\n </div>\n <p class=\"table-actions\">\n <a href={databaseJsonPath(databaseUrlName)}>View JSON</a>\n <span> \u00B7 </span>\n <a href={databaseQueryPath(databaseUrlName)}>SQL</a>\n </p>\n <MetadataDescription metadata={metadata} />\n {allowExecuteSql ? (\n <form\n class=\"sql core\"\n method=\"get\"\n action={databasePath(databaseUrlName)}\n >\n <h3>Custom SQL query</h3>\n <p>\n <textarea\n id=\"sql-editor\"\n name=\"sql\"\n rows={sqlTextRows(defaultSql, 6)}\n style={`height: ${sqlTextRows(defaultSql, 6)}em`}\n >\n {defaultSql}\n </textarea>\n </p>\n <p>\n <button id=\"sql-format\" type=\"button\" hidden>Format SQL</button>{\" \"}\n <input type=\"submit\" value=\"Run SQL\" />\n </p>\n <script\n id=\"sql-schema\"\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: editorSchemaJson }}\n ></script>\n <script src=\"/-/static/sql-formatter-2.3.3.min.js\" defer></script>\n <script src=\"/-/static/cm-editor-6.0.1.bundle.js\"></script>\n <script\n dangerouslySetInnerHTML={{\n __html: `window.addEventListener(\"DOMContentLoaded\", () => {\n const schemaEl = document.getElementById(\"sql-schema\");\n const schema = schemaEl ? JSON.parse(schemaEl.textContent || \"{}\") : {};\n const sqlFormat = document.querySelector(\"button#sql-format\");\n const sqlInput = document.querySelector(\"textarea#sql-editor\");\n if (sqlFormat) {\n sqlFormat.hidden = false;\n }\n if (sqlInput && window.cm && typeof window.cm.editorFromTextArea === \"function\") {\n const editor = (window.editor = window.cm.editorFromTextArea(sqlInput, {\n schema,\n }));\n if (sqlFormat && window.sqlFormatter) {\n sqlFormat.addEventListener(\"click\", () => {\n const formatted = window.sqlFormatter.format(editor.state.doc.toString());\n editor.dispatch({\n changes: {\n from: 0,\n to: editor.state.doc.length,\n insert: formatted,\n },\n });\n });\n }\n }\n});`,\n }}\n ></script>\n <style>\n {`.cm-editor {\n resize: both;\n overflow: hidden;\n width: 80%;\n border: 1px solid #ddd;\n}\n.cm-completionIcon {\n box-sizing: content-box;\n}`}\n </style>\n </form>\n ) : null}\n {Object.keys(cannedQueries).length > 0 ? (\n <div class=\"db-table\">\n <h2>Queries</h2>\n <ul class=\"bullets\">\n {Object.entries(cannedQueries).map(([name, query]) => (\n <li>\n <a href={databaseQueryPathName(databaseUrlName, name)}>\n {query.title ?? name}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <ul class=\"bullets\">\n {tables.map((table) => (\n <li>\n <a\n href={databaseTablePath(databaseUrlName, table.name)}\n >\n {table.name}\n </a>\n </li>\n ))}\n </ul>\n </PageShell>,\n );\n}\n\ntype TableViewProps = {\n databaseName: string;\n databaseUrlName: string;\n tableName: string;\n tableDefinition: string | null;\n viewDefinition: string | null;\n allowExecuteSql: boolean;\n rows: Record<string, unknown>[];\n columns: string[];\n allColumns: string[];\n columnDetails: { name: string; type: string; notNull: boolean }[];\n sortableColumns: string[];\n primaryKeys: string[];\n databaseColor: string;\n next: number | null;\n count: number;\n countSql: string | null;\n metadata: TableMetadata | null;\n facetResults: Awaited<ReturnType<typeof computeFacetResults>> | null;\n filters: ReturnType<typeof parseFiltersFromSearchParams>;\n requestUrl: string;\n persistedParamsForSearch: Array<{ key: string; value: string }>;\n persistedParamsForFilters: Array<{ key: string; value: string }>;\n exportParams: Array<{ key: string; value: string }>;\n exportLabelsOn: boolean;\n exportLabelsChecked: boolean;\n expandableColumns: string[];\n expandedColumns: string[];\n labelSpecs: ReturnType<typeof resolveLabelExpansion>[\"specs\"];\n search: string;\n rawWhere: string[];\n sort: ReturnType<typeof resolveSort>;\n viewSql: { sql: string; params: Record<string, string> } | null;\n timings?: TimingEntry[];\n};\n\nfunction TableView(props: TableViewProps) {\n const labelSpecByColumn = new Map(\n props.labelSpecs.map((spec) => [spec.column, spec]),\n );\n const columnDetailByName = new Map(\n props.columnDetails.map((detail) => [detail.name, detail]),\n );\n const rowSummaryForTitle = formatRowSummary({\n count: props.count,\n filters: props.filters,\n sort: props.sort,\n displayLimitAsGreater: false,\n });\n const rowSummaryForDisplay = formatRowSummary({\n count: props.count,\n filters: props.filters,\n sort: props.sort,\n displayLimitAsGreater: true,\n });\n const pageTitle = `${props.databaseName}: ${props.tableName}: ${rowSummaryForTitle}`;\n const countAllLink =\n props.allowExecuteSql &&\n props.countSql &&\n props.count === COUNT_LIMIT + 1 &&\n props.viewSql ? (\n <a\n class=\"count-sql\"\n href={buildSqlLink(props.databaseUrlName, props.countSql, props.viewSql.params)}\n >\n count all\n </a>\n ) : null;\n const showLinkColumn = props.primaryKeys.length !== 1;\n const displayColumns = showLinkColumn ? [\"Link\", ...props.columns] : props.columns;\n const linkKeys =\n props.primaryKeys.length > 0 ? props.primaryKeys : [\"rowid\"];\n return (\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: props.databaseName, href: databasePath(props.databaseUrlName) },\n {\n label: props.tableName,\n href: databaseTablePath(props.databaseUrlName, props.tableName),\n },\n ]}\n title={pageTitle}\n timings={props.timings}\n >\n <div\n class=\"page-header\"\n style={`border-color: #${props.databaseColor}`}\n >\n <h1>{props.metadata?.title ?? props.tableName}</h1>\n </div>\n <h3>\n {rowSummaryForDisplay}\n {countAllLink ? <span> {countAllLink}</span> : null}\n </h3>\n <form\n class=\"filters\"\n action={databaseTablePath(props.databaseUrlName, props.tableName)}\n method=\"get\"\n >\n {supportsSearchForColumns(props.columnDetails) ? (\n <div class=\"search-row\">\n <label for=\"_search\">Search:</label>\n <input id=\"_search\" type=\"search\" name=\"_search\" value={props.search} />\n </div>\n ) : null}\n {props.filters.map((filter, index) => (\n <div class=\"filter-row\">\n <div class=\"select-wrapper\">\n <select name={`_filter_column_${index + 1}`}>\n <option value=\"\">- remove filter -</option>\n {filterColumns(props.allColumns).map((column) => (\n <option value={column} selected={column === filter.column}>\n {column}\n </option>\n ))}\n </select>\n </div>\n <div class=\"select-wrapper filter-op\">\n <select name={`_filter_op_${index + 1}`}>\n {FILTER_OPERATORS.map((op) => (\n <option value={op.value} selected={op.value === filter.op}>\n {op.label}\n </option>\n ))}\n </select>\n </div>\n <input\n type=\"text\"\n name={`_filter_value_${index + 1}`}\n class=\"filter-value\"\n value={filter.values[0] ?? \"\"}\n />\n </div>\n ))}\n <div class=\"filter-row\">\n <div class=\"select-wrapper\">\n <select name=\"_filter_column\">\n <option value=\"\">- column -</option>\n {filterColumns(props.allColumns).map((column) => (\n <option value={column}>{column}</option>\n ))}\n </select>\n </div>\n <div class=\"select-wrapper filter-op\">\n <select name=\"_filter_op\">\n {FILTER_OPERATORS.map((op) => (\n <option value={op.value}>{op.label}</option>\n ))}\n </select>\n </div>\n <input type=\"text\" name=\"_filter_value\" class=\"filter-value\" />\n </div>\n <div class=\"filter-row\">\n {props.sortableColumns.length > 0 ? (\n <Fragment>\n <div class=\"select-wrapper small-screen-only\">\n <select name=\"_sort\" id=\"sort_by\">\n <option value=\"\">Sort...</option>\n {props.sortableColumns.map((column) => (\n <option\n value={column}\n selected={props.sort?.column === column}\n >\n Sort by {column}\n </option>\n ))}\n </select>\n </div>\n <label class=\"sort_by_desc small-screen-only\">\n <input\n type=\"checkbox\"\n name=\"_sort_by_desc\"\n checked={Boolean(props.sort?.desc)}\n />{\" \"}\n descending\n </label>\n </Fragment>\n ) : null}\n {props.persistedParamsForFilters.map((param) => (\n <input type=\"hidden\" name={param.key} value={param.value} />\n ))}\n <input type=\"submit\" value=\"Apply\" />\n </div>\n </form>\n {props.allowExecuteSql && props.viewSql ? (\n <p>\n <a\n class=\"not-underlined\"\n title={props.viewSql.sql}\n href={buildSqlLink(\n props.databaseUrlName,\n props.viewSql.sql,\n props.viewSql.params,\n )}\n >\n &#x270e; <span class=\"underlined\">View and edit SQL</span>\n </a>\n </p>\n ) : null}\n <p class=\"export-links\">\n This data as{\" \"}\n <a\n href={toPathOnly(\n exportUrl(\n props.requestUrl,\n props.databaseUrlName,\n props.tableName,\n \"json\",\n { _shape: null, _labels: props.exportLabelsOn ? \"on\" : null },\n ),\n )}\n >\n json\n </a>\n ,{\" \"}\n <a\n href={toPathOnly(\n exportUrl(\n props.requestUrl,\n props.databaseUrlName,\n props.tableName,\n \"csv\",\n { _labels: props.exportLabelsOn ? \"on\" : null, _size: \"max\" },\n ),\n )}\n >\n CSV\n </a>{\" \"}\n (<a href=\"#export\">advanced</a>)\n </p>\n {props.filters.length > 0 || props.rawWhere.length > 0 ? (\n <ul class=\"bullets\">\n {props.filters.flatMap((filter) =>\n filter.values.map((value) => (\n <li>\n {filter.column} {formatOperator(filter.op)}\n {isNoArgOperator(filter.op) ? null : ` ${value}`}{\" \"}\n <a href={removeFilterUrl(props.requestUrl, filter, value)}>\n remove\n </a>\n </li>\n )),\n )}\n {props.rawWhere.map((clause) => (\n <li>\n where {clause}{\" \"}\n <a href={removeWhereUrl(props.requestUrl, clause)}>remove</a>\n </li>\n ))}\n </ul>\n ) : null}\n <div class=\"table-layout\">\n <div class=\"table-wrapper\">\n <table class=\"rows-and-columns\">\n <thead>\n <tr>\n {displayColumns.map((column) => {\n const detail =\n column === \"Link\" ? undefined : columnDetailByName.get(column);\n const columnDescription = props.metadata?.columns?.[column];\n return (\n <th\n class={`col-${toCssClass(column)}`}\n scope=\"col\"\n data-column={column}\n data-is-pk={props.primaryKeys.includes(column) ? \"1\" : \"0\"}\n data-column-type={detail?.type?.toLowerCase() ?? \"\"}\n data-column-not-null={detail?.notNull ? \"1\" : \"0\"}\n data-column-description={columnDescription ?? undefined}\n >\n {column !== \"Link\" && props.sortableColumns.includes(column) ? (\n <a\n href={sortUrl(\n props.requestUrl,\n column,\n props.sort,\n )}\n rel=\"nofollow\"\n >\n {column}\n {props.sort?.column === column\n ? props.sort.desc\n ? \" \u25BC\"\n : \" \u25B2\"\n : \"\"}\n </a>\n ) : (\n column\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {props.rows.map((row) => (\n <tr>\n {displayColumns.map((column, index) => (\n <td\n class={`col-${toCssClass(column)} type-${\n column === \"Link\"\n ? \"pk\"\n : index === 0 &&\n (props.primaryKeys.length > 0 || column === \"rowid\")\n ? \"pk\"\n : valueTypeClass(row[column])\n }${index === 0 ? \" row-link\" : \"\"}`}\n >\n {column === \"Link\" ? (\n <a\n href={`/${encodeURIComponent(\n props.databaseUrlName,\n )}/${encodeURIComponent(props.tableName)}/${encodeRowId(\n row,\n linkKeys,\n )}`}\n >\n {linkKeys.map((key) => formatValue(row[key])).join(\", \")}\n </a>\n ) : index === 0 &&\n (props.primaryKeys.length > 0 || column === \"rowid\") ? (\n <a\n href={`/${encodeURIComponent(\n props.databaseUrlName,\n )}/${encodeURIComponent(props.tableName)}/${encodeRowId(\n row,\n props.primaryKeys.length > 0\n ? props.primaryKeys\n : [\"rowid\"],\n )}`}\n >\n {formatValue(row[column])}\n </a>\n ) : (\n renderForeignKeyValue({\n databaseUrlName: props.databaseUrlName,\n column,\n labelSpecByColumn,\n value: row[column],\n })\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <FacetPanel facetResults={props.facetResults} />\n </div>\n {props.next !== null ? (\n <p>\n <a href={nextPageUrl(props.requestUrl, props.next)}>Next page</a>\n </p>\n ) : null}\n <div id=\"export\" class=\"advanced-export\">\n <h3>Advanced export</h3>\n <p>\n JSON shape:{\" \"}\n <a\n href={exportUrl(\n props.requestUrl,\n props.databaseUrlName,\n props.tableName,\n \"json\",\n { _shape: null, _labels: props.exportLabelsOn ? \"on\" : null },\n )}\n >\n default\n </a>\n ,{\" \"}\n <a\n href={exportUrl(\n props.requestUrl,\n props.databaseUrlName,\n props.tableName,\n \"json\",\n { _shape: \"array\", _labels: props.exportLabelsOn ? \"on\" : null },\n )}\n >\n array\n </a>\n ,{\" \"}\n <a\n href={exportUrl(\n props.requestUrl,\n props.databaseUrlName,\n props.tableName,\n \"json\",\n {\n _shape: \"array\",\n _nl: \"on\",\n _labels: props.exportLabelsOn ? \"on\" : null,\n },\n )}\n >\n newline-delimited\n </a>\n {props.primaryKeys.length > 0 ? (\n <Fragment>\n ,{\" \"}\n <a\n href={exportUrl(\n props.requestUrl,\n props.databaseUrlName,\n props.tableName,\n \"json\",\n { _shape: \"object\", _labels: props.exportLabelsOn ? \"on\" : null },\n )}\n >\n object\n </a>\n </Fragment>\n ) : null}\n </p>\n <form\n class=\"core\"\n action={exportUrl(\n props.requestUrl,\n props.databaseUrlName,\n props.tableName,\n \"csv\",\n { _labels: null, _size: null, _stream: null, _dl: null },\n )}\n method=\"get\"\n >\n <p>\n CSV options:{\" \"}\n <label>\n <input type=\"checkbox\" name=\"_dl\" /> download file\n </label>\n {props.expandableColumns.length > 0 ? (\n <label>\n <input\n type=\"checkbox\"\n name=\"_labels\"\n checked={props.exportLabelsChecked}\n />{\" \"}\n expand labels\n </label>\n ) : null}\n {props.next !== null ? (\n <label>\n <input type=\"checkbox\" name=\"_stream\" /> stream all rows\n </label>\n ) : null}\n <input type=\"submit\" value=\"Export CSV\" />\n {props.exportParams.map((param) => (\n <input type=\"hidden\" name={param.key} value={param.value} />\n ))}\n </p>\n </form>\n </div>\n {props.tableDefinition ? (\n <pre class=\"wrapped-sql\">{props.tableDefinition}</pre>\n ) : null}\n {props.viewDefinition ? (\n <pre class=\"wrapped-sql\">{props.viewDefinition}</pre>\n ) : null}\n </PageShell>\n );\n}\n\ntype RowViewProps = {\n databaseName: string;\n databaseUrlName: string;\n tableName: string;\n row: Record<string, unknown>;\n rowId: string;\n columns: string[];\n columnDetails: { name: string; type: string; notNull: boolean }[];\n primaryKeys: string[];\n databaseColor: string;\n metadata: TableMetadata | null;\n foreignKeyTables: {\n otherTable: string;\n column: string;\n otherColumn: string;\n count: number;\n link: string;\n }[];\n labelSpecs: ReturnType<typeof resolveLabelExpansion>[\"specs\"];\n timings?: TimingEntry[];\n};\n\nfunction RowView(props: RowViewProps) {\n const labelSpecByColumn = new Map(\n props.labelSpecs.map((spec) => [spec.column, spec]),\n );\n const columnDetailByName = new Map(\n props.columnDetails.map((detail) => [detail.name, detail]),\n );\n const rowHeading = formatRowHeading({\n tableName: props.tableName,\n primaryKeys: props.primaryKeys,\n row: props.row,\n rowId: props.rowId,\n });\n return (\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: props.databaseName, href: databasePath(props.databaseUrlName) },\n {\n label: props.tableName,\n href: databaseTablePath(props.databaseUrlName, props.tableName),\n },\n ]}\n title={`${props.databaseName}: ${props.tableName}`}\n timings={props.timings}\n >\n <div\n class=\"page-header\"\n style={`border-color: #${props.databaseColor}`}\n >\n <h1>{rowHeading}</h1>\n </div>\n <div class=\"table-wrapper\">\n <table class=\"rows-and-columns\">\n <thead>\n <tr>\n {props.columns.map((column) => {\n const detail = columnDetailByName.get(column);\n const columnDescription = props.metadata?.columns?.[column];\n return (\n <th\n class={`col-${toCssClass(column)}`}\n scope=\"col\"\n data-column={column}\n data-is-pk={props.primaryKeys.includes(column) ? \"1\" : \"0\"}\n data-column-type={detail?.type?.toLowerCase() ?? \"\"}\n data-column-not-null={detail?.notNull ? \"1\" : \"0\"}\n data-column-description={columnDescription ?? undefined}\n >\n {column}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n <tr>\n {props.columns.map((column) => (\n <td\n class={`col-${toCssClass(column)} type-${valueTypeClass(\n props.row[column],\n )}`}\n >\n {renderForeignKeyValue({\n databaseUrlName: props.databaseUrlName,\n column,\n labelSpecByColumn,\n value: props.row[column],\n })}\n </td>\n ))}\n </tr>\n </tbody>\n </table>\n </div>\n {props.foreignKeyTables.length > 0 ? (\n <section>\n <h2>Links from other tables</h2>\n <ul>\n {props.foreignKeyTables.map((entry) => (\n <li>\n <a href={entry.link}>\n {formatCount(entry.count)} row{entry.count === 1 ? \"\" : \"s\"}\n </a>{\" \"}\n from {entry.otherColumn} in {entry.otherTable}\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n </PageShell>\n );\n}\n\nasync function renderCannedQuery(\n c: Context,\n registry: DatabaseRegistry,\n databaseName: string,\n databaseUrlName: string,\n queryName: string,\n canned: {\n sql: string;\n title?: string;\n description?: string;\n description_html?: string;\n },\n auth: AuthManager,\n): Promise<Response> {\n const actor = auth.actorFromRequest(c.req.raw);\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"database\", database: databaseName },\n actor,\n );\n if (!allowed) {\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n { label: queryName, href: databaseQueryPathName(databaseUrlName, queryName) },\n ]}\n title=\"Forbidden\"\n >\n <ErrorMessage message=\"execute-sql is not allowed.\" />\n </PageShell>,\n 403,\n );\n }\n const sql = canned.sql;\n const client = await registry.openClient(databaseName);\n try {\n const timings = new Timings();\n const params = collectQueryParams(c.req.url);\n const namedParams = extractNamedParams(sql);\n const exportParams = buildQueryExportParams({ params });\n const exportJsonUrl = buildQueryExportUrl(\n databaseQueryJsonPath(databaseUrlName, queryName),\n exportParams,\n );\n const exportCsvUrl = buildQueryExportUrl(\n databaseQueryCsvPath(databaseUrlName, queryName),\n exportParams,\n );\n let result: Awaited<ReturnType<typeof executeSelectQuery>> | null = null;\n let error: string | null = null;\n try {\n result = await timings.time(\"sql\", () =>\n executeSelectQuery({ client, sql, params }),\n );\n } catch (err) {\n error = err instanceof Error ? err.message : String(err);\n }\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n { label: queryName, href: databaseQueryPathName(databaseUrlName, queryName) },\n ]}\n title={canned.title ?? queryName}\n timings={timings.isEmpty() ? undefined : timings.toJSON()}\n >\n <div class=\"page-header\">\n <h1>{canned.title ?? queryName}</h1>\n </div>\n {canned.description_html ? (\n <div\n class=\"metadata-description\"\n dangerouslySetInnerHTML={{ __html: canned.description_html }}\n />\n ) : canned.description ? (\n <p class=\"metadata-description\">{canned.description}</p>\n ) : null}\n <form\n class=\"sql core\"\n method=\"get\"\n action={databaseQueryPathName(databaseUrlName, queryName)}\n >\n <h3>\n Custom SQL query\n {result ? ` returning ${formatCount(result.rows.length)} row${result.rows.length === 1 ? \"\" : \"s\"}` : \"\"}\n {result?.truncated ? \" (truncated)\" : \"\"}\n </h3>\n {namedParams.length > 0 ? (\n <div class=\"query-params\">\n <h3>Query parameters</h3>\n {namedParams.map((name, index) => (\n <p>\n <label for={`qp${index + 1}`}>{name}</label>{\" \"}\n <input\n type=\"text\"\n id={`qp${index + 1}`}\n name={name}\n value={params[name] ?? \"\"}\n />\n </p>\n ))}\n </div>\n ) : null}\n <p>\n <input type=\"submit\" value=\"Run SQL\" />\n </p>\n </form>\n {result ? (\n <p class=\"export-links\">\n This data as{\" \"}\n <a href={exportJsonUrl}>json</a>\n ,{\" \"}\n <a href={exportCsvUrl}>CSV</a>\n </p>\n ) : null}\n {error ? <p class=\"error\">{error}</p> : null}\n {result ? (\n <div class=\"table-wrapper\">\n <table class=\"rows-and-columns\">\n <thead>\n <tr>\n {result.columns.map((column) => (\n <th\n class={`col-${toCssClass(column)}`}\n scope=\"col\"\n data-column={column}\n data-is-pk=\"0\"\n data-column-type=\"\"\n data-column-not-null=\"0\"\n >\n {column}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {result.rows.map((row) => (\n <tr>\n {result.columns.map((column) => (\n <td\n class={`col-${toCssClass(column)} type-${valueTypeClass(\n row[column],\n )}`}\n >\n {renderQueryCell(row[column])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : null}\n </PageShell>,\n );\n } finally {\n client.close();\n }\n}\n\nasync function renderQueryEditor(\n c: Context,\n registry: DatabaseRegistry,\n databaseName: string,\n databaseUrlName: string,\n auth: AuthManager,\n): Promise<Response> {\n const actor = auth.actorFromRequest(c.req.raw);\n const allowed = auth.allowed(\n \"execute-sql\",\n { type: \"database\", database: databaseName },\n actor,\n );\n if (!allowed) {\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n ]}\n title=\"Forbidden\"\n >\n <ErrorMessage message=\"execute-sql is not allowed.\" />\n </PageShell>,\n 403,\n );\n }\n const sql = c.req.query(\"sql\") ?? \"\";\n const sqlRows = sqlTextRows(sql, 6);\n const url = new URL(c.req.url);\n const hideSql = url.searchParams.get(\"_hide_sql\") === \"1\";\n const showHideUrl = new URL(url.toString());\n if (hideSql) {\n showHideUrl.searchParams.delete(\"_hide_sql\");\n } else {\n showHideUrl.searchParams.set(\"_hide_sql\", \"1\");\n }\n const showHideLink = `${showHideUrl.pathname}${showHideUrl.search}${showHideUrl.hash}`;\n const client = await registry.openClient(databaseName);\n try {\n const timings = new Timings();\n const params = collectQueryParams(c.req.url);\n const namedParams = extractNamedParams(sql);\n const schema = await registry.getSchema(databaseName);\n const editorSchema = buildEditorSchema(schema);\n const editorSchemaJson = JSON.stringify(editorSchema);\n const metadata = registry.getDatabaseMetadata(databaseName);\n const databaseColor = await registry.getDatabaseColor(databaseName);\n const exportParams = buildQueryExportParams({ sql, params });\n const exportJsonUrl = buildQueryExportUrl(\n databaseJsonPath(databaseUrlName),\n exportParams,\n );\n const exportCsvUrl = buildQueryExportUrl(\n databaseCsvPath(databaseUrlName),\n exportParams,\n );\n let result: Awaited<ReturnType<typeof executeSelectQuery>> | null = null;\n let error: string | null = null;\n if (sql.trim()) {\n try {\n result = await timings.time(\"sql\", () =>\n executeSelectQuery({ client, sql, params }),\n );\n } catch (err) {\n error = err instanceof Error ? err.message : String(err);\n }\n }\n return renderPage(\n c,\n <PageShell\n crumbs={[\n { label: \"home\", href: \"/\" },\n { label: databaseName, href: databasePath(databaseUrlName) },\n ]}\n title=\"SQL\"\n timings={timings.isEmpty() ? undefined : timings.toJSON()}\n >\n <div\n class=\"page-header\"\n style={`border-color: #${databaseColor}`}\n >\n <h1>{metadata?.title ?? databaseName}</h1>\n </div>\n <form\n class=\"sql core\"\n method=\"get\"\n action={databasePath(databaseUrlName)}\n >\n <h3>\n Custom SQL query\n {result ? ` returning ${formatCount(result.rows.length)} row${result.rows.length === 1 ? \"\" : \"s\"}` : \"\"}\n {result?.truncated ? \" (truncated)\" : \"\"}{\" \"}\n <span class=\"show-hide-sql\">\n (<a href={showHideLink}>{hideSql ? \"show\" : \"hide\"}</a>)\n </span>\n </h3>\n {hideSql ? (\n <input type=\"hidden\" name=\"sql\" value={sql} />\n ) : (\n <p>\n <textarea\n id=\"sql-editor\"\n name=\"sql\"\n rows={sqlRows}\n style={`height: ${sqlRows}em`}\n >\n {sql}\n </textarea>\n </p>\n )}\n {namedParams.length > 0 ? (\n <div class=\"query-params\">\n <h3>Query parameters</h3>\n {namedParams.map((name, index) => (\n <p>\n <label for={`qp${index + 1}`}>{name}</label>{\" \"}\n <input\n type=\"text\"\n id={`qp${index + 1}`}\n name={name}\n value={params[name] ?? \"\"}\n />\n </p>\n ))}\n </div>\n ) : null}\n <p>\n {!hideSql ? (\n <Fragment><button id=\"sql-format\" type=\"button\" hidden>Format SQL</button>{\" \"}</Fragment>\n ) : null}\n <input type=\"submit\" value=\"Run SQL\" />\n {hideSql ? <input type=\"hidden\" name=\"_hide_sql\" value=\"1\" /> : null}\n </p>\n </form>\n {result ? (\n <p class=\"export-links\">\n This data as{\" \"}\n <a href={exportJsonUrl}>json</a>\n ,{\" \"}\n <a href={exportCsvUrl}>CSV</a>\n </p>\n ) : null}\n {error ? <p class=\"error\">{error}</p> : null}\n {result ? (\n <div class=\"table-wrapper\">\n <table class=\"rows-and-columns\">\n <thead>\n <tr>\n {result.columns.map((column) => (\n <th\n class={`col-${toCssClass(column)}`}\n scope=\"col\"\n data-column={column}\n data-is-pk=\"0\"\n data-column-type=\"\"\n data-column-not-null=\"0\"\n >\n {column}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {result.rows.map((row) => (\n <tr>\n {result.columns.map((column) => (\n <td\n class={`col-${toCssClass(column)} type-${valueTypeClass(\n row[column],\n )}`}\n >\n {renderQueryCell(row[column])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : null}\n <style>\n {`.cm-editor {\n resize: both;\n overflow: hidden;\n width: 80%;\n border: 1px solid #ddd;\n}\n.cm-completionIcon {\n box-sizing: content-box;\n}`}\n </style>\n <script src=\"/-/static/sql-formatter-2.3.3.min.js\" defer></script>\n <script src=\"/-/static/cm-editor-6.0.1.bundle.js\"></script>\n <script\n id=\"sql-schema\"\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: editorSchemaJson }}\n ></script>\n <script\n dangerouslySetInnerHTML={{\n __html: `window.addEventListener(\"DOMContentLoaded\", () => {\n const schemaEl = document.getElementById(\"sql-schema\");\n const schema = schemaEl ? JSON.parse(schemaEl.textContent || \"{}\") : {};\n const sqlFormat = document.querySelector(\"button#sql-format\");\n const readOnly = document.querySelector(\"pre#sql-query\");\n const sqlInput = document.querySelector(\"textarea#sql-editor\");\n if (sqlFormat && !readOnly) {\n sqlFormat.hidden = false;\n }\n if (sqlInput && window.cm && typeof window.cm.editorFromTextArea === \"function\") {\n const editor = (window.editor = window.cm.editorFromTextArea(sqlInput, {\n schema,\n }));\n if (sqlFormat && window.sqlFormatter) {\n sqlFormat.addEventListener(\"click\", () => {\n const formatted = window.sqlFormatter.format(editor.state.doc.toString());\n editor.dispatch({\n changes: {\n from: 0,\n to: editor.state.doc.length,\n insert: formatted,\n },\n });\n });\n }\n }\n if (sqlFormat && readOnly && window.sqlFormatter) {\n const formatted = window.sqlFormatter.format(readOnly.innerHTML);\n if (formatted !== readOnly.innerHTML) {\n sqlFormat.hidden = false;\n sqlFormat.addEventListener(\"click\", () => {\n readOnly.innerHTML = formatted;\n });\n }\n }\n});`,\n }}\n ></script>\n </PageShell>,\n );\n } finally {\n client.close();\n }\n}\n\nfunction ErrorMessage(props: { message: string }) {\n return (\n <section>\n <p class=\"error\">{props.message}</p>\n </section>\n );\n}\n\nfunction formatValue(value: unknown): string {\n if (value == null) {\n return \"null\";\n }\n if (isExpandedLabel(value)) {\n return String(value.label);\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\nfunction renderQueryCell(value: unknown): string | JSX.Element {\n if (isHttpUrl(value)) {\n const url = String(value);\n return (\n <a href={url} rel=\"nofollow\">\n {truncateUrl(url, URL_TRUNCATE_AT)}\n </a>\n );\n }\n return formatValue(value);\n}\n\nfunction isHttpUrl(value: unknown): boolean {\n return typeof value === \"string\" && /^https?:\\/\\//i.test(value);\n}\n\nfunction truncateUrl(url: string, length: number): string {\n if (!length || url.length <= length) {\n return url;\n }\n const bits = url.split(\".\");\n const ext = bits.length > 1 ? bits[bits.length - 1] : \"\";\n if (ext && ext.length <= 4 && !ext.includes(\"/\")) {\n const rest = url.slice(0, url.length - (ext.length + 1));\n return `${rest.slice(0, Math.max(0, length - 1 - ext.length))}\u2026.${ext}`;\n }\n return `${url.slice(0, Math.max(0, length - 1))}\u2026`;\n}\n\nfunction buildQueryExportParams(input: {\n sql?: string;\n params: Record<string, string | null>;\n}): string {\n const search = new URLSearchParams();\n if (input.sql !== undefined) {\n search.set(\"sql\", input.sql);\n }\n for (const [key, value] of Object.entries(input.params)) {\n if (value == null) {\n continue;\n }\n search.set(key, value);\n }\n return search.toString();\n}\n\nfunction buildQueryExportUrl(base: string, params: string): string {\n if (!params) {\n return base;\n }\n return `${base}?${params}`;\n}\n\nfunction escapeSqliteIdentifier(value: string): string {\n const escaped = value.replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n}\n\nfunction valueTypeClass(value: unknown): string {\n const raw = isExpandedLabel(value) ? value.value : value;\n if (raw == null) {\n return \"none\";\n }\n if (typeof raw === \"number\") {\n return Number.isInteger(raw) ? \"int\" : \"float\";\n }\n if (typeof raw === \"string\") {\n return \"str\";\n }\n if (typeof raw === \"boolean\") {\n return \"bool\";\n }\n if (Array.isArray(raw)) {\n return \"array\";\n }\n return \"json\";\n}\n\nfunction formatRowSummary(input: {\n count: number;\n filters: ReturnType<typeof parseFiltersFromSearchParams>;\n sort: ReturnType<typeof resolveSort>;\n displayLimitAsGreater: boolean;\n}): string {\n const parts: string[] = [];\n parts.push(formatRowSummaryCount(input.count, input.displayLimitAsGreater));\n const filterText = formatFilterSummary(input.filters);\n if (filterText) {\n parts.push(`where ${filterText}`);\n }\n if (input.sort?.column) {\n parts.push(\n `sorted by ${input.sort.column}${input.sort.desc ? \" descending\" : \"\"}`,\n );\n }\n return parts.join(\" \");\n}\n\nfunction formatRowSummaryCount(count: number, displayLimitAsGreater: boolean): string {\n if (displayLimitAsGreater && count === COUNT_LIMIT + 1) {\n return `>${formatCount(COUNT_LIMIT)} rows`;\n }\n return `${formatCount(count)} row${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction formatFilterSummary(\n filters: ReturnType<typeof parseFiltersFromSearchParams>,\n): string {\n const clauses: string[] = [];\n for (const filter of filters) {\n const values = filter.values.length > 0 ? filter.values : [\"\"];\n for (const value of values) {\n const clause = formatFilterClause(filter.column, filter.op, value);\n if (clause) {\n clauses.push(clause);\n }\n }\n }\n return clauses.join(\" and \");\n}\n\nfunction formatFilterClause(\n column: string,\n op: string,\n rawValue: string,\n): string {\n switch (op) {\n case \"exact\":\n return `${column} = ${formatFilterValue(rawValue)}`;\n case \"not\":\n return `${column} != ${formatFilterValue(rawValue)}`;\n case \"contains\":\n return `${column} contains ${formatFilterValue(rawValue)}`;\n case \"notcontains\":\n return `${column} does not contain ${formatFilterValue(rawValue)}`;\n case \"endswith\":\n return `${column} ends with ${formatFilterValue(rawValue)}`;\n case \"startswith\":\n return `${column} starts with ${formatFilterValue(rawValue)}`;\n case \"gt\":\n return `${column} > ${formatFilterValue(rawValue)}`;\n case \"gte\":\n return `${column} >= ${formatFilterValue(rawValue)}`;\n case \"lt\":\n return `${column} < ${formatFilterValue(rawValue)}`;\n case \"lte\":\n return `${column} <= ${formatFilterValue(rawValue)}`;\n case \"like\":\n return `${column} like ${formatFilterValue(rawValue)}`;\n case \"notlike\":\n return `${column} not like ${formatFilterValue(rawValue)}`;\n case \"glob\":\n return `${column} glob ${formatFilterValue(rawValue)}`;\n case \"in\":\n return `${column} in ${formatFilterValue(rawValue)}`;\n case \"notin\":\n return `${column} not in ${formatFilterValue(rawValue)}`;\n case \"arraycontains\":\n return `${column} contains ${formatFilterValue(rawValue)}`;\n case \"arraynotcontains\":\n return `${column} does not contain ${formatFilterValue(rawValue)}`;\n case \"date\":\n return `${column} date ${formatFilterValue(rawValue)}`;\n case \"isnull\":\n return `${column} is null`;\n case \"notnull\":\n return `${column} is not null`;\n case \"isblank\":\n return `${column} is blank`;\n case \"notblank\":\n return `${column} is not blank`;\n default:\n return \"\";\n }\n}\n\nfunction formatFilterValue(value: string): string {\n if (value === \"\") {\n return '\"\"';\n }\n const num = Number(value);\n if (!Number.isNaN(num) && value.trim() !== \"\") {\n return value;\n }\n return JSON.stringify(value);\n}\n\nfunction supportsSearchForColumns(\n columns: { name: string; type: string; notNull: boolean }[],\n): boolean {\n return columns.some((column) => isTextType(column.type));\n}\n\nfunction filterColumns(columns: string[]): string[] {\n const deduped = new Set(columns);\n if (!deduped.has(\"rowid\")) {\n return [\"rowid\", ...columns];\n }\n return columns;\n}\n\nfunction databasePath(databaseUrlName: string): string {\n return `/${encodeURIComponent(databaseUrlName)}`;\n}\n\nfunction databaseJsonPath(databaseUrlName: string): string {\n return `${databasePath(databaseUrlName)}.json`;\n}\n\nfunction databaseCsvPath(databaseUrlName: string): string {\n return `${databasePath(databaseUrlName)}.csv`;\n}\n\nfunction databaseQueryPath(databaseUrlName: string): string {\n return `${databasePath(databaseUrlName)}/-/query`;\n}\n\nfunction databaseQueryPathName(\n databaseUrlName: string,\n queryName: string,\n): string {\n return `${databasePath(databaseUrlName)}/${encodeURIComponent(queryName)}`;\n}\n\nfunction databaseQueryJsonPath(\n databaseUrlName: string,\n queryName: string,\n): string {\n return `${databaseQueryPathName(databaseUrlName, queryName)}.json`;\n}\n\nfunction databaseQueryCsvPath(\n databaseUrlName: string,\n queryName: string,\n): string {\n return `${databaseQueryPathName(databaseUrlName, queryName)}.csv`;\n}\n\nfunction databaseTablePath(databaseUrlName: string, tableName: string): string {\n return `${databasePath(databaseUrlName)}/${encodeURIComponent(tableName)}`;\n}\n\nfunction databaseTableJsonPath(\n databaseUrlName: string,\n tableName: string,\n): string {\n return `${databaseTablePath(databaseUrlName, tableName)}.json`;\n}\n\nfunction databaseRowPath(\n databaseUrlName: string,\n tableName: string,\n rowId: string,\n): string {\n return `${databaseTablePath(databaseUrlName, tableName)}/${encodeURIComponent(\n rowId,\n )}`;\n}\n\nfunction databaseRowJsonPath(\n databaseUrlName: string,\n tableName: string,\n rowId: string,\n): string {\n return `${databaseRowPath(databaseUrlName, tableName, rowId)}.json`;\n}\n\nfunction buildSqlLink(\n databaseUrlName: string,\n sql: string,\n params: Record<string, string>,\n): string {\n const search = new URLSearchParams();\n search.set(\"sql\", sql);\n for (const [key, value] of Object.entries(params)) {\n search.set(key, value);\n }\n return `${databasePath(databaseUrlName)}?${search.toString()}`;\n}\n\nfunction extractNamedParams(sql: string): string[] {\n const names: string[] = [];\n const seen = new Set<string>();\n const regex = /:([a-zA-Z0-9_]+)/g;\n let match: RegExpExecArray | null = null;\n while ((match = regex.exec(sql)) !== null) {\n const name = match[1];\n if (!name || seen.has(name)) {\n continue;\n }\n seen.add(name);\n names.push(name);\n }\n return names;\n}\n\nfunction sqlTextRows(sql: string, minRows: number): number {\n const rows = sql.trim().length > 0 ? sql.split(\"\\n\").length + 2 : minRows;\n return Math.max(minRows, rows);\n}\n\nfunction buildEditorSchema(schema: DatabaseSchema): Record<string, string[]> {\n const editorSchema: Record<string, string[]> = {};\n for (const table of Object.values(schema.tables)) {\n editorSchema[table.name] = table.columns.map((column) => column.name);\n }\n return editorSchema;\n}\n\nfunction toPathOnly(url: string): string {\n const parsed = new URL(url);\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n}\n\nfunction isTextType(type: string): boolean {\n const normalized = type.toLowerCase();\n return (\n normalized.includes(\"char\") ||\n normalized.includes(\"text\") ||\n normalized.includes(\"clob\")\n );\n}\n\nfunction formatRowHeading(input: {\n tableName: string;\n primaryKeys: string[];\n row: Record<string, unknown>;\n rowId: string;\n}): string {\n const values =\n input.primaryKeys.length > 0\n ? input.primaryKeys.map((key) => formatRowHeadingValue(input.row[key]))\n : input.rowId.split(\",\");\n return `${input.tableName}: ${values.join(\", \")}`;\n}\n\nfunction formatRowHeadingValue(value: unknown): string {\n const raw = isExpandedLabel(value) ? value.value : value;\n if (raw == null) {\n return \"null\";\n }\n return String(raw);\n}\n\nfunction responsiveTableStyle(columns: string[]): string {\n const lines = columns.map(\n (column, index) =>\n ` .rows-and-columns td:nth-of-type(${index + 1}):before { content: \"${escapeCssString(\n column,\n )}\"; }`,\n );\n return `@media only screen and (max-width: 576px) {\\n${lines.join(\"\\n\")}\\n}`;\n}\n\nfunction escapeCssString(value: string): string {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \" \");\n}\n\nconst INDEX_TRUNCATE_AT = 5;\nconst URL_TRUNCATE_AT = 50;\n\nasync function buildIndexDatabaseInfo(\n registry: DatabaseRegistry,\n databaseName: string,\n databaseUrlName: string,\n): Promise<{\n name: string;\n urlName: string;\n tablesCount: number;\n tablesAndViewsTruncated: string[];\n tablesAndViewsMore: boolean;\n color: string;\n}> {\n const schema = await registry.getSchema(databaseName);\n const tables = Object.values(schema.tables).filter((table) => table.type !== \"view\");\n const incomingCounts = collectIncomingForeignKeyCounts(schema);\n const isMutable = registry.getDatabase(databaseName)?.mutable ?? false;\n const hasInspectCounts =\n !isMutable &&\n tables.every(\n (table) => registry.getInspectTableCount(databaseName, table.name) !== null,\n );\n const countsEnabled = hasInspectCounts\n ? true\n : await shouldComputeTableCounts(registry, databaseName);\n const client =\n !hasInspectCounts && countsEnabled ? await registry.openClient(databaseName) : null;\n try {\n const tableRows = await Promise.all(\n tables.map(async (table) => {\n const inspectCount = registry.getInspectTableCount(databaseName, table.name);\n const count =\n inspectCount ??\n (countsEnabled && client ? await countTableRows(client, table.name) : null);\n const outgoing = filterSimpleForeignKeys(table.foreignKeys).length;\n const incoming = incomingCounts.get(table.name) ?? 0;\n return {\n name: table.name,\n count,\n relationships: incoming + outgoing,\n };\n }),\n );\n const sorted = tableRows\n .map((row) => ({\n ...row,\n relationships: countsEnabled ? 0 : row.relationships,\n }))\n .sort(\n (a, b) =>\n b.relationships - a.relationships ||\n (Number(b.count ?? 0) - Number(a.count ?? 0)) ||\n b.name.localeCompare(a.name),\n )\n .slice(0, INDEX_TRUNCATE_AT)\n .map((table) => table.name);\n return {\n name: databaseName,\n urlName: databaseUrlName,\n tablesCount: tables.length,\n tablesAndViewsTruncated: sorted,\n tablesAndViewsMore: tables.length > INDEX_TRUNCATE_AT,\n color: await registry.getDatabaseColor(databaseName),\n };\n } finally {\n client?.close();\n }\n}\n\nfunction collectIncomingForeignKeyCounts(schema: DatabaseSchema): Map<string, number> {\n const counts = new Map<string, number>();\n for (const table of Object.values(schema.tables)) {\n const outgoing = filterSimpleForeignKeys(table.foreignKeys);\n for (const fk of outgoing) {\n counts.set(fk.table, (counts.get(fk.table) ?? 0) + 1);\n }\n }\n return counts;\n}\n\nfunction filterSimpleForeignKeys(\n foreignKeys: DatabaseSchema[\"tables\"][string][\"foreignKeys\"],\n): DatabaseSchema[\"tables\"][string][\"foreignKeys\"] {\n const idCounts = new Map<number, number>();\n for (const fk of foreignKeys) {\n idCounts.set(fk.id, (idCounts.get(fk.id) ?? 0) + 1);\n }\n return foreignKeys.filter((fk) => idCounts.get(fk.id) === 1);\n}\n\nasync function shouldComputeTableCounts(\n registry: DatabaseRegistry,\n databaseName: string,\n): Promise<boolean> {\n const config = registry.getDatabase(databaseName);\n if (!config) {\n return false;\n }\n try {\n const stats = await stat(config.filename);\n return stats.size < 100 * 1024 * 1024;\n } catch {\n return false;\n }\n}\n\nasync function countTableRows(\n client: SqliteClient,\n tableName: string,\n): Promise<number> {\n try {\n const { rows } = await client.execute(\n `select count(*) as count from (select * from ${escapeIdentifier(\n tableName,\n )} limit 10001)`,\n );\n const value = rows[0]?.count;\n const parsed = typeof value === \"number\" ? value : Number(value ?? 0);\n return Number.isNaN(parsed) ? 0 : parsed;\n } catch {\n return 0;\n }\n}\n\nasync function fetchIncomingForeignKeyTables(\n client: SqliteClient,\n schema: DatabaseSchema,\n databaseUrlName: string,\n tableName: string,\n row: Record<string, unknown>,\n): Promise<\n Array<{\n otherTable: string;\n column: string;\n otherColumn: string;\n count: number;\n link: string;\n }>\n> {\n const table = schema.tables[tableName];\n if (!table) {\n return [];\n }\n const primaryKeys =\n table.primaryKeys.length > 0 ? table.primaryKeys : [\"rowid\"];\n if (primaryKeys.length !== 1) {\n return [];\n }\n const pk = primaryKeys[0];\n if (!pk) {\n return [];\n }\n const pkValue = row[pk];\n if (pkValue == null) {\n return [];\n }\n const incoming = getIncomingForeignKeys(schema, tableName);\n if (incoming.length === 0) {\n return [];\n }\n const selectSql = incoming\n .map(\n (fk) =>\n `(select count(*) from ${escapeIdentifier(\n fk.otherTable,\n )} where ${escapeIdentifier(fk.otherColumn)} = ?)`,\n )\n .join(\", \");\n try {\n const { rows, columns } = await client.execute(\n `select ${selectSql}`,\n incoming.map(() => pkValue),\n );\n const firstRow = rows[0];\n const rowValues = firstRow\n ? columns.map((column) => firstRow[column])\n : [];\n return incoming.map((fk, index) => {\n const countValue = Number(rowValues[index] ?? 0);\n const key = fk.otherColumn.startsWith(\"_\")\n ? `${fk.otherColumn}__exact`\n : fk.otherColumn;\n const link = `${databaseTablePath(\n databaseUrlName,\n fk.otherTable,\n )}?${encodeURIComponent(key)}=${encodeURIComponent(String(pkValue))}`;\n return {\n ...fk,\n count: Number.isNaN(countValue) ? 0 : countValue,\n link,\n };\n });\n } catch {\n return [];\n }\n}\n\nfunction renderForeignKeyValue(props: {\n databaseUrlName: string;\n column: string;\n labelSpecByColumn: Map<\n string,\n ReturnType<typeof resolveLabelExpansion>[\"specs\"][number]\n >;\n value: unknown;\n}): string | JSX.Element {\n const spec = props.labelSpecByColumn.get(props.column);\n if (!spec) {\n if (isHttpUrl(props.value)) {\n const url = String(props.value);\n return (\n <a href={url} rel=\"nofollow\">\n {truncateUrl(url, URL_TRUNCATE_AT)}\n </a>\n );\n }\n return formatValue(props.value);\n }\n if (props.value == null) {\n return formatValue(props.value);\n }\n const rawValue = isExpandedLabel(props.value)\n ? props.value.value\n : props.value;\n if (rawValue == null) {\n return formatValue(props.value);\n }\n const href = databaseRowPath(\n props.databaseUrlName,\n spec.otherTable,\n String(rawValue),\n );\n if (isExpandedLabel(props.value)) {\n return (\n <span>\n <a href={href}>{String(props.value.label)}</a>\n {\"\\u00A0\"}\n <em>{String(props.value.value)}</em>\n </span>\n );\n }\n return <a href={href}>{formatValue(props.value)}</a>;\n}\n\nfunction MetadataDescription(props: {\n metadata: Metadata | DatabaseMetadata | TableMetadata | null;\n}) {\n const metadata = props.metadata;\n if (!metadata) {\n return null;\n }\n if (metadata.description_html) {\n return (\n <div\n dangerouslySetInnerHTML={{ __html: metadata.description_html }}\n class=\"metadata-description\"\n />\n );\n }\n if (metadata.description) {\n return <p class=\"metadata-description\">{metadata.description}</p>;\n }\n return null;\n}\n\nfunction encodeRowId(\n row: Record<string, unknown>,\n primaryKeys: string[],\n): string {\n return primaryKeys\n .map((key) => {\n const value = row[key];\n if (isExpandedLabel(value)) {\n return encodeURIComponent(String(value.value));\n }\n return encodeURIComponent(String(value));\n })\n .join(\",\");\n}\n\nfunction isExpandedLabel(\n value: unknown,\n): value is { value: unknown; label: unknown } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"value\" in value &&\n \"label\" in value\n );\n}\n\nfunction FacetPanel(props: {\n facetResults: Awaited<ReturnType<typeof computeFacetResults>> | null;\n}) {\n if (!props.facetResults) {\n return null;\n }\n const facets = Object.values(props.facetResults.results);\n if (facets.length === 0) {\n return null;\n }\n return (\n <aside class=\"facets\">\n <h2>Facets</h2>\n {facets.map((facet) => (\n <div class=\"facet facet-info\" data-column={facet.name}>\n <h3 class=\"facet-title\">{facet.name}</h3>\n <ul class=\"facet-values\">\n {facet.results.map((result) => (\n <li>\n <a href={result.toggle_url} class={result.selected ? \"selected\" : \"\"}>\n {result.label} ({result.count})\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </aside>\n );\n}\n\nfunction getMetadataFacets(\n registry: DatabaseRegistry,\n databaseName: string,\n tableName: string,\n): string[] {\n const tableMetadata = registry.getTableMetadata(databaseName, tableName);\n const facets = tableMetadata?.facets;\n if (!Array.isArray(facets)) {\n return [];\n }\n return facets.filter((facet): facet is string => typeof facet === \"string\");\n}\n\ntype Crumb = { label: string; href: string };\n\nfunction PageShell(props: {\n title: string;\n crumbs: Crumb[];\n children: unknown;\n timings?: TimingEntry[];\n}) {\n const timingEntries = props.timings ?? [];\n const timingSummary = buildTimingSummary(timingEntries);\n return (\n <Fragment>\n <div class=\"not-footer\">\n <header class=\"hd\">\n <nav>\n <p class=\"crumbs\">\n {props.crumbs.map((crumb, index) => (\n <Fragment>\n <a href={crumb.href}>{crumb.label}</a>\n {index < props.crumbs.length - 1 ? \" / \" : null}\n </Fragment>\n ))}\n </p>\n </nav>\n </header>\n <section class=\"content\">\n {props.children}\n </section>\n </div>\n <footer class=\"ft\">\n <p>\n datasette-ts\n {timingSummary ? ` \u00B7 ${timingSummary}` : \"\"}\n </p>\n </footer>\n </Fragment>\n );\n}\n\nfunction buildTimingSummary(entries: TimingEntry[]): string | null {\n if (entries.length === 0) {\n return null;\n }\n const total = entries.reduce((sum, entry) => sum + entry.time_ms, 0);\n return `Queries took ${formatTimingMs(total)}`;\n}\n\nfunction formatTimingMs(value: number): string {\n if (value < 1) {\n return `${value.toFixed(3)}ms`;\n }\n if (value < 1000) {\n return `${value.toFixed(1)}ms`;\n }\n return `${(value / 1000).toFixed(2)}s`;\n}\n\nfunction collectQueryParams(url: string): Record<string, string | null> {\n const params: Record<string, string | null> = {};\n const parsed = new URL(url);\n for (const [key, value] of parsed.searchParams.entries()) {\n if (key === \"sql\" || key.startsWith(\"_\")) {\n continue;\n }\n params[key] = value;\n }\n return params;\n}\n\nfunction collectPersistedParams(\n url: URL,\n options: { includeSearch: boolean },\n): Array<{ key: string; value: string }> {\n const params: Array<{ key: string; value: string }> = [];\n for (const [key, value] of url.searchParams.entries()) {\n if (key.startsWith(\"_filter_\")) {\n continue;\n }\n if (key === \"sql\") {\n continue;\n }\n if (key === \"_sort\" || key === \"_sort_desc\" || key === \"_sort_by_desc\") {\n continue;\n }\n if (!options.includeSearch && key === \"_search\") {\n continue;\n }\n if (key.startsWith(\"_\")) {\n params.push({ key, value });\n }\n }\n return params;\n}\n\nfunction collectExportParams(url: URL): Array<{ key: string; value: string }> {\n const params: Array<{ key: string; value: string }> = [];\n for (const [key, value] of url.searchParams.entries()) {\n if (\n key === \"_next\" ||\n key === \"_shape\" ||\n key === \"_size\" ||\n key === \"_labels\" ||\n key === \"_label\" ||\n key === \"_stream\" ||\n key === \"_dl\" ||\n key === \"_nl\" ||\n key === \"_facet\"\n ) {\n continue;\n }\n params.push({ key, value });\n }\n return params;\n}\n\nconst FILTER_OPERATORS = [\n { value: \"exact\", label: \"=\" },\n { value: \"not\", label: \"!=\" },\n { value: \"contains\", label: \"contains\" },\n { value: \"endswith\", label: \"ends with\" },\n { value: \"startswith\", label: \"starts with\" },\n { value: \"gt\", label: \">\" },\n { value: \"gte\", label: \"\u2265\" },\n { value: \"lt\", label: \"<\" },\n { value: \"lte\", label: \"\u2264\" },\n { value: \"like\", label: \"like\" },\n { value: \"notlike\", label: \"not like\" },\n { value: \"glob\", label: \"glob\" },\n { value: \"in\", label: \"in\" },\n { value: \"notin\", label: \"not in\" },\n { value: \"arraycontains\", label: \"array contains\" },\n { value: \"arraynotcontains\", label: \"array does not contain\" },\n { value: \"date\", label: \"date\" },\n { value: \"isnull__1\", label: \"is null\" },\n { value: \"notnull__1\", label: \"is not null\" },\n { value: \"isblank__1\", label: \"is blank\" },\n { value: \"notblank__1\", label: \"is not blank\" },\n];\n\nfunction removeFilterUrl(\n requestUrl: string,\n filter: ReturnType<typeof parseFiltersFromSearchParams>[number],\n value: string,\n): string {\n const url = new URL(requestUrl);\n const key = `${filter.column}__${filter.op}`;\n const existing = url.searchParams.getAll(key);\n url.searchParams.delete(key);\n existing\n .filter((item) => item !== value)\n .forEach((item) => url.searchParams.append(key, item));\n return url.toString();\n}\n\nfunction removeWhereUrl(requestUrl: string, clause: string): string {\n const url = new URL(requestUrl);\n const existing = url.searchParams.getAll(\"_where\");\n url.searchParams.delete(\"_where\");\n existing\n .filter((item) => item !== clause)\n .forEach((item) => url.searchParams.append(\"_where\", item));\n return url.toString();\n}\n\nfunction sortUrl(\n requestUrl: string,\n column: string,\n sort: ReturnType<typeof resolveSort>,\n): string {\n const url = new URL(requestUrl);\n url.searchParams.delete(\"_next\");\n if (sort?.column === column) {\n if (sort.desc) {\n url.searchParams.set(\"_sort\", column);\n url.searchParams.delete(\"_sort_desc\");\n } else {\n url.searchParams.set(\"_sort_desc\", column);\n url.searchParams.delete(\"_sort\");\n }\n } else {\n url.searchParams.set(\"_sort\", column);\n url.searchParams.delete(\"_sort_desc\");\n }\n url.searchParams.delete(\"_sort_by_desc\");\n return url.toString();\n}\n\nfunction sortUrlDesc(requestUrl: string, column: string): string {\n const url = new URL(requestUrl);\n url.searchParams.delete(\"_next\");\n url.searchParams.set(\"_sort_desc\", column);\n url.searchParams.delete(\"_sort\");\n url.searchParams.delete(\"_sort_by_desc\");\n return url.toString();\n}\n\nfunction nextPageUrl(requestUrl: string, next: number): string {\n const url = new URL(requestUrl);\n url.searchParams.set(\"_next\", String(next));\n return url.toString();\n}\n\nfunction exportUrl(\n requestUrl: string,\n databaseUrlName: string,\n tableName: string,\n format: \"json\" | \"csv\",\n extraParams?: Record<string, string | null>,\n): string {\n const url = new URL(requestUrl);\n url.pathname = `${databaseTablePath(databaseUrlName, tableName)}.${format}`;\n url.searchParams.delete(\"_next\");\n if (extraParams) {\n for (const [key, value] of Object.entries(extraParams)) {\n if (value === null) {\n url.searchParams.delete(key);\n } else {\n url.searchParams.set(key, value);\n }\n }\n }\n return url.toString();\n}\n\nfunction parseBooleanParam(value: string | null): boolean {\n if (!value) {\n return false;\n }\n return [\"1\", \"true\", \"on\", \"yes\"].includes(value.toLowerCase());\n}\n\nfunction facetUrl(requestUrl: string, column: string): string {\n const url = new URL(requestUrl);\n const existing = new Set(url.searchParams.getAll(\"_facet\"));\n if (!existing.has(column)) {\n url.searchParams.append(\"_facet\", column);\n }\n return url.toString();\n}\n\nfunction hideColumnUrl(requestUrl: string, column: string): string {\n const url = new URL(requestUrl);\n url.searchParams.append(\"_nocol\", column);\n return url.toString();\n}\n\nfunction showOnlyColumnUrl(\n requestUrl: string,\n column: string,\n primaryKeys: string[],\n): string {\n const url = new URL(requestUrl);\n url.searchParams.delete(\"_col\");\n url.searchParams.delete(\"_nocol\");\n url.searchParams.append(\"_col\", column);\n primaryKeys.forEach((pk) => url.searchParams.append(\"_col\", pk));\n return url.toString();\n}\n\nfunction toCssClass(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction formatCount(value: number): string {\n return new Intl.NumberFormat().format(value);\n}\n\nfunction escapeIdentifier(name: string): string {\n const escaped = name.replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n}\n\nfunction formatOperator(op: string): string {\n const match =\n FILTER_OPERATORS.find((item) => item.value === op) ??\n FILTER_OPERATORS.find((item) => item.value === `${op}__1`);\n return match ? match.label : op;\n}\n\nfunction isNoArgOperator(op: string): boolean {\n const normalized = op.endsWith(\"__1\") ? op.slice(0, -3) : op;\n return (\n normalized === \"isnull\" ||\n normalized === \"notnull\" ||\n normalized === \"isblank\" ||\n normalized === \"notblank\"\n );\n}\n\nfunction clearSearchUrl(requestUrl: string): string {\n const url = new URL(requestUrl);\n url.searchParams.delete(\"_search\");\n return url.toString();\n}\n\nfunction parseJsonPath(pathname: string): {\n basePath: string;\n isJson: boolean;\n} {\n const trimmed =\n pathname.endsWith(\"/\") && pathname !== \"/\" ? pathname.slice(0, -1) : pathname;\n const isJson = trimmed === \"/.json\" || trimmed.endsWith(\".json\");\n if (!isJson) {\n return { basePath: trimmed, isJson: false };\n }\n if (trimmed === \"/.json\") {\n return { basePath: \"/\", isJson: true };\n }\n return { basePath: trimmed.slice(0, -5), isJson: true };\n}\n", "import { Hono } from \"hono\";\n\nimport { jsxRenderer } from \"hono/jsx-renderer\";\n\nimport { createApiHandler } from \"../http/handler.js\";\nimport { createCsvHandler } from \"../http/csv.js\";\nimport { handleHtmlRequest } from \"../http/html.js\";\nimport type { DatabaseRegistry } from \"../core/registry.js\";\nimport type { AssetLoader } from \"../http/assets.js\";\nimport { DEFAULT_ACTIONS } from \"../core/auth.js\";\nimport type { AuthManager } from \"../core/auth.js\";\nimport { resolveHashUrlContext } from \"../http/hash-urls.js\";\nimport type { HashUrlContext } from \"../http/hash-urls.js\";\n\ntype AppVariables = {\n hashContext: HashUrlContext | null;\n};\n\ntype AppOptions = {\n appCssHash?: string | null;\n hashUrls?: boolean;\n hashUrlPrefixLength?: number;\n defaultCacheTtlHashedSeconds?: number;\n};\n\nexport function createApp(\n registry: DatabaseRegistry,\n assets: AssetLoader | undefined,\n auth: AuthManager,\n options: AppOptions = {},\n): Hono<{ Variables: AppVariables }> {\n const app = new Hono<{ Variables: AppVariables }>();\n const handler = createApiHandler(registry, auth);\n const csvHandler = createCsvHandler(registry, auth);\n const appCssHref = options.appCssHash\n ? `/-/static/app.css?${options.appCssHash}`\n : \"/-/static/app.css\";\n const hashConfig = {\n enabled: options.hashUrls ?? false,\n ...(options.hashUrlPrefixLength !== undefined\n ? { hashLength: options.hashUrlPrefixLength }\n : {}),\n ...(options.defaultCacheTtlHashedSeconds !== undefined\n ? { defaultCacheTtlSeconds: options.defaultCacheTtlHashedSeconds }\n : {}),\n };\n\n app.use(\"*\", async (c, next) => {\n const url = new URL(c.req.url);\n const resolution = await resolveHashUrlContext(registry, url, hashConfig);\n if (resolution.notFound) {\n return c.notFound();\n }\n if (resolution.redirectUrl) {\n return c.redirect(resolution.redirectUrl, 302);\n }\n c.set(\"hashContext\", resolution.context);\n await next();\n if (resolution.context.cacheControl) {\n const headers = c.res.headers;\n if (!headers.has(\"cache-control\")) {\n headers.set(\"cache-control\", resolution.context.cacheControl);\n }\n }\n });\n\n app.use(\n \"*\",\n jsxRenderer(({ children }, c) => (\n <html>\n <head>\n <title>{c.get(\"title\") ?? \"Datasette TS\"}</title>\n <link rel=\"stylesheet\" href={appCssHref} />\n <meta\n name=\"viewport\"\n content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"\n />\n {c.get(\"alternateJson\") ? (\n <link\n rel=\"alternate\"\n type=\"application/json+datasette\"\n href={new URL(c.get(\"alternateJson\"), c.req.url).toString()}\n />\n ) : null}\n {c.get(\"allowFacet\") ? (\n <script>DATASETTE_ALLOW_FACET = true;</script>\n ) : null}\n {c.get(\"headStyle\") ? (\n <style>{c.get(\"headStyle\")}</style>\n ) : null}\n </head>\n <body class={c.get(\"bodyClass\") ?? \"\"}>\n {children}\n <script\n dangerouslySetInnerHTML={{\n __html: `document.body.addEventListener(\"click\", (ev) => {\n var target = ev.target;\n var detailsClickedWithin = null;\n while (target && target.tagName != \"DETAILS\") {\n target = target.parentNode;\n }\n if (target && target.tagName == \"DETAILS\") {\n detailsClickedWithin = target;\n }\n Array.from(document.getElementsByTagName(\"details\"))\n .filter((details) => details.open && details != detailsClickedWithin)\n .forEach((details) => (details.open = false));\n});`,\n }}\n ></script>\n {c.get(\"includeTableJs\") ? (\n <script src=\"/-/static/table.js\" defer></script>\n ) : null}\n </body>\n </html>\n )),\n );\n\n if (assets) {\n app.get(\"/static/*\", async (c) => {\n const rawPath = new URL(c.req.url).pathname;\n const relativePath = rawPath.replace(/^\\/static\\//, \"/\");\n const asset = await assets.get(relativePath);\n if (!asset) {\n return c.notFound();\n }\n return new Response(asset.body as BodyInit, {\n headers: {\n \"content-type\": asset.contentType,\n },\n });\n });\n app.get(\"/-/static/*\", async (c) => {\n const rawPath = new URL(c.req.url).pathname;\n const relativePath = rawPath.replace(/^\\/-\\/static\\//, \"/\");\n const asset = await assets.get(relativePath);\n if (!asset) {\n return c.notFound();\n }\n return new Response(asset.body as BodyInit, {\n headers: {\n \"content-type\": asset.contentType,\n },\n });\n });\n }\n\n app.get(\"/-/auth-token\", (c) => {\n const token = c.req.query(\"token\");\n if (!token) {\n return c.text(\"Missing token\", 400);\n }\n const actor = auth.validateToken(token);\n if (!actor) {\n return c.text(\"Invalid token\", 403);\n }\n const headers = new Headers();\n headers.set(\n \"set-cookie\",\n `ds_actor=${encodeURIComponent(token)}; Path=/; HttpOnly; SameSite=Lax`,\n );\n headers.set(\"location\", \"/\");\n return new Response(null, { status: 302, headers });\n });\n\n app.get(\"/-/actor\", (c) => {\n const actor = auth.actorFromRequest(c.req.raw);\n return c.json({ actor });\n });\n\n app.get(\"/-/permissions\", (c) => {\n const actor = auth.actorFromRequest(c.req.raw);\n const permissions = DEFAULT_ACTIONS.map((action) => ({\n action,\n allowed: auth.allowed(action, { type: \"instance\" }, actor),\n }));\n return c.json({ actor, permissions });\n });\n\n app.all(\"*\", async (c) => {\n const path = new URL(c.req.url).pathname;\n const hashContext = c.get(\"hashContext\");\n if (path === \"/.json\" || path.endsWith(\".json\")) {\n return handler(c.req.raw, hashContext);\n }\n if (path.endsWith(\".csv\")) {\n return csvHandler(c.req.raw, hashContext);\n }\n return handleHtmlRequest(c, registry, auth, { hashContext });\n });\n\n return app;\n}\n", "export type AssetResponse = {\n body: string | Uint8Array;\n contentType: string;\n};\n\nexport type AssetLoader = {\n get(pathname: string): Promise<AssetResponse | null>;\n};\n\nconst CONTENT_TYPES: Record<string, string> = {\n \".css\": \"text/css; charset=utf-8\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".mjs\": \"text/javascript; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".ico\": \"image/x-icon\",\n \".txt\": \"text/plain; charset=utf-8\",\n};\n\nexport function contentTypeFor(pathname: string): string {\n const ext = pathname.slice(pathname.lastIndexOf(\".\")).toLowerCase();\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n", "import path from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { contentTypeFor } from \"./assets.js\";\nimport type { AssetLoader, AssetResponse } from \"./assets.js\";\n\nexport function createNodeAssetLoader(root: string): AssetLoader {\n return {\n async get(pathname: string): Promise<AssetResponse | null> {\n const sanitized = pathname.replace(/^\\/+/, \"\");\n const fullPath = path.join(root, sanitized);\n try {\n const data = await readFile(fullPath);\n return {\n body: data,\n contentType: contentTypeFor(pathname),\n };\n } catch {\n return null;\n }\n },\n };\n}\n", "import path from \"node:path\";\nimport { readFileSync } from \"node:fs\";\nimport { createHash } from \"node:crypto\";\n\nexport function computeAppCssHash(root: string): string | null {\n try {\n const css = readFileSync(path.join(root, \"app.css\"));\n return createHash(\"sha1\").update(css).digest(\"hex\").slice(0, 6);\n } catch {\n return null;\n }\n}\n", "import { createApp } from \"./app.js\";\nimport { createNodeAssetLoader } from \"../http/assets-node.js\";\nimport { computeAppCssHash } from \"../http/app-css-hash-node.js\";\nimport type { DatabaseRegistry } from \"../core/registry.js\";\nimport type { AuthManager } from \"../core/auth.js\";\n\ntype BunServerOptions = {\n registry: DatabaseRegistry;\n auth: AuthManager;\n port?: number;\n hostname?: string;\n};\n\nexport function startBunServer(options: BunServerOptions): void {\n const { registry, auth, port = 8001, hostname = \"127.0.0.1\" } = options;\n const assetsRoot = new URL(\"../../public\", import.meta.url).pathname;\n const assets = createNodeAssetLoader(assetsRoot);\n const appCssHash = computeAppCssHash(assetsRoot);\n const app = createApp(registry, assets, auth, { appCssHash });\n\n Bun.serve({\n port,\n hostname,\n fetch: app.fetch,\n });\n}\n", "// src/server.ts\nimport { createServer as createServerHTTP } from \"http\";\n\n// src/listener.ts\nimport { Http2ServerRequest as Http2ServerRequest2 } from \"http2\";\n\n// src/request.ts\nimport { Http2ServerRequest } from \"http2\";\nimport { Readable } from \"stream\";\nvar RequestError = class extends Error {\n constructor(message, options) {\n super(message, options);\n this.name = \"RequestError\";\n }\n};\nvar toRequestError = (e) => {\n if (e instanceof RequestError) {\n return e;\n }\n return new RequestError(e.message, { cause: e });\n};\nvar GlobalRequest = global.Request;\nvar Request = class extends GlobalRequest {\n constructor(input, options) {\n if (typeof input === \"object\" && getRequestCache in input) {\n input = input[getRequestCache]();\n }\n if (typeof options?.body?.getReader !== \"undefined\") {\n ;\n options.duplex ??= \"half\";\n }\n super(input, options);\n }\n};\nvar newHeadersFromIncoming = (incoming) => {\n const headerRecord = [];\n const rawHeaders = incoming.rawHeaders;\n for (let i = 0; i < rawHeaders.length; i += 2) {\n const { [i]: key, [i + 1]: value } = rawHeaders;\n if (key.charCodeAt(0) !== /*:*/\n 58) {\n headerRecord.push([key, value]);\n }\n }\n return new Headers(headerRecord);\n};\nvar wrapBodyStream = Symbol(\"wrapBodyStream\");\nvar newRequestFromIncoming = (method, url, headers, incoming, abortController) => {\n const init = {\n method,\n headers,\n signal: abortController.signal\n };\n if (method === \"TRACE\") {\n init.method = \"GET\";\n const req = new Request(url, init);\n Object.defineProperty(req, \"method\", {\n get() {\n return \"TRACE\";\n }\n });\n return req;\n }\n if (!(method === \"GET\" || method === \"HEAD\")) {\n if (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) {\n init.body = new ReadableStream({\n start(controller) {\n controller.enqueue(incoming.rawBody);\n controller.close();\n }\n });\n } else if (incoming[wrapBodyStream]) {\n let reader;\n init.body = new ReadableStream({\n async pull(controller) {\n try {\n reader ||= Readable.toWeb(incoming).getReader();\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n }\n });\n } else {\n init.body = Readable.toWeb(incoming);\n }\n }\n return new Request(url, init);\n};\nvar getRequestCache = Symbol(\"getRequestCache\");\nvar requestCache = Symbol(\"requestCache\");\nvar incomingKey = Symbol(\"incomingKey\");\nvar urlKey = Symbol(\"urlKey\");\nvar headersKey = Symbol(\"headersKey\");\nvar abortControllerKey = Symbol(\"abortControllerKey\");\nvar getAbortController = Symbol(\"getAbortController\");\nvar requestPrototype = {\n get method() {\n return this[incomingKey].method || \"GET\";\n },\n get url() {\n return this[urlKey];\n },\n get headers() {\n return this[headersKey] ||= newHeadersFromIncoming(this[incomingKey]);\n },\n [getAbortController]() {\n this[getRequestCache]();\n return this[abortControllerKey];\n },\n [getRequestCache]() {\n this[abortControllerKey] ||= new AbortController();\n return this[requestCache] ||= newRequestFromIncoming(\n this.method,\n this[urlKey],\n this.headers,\n this[incomingKey],\n this[abortControllerKey]\n );\n }\n};\n[\n \"body\",\n \"bodyUsed\",\n \"cache\",\n \"credentials\",\n \"destination\",\n \"integrity\",\n \"mode\",\n \"redirect\",\n \"referrer\",\n \"referrerPolicy\",\n \"signal\",\n \"keepalive\"\n].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n get() {\n return this[getRequestCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n value: function() {\n return this[getRequestCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(requestPrototype, Request.prototype);\nvar newRequest = (incoming, defaultHostname) => {\n const req = Object.create(requestPrototype);\n req[incomingKey] = incoming;\n const incomingUrl = incoming.url || \"\";\n if (incomingUrl[0] !== \"/\" && // short-circuit for performance. most requests are relative URL.\n (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n if (incoming instanceof Http2ServerRequest) {\n throw new RequestError(\"Absolute URL for :path is not allowed in HTTP/2\");\n }\n try {\n const url2 = new URL(incomingUrl);\n req[urlKey] = url2.href;\n } catch (e) {\n throw new RequestError(\"Invalid absolute URL\", { cause: e });\n }\n return req;\n }\n const host = (incoming instanceof Http2ServerRequest ? incoming.authority : incoming.headers.host) || defaultHostname;\n if (!host) {\n throw new RequestError(\"Missing host header\");\n }\n let scheme;\n if (incoming instanceof Http2ServerRequest) {\n scheme = incoming.scheme;\n if (!(scheme === \"http\" || scheme === \"https\")) {\n throw new RequestError(\"Unsupported scheme\");\n }\n } else {\n scheme = incoming.socket && incoming.socket.encrypted ? \"https\" : \"http\";\n }\n const url = new URL(`${scheme}://${host}${incomingUrl}`);\n if (url.hostname.length !== host.length && url.hostname !== host.replace(/:\\d+$/, \"\")) {\n throw new RequestError(\"Invalid host header\");\n }\n req[urlKey] = url.href;\n return req;\n};\n\n// src/response.ts\nvar responseCache = Symbol(\"responseCache\");\nvar getResponseCache = Symbol(\"getResponseCache\");\nvar cacheKey = Symbol(\"cache\");\nvar GlobalResponse = global.Response;\nvar Response2 = class _Response {\n #body;\n #init;\n [getResponseCache]() {\n delete this[cacheKey];\n return this[responseCache] ||= new GlobalResponse(this.#body, this.#init);\n }\n constructor(body, init) {\n let headers;\n this.#body = body;\n if (init instanceof _Response) {\n const cachedGlobalResponse = init[responseCache];\n if (cachedGlobalResponse) {\n this.#init = cachedGlobalResponse;\n this[getResponseCache]();\n return;\n } else {\n this.#init = init.#init;\n headers = new Headers(init.#init.headers);\n }\n } else {\n this.#init = init;\n }\n if (typeof body === \"string\" || typeof body?.getReader !== \"undefined\" || body instanceof Blob || body instanceof Uint8Array) {\n headers ||= init?.headers || { \"content-type\": \"text/plain; charset=UTF-8\" };\n this[cacheKey] = [init?.status || 200, body, headers];\n }\n }\n get headers() {\n const cache = this[cacheKey];\n if (cache) {\n if (!(cache[2] instanceof Headers)) {\n cache[2] = new Headers(cache[2]);\n }\n return cache[2];\n }\n return this[getResponseCache]().headers;\n }\n get status() {\n return this[cacheKey]?.[0] ?? this[getResponseCache]().status;\n }\n get ok() {\n const status = this.status;\n return status >= 200 && status < 300;\n }\n};\n[\"body\", \"bodyUsed\", \"redirected\", \"statusText\", \"trailers\", \"type\", \"url\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n get() {\n return this[getResponseCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n value: function() {\n return this[getResponseCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(Response2, GlobalResponse);\nObject.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);\n\n// src/utils.ts\nasync function readWithoutBlocking(readPromise) {\n return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);\n}\nfunction writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {\n const cancel = (error) => {\n reader.cancel(error).catch(() => {\n });\n };\n writable.on(\"close\", cancel);\n writable.on(\"error\", cancel);\n (currentReadPromise ?? reader.read()).then(flow, handleStreamError);\n return reader.closed.finally(() => {\n writable.off(\"close\", cancel);\n writable.off(\"error\", cancel);\n });\n function handleStreamError(error) {\n if (error) {\n writable.destroy(error);\n }\n }\n function onDrain() {\n reader.read().then(flow, handleStreamError);\n }\n function flow({ done, value }) {\n try {\n if (done) {\n writable.end();\n } else if (!writable.write(value)) {\n writable.once(\"drain\", onDrain);\n } else {\n return reader.read().then(flow, handleStreamError);\n }\n } catch (e) {\n handleStreamError(e);\n }\n }\n}\nfunction writeFromReadableStream(stream, writable) {\n if (stream.locked) {\n throw new TypeError(\"ReadableStream is locked.\");\n } else if (writable.destroyed) {\n return;\n }\n return writeFromReadableStreamDefaultReader(stream.getReader(), writable);\n}\nvar buildOutgoingHttpHeaders = (headers) => {\n const res = {};\n if (!(headers instanceof Headers)) {\n headers = new Headers(headers ?? void 0);\n }\n const cookies = [];\n for (const [k, v] of headers) {\n if (k === \"set-cookie\") {\n cookies.push(v);\n } else {\n res[k] = v;\n }\n }\n if (cookies.length > 0) {\n res[\"set-cookie\"] = cookies;\n }\n res[\"content-type\"] ??= \"text/plain; charset=UTF-8\";\n return res;\n};\n\n// src/utils/response/constants.ts\nvar X_ALREADY_SENT = \"x-hono-already-sent\";\n\n// src/globals.ts\nimport crypto from \"crypto\";\nvar webFetch = global.fetch;\nif (typeof global.crypto === \"undefined\") {\n global.crypto = crypto;\n}\nglobal.fetch = (info, init) => {\n init = {\n // Disable compression handling so people can return the result of a fetch\n // directly in the loader without messing with the Content-Encoding header.\n compress: false,\n ...init\n };\n return webFetch(info, init);\n};\n\n// src/listener.ts\nvar outgoingEnded = Symbol(\"outgoingEnded\");\nvar handleRequestError = () => new Response(null, {\n status: 400\n});\nvar handleFetchError = (e) => new Response(null, {\n status: e instanceof Error && (e.name === \"TimeoutError\" || e.constructor.name === \"TimeoutError\") ? 504 : 500\n});\nvar handleResponseError = (e, outgoing) => {\n const err = e instanceof Error ? e : new Error(\"unknown error\", { cause: e });\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") {\n console.info(\"The user aborted a request.\");\n } else {\n console.error(e);\n if (!outgoing.headersSent) {\n outgoing.writeHead(500, { \"Content-Type\": \"text/plain\" });\n }\n outgoing.end(`Error: ${err.message}`);\n outgoing.destroy(err);\n }\n};\nvar flushHeaders = (outgoing) => {\n if (\"flushHeaders\" in outgoing && outgoing.writable) {\n outgoing.flushHeaders();\n }\n};\nvar responseViaCache = async (res, outgoing) => {\n let [status, body, header] = res[cacheKey];\n if (header instanceof Headers) {\n header = buildOutgoingHttpHeaders(header);\n }\n if (typeof body === \"string\") {\n header[\"Content-Length\"] = Buffer.byteLength(body);\n } else if (body instanceof Uint8Array) {\n header[\"Content-Length\"] = body.byteLength;\n } else if (body instanceof Blob) {\n header[\"Content-Length\"] = body.size;\n }\n outgoing.writeHead(status, header);\n if (typeof body === \"string\" || body instanceof Uint8Array) {\n outgoing.end(body);\n } else if (body instanceof Blob) {\n outgoing.end(new Uint8Array(await body.arrayBuffer()));\n } else {\n flushHeaders(outgoing);\n await writeFromReadableStream(body, outgoing)?.catch(\n (e) => handleResponseError(e, outgoing)\n );\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar isPromise = (res) => typeof res.then === \"function\";\nvar responseViaResponseObject = async (res, outgoing, options = {}) => {\n if (isPromise(res)) {\n if (options.errorHandler) {\n try {\n res = await res;\n } catch (err) {\n const errRes = await options.errorHandler(err);\n if (!errRes) {\n return;\n }\n res = errRes;\n }\n } else {\n res = await res.catch(handleFetchError);\n }\n }\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);\n if (res.body) {\n const reader = res.body.getReader();\n const values = [];\n let done = false;\n let currentReadPromise = void 0;\n if (resHeaderRecord[\"transfer-encoding\"] !== \"chunked\") {\n let maxReadCount = 2;\n for (let i = 0; i < maxReadCount; i++) {\n currentReadPromise ||= reader.read();\n const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {\n console.error(e);\n done = true;\n });\n if (!chunk) {\n if (i === 1) {\n await new Promise((resolve) => setTimeout(resolve));\n maxReadCount = 3;\n continue;\n }\n break;\n }\n currentReadPromise = void 0;\n if (chunk.value) {\n values.push(chunk.value);\n }\n if (chunk.done) {\n done = true;\n break;\n }\n }\n if (done && !(\"content-length\" in resHeaderRecord)) {\n resHeaderRecord[\"content-length\"] = values.reduce((acc, value) => acc + value.length, 0);\n }\n }\n outgoing.writeHead(res.status, resHeaderRecord);\n values.forEach((value) => {\n ;\n outgoing.write(value);\n });\n if (done) {\n outgoing.end();\n } else {\n if (values.length === 0) {\n flushHeaders(outgoing);\n }\n await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);\n }\n } else if (resHeaderRecord[X_ALREADY_SENT]) {\n } else {\n outgoing.writeHead(res.status, resHeaderRecord);\n outgoing.end();\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar getRequestListener = (fetchCallback, options = {}) => {\n const autoCleanupIncoming = options.autoCleanupIncoming ?? true;\n if (options.overrideGlobalObjects !== false && global.Request !== Request) {\n Object.defineProperty(global, \"Request\", {\n value: Request\n });\n Object.defineProperty(global, \"Response\", {\n value: Response2\n });\n }\n return async (incoming, outgoing) => {\n let res, req;\n try {\n req = newRequest(incoming, options.hostname);\n let incomingEnded = !autoCleanupIncoming || incoming.method === \"GET\" || incoming.method === \"HEAD\";\n if (!incomingEnded) {\n ;\n incoming[wrapBodyStream] = true;\n incoming.on(\"end\", () => {\n incomingEnded = true;\n });\n if (incoming instanceof Http2ServerRequest2) {\n ;\n outgoing[outgoingEnded] = () => {\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n outgoing.destroy();\n });\n }\n });\n }\n };\n }\n }\n outgoing.on(\"close\", () => {\n const abortController = req[abortControllerKey];\n if (abortController) {\n if (incoming.errored) {\n req[abortControllerKey].abort(incoming.errored.toString());\n } else if (!outgoing.writableFinished) {\n req[abortControllerKey].abort(\"Client connection prematurely closed.\");\n }\n }\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n });\n }\n });\n }\n });\n res = fetchCallback(req, { incoming, outgoing });\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n } catch (e) {\n if (!res) {\n if (options.errorHandler) {\n res = await options.errorHandler(req ? e : toRequestError(e));\n if (!res) {\n return;\n }\n } else if (!req) {\n res = handleRequestError();\n } else {\n res = handleFetchError(e);\n }\n } else {\n return handleResponseError(e, outgoing);\n }\n }\n try {\n return await responseViaResponseObject(res, outgoing, options);\n } catch (e) {\n return handleResponseError(e, outgoing);\n }\n };\n};\n\n// src/server.ts\nvar createAdaptorServer = (options) => {\n const fetchCallback = options.fetch;\n const requestListener = getRequestListener(fetchCallback, {\n hostname: options.hostname,\n overrideGlobalObjects: options.overrideGlobalObjects,\n autoCleanupIncoming: options.autoCleanupIncoming\n });\n const createServer = options.createServer || createServerHTTP;\n const server = createServer(options.serverOptions || {}, requestListener);\n return server;\n};\nvar serve = (options, listeningListener) => {\n const server = createAdaptorServer(options);\n server.listen(options?.port ?? 3e3, options.hostname, () => {\n const serverInfo = server.address();\n listeningListener && listeningListener(serverInfo);\n });\n return server;\n};\nexport {\n RequestError,\n createAdaptorServer,\n getRequestListener,\n serve\n};\n", "import { serve } from \"@hono/node-server\";\n\nimport { createApp } from \"./app.js\";\nimport { createNodeAssetLoader } from \"../http/assets-node.js\";\nimport { computeAppCssHash } from \"../http/app-css-hash-node.js\";\nimport type { DatabaseRegistry } from \"../core/registry.js\";\nimport type { AuthManager } from \"../core/auth.js\";\n\ntype NodeServerOptions = {\n registry: DatabaseRegistry;\n auth: AuthManager;\n port?: number;\n hostname?: string;\n};\n\nexport function startNodeServer(options: NodeServerOptions) {\n const { registry, auth, port = 8001, hostname = \"127.0.0.1\" } = options;\n const assetsRoot = new URL(\"../../public\", import.meta.url).pathname;\n const assets = createNodeAssetLoader(assetsRoot);\n const appCssHash = computeAppCssHash(assetsRoot);\n const app = createApp(registry, assets, auth, { appCssHash });\n return serve({\n fetch: app.fetch,\n port,\n hostname,\n });\n}\n", "import { stat } from \"node:fs/promises\";\nimport { dirname, extname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport alchemy from \"alchemy\";\nimport { Assets, D1Database, Worker } from \"alchemy/cloudflare\";\nimport type { Bindings } from \"alchemy/cloudflare\";\n\nimport {\n dumpSqliteForD1,\n loadInspectDataFromFile,\n loadSchemaFromFile,\n // @ts-expect-error missing types\n} from \"../../scripts/cloudflare-deploy-helpers.mjs\";\n\ntype DeployOptions = {\n dbFile: string;\n dbName: string;\n workerName: string;\n d1Name: string;\n profile?: string;\n precomputeInspect: boolean;\n importsDir: string;\n};\n\nconst DEFAULT_IMPORTS_DIR = \".datasette-ts/imports\";\n\nexport async function runCloudflareDeploy(args: string[]): Promise<void> {\n const options = parseDeployArgs(args);\n await assertFileExists(options.dbFile, \"SQLite database\");\n\n const packageRoot = await resolvePackageRoot();\n const workerEntrypoint = await resolveWorkerEntrypoint(packageRoot);\n const assetsPath = join(packageRoot, \"public\");\n await assertFileExists(assetsPath, \"assets directory\");\n\n const app = await alchemy(options.workerName);\n\n let importFile: string;\n try {\n importFile = await dumpSqliteForD1({\n dbFile: options.dbFile,\n outputDir: options.importsDir,\n outputName: options.d1Name,\n });\n } catch (error) {\n if (isSqliteCliMissing(error)) {\n throw new Error(\n \"sqlite3 is required to export your database. Install sqlite3 and retry.\",\n );\n }\n throw error;\n }\n\n const schema = await loadSchemaFromFile(options.dbFile);\n const inspectData = options.precomputeInspect\n ? await loadInspectDataFromFile(options.dbFile, options.dbName)\n : null;\n\n const db = await D1Database(`d1-${options.d1Name}`, {\n name: options.d1Name,\n importFiles: [importFile],\n profile: options.profile!,\n adopt: true,\n });\n\n const staticAssets = await Assets({\n path: assetsPath,\n });\n\n const bindings: Bindings = {\n DATASETTE_DB: db,\n ASSETS: staticAssets,\n DATASETTE_DB_NAME: options.dbName,\n DATASETTE_SCHEMA: JSON.stringify({ [options.dbName]: schema }),\n };\n if (inspectData) {\n bindings.DATASETTE_INSPECT_DATA = JSON.stringify(inspectData);\n }\n\n const worker = await Worker(`worker-${options.workerName}`, {\n entrypoint: workerEntrypoint,\n compatibilityFlags: [\"nodejs_compat\"],\n bundle: {\n external: [\"bun:sqlite\"],\n },\n bindings,\n profile: options.profile!,\n adopt: true,\n });\n\n console.log(`Worker deployed at: ${worker.url}`);\n await app.finalize();\n}\n\nfunction parseDeployArgs(args: string[]): DeployOptions {\n const positional: string[] = [];\n let dbFile: string | undefined;\n let dbName: string | undefined;\n let workerName: string | undefined;\n let d1Name: string | undefined;\n let profile: string | undefined;\n let precomputeInspect = true;\n let importsDir: string | undefined;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (!arg) {\n continue;\n }\n if (arg === \"--precompute-inspect\") {\n precomputeInspect = true;\n continue;\n }\n if (arg === \"--no-precompute-inspect\") {\n precomputeInspect = false;\n continue;\n }\n const parsedArg = parseNamedArg(arg, args[index + 1]);\n if (!parsedArg) {\n positional.push(arg);\n continue;\n }\n const { key, value } = parsedArg;\n switch (key) {\n case \"db\":\n case \"db-file\":\n dbFile = value ?? dbFile;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n break;\n case \"db-name\":\n dbName = value ?? dbName;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n break;\n case \"worker\":\n workerName = value ?? workerName;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n break;\n case \"d1\":\n d1Name = value ?? d1Name;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n break;\n case \"profile\":\n profile = value ?? profile;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n break;\n case \"imports-dir\":\n importsDir = value ?? importsDir;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n break;\n case \"precompute-inspect\":\n precomputeInspect = parseBooleanFlag(value, true);\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n break;\n default:\n break;\n }\n }\n\n if (!dbFile && positional.length > 0) {\n dbFile = positional[0];\n }\n if (!dbFile) {\n throw new Error(\"Missing SQLite database path.\");\n }\n\n const resolvedDbFile = resolve(dbFile);\n const derivedDbName = deriveName(resolvedDbFile);\n const derivedResourceName = normalizeResourceName(derivedDbName);\n\n const resolvedImportsDir = resolve(importsDir ?? DEFAULT_IMPORTS_DIR);\n\n return {\n dbFile: resolvedDbFile,\n dbName: dbName ?? derivedDbName,\n workerName: workerName ?? derivedResourceName,\n d1Name: d1Name ?? derivedResourceName,\n profile,\n precomputeInspect,\n importsDir: resolvedImportsDir,\n };\n}\n\nfunction deriveName(path: string): string {\n const base = path.split(/[\\\\/]/).pop() ?? path;\n const name = base.replace(new RegExp(`${escapeRegex(extname(base))}$`), \"\");\n return name === \"\" ? \"db\" : name;\n}\n\nfunction normalizeResourceName(name: string): string {\n const normalized = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n return normalized === \"\" ? \"db\" : normalized;\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction parseNamedArg(\n arg: string,\n nextValue?: string,\n): { key: string; value: string | undefined } | null {\n if (!arg.startsWith(\"--\")) {\n return null;\n }\n const [key, value] = arg.slice(2).split(\"=\");\n if (!key) {\n return null;\n }\n if (value !== undefined) {\n return { key, value };\n }\n return { key, value: nextValue };\n}\n\nfunction parseBooleanFlag(value: string | undefined, defaultValue: boolean): boolean {\n if (value == null) {\n return defaultValue;\n }\n const normalized = value.trim().toLowerCase();\n if ([\"0\", \"false\", \"no\", \"off\"].includes(normalized)) {\n return false;\n }\n if ([\"1\", \"true\", \"yes\", \"on\"].includes(normalized)) {\n return true;\n }\n return defaultValue;\n}\n\nasync function resolvePackageRoot(): Promise<string> {\n let current = dirname(fileURLToPath(import.meta.url));\n for (let depth = 0; depth < 6; depth += 1) {\n if (await fileExists(join(current, \"package.json\"))) {\n return current;\n }\n const parent = dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n return resolve(dirname(fileURLToPath(import.meta.url)), \"..\");\n}\n\nasync function resolveWorkerEntrypoint(packageRoot: string): Promise<string> {\n const distWorker = join(packageRoot, \"dist\", \"worker.js\");\n if (await fileExists(distWorker)) {\n return distWorker;\n }\n return join(packageRoot, \"src\", \"worker.ts\");\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function assertFileExists(path: string, label: string): Promise<void> {\n try {\n await stat(path);\n } catch {\n throw new Error(`${label} not found: ${path}`);\n }\n}\n\nfunction isSqliteCliMissing(error: unknown): boolean {\n if (!error || typeof error !== \"object\") {\n return false;\n }\n return \"code\" in error && (error as { code?: string }).code === \"ENOENT\";\n}\n", "import { execFileSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { createReadStream } from \"node:fs\";\nimport { mkdir, stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { createClient } from \"@libsql/client\";\n\nexport async function dumpSqliteForD1(options) {\n const baseName =\n options.outputName ?? path.basename(options.dbFile, path.extname(options.dbFile));\n const outputPath = path.join(options.outputDir, `${baseName}.sql`);\n\n await mkdir(options.outputDir, { recursive: true });\n const rawDump = execFileSync(\"sqlite3\", [options.dbFile, \".dump\"], {\n encoding: \"utf8\",\n });\n const cleaned = normalizeDump(rawDump);\n await writeFile(outputPath, cleaned);\n\n return outputPath;\n}\n\nexport async function loadSchemaFromFile(dbFile) {\n const db = createReadonlyClient(dbFile);\n try {\n return await introspectDatabase(db);\n } finally {\n db.close();\n }\n}\n\nexport async function loadInspectDataFromFile(dbFile, databaseName) {\n const stats = await stat(dbFile);\n const hash = await hashFile(dbFile);\n const tables = await countTables(dbFile);\n return {\n [databaseName]: {\n hash,\n size: stats.size,\n file: path.basename(dbFile),\n tables,\n },\n };\n}\n\nasync function introspectDatabase(db) {\n const rows = await executeRows(\n db,\n \"select name, type, sql from sqlite_master where type in ('table', 'view') order by name\",\n );\n const tables = {};\n\n for (const row of rows) {\n const name = asString(row.name);\n if (name.startsWith(\"sqlite_\")) {\n continue;\n }\n const type = asString(row.type);\n const sql = asNullableString(row.sql);\n const virtual = type === \"table\" && isVirtualTable(sql);\n const infoType = type === \"view\" ? \"view\" : virtual ? \"virtual\" : \"table\";\n const columns = await tableColumns(db, name);\n const foreignKeys = await tableForeignKeys(db, name);\n const primaryKeys = columns\n .filter((column) => column.primaryKey)\n .sort((a, b) => a.primaryKeyIndex - b.primaryKeyIndex)\n .map((column) => column.name);\n const isFts = isFtsTable(sql);\n\n tables[name] = {\n name,\n type: infoType,\n sql,\n columns,\n primaryKeys,\n foreignKeys,\n isFts,\n };\n }\n\n return { tables };\n}\n\nasync function tableColumns(db, tableName) {\n const rows = await executeRows(db, `pragma table_info(${escapeIdentifier(tableName)})`);\n return rows.map((row) => ({\n name: asString(row.name),\n type: asString(row.type),\n notNull: asNumber(row.notnull) === 1,\n defaultValue: asNullableString(row.dflt_value),\n primaryKey: asNumber(row.pk) > 0,\n primaryKeyIndex: asNumber(row.pk),\n }));\n}\n\nasync function tableForeignKeys(db, tableName) {\n const rows = await executeRows(db, `pragma foreign_key_list(${escapeIdentifier(tableName)})`);\n return rows.map((row) => ({\n table: asString(row.table),\n from: asString(row.from),\n to: asString(row.to),\n onUpdate: asString(row.on_update),\n onDelete: asString(row.on_delete),\n match: asString(row.match),\n seq: asNumber(row.seq),\n id: asNumber(row.id),\n }));\n}\n\nfunction asString(value, fallback = \"\") {\n if (typeof value === \"string\") {\n return value;\n }\n if (value == null) {\n return fallback;\n }\n return String(value);\n}\n\nfunction asNumber(value, fallback = 0) {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? fallback : parsed;\n }\n return fallback;\n}\n\nfunction asNullableString(value) {\n if (value == null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n return String(value);\n}\n\nfunction isVirtualTable(sql) {\n if (!sql) {\n return false;\n }\n return /create\\s+virtual\\s+table/i.test(sql);\n}\n\nfunction isFtsTable(sql) {\n if (!sql) {\n return false;\n }\n return /using\\s+fts/i.test(sql);\n}\n\nfunction escapeIdentifier(name) {\n const escaped = String(name).replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n}\n\nfunction normalizeDump(rawDump) {\n const lines = rawDump.split(\"\\n\");\n const output = [];\n const tablesInOrder = [];\n const viewsInOrder = [];\n for (const line of lines) {\n const tableMatch = line.match(/^CREATE TABLE\\s+(\"?[^\"]+\"?)/i);\n if (tableMatch) {\n tablesInOrder.push(tableMatch[1].replace(/\\s*\\($/, \"\"));\n continue;\n }\n const viewMatch = line.match(/^CREATE VIEW\\s+(\"?[^\"]+\"?)/i);\n if (viewMatch) {\n viewsInOrder.push(viewMatch[1].replace(/\\s*\\($/, \"\"));\n }\n }\n for (const viewName of viewsInOrder.reverse()) {\n output.push(`DROP VIEW IF EXISTS ${viewName};`);\n }\n for (const tableName of tablesInOrder.reverse()) {\n output.push(`DROP TABLE IF EXISTS ${tableName};`);\n }\n for (const line of lines) {\n if (line === \"BEGIN TRANSACTION;\" || line === \"COMMIT;\") {\n continue;\n }\n if (line.startsWith(\"PRAGMA foreign_keys=\")) {\n continue;\n }\n const tableMatch = line.match(/^CREATE TABLE\\s+(\"?[^\"]+\"?)/i);\n if (tableMatch) {\n output.push(line);\n continue;\n }\n const viewMatch = line.match(/^CREATE VIEW\\s+(\"?[^\"]+\"?)/i);\n if (viewMatch) {\n output.push(line);\n continue;\n }\n output.push(line);\n }\n return output.join(\"\\n\");\n}\n\nasync function hashFile(filePath) {\n return new Promise((resolve, reject) => {\n const hash = createHash(\"sha256\");\n const stream = createReadStream(filePath, { highWaterMark: 1024 * 1024 });\n stream.on(\"data\", (chunk) => hash.update(chunk));\n stream.on(\"error\", reject);\n stream.on(\"end\", () => resolve(hash.digest(\"hex\")));\n });\n}\n\nasync function countTables(dbFile) {\n const db = createReadonlyClient(dbFile);\n try {\n const rows = await executeRows(db, \"select name from sqlite_master where type = 'table'\");\n const tables = {};\n for (const row of rows) {\n const tableName = asString(row.name);\n try {\n const countRows = await executeRows(\n db,\n `select count(*) as count from ${escapeIdentifier(tableName)}`,\n );\n const countRow = countRows[0];\n const countValue = countRow?.count;\n const count = typeof countValue === \"number\" ? countValue : Number(countValue ?? 0);\n tables[tableName] = { count: Number.isNaN(count) ? 0 : count };\n } catch {\n tables[tableName] = { count: 0 };\n }\n }\n return tables;\n } finally {\n db.close();\n }\n}\n\nfunction createReadonlyClient(dbFile) {\n const fileUrl = pathToFileURL(dbFile);\n return createClient({ url: fileUrl.toString() });\n}\n\nasync function executeRows(db, sql, args = []) {\n const result = await db.execute({ sql, args });\n return normalizeLibsqlRows(result);\n}\n\nfunction normalizeLibsqlRows(result) {\n const rows = Array.isArray(result?.rows) ? result.rows : [];\n if (!rows.length) {\n return [];\n }\n\n const firstRow = rows[0];\n if (firstRow && typeof firstRow === \"object\" && !Array.isArray(firstRow)) {\n return rows;\n }\n\n const columns = Array.isArray(result?.columns)\n ? result.columns.map((column) => {\n if (typeof column === \"string\") {\n return column;\n }\n if (column && typeof column === \"object\" && \"name\" in column) {\n return String(column.name ?? \"\");\n }\n return \"\";\n })\n : [];\n\n if (!columns.length) {\n return [];\n }\n\n return rows.map((row) => {\n const values = Array.isArray(row) ? row : [];\n const mapped = {};\n for (let index = 0; index < columns.length; index += 1) {\n const column = columns[index];\n if (column) {\n mapped[column] = values[index];\n }\n }\n return mapped;\n });\n}\n", "import { stat, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport { DatabaseRegistry } from \"../core/registry.js\";\nimport { inspectDatabases, loadInspectData } from \"../core/inspect.js\";\nimport { loadMetadata } from \"../core/metadata.js\";\nimport { AuthManager } from \"../core/auth.js\";\nimport { startServer } from \"../server/index.js\";\n\nconst DEFAULT_DB = \"data.db\";\n\ntype CliOptions = {\n databases: { name: string; filename: string; mutable?: boolean }[];\n metadata?: Awaited<ReturnType<typeof loadMetadata>> | null;\n inspectData?: Awaited<ReturnType<typeof loadInspectData>> | null;\n port?: number;\n hostname?: string;\n root?: boolean;\n mutable?: boolean;\n};\n\nexport async function runServeCommand(args: string[]): Promise<void> {\n const options = await parseArgs(args);\n const registry = new DatabaseRegistry(\n options.databases,\n options.metadata ?? null,\n options.inspectData ?? null,\n );\n const auth = new AuthManager(\n options.root !== undefined ? { rootEnabled: options.root } : undefined,\n );\n const rootToken = options.root ? auth.enableRoot() : null;\n\n const serverOptions: Parameters<typeof startServer>[0] = { registry, auth };\n if (options.port !== undefined) {\n serverOptions.port = options.port;\n }\n if (options.hostname !== undefined) {\n serverOptions.hostname = options.hostname;\n }\n await startServer(serverOptions);\n\n console.log(\n `datasette-ts running at http://${options.hostname ?? \"127.0.0.1\"}:${options.port ?? 8001}`,\n );\n if (rootToken) {\n const host = options.hostname ?? \"127.0.0.1\";\n const port = options.port ?? 8001;\n console.log(\n `Root login URL: http://${host}:${port}/-/auth-token?token=${rootToken}`,\n );\n }\n}\n\nexport async function runInspectCommand(args: string[]): Promise<void> {\n const databasePaths: string[] = [];\n let inspectFile: string | undefined;\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (!arg) {\n continue;\n }\n const parsedArg = parseNamedArg(arg, args[index + 1]);\n if (parsedArg?.key === \"inspect-file\") {\n if (parsedArg.value) {\n inspectFile = parsedArg.value;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n }\n continue;\n }\n databasePaths.push(arg);\n }\n\n if (databasePaths.length === 0) {\n databasePaths.push(DEFAULT_DB);\n }\n\n const data = await inspectDatabases(databasePaths);\n const json = JSON.stringify(data, null, 2);\n if (inspectFile) {\n await writeFile(inspectFile, json, \"utf8\");\n return;\n }\n process.stdout.write(`${json}\\n`);\n}\n\nasync function parseArgs(args: string[]): Promise<CliOptions> {\n const databasePaths: string[] = [];\n let port: number | undefined;\n let hostname: string | undefined;\n let metadataFile: string | undefined;\n let inspectFile: string | undefined;\n let root = false;\n let mutable = true;\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index];\n if (!arg) {\n continue;\n }\n const parsedArg = parseNamedArg(arg, args[index + 1]);\n if (parsedArg?.key === \"port\") {\n if (parsedArg.value) {\n port = Number(parsedArg.value);\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n }\n continue;\n }\n if (parsedArg?.key === \"host\") {\n if (parsedArg.value) {\n hostname = parsedArg.value;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n }\n continue;\n }\n if (parsedArg?.key === \"metadata\") {\n if (parsedArg.value) {\n metadataFile = parsedArg.value;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n }\n continue;\n }\n if (parsedArg?.key === \"inspect-file\") {\n if (parsedArg.value) {\n inspectFile = parsedArg.value;\n if (!arg.includes(\"=\")) {\n index += 1;\n }\n }\n continue;\n }\n if (arg === \"--root\") {\n root = true;\n continue;\n }\n if (arg === \"--immutable\" || arg === \"-i\") {\n mutable = false;\n continue;\n }\n if (arg === \"--mutable\") {\n mutable = true;\n continue;\n }\n databasePaths.push(arg);\n }\n\n if (databasePaths.length === 0) {\n databasePaths.push(DEFAULT_DB);\n }\n const databases = databasePaths.map((filename) => ({\n name: deriveName(filename),\n filename,\n mutable,\n }));\n\n const metadata = await loadMetadata(metadataFile);\n if (!inspectFile) {\n const defaultInspect = join(process.cwd(), \"inspect-data.json\");\n try {\n await stat(defaultInspect);\n inspectFile = defaultInspect;\n } catch {\n inspectFile = undefined;\n }\n }\n const inspectData = await loadInspectData(inspectFile);\n const result: CliOptions = { databases, root, mutable };\n if (port !== undefined) {\n result.port = port;\n }\n if (hostname !== undefined) {\n result.hostname = hostname;\n }\n if (metadata !== undefined) {\n result.metadata = metadata;\n }\n if (inspectData !== undefined) {\n result.inspectData = inspectData;\n }\n return result;\n}\n\nfunction deriveName(path: string): string {\n const parts = path.split(/[\\\\/]/);\n const last = parts[parts.length - 1] ?? path;\n const name = last.replace(/\\.[^/.]+$/, \"\");\n return name === \"\" ? \"db\" : name;\n}\n\nfunction parseNamedArg(\n arg: string,\n nextValue?: string,\n): { key: string; value: string | undefined } | null {\n if (!arg.startsWith(\"--\")) {\n return null;\n }\n const [key, value] = arg.slice(2).split(\"=\");\n if (!key) {\n return null;\n }\n if (value !== undefined) {\n return { key, value };\n }\n return { key, value: nextValue };\n}\n", "import { createHash } from \"node:crypto\";\nimport { createReadStream } from \"node:fs\";\nimport { readFile, stat } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\n\nimport { openSqlite } from \"../db/sqlite/index.js\";\n\nexport type InspectData = Record<\n string,\n {\n hash?: string;\n size?: number;\n file?: string;\n tables?: Record<string, { count?: number }>;\n }\n>;\n\nexport async function loadInspectData(\n inspectFile?: string,\n): Promise<InspectData | undefined> {\n if (!inspectFile) {\n return undefined;\n }\n const raw = await readFile(inspectFile, \"utf8\");\n return JSON.parse(raw) as InspectData;\n}\n\nexport async function inspectDatabases(\n databasePaths: string[],\n): Promise<InspectData> {\n const results: InspectData = {};\n for (const filename of databasePaths) {\n const name = deriveName(filename);\n results[name] = await inspectDatabase(filename);\n }\n return results;\n}\n\nasync function inspectDatabase(filename: string): Promise<InspectData[string]> {\n const hash = await hashFile(filename);\n const stats = await stat(filename);\n const tables = await countTables(filename);\n return {\n hash,\n size: stats.size,\n file: basename(filename),\n tables,\n };\n}\n\nasync function countTables(\n filename: string,\n): Promise<Record<string, { count?: number }>> {\n const client = await openSqlite({ filename, readOnly: true });\n try {\n const { rows } = await client.execute(\n `select name from sqlite_master where type = \"table\"`,\n );\n const tables: Record<string, { count?: number }> = {};\n for (const row of rows) {\n const tableName = String(row.name);\n try {\n const { rows: countRows } = await client.execute(\n `select count(*) as count from ${escapeIdentifier(tableName)}`,\n );\n const countValue = countRows[0]?.count;\n const count =\n typeof countValue === \"number\"\n ? countValue\n : Number(countValue ?? 0);\n tables[tableName] = {\n count: Number.isNaN(count) ? 0 : count,\n };\n } catch {\n tables[tableName] = { count: 0 };\n }\n }\n return tables;\n } finally {\n client.close();\n }\n}\n\nasync function hashFile(path: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const hash = createHash(\"sha256\");\n const stream = createReadStream(path, { highWaterMark: 1024 * 1024 });\n stream.on(\"data\", (chunk) => hash.update(chunk));\n stream.on(\"error\", reject);\n stream.on(\"end\", () => resolve(hash.digest(\"hex\")));\n });\n}\n\nfunction escapeIdentifier(name: string): string {\n const escaped = name.replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n}\n\nfunction deriveName(path: string): string {\n const parts = path.split(/[\\\\/]/);\n const last = parts[parts.length - 1] ?? path;\n const name = last.replace(/\\.[^/.]+$/, \"\");\n return name === \"\" ? \"db\" : name;\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport yaml from \"yaml\";\n\nexport type Metadata = {\n title?: string;\n description?: string;\n description_html?: string;\n license?: string;\n license_url?: string;\n source?: string;\n source_url?: string;\n about?: string;\n about_url?: string;\n databases?: Record<string, DatabaseMetadata>;\n};\n\nexport type DatabaseMetadata = {\n title?: string;\n description?: string;\n description_html?: string;\n license?: string;\n license_url?: string;\n source?: string;\n source_url?: string;\n about?: string;\n about_url?: string;\n tables?: Record<string, TableMetadata>;\n queries?: Record<string, CannedQuery>;\n};\n\nexport type TableMetadata = {\n title?: string;\n description?: string;\n description_html?: string;\n license?: string;\n license_url?: string;\n source?: string;\n source_url?: string;\n about?: string;\n about_url?: string;\n label_column?: string;\n columns?: Record<string, string>;\n facets?: Array<string | Record<string, string>>;\n sortable_columns?: string[];\n sort?: string;\n sort_desc?: string;\n};\n\nexport type CannedQuery = {\n sql: string;\n title?: string;\n description?: string;\n description_html?: string;\n};\n\nexport async function loadMetadata(\n filename: string | undefined,\n): Promise<Metadata | null> {\n if (!filename) {\n return null;\n }\n\n const contents = await fs.readFile(filename, \"utf-8\");\n const extension = path.extname(filename).toLowerCase();\n if (extension === \".yaml\" || extension === \".yml\") {\n return yaml.parse(contents) as Metadata;\n }\n if (extension === \".json\") {\n return JSON.parse(contents) as Metadata;\n }\n throw new Error(`Unsupported metadata file extension: ${extension}`);\n}\n", "type BunGlobal = {\n Bun?: unknown;\n};\n\nexport async function startServer(options: {\n registry: import(\"../core/registry.js\").DatabaseRegistry;\n auth: import(\"../core/auth.js\").AuthManager;\n port?: number;\n hostname?: string;\n}): Promise<unknown> {\n const isBun = typeof (globalThis as BunGlobal).Bun !== \"undefined\";\n if (isBun) {\n const mod = await import(\"./bun.js\");\n return mod.startBunServer(options);\n }\n\n const mod = await import(\"./node.js\");\n return mod.startNodeServer(options);\n}\n", "#!/usr/bin/env node\nimport { runCloudflareDeploy } from \"./cli/deploy-cloudflare.js\";\nimport { runInspectCommand, runServeCommand } from \"./cli/serve.js\";\n\ntry {\n await main();\n} catch (error) {\n console.error(error);\n process.exitCode = 1;\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const [command, subcommand] = args;\n\n const helpFlag = args.includes(\"--help\") || args.includes(\"-h\");\n\n if (!command || command === \"serve\" || command.startsWith(\"-\")) {\n if (!command || command.startsWith(\"-\")) {\n if (helpFlag) {\n printHelp();\n return;\n }\n }\n const serveArgs = command === \"serve\" ? args.slice(1) : args;\n if (serveArgs.includes(\"--help\") || serveArgs.includes(\"-h\")) {\n printServeHelp();\n return;\n }\n await runServeCommand(serveArgs);\n return;\n }\n\n if (command === \"inspect\") {\n const inspectArgs = args.slice(1);\n if (inspectArgs.includes(\"--help\") || inspectArgs.includes(\"-h\")) {\n printInspectHelp();\n return;\n }\n await runInspectCommand(inspectArgs);\n return;\n }\n\n if (command === \"deploy\") {\n if (subcommand !== \"cloudflare\") {\n printDeployHelp();\n process.exitCode = 1;\n return;\n }\n const deployArgs = args.slice(2);\n if (deployArgs.includes(\"--help\") || deployArgs.includes(\"-h\")) {\n printDeployHelp();\n return;\n }\n await runCloudflareDeploy(deployArgs);\n return;\n }\n\n if (command === \"help\" || command === \"--help\" || command === \"-h\") {\n printHelp();\n return;\n }\n\n console.error(`Unknown command: ${command}`);\n printHelp();\n process.exitCode = 1;\n}\n\nfunction printHelp(): void {\n console.log(`datasette-ts\n\nUsage:\n datasette-ts [serve] [db...] [options]\n datasette-ts inspect [db...] [options]\n datasette-ts deploy cloudflare <db-file> [options]\n\nRun with --help after a command to see command-specific options.`);\n}\n\nfunction printServeHelp(): void {\n console.log(`datasette-ts serve [db...] [options]\n\nOptions:\n --port <number> Port to listen on (default: 8001)\n --host <hostname> Hostname to bind (default: 127.0.0.1)\n --metadata <file> Metadata file (datasette.yaml/json)\n --inspect-file <file> Inspect data file\n --root Enable root token login\n --immutable, -i Open databases in read-only mode\n --mutable Open databases in mutable mode`);\n}\n\nfunction printInspectHelp(): void {\n console.log(`datasette-ts inspect [db...] [options]\n\nOptions:\n --inspect-file <file> Write inspect data to a file`);\n}\n\nfunction printDeployHelp(): void {\n console.log(`datasette-ts deploy cloudflare <db-file> [options]\n\nOptions:\n --db, --db-file <file> SQLite database file (positional works too)\n --db-name <name> Datasette database name (default: sqlite basename)\n --worker <name> Worker name (default: sqlite basename)\n --d1 <name> D1 database name (default: sqlite basename)\n --profile <name> Alchemy/Cloudflare profile to use\n --imports-dir <dir> Output directory for D1 import SQL\n --precompute-inspect Precompute inspect data (default)\n --no-precompute-inspect Disable inspect precompute`);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["sql", "actions", "value", "startFrom", "actions", "ref", "sql", "otel", "rawTracer", "param", "sql", "raw", "join", "placeholder", "name", "SQL", "result", "path", "init_table", "init_table", "relations", "ForeignKeyBuilder", "ForeignKey", "init_foreign_keys", "actions", "uniqueKeyName", "UniqueConstraintBuilder", "UniqueOnConstraintBuilder", "UniqueConstraint", "init_unique_constraint", "init_common", "init_foreign_keys", "init_unique_constraint", "actions", "ref", "ForeignKeyBuilder", "uniqueKeyName", "init_common", "init_common", "init_common", "init_common", "init_common", "init_common", "name", "InlineForeignKeys", "init_table", "PrimaryKeyBuilder", "PrimaryKey", "init_primary_keys", "init_table", "init_utils", "init_table", "init_table", "init_utils", "input", "init_sql", "init_common", "init_sql", "init_table", "tableColumns", "table", "select", "sql", "joinOn", "field", "init_select", "init_utils", "join", "init_query_builder", "init_select", "init_table", "init_utils", "init_query_builder", "init_table", "init_utils", "join", "init_query_builder", "init_select", "update", "sql", "init_alias", "sql", "init_subquery", "init_query_builder", "init_table", "init_alias", "init_foreign_keys", "init_primary_keys", "init_subquery", "init_table", "init_unique_constraint", "init_utils", "init_session", "rows", "init_session", "createClient", "drizzle", "init_session", "createClient", "path", "pathToFileURL", "sql", "normalizeLibsqlRows", "mod", "asString", "asNumber", "asNullableString", "isVirtualTable", "sql", "isFtsTable", "tableColumns", "escapeIdentifier", "tableForeignKeys", "introspectDatabase", "hashFile", "path", "fs", "input", "introspectDatabase", "path", "yaml", "version", "res", "res", "Node", "anchors", "Node", "match", "node", "Node", "path", "text", "i", "end", "match", "value", "stringify", "comment", "str", "map", "seq", "require_schema", "pairs", "omap", "require_bool", "require_float", "require_int", "n", "set", "res", "match", "require_schema", "tags", "Schema", "Schema", "version", "path", "res", "value", "end", "match", "raw", "tag", "path", "i", "ch", "start", "fs", "lineCounter", "Schema", "form", "path", "match", "cacheKey", "path", "raw", "text", "match", "text", "html", "html2", "init_constants", "init_constants", "path", "input", "path", "path2", "init_node", "init_node", "path", "path", "init_router", "init_node", "path2", "init_router", "init_router", "init_router", "path", "init_router", "Node", "init_node", "_Node", "path", "init_router", "init_node", "Node", "path", "init_router", "Hono", "init_html", "init_constants", "init_utils", "init_constants", "init_context", "init_constants", "init_utils", "createContext", "init_context", "init_html", "init_constants", "init_common", "init_html", "init_constants", "init_context", "init_common", "nameSpaceContext", "init_utils", "style", "init_html", "init_constants", "init_context", "init_common", "init_utils", "createContext", "nameSpaceContext", "getNameSpaceContext", "init_constants", "init_context", "init_utils", "match", "style", "errorHandler", "resolve", "init_constants", "init_hooks", "init_constants", "init_context", "components_exports", "button", "form", "input", "link", "meta", "script", "style", "title", "documentMetadataTag", "formActionableElement", "init_components", "init_context", "init_common", "init_hooks", "cacheKey", "resolve", "nameSpaceContext", "getNameSpaceContext", "Fragment", "init_components", "components_exports", "init_components", "init_constants", "Fragment", "Suspense", "init_html", "init_components", "init_constants", "init_context", "createContext", "html", "html2", "ErrorBoundary", "init_components", "init_html", "init_constants", "init_context", "html", "html2", "init_components", "init_context", "init_hooks", "init_html", "createContext", "input", "clauses", "params", "sql", "raw", "sql", "init_table", "sql", "escapeIdentifier", "sql", "init_query", "init_columns", "desc", "key", "sql", "escapeIdentifier", "sql", "timings", "parseBooleanParam", "text", "init_table", "init_query", "init_columns", "sql", "actor", "csv", "headers", "parseBooleanParam", "text", "init_table", "init_columns", "init_query", "init_foreign_keys", "raw", "jsxDEV", "init_jsx_dev_runtime", "init_jsx_runtime", "init_jsx_dev_runtime", "init_html", "init_utils", "stat", "parseJsonPath", "jsxDEV", "sql", "timings", "table", "labelConfig", "databaseColor", "parseBooleanParam", "getMetadataFacets", "escapeSqliteIdentifier", "collectQueryParams", "input", "raw", "isTextType", "match", "escapeIdentifier", "link", "init_html", "init_table", "init_query", "init_columns", "init_foreign_keys", "init_jsx_runtime", "Hono", "jsxDEV", "path", "init_html", "init_jsx_runtime", "path", "readFile", "path", "createHash", "crypto", "Request", "init_dist", "input", "resolve", "node_exports", "init_node", "init_dist", "stat", "sql", "resolve", "path", "stat", "stat", "writeFile", "join", "createHash", "createReadStream", "stat", "raw", "deriveName", "hashFile", "countTables", "escapeIdentifier", "path", "resolve", "path", "yaml", "mod", "parseNamedArg", "writeFile", "deriveName", "join", "stat", "path"]
7
+ }