@graphext/cuery 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/esm/_dnt.shims.d.ts +6 -0
- package/esm/_dnt.shims.d.ts.map +1 -0
- package/esm/_dnt.shims.js +61 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/index.js +4 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts +2 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.js +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts +18 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.js +17 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts +51 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.js +31 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts +31 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.js +48 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts +14 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.js +18 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts +23 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.js +30 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts +32 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.js +15 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts +674 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.js +1040 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts +296 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.js +925 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts +279 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.js +560 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts +53 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.js +65 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts +15 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.js +36 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts +211 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.js +181 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts +15 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.js +14 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts +89 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.js +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts +50 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.js +93 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts +79 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.js +127 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts +36 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.js +52 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts +1115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.js +1954 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts +56 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.js +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts +91 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.js +920 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts +198 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.js +600 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.js +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.js +164 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.js +128 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.js +118 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.js +135 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.js +131 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.js +149 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.js +122 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.js +122 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts +48 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.js +47 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.js +125 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.js +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.js +121 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.js +230 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.js +118 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.js +122 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.js +164 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.js +118 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.js +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.js +117 -0
- package/esm/mod.d.ts +23 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +22 -0
- package/esm/package.json +3 -0
- package/esm/src/api.d.ts +42 -0
- package/esm/src/api.d.ts.map +1 -0
- package/esm/src/api.js +161 -0
- package/esm/src/apis/chatgptScraper/brightdata.d.ts +3 -0
- package/esm/src/apis/chatgptScraper/brightdata.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/brightdata.js +172 -0
- package/esm/src/apis/chatgptScraper/index.d.ts +10 -0
- package/esm/src/apis/chatgptScraper/index.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/index.js +41 -0
- package/esm/src/apis/chatgptScraper/oxy.d.ts +3 -0
- package/esm/src/apis/chatgptScraper/oxy.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/oxy.js +156 -0
- package/esm/src/apis/chatgptScraper/scraper.d.ts +46 -0
- package/esm/src/apis/chatgptScraper/scraper.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/scraper.js +98 -0
- package/esm/src/apis/googleAds/apiTypes.d.ts +131 -0
- package/esm/src/apis/googleAds/apiTypes.d.ts.map +1 -0
- package/esm/src/apis/googleAds/apiTypes.js +1 -0
- package/esm/src/apis/googleAds/client.d.ts +2 -0
- package/esm/src/apis/googleAds/client.d.ts.map +1 -0
- package/esm/src/apis/googleAds/client.js +97 -0
- package/esm/src/apis/googleAds/countryResourceMap.d.ts +2 -0
- package/esm/src/apis/googleAds/countryResourceMap.d.ts.map +1 -0
- package/esm/src/apis/googleAds/countryResourceMap.js +874 -0
- package/esm/src/apis/googleAds/keywordPlanner.d.ts +64 -0
- package/esm/src/apis/googleAds/keywordPlanner.d.ts.map +1 -0
- package/esm/src/apis/googleAds/keywordPlanner.js +462 -0
- package/esm/src/apis/googleAds/languageResourceMap.d.ts +2 -0
- package/esm/src/apis/googleAds/languageResourceMap.d.ts.map +1 -0
- package/esm/src/apis/googleAds/languageResourceMap.js +208 -0
- package/esm/src/apis/hasdata/aim.d.ts +4 -0
- package/esm/src/apis/hasdata/aim.d.ts.map +1 -0
- package/esm/src/apis/hasdata/aim.js +32 -0
- package/esm/src/apis/hasdata/aio.d.ts +4 -0
- package/esm/src/apis/hasdata/aio.d.ts.map +1 -0
- package/esm/src/apis/hasdata/aio.js +42 -0
- package/esm/src/apis/hasdata/helpers.d.ts +55 -0
- package/esm/src/apis/hasdata/helpers.d.ts.map +1 -0
- package/esm/src/apis/hasdata/helpers.js +182 -0
- package/esm/src/async.d.ts +29 -0
- package/esm/src/async.d.ts.map +1 -0
- package/esm/src/async.js +109 -0
- package/esm/src/models.d.ts +18 -0
- package/esm/src/models.d.ts.map +1 -0
- package/esm/src/models.js +48 -0
- package/esm/src/openai.d.ts +17 -0
- package/esm/src/openai.d.ts.map +1 -0
- package/esm/src/openai.js +136 -0
- package/esm/src/schemas/brand.schema.d.ts +182 -0
- package/esm/src/schemas/brand.schema.d.ts.map +1 -0
- package/esm/src/schemas/brand.schema.js +49 -0
- package/esm/src/schemas/entity.schema.d.ts +14 -0
- package/esm/src/schemas/entity.schema.d.ts.map +1 -0
- package/esm/src/schemas/entity.schema.js +8 -0
- package/esm/src/schemas/funnel.schema.d.ts +94 -0
- package/esm/src/schemas/funnel.schema.d.ts.map +1 -0
- package/esm/src/schemas/funnel.schema.js +46 -0
- package/esm/src/schemas/index.d.ts +21 -0
- package/esm/src/schemas/index.d.ts.map +1 -0
- package/esm/src/schemas/index.js +13 -0
- package/esm/src/schemas/keyword.schema.d.ts +44 -0
- package/esm/src/schemas/keyword.schema.d.ts.map +1 -0
- package/esm/src/schemas/keyword.schema.js +6 -0
- package/esm/src/schemas/models.schema.d.ts +6 -0
- package/esm/src/schemas/models.schema.d.ts.map +1 -0
- package/esm/src/schemas/models.schema.js +1 -0
- package/esm/src/schemas/persona.schema.d.ts +50 -0
- package/esm/src/schemas/persona.schema.d.ts.map +1 -0
- package/esm/src/schemas/persona.schema.js +21 -0
- package/esm/src/schemas/pipeline.schema.d.ts +146 -0
- package/esm/src/schemas/pipeline.schema.d.ts.map +1 -0
- package/esm/src/schemas/pipeline.schema.js +16 -0
- package/esm/src/schemas/search.schema.d.ts +29 -0
- package/esm/src/schemas/search.schema.d.ts.map +1 -0
- package/esm/src/schemas/search.schema.js +1 -0
- package/esm/src/schemas/seedKeyword.schema.d.ts +15 -0
- package/esm/src/schemas/seedKeyword.schema.d.ts.map +1 -0
- package/esm/src/schemas/seedKeyword.schema.js +7 -0
- package/esm/src/schemas/sentiment.schema.d.ts +22 -0
- package/esm/src/schemas/sentiment.schema.d.ts.map +1 -0
- package/esm/src/schemas/sentiment.schema.js +9 -0
- package/esm/src/schemas/sources.schema.d.ts +29 -0
- package/esm/src/schemas/sources.schema.d.ts.map +1 -0
- package/esm/src/schemas/sources.schema.js +1 -0
- package/esm/src/schemas/topics.schema.d.ts +33 -0
- package/esm/src/schemas/topics.schema.d.ts.map +1 -0
- package/esm/src/schemas/topics.schema.js +14 -0
- package/esm/src/tools/brands.d.ts +55 -0
- package/esm/src/tools/brands.d.ts.map +1 -0
- package/esm/src/tools/brands.js +458 -0
- package/esm/src/tools/classifier.d.ts +17 -0
- package/esm/src/tools/classifier.d.ts.map +1 -0
- package/esm/src/tools/classifier.js +135 -0
- package/esm/src/tools/entities.d.ts +19 -0
- package/esm/src/tools/entities.d.ts.map +1 -0
- package/esm/src/tools/entities.js +80 -0
- package/esm/src/tools/funnel.d.ts +41 -0
- package/esm/src/tools/funnel.d.ts.map +1 -0
- package/esm/src/tools/funnel.js +372 -0
- package/esm/src/tools/keywords.d.ts +21 -0
- package/esm/src/tools/keywords.d.ts.map +1 -0
- package/esm/src/tools/keywords.js +172 -0
- package/esm/src/tools/personas.d.ts +3 -0
- package/esm/src/tools/personas.d.ts.map +1 -0
- package/esm/src/tools/personas.js +88 -0
- package/esm/src/tools/scorer.d.ts +14 -0
- package/esm/src/tools/scorer.d.ts.map +1 -0
- package/esm/src/tools/scorer.js +54 -0
- package/esm/src/tools/search.d.ts +24 -0
- package/esm/src/tools/search.d.ts.map +1 -0
- package/esm/src/tools/search.js +130 -0
- package/esm/src/tools/seedKeywords.d.ts +68 -0
- package/esm/src/tools/seedKeywords.d.ts.map +1 -0
- package/esm/src/tools/seedKeywords.js +214 -0
- package/esm/src/tools/sentiment.d.ts +11 -0
- package/esm/src/tools/sentiment.d.ts.map +1 -0
- package/esm/src/tools/sentiment.js +68 -0
- package/esm/src/tools/sources.d.ts +39 -0
- package/esm/src/tools/sources.d.ts.map +1 -0
- package/esm/src/tools/sources.js +263 -0
- package/esm/src/tools/topics.d.ts +74 -0
- package/esm/src/tools/topics.d.ts.map +1 -0
- package/esm/src/tools/topics.js +229 -0
- package/esm/src/tools/translate.d.ts +44 -0
- package/esm/src/tools/translate.d.ts.map +1 -0
- package/esm/src/tools/translate.js +112 -0
- package/esm/src/urls.d.ts +10 -0
- package/esm/src/urls.d.ts.map +1 -0
- package/esm/src/urls.js +49 -0
- package/esm/src/utils.d.ts +38 -0
- package/esm/src/utils.d.ts.map +1 -0
- package/esm/src/utils.js +175 -0
- package/package.json +32 -0
- package/script/_dnt.shims.d.ts +6 -0
- package/script/_dnt.shims.d.ts.map +1 -0
- package/script/_dnt.shims.js +65 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/index.js +43 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts +2 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.js +32 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts +18 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.js +57 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts +51 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.js +71 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts +31 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.js +84 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts +14 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.js +80 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts +23 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.js +70 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts +32 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.js +51 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts +674 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.js +1161 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts +296 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.js +1066 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts +279 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.js +596 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts +53 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.js +72 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts +15 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.js +40 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts +211 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.js +222 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts +15 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.js +53 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts +89 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.js +2 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts +50 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.js +141 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts +79 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.js +136 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts +36 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.js +57 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts +1115 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.js +1995 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts +56 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.js +2 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts +91 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.js +925 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts +198 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.js +657 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.js +8 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.js +151 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.js +200 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.js +166 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.js +171 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.js +167 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.js +155 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.js +185 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.js +158 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.js +158 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts +48 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.js +100 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.js +155 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.js +151 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.js +163 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.js +11 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.js +157 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.js +268 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.js +158 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.js +200 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.js +11 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.js +151 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.js +153 -0
- package/script/mod.d.ts +23 -0
- package/script/mod.d.ts.map +1 -0
- package/script/mod.js +38 -0
- package/script/package.json +3 -0
- package/script/src/api.d.ts +42 -0
- package/script/src/api.d.ts.map +1 -0
- package/script/src/api.js +172 -0
- package/script/src/apis/chatgptScraper/brightdata.d.ts +3 -0
- package/script/src/apis/chatgptScraper/brightdata.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/brightdata.js +208 -0
- package/script/src/apis/chatgptScraper/index.d.ts +10 -0
- package/script/src/apis/chatgptScraper/index.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/index.js +81 -0
- package/script/src/apis/chatgptScraper/oxy.d.ts +3 -0
- package/script/src/apis/chatgptScraper/oxy.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/oxy.js +192 -0
- package/script/src/apis/chatgptScraper/scraper.d.ts +46 -0
- package/script/src/apis/chatgptScraper/scraper.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/scraper.js +139 -0
- package/script/src/apis/googleAds/apiTypes.d.ts +131 -0
- package/script/src/apis/googleAds/apiTypes.d.ts.map +1 -0
- package/script/src/apis/googleAds/apiTypes.js +2 -0
- package/script/src/apis/googleAds/client.d.ts +2 -0
- package/script/src/apis/googleAds/client.d.ts.map +1 -0
- package/script/src/apis/googleAds/client.js +133 -0
- package/script/src/apis/googleAds/countryResourceMap.d.ts +2 -0
- package/script/src/apis/googleAds/countryResourceMap.d.ts.map +1 -0
- package/script/src/apis/googleAds/countryResourceMap.js +877 -0
- package/script/src/apis/googleAds/keywordPlanner.d.ts +64 -0
- package/script/src/apis/googleAds/keywordPlanner.d.ts.map +1 -0
- package/script/src/apis/googleAds/keywordPlanner.js +465 -0
- package/script/src/apis/googleAds/languageResourceMap.d.ts +2 -0
- package/script/src/apis/googleAds/languageResourceMap.d.ts.map +1 -0
- package/script/src/apis/googleAds/languageResourceMap.js +211 -0
- package/script/src/apis/hasdata/aim.d.ts +4 -0
- package/script/src/apis/hasdata/aim.d.ts.map +1 -0
- package/script/src/apis/hasdata/aim.js +36 -0
- package/script/src/apis/hasdata/aio.d.ts +4 -0
- package/script/src/apis/hasdata/aio.d.ts.map +1 -0
- package/script/src/apis/hasdata/aio.js +46 -0
- package/script/src/apis/hasdata/helpers.d.ts +55 -0
- package/script/src/apis/hasdata/helpers.d.ts.map +1 -0
- package/script/src/apis/hasdata/helpers.js +222 -0
- package/script/src/async.d.ts +29 -0
- package/script/src/async.d.ts.map +1 -0
- package/script/src/async.js +148 -0
- package/script/src/models.d.ts +18 -0
- package/script/src/models.d.ts.map +1 -0
- package/script/src/models.js +52 -0
- package/script/src/openai.d.ts +17 -0
- package/script/src/openai.d.ts.map +1 -0
- package/script/src/openai.js +175 -0
- package/script/src/schemas/brand.schema.d.ts +182 -0
- package/script/src/schemas/brand.schema.d.ts.map +1 -0
- package/script/src/schemas/brand.schema.js +52 -0
- package/script/src/schemas/entity.schema.d.ts +14 -0
- package/script/src/schemas/entity.schema.d.ts.map +1 -0
- package/script/src/schemas/entity.schema.js +11 -0
- package/script/src/schemas/funnel.schema.d.ts +94 -0
- package/script/src/schemas/funnel.schema.d.ts.map +1 -0
- package/script/src/schemas/funnel.schema.js +49 -0
- package/script/src/schemas/index.d.ts +21 -0
- package/script/src/schemas/index.d.ts.map +1 -0
- package/script/src/schemas/index.js +14 -0
- package/script/src/schemas/keyword.schema.d.ts +44 -0
- package/script/src/schemas/keyword.schema.d.ts.map +1 -0
- package/script/src/schemas/keyword.schema.js +9 -0
- package/script/src/schemas/models.schema.d.ts +6 -0
- package/script/src/schemas/models.schema.d.ts.map +1 -0
- package/script/src/schemas/models.schema.js +2 -0
- package/script/src/schemas/persona.schema.d.ts +50 -0
- package/script/src/schemas/persona.schema.d.ts.map +1 -0
- package/script/src/schemas/persona.schema.js +24 -0
- package/script/src/schemas/pipeline.schema.d.ts +146 -0
- package/script/src/schemas/pipeline.schema.d.ts.map +1 -0
- package/script/src/schemas/pipeline.schema.js +17 -0
- package/script/src/schemas/search.schema.d.ts +29 -0
- package/script/src/schemas/search.schema.d.ts.map +1 -0
- package/script/src/schemas/search.schema.js +2 -0
- package/script/src/schemas/seedKeyword.schema.d.ts +15 -0
- package/script/src/schemas/seedKeyword.schema.d.ts.map +1 -0
- package/script/src/schemas/seedKeyword.schema.js +8 -0
- package/script/src/schemas/sentiment.schema.d.ts +22 -0
- package/script/src/schemas/sentiment.schema.d.ts.map +1 -0
- package/script/src/schemas/sentiment.schema.js +12 -0
- package/script/src/schemas/sources.schema.d.ts +29 -0
- package/script/src/schemas/sources.schema.d.ts.map +1 -0
- package/script/src/schemas/sources.schema.js +2 -0
- package/script/src/schemas/topics.schema.d.ts +33 -0
- package/script/src/schemas/topics.schema.d.ts.map +1 -0
- package/script/src/schemas/topics.schema.js +17 -0
- package/script/src/tools/brands.d.ts +55 -0
- package/script/src/tools/brands.d.ts.map +1 -0
- package/script/src/tools/brands.js +470 -0
- package/script/src/tools/classifier.d.ts +17 -0
- package/script/src/tools/classifier.d.ts.map +1 -0
- package/script/src/tools/classifier.js +141 -0
- package/script/src/tools/entities.d.ts +19 -0
- package/script/src/tools/entities.d.ts.map +1 -0
- package/script/src/tools/entities.js +88 -0
- package/script/src/tools/funnel.d.ts +41 -0
- package/script/src/tools/funnel.d.ts.map +1 -0
- package/script/src/tools/funnel.js +381 -0
- package/script/src/tools/keywords.d.ts +21 -0
- package/script/src/tools/keywords.d.ts.map +1 -0
- package/script/src/tools/keywords.js +190 -0
- package/script/src/tools/personas.d.ts +3 -0
- package/script/src/tools/personas.d.ts.map +1 -0
- package/script/src/tools/personas.js +91 -0
- package/script/src/tools/scorer.d.ts +14 -0
- package/script/src/tools/scorer.d.ts.map +1 -0
- package/script/src/tools/scorer.js +59 -0
- package/script/src/tools/search.d.ts +24 -0
- package/script/src/tools/search.d.ts.map +1 -0
- package/script/src/tools/search.js +135 -0
- package/script/src/tools/seedKeywords.d.ts +68 -0
- package/script/src/tools/seedKeywords.d.ts.map +1 -0
- package/script/src/tools/seedKeywords.js +220 -0
- package/script/src/tools/sentiment.d.ts +11 -0
- package/script/src/tools/sentiment.d.ts.map +1 -0
- package/script/src/tools/sentiment.js +72 -0
- package/script/src/tools/sources.d.ts +39 -0
- package/script/src/tools/sources.d.ts.map +1 -0
- package/script/src/tools/sources.js +273 -0
- package/script/src/tools/topics.d.ts +74 -0
- package/script/src/tools/topics.d.ts.map +1 -0
- package/script/src/tools/topics.js +237 -0
- package/script/src/tools/translate.d.ts +44 -0
- package/script/src/tools/translate.d.ts.map +1 -0
- package/script/src/tools/translate.js +118 -0
- package/script/src/urls.d.ts +10 -0
- package/script/src/urls.d.ts.map +1 -0
- package/script/src/urls.js +53 -0
- package/script/src/utils.d.ts +38 -0
- package/script/src/utils.d.ts.map +1 -0
- package/script/src/utils.js +183 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../../src/src/tools/topics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,gDAAgD,CAAC;AAEnE,OAAO,EAAsC,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjF,OAAO,EAEN,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,MAAM,6BAA6B,CAAC;AAIrC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAuEpD;;;GAGG;AACH,eAAO,MAAM,KAAK;;;iBAShB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;iBAEvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;iBAEnB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAKpH;AACD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY;;;;;;;kBAmBvD;AAyCD;;GAEG;AACH,wBAAsB,WAAW,CAChC,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,QAAQ,EAAE,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,EAClD,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAClC,KAAK,GAAE,MAAkB,EACzB,WAAW,GAAE,QAA4C,GACvD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA2B5B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAC3B,QAAQ,EAAE,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,EACzC,KAAK,GAAE,MAAkB,EACzB,WAAW,GAAE,QAA4C,EACzD,cAAc,GAAE,MAAY,GAC1B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAgBnC;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,EACnC,OAAO,EACP,OAAY,EACZ,UAAc,EACd,YAAiB,EACjB,UAAgB,EAChB,KAAiB,EACjB,WAAgB,EAChB,UAAc,EACd,QAA6C,EAC7C,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsChD"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/* eslint no-console: ["warn", { allow: ["log", "warn", "error"] }] */
|
|
2
|
+
import { z } from '../../deps/jsr.io/@zod/zod/4.1.12/src/index.js';
|
|
3
|
+
import { mapParallel } from '../async.js';
|
|
4
|
+
import { askOpenAISafe } from '../openai.js';
|
|
5
|
+
import { TopicSchema } from '../schemas/topics.schema.js';
|
|
6
|
+
import { dedent, formatRecordsAttrWise } from '../utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Levenshtein distance implementation for string similarity validation
|
|
9
|
+
*/
|
|
10
|
+
function levenshteinDistance(a, b) {
|
|
11
|
+
if (a.length === 0)
|
|
12
|
+
return b.length;
|
|
13
|
+
if (b.length === 0)
|
|
14
|
+
return a.length;
|
|
15
|
+
const matrix = Array(a.length + 1).fill(null).map(() => Array(b.length + 1).fill(0));
|
|
16
|
+
for (let i = 0; i <= a.length; i++) {
|
|
17
|
+
matrix[i][0] = i;
|
|
18
|
+
}
|
|
19
|
+
for (let j = 0; j <= b.length; j++) {
|
|
20
|
+
matrix[0][j] = j;
|
|
21
|
+
}
|
|
22
|
+
for (let i = 1; i <= a.length; i++) {
|
|
23
|
+
for (let j = 1; j <= b.length; j++) {
|
|
24
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
25
|
+
matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion
|
|
26
|
+
matrix[i][j - 1] + 1, // insertion
|
|
27
|
+
matrix[i - 1][j - 1] + cost // substitution
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return matrix[a.length][b.length];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validates that subtopics are sufficiently distinct from each other and from the parent topic.
|
|
35
|
+
*/
|
|
36
|
+
function validateSubtopics(topic, subtopics) {
|
|
37
|
+
const MIN_LDIST = 2;
|
|
38
|
+
const subtopicsLower = subtopics.map((st) => st.toLowerCase());
|
|
39
|
+
const errors = [];
|
|
40
|
+
for (let i = 0; i < subtopicsLower.length; i++) {
|
|
41
|
+
const st = subtopicsLower[i];
|
|
42
|
+
// Subtopics should not be too similar to their parent topic
|
|
43
|
+
if (levenshteinDistance(st, topic.toLowerCase()) < MIN_LDIST) {
|
|
44
|
+
errors.push(`Subtopic '${st}' too similar to parent topic '${topic}'.`);
|
|
45
|
+
}
|
|
46
|
+
// Subtopics should not be too similar to each other
|
|
47
|
+
for (let j = i + 1; j < subtopicsLower.length; j++) {
|
|
48
|
+
const other = subtopicsLower[j];
|
|
49
|
+
// Check Levenshtein distance for similarity
|
|
50
|
+
if (levenshteinDistance(st.replace(/ /g, ''), other.replace(/ /g, '')) < MIN_LDIST) {
|
|
51
|
+
errors.push(`Subtopic '${st}' too similar to other subtopic '${other}'.`);
|
|
52
|
+
}
|
|
53
|
+
// Check for permutations of words
|
|
54
|
+
const stWords = new Set(st.split(' '));
|
|
55
|
+
const otherWords = new Set(other.split(' '));
|
|
56
|
+
if (stWords.size === otherWords.size &&
|
|
57
|
+
[...stWords].every(word => otherWords.has(word))) {
|
|
58
|
+
errors.push(`Subtopic '${st}' is a duplicate (permutation) of subtopic '${other}'.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return errors;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Topic schema with subtopic validation
|
|
66
|
+
* Validates that subtopics are sufficiently distinct from each other and from the parent topic.
|
|
67
|
+
*/
|
|
68
|
+
export const Topic = TopicSchema.superRefine(({ topic, subtopics }, ctx) => {
|
|
69
|
+
const errors = validateSubtopics(topic, subtopics);
|
|
70
|
+
for (const error of errors) {
|
|
71
|
+
ctx.addIssue({
|
|
72
|
+
code: 'custom',
|
|
73
|
+
message: error,
|
|
74
|
+
path: ['subtopics']
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
/**
|
|
79
|
+
* Taxonomy schema WITHOUT validation for fallback parsing
|
|
80
|
+
*/
|
|
81
|
+
export const TaxonomyBase = z.object({
|
|
82
|
+
topics: z.array(TopicSchema)
|
|
83
|
+
});
|
|
84
|
+
/**
|
|
85
|
+
* Taxonomy schema with topic validation
|
|
86
|
+
*/
|
|
87
|
+
export const Taxonomy = z.object({
|
|
88
|
+
topics: z.array(Topic)
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* Converts a taxonomy in the format Record<string, Array<string>> to an array
|
|
92
|
+
* of topic objects compatible with the Topic schema.
|
|
93
|
+
*/
|
|
94
|
+
export function toTopics(taxonomy) {
|
|
95
|
+
return Object.entries(taxonomy).map(([topic, subtopics]) => ({
|
|
96
|
+
topic,
|
|
97
|
+
subtopics
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Creates a dynamic TopicLabel schema based on a topic hierarchy
|
|
102
|
+
* Validates that subtopic belongs to the correct topic
|
|
103
|
+
*/
|
|
104
|
+
export function createLabelSchema(taxonomy) {
|
|
105
|
+
const topicNames = taxonomy.topics.map(t => t.topic);
|
|
106
|
+
const allSubtopics = taxonomy.topics.flatMap(t => t.subtopics);
|
|
107
|
+
return z.object({
|
|
108
|
+
topic: z.enum(topicNames),
|
|
109
|
+
subtopic: z.enum(allSubtopics)
|
|
110
|
+
}).superRefine((data, ctx) => {
|
|
111
|
+
const topicEntry = taxonomy.topics.find(t => t.topic === data.topic);
|
|
112
|
+
const allowedSubtopics = topicEntry?.subtopics || [];
|
|
113
|
+
if (!allowedSubtopics.includes(data.subtopic)) {
|
|
114
|
+
ctx.addIssue({
|
|
115
|
+
code: 'custom',
|
|
116
|
+
message: `Subtopic '${data.subtopic}' is not a valid subtopic for topic '${data.topic}'. ` +
|
|
117
|
+
`Allowed subtopics are: ${allowedSubtopics.join(', ')}.`,
|
|
118
|
+
path: ['subtopic']
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const TOPICS_PROMPT = dedent(`
|
|
124
|
+
# Instructions
|
|
125
|
+
|
|
126
|
+
From the data records below, extract a two-level nested list of topics.
|
|
127
|
+
The output should be a JSON object with top-level topics as keys and lists of subtopics as values.
|
|
128
|
+
The top-level should not contain more than {n_topics} topics, and each top-level
|
|
129
|
+
should not contain more than {n_subtopics} subtopics.
|
|
130
|
+
|
|
131
|
+
Make sure top-level topics are generalizable and capture broad themes.
|
|
132
|
+
Subtopics should represent more specific categories within each theme.
|
|
133
|
+
Both topics and subtopics must be written in {language}.
|
|
134
|
+
|
|
135
|
+
{instructions}
|
|
136
|
+
|
|
137
|
+
# Data Records
|
|
138
|
+
|
|
139
|
+
{records}
|
|
140
|
+
`);
|
|
141
|
+
const LABEL_PROMPT_SYSTEM = dedent(`
|
|
142
|
+
You're task is to use the following hierarchy of topics and subtopics (in json format),
|
|
143
|
+
to assign the correct topic and subtopic to each text in the input.
|
|
144
|
+
You cannot invent new topics or subtopics.
|
|
145
|
+
You cannot assign a subtopic that does not belong to the assigned topic.
|
|
146
|
+
|
|
147
|
+
# Topics
|
|
148
|
+
|
|
149
|
+
{taxonomy}
|
|
150
|
+
`);
|
|
151
|
+
const LABEL_PROMPT_USER = dedent(`
|
|
152
|
+
Assign the correct topic and subtopic to the following text.
|
|
153
|
+
|
|
154
|
+
# Text
|
|
155
|
+
|
|
156
|
+
{text}
|
|
157
|
+
`);
|
|
158
|
+
/**
|
|
159
|
+
* Assigns a topic and subtopic to a single text using an LLM call.
|
|
160
|
+
*/
|
|
161
|
+
export async function assignTopic(text, taxonomy, labelSchema, model = 'gpt-5.1', modelParams = { reasoning: { effort: 'none' } }) {
|
|
162
|
+
if (text == null || text.trim() === '') {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const systemPrompt = LABEL_PROMPT_SYSTEM.replace('{taxonomy}', typeof taxonomy === 'string' ? taxonomy : JSON.stringify(taxonomy, null, 2));
|
|
166
|
+
const userPrompt = LABEL_PROMPT_USER.replace('{text}', text);
|
|
167
|
+
const prompts = [
|
|
168
|
+
{ role: 'system', content: systemPrompt },
|
|
169
|
+
{ role: 'user', content: userPrompt }
|
|
170
|
+
];
|
|
171
|
+
try {
|
|
172
|
+
const { parsed, error } = await askOpenAISafe(prompts, model, labelSchema, modelParams);
|
|
173
|
+
if (error != null || parsed == null) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
return parsed;
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
console.warn(`Failed to assign topic for text "${text.substring(0, 50)}...":`, error);
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Assigns topics to multiple texts concurrently while preserving order.
|
|
185
|
+
*/
|
|
186
|
+
export function assignTopics(texts, taxonomy, model = 'gpt-5.1', modelParams = { reasoning: { effort: 'none' } }, maxConcurrency = 100) {
|
|
187
|
+
// Precompute normalized taxonomy and label schema once for whole batch
|
|
188
|
+
const normalizedTaxonomy = Array.isArray(taxonomy)
|
|
189
|
+
? { topics: taxonomy }
|
|
190
|
+
: taxonomy;
|
|
191
|
+
const labelSchema = createLabelSchema(normalizedTaxonomy);
|
|
192
|
+
const serializedTaxonomy = JSON.stringify(normalizedTaxonomy, null, 2);
|
|
193
|
+
return mapParallel(texts, maxConcurrency, text => assignTopic(text, serializedTaxonomy, labelSchema, model, modelParams));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Extracts a topic hierarchy from an array of records using an LLM.
|
|
197
|
+
*/
|
|
198
|
+
export async function extractTopics({ records, nTopics = 10, nSubtopics = 5, instructions = '', maxSamples = 500, model = 'gpt-4.1', modelParams = {}, maxRetries = 8, language = 'The same language as the records' }) {
|
|
199
|
+
if (!records || records.length === 0) {
|
|
200
|
+
return { topics: [] };
|
|
201
|
+
}
|
|
202
|
+
const sampledRecords = records.length > maxSamples
|
|
203
|
+
? records.slice(0, maxSamples)
|
|
204
|
+
: records;
|
|
205
|
+
const formattedRecords = formatRecordsAttrWise(sampledRecords);
|
|
206
|
+
const prompt = TOPICS_PROMPT
|
|
207
|
+
.replace('{n_topics}', String(nTopics))
|
|
208
|
+
.replace('{n_subtopics}', String(nSubtopics))
|
|
209
|
+
.replace('{instructions}', instructions)
|
|
210
|
+
.replace('{records}', formattedRecords)
|
|
211
|
+
.replace('{language}', language);
|
|
212
|
+
const { parsed, output_text, error } = await askOpenAISafe(prompt, model, Taxonomy, modelParams, maxRetries, 'return');
|
|
213
|
+
if (error != null) {
|
|
214
|
+
if (output_text == null) {
|
|
215
|
+
throw new Error('Failed to get response from OpenAI');
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
const taxonomy = JSON.parse(output_text);
|
|
219
|
+
return TaxonomyBase.parse(taxonomy);
|
|
220
|
+
}
|
|
221
|
+
catch (parseError) {
|
|
222
|
+
throw new Error(`Failed to parse response even without validation: ${parseError instanceof Error ? parseError.message : String(parseError)}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (parsed == null) {
|
|
226
|
+
throw new Error('Failed to parse response from OpenAI');
|
|
227
|
+
}
|
|
228
|
+
return parsed;
|
|
229
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { BrandContext } from '../schemas/brand.schema.js';
|
|
2
|
+
export interface translateParams {
|
|
3
|
+
keyword: string;
|
|
4
|
+
language?: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
instructions?: string;
|
|
7
|
+
brandContext: BrandContext;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Translates a single Google search keyword into an equivalent LLM prompt.
|
|
11
|
+
*/
|
|
12
|
+
export declare function translate({ keyword, language, model, brandContext, instructions }: translateParams): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Translates multiple Google search keywords to LLM prompts concurrently while preserving order.
|
|
15
|
+
*/
|
|
16
|
+
export interface translateBatchParams {
|
|
17
|
+
keywords: Array<string>;
|
|
18
|
+
language?: string;
|
|
19
|
+
model?: string;
|
|
20
|
+
maxConcurrency?: number;
|
|
21
|
+
instructions?: string;
|
|
22
|
+
brandContext: BrandContext;
|
|
23
|
+
}
|
|
24
|
+
export declare function translateBatch(params: translateBatchParams): Promise<Array<string>>;
|
|
25
|
+
export interface reverseTranslateParams {
|
|
26
|
+
prompt: string;
|
|
27
|
+
language?: string;
|
|
28
|
+
model?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Converts a natural language prompt into an equivalent Google search keyword.
|
|
32
|
+
*/
|
|
33
|
+
export declare function reverseTranslate({ prompt, language, model }: reverseTranslateParams): Promise<string>;
|
|
34
|
+
export interface reverseTranslateBatchParams {
|
|
35
|
+
prompts: Array<string>;
|
|
36
|
+
language?: string;
|
|
37
|
+
model?: string;
|
|
38
|
+
maxConcurrency?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Converts multiple natural language prompts to Google search keywords concurrently while preserving order.
|
|
42
|
+
*/
|
|
43
|
+
export declare function reverseTranslateBatch(params: reverseTranslateBatchParams): Promise<Array<string>>;
|
|
44
|
+
//# sourceMappingURL=translate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../../src/src/tools/translate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA+C/D,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC9B,EAAE,OAAO,EAAE,QAAe,EAAE,KAAoB,EAAE,YAAY,EAAE,YAAiB,EAAE,EAAE,eAAe,GAClG,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;GAEG;AAEH,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;CAC3B;AAED,wBAAsB,cAAc,CACnC,MAAM,EAAE,oBAAoB,GAC1B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAQxB;AA4BD,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACrC,EAAE,MAAM,EAAE,QAAe,EAAE,KAAsB,EAAE,EAAE,sBAAsB,GACzE,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,2BAA2B,GACjC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAQxB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { mapParallel } from '../async.js';
|
|
2
|
+
import { askOpenAISafe } from '../openai.js';
|
|
3
|
+
import { dedent } from '../utils.js';
|
|
4
|
+
const TRANSLATE_PROMPT = dedent(`
|
|
5
|
+
You are an expert in understanding search intent and conversational AI interactions.
|
|
6
|
+
|
|
7
|
+
Convert the following Google search keyword into an equivalent natural language prompt that
|
|
8
|
+
someone would use when interacting with an LLM like ChatGPT. The LLM prompt should:
|
|
9
|
+
|
|
10
|
+
- Be conversational and natural, as if speaking to an assistant
|
|
11
|
+
- Capture the same intent and information need as the keyword
|
|
12
|
+
- Be a complete sentence or question
|
|
13
|
+
- Not be overly verbose - keep it concise but natural
|
|
14
|
+
- Be written in "{language}"
|
|
15
|
+
|
|
16
|
+
For example:
|
|
17
|
+
- "best running shoes" → "What are the best running shoes?"
|
|
18
|
+
- "how to train for marathon" → "How do I train for a marathon?"
|
|
19
|
+
- "nike air max review" → "Can you give me a review of Nike Air Max shoes?"
|
|
20
|
+
- "weather new york" → "What's the weather like in New York?"
|
|
21
|
+
|
|
22
|
+
## Brand Context Rules
|
|
23
|
+
|
|
24
|
+
You will receive brand context (sector, country). Follow these rules strictly:
|
|
25
|
+
|
|
26
|
+
1. **DO NOT** change the core intent or meaning of the keyword
|
|
27
|
+
2. **DO** use brand context to disambiguate terms when multiple interpretations exist
|
|
28
|
+
3. The keyword's original intent must be preserved - brand context only helps clarify ambiguous terms
|
|
29
|
+
|
|
30
|
+
**Example of correct disambiguation:**
|
|
31
|
+
- Keyword: "geo"
|
|
32
|
+
- Brand sector: "ai visibility search"
|
|
33
|
+
- WRONG: "Tell me about geography" (ignores sector context)
|
|
34
|
+
- CORRECT: "What is GEO in AI visibility and search optimization?" (uses sector to disambiguate the acronym)
|
|
35
|
+
|
|
36
|
+
{additional_instructions}
|
|
37
|
+
|
|
38
|
+
# Keyword
|
|
39
|
+
|
|
40
|
+
{keyword}
|
|
41
|
+
|
|
42
|
+
# Brand Context (for reference only)
|
|
43
|
+
- Sector: {sector}
|
|
44
|
+
- Country: {country}
|
|
45
|
+
|
|
46
|
+
Return only the converted prompt, nothing else.
|
|
47
|
+
`);
|
|
48
|
+
/**
|
|
49
|
+
* Translates a single Google search keyword into an equivalent LLM prompt.
|
|
50
|
+
*/
|
|
51
|
+
export async function translate({ keyword, language = 'en', model = 'gpt-5-mini', brandContext, instructions = '' }) {
|
|
52
|
+
const prompt = TRANSLATE_PROMPT
|
|
53
|
+
.replace('{keyword}', keyword)
|
|
54
|
+
.replace('{language}', language)
|
|
55
|
+
.replace('{sector}', brandContext.sector)
|
|
56
|
+
.replace('{country}', brandContext.country)
|
|
57
|
+
.replace('{additional_instructions}', instructions);
|
|
58
|
+
const { parsed } = await askOpenAISafe(prompt, model);
|
|
59
|
+
if (!parsed) {
|
|
60
|
+
throw new Error('Failed to parse translation from OpenAI response');
|
|
61
|
+
}
|
|
62
|
+
return parsed;
|
|
63
|
+
}
|
|
64
|
+
export async function translateBatch(params) {
|
|
65
|
+
const { keywords, language = 'en', model = 'gpt-4.1-mini', maxConcurrency = 100, brandContext, instructions = '' } = params;
|
|
66
|
+
return mapParallel(keywords, maxConcurrency, kwd => translate({ keyword: kwd, language, model, brandContext, instructions }));
|
|
67
|
+
}
|
|
68
|
+
const REVERSE_TRANSLATE_PROMPT = dedent(`
|
|
69
|
+
You are an expert in understanding search intent.
|
|
70
|
+
|
|
71
|
+
Convert the following natural language prompt into an equivalent Google search keyword.
|
|
72
|
+
The keyword should:
|
|
73
|
+
|
|
74
|
+
- Be concise (typically 2-5 words)
|
|
75
|
+
- Capture the core search intent
|
|
76
|
+
- Remove conversational filler and politeness
|
|
77
|
+
- Use common search terms
|
|
78
|
+
|
|
79
|
+
For example:
|
|
80
|
+
- "What are the best running shoes?" → "best running shoes"
|
|
81
|
+
- "How do I train for a marathon?" → "how to train marathon"
|
|
82
|
+
- "Can you give me a review of Nike Air Max shoes?" → "nike air max review"
|
|
83
|
+
- "What's the weather like in New York?" → "weather new york"
|
|
84
|
+
|
|
85
|
+
Make sure the keyword is in the language "{language}".
|
|
86
|
+
|
|
87
|
+
# Prompt
|
|
88
|
+
|
|
89
|
+
{prompt}
|
|
90
|
+
|
|
91
|
+
Return only the keyword, nothing else.
|
|
92
|
+
`);
|
|
93
|
+
/**
|
|
94
|
+
* Converts a natural language prompt into an equivalent Google search keyword.
|
|
95
|
+
*/
|
|
96
|
+
export async function reverseTranslate({ prompt, language = 'en', model = 'gpt-4.1-mini' }) {
|
|
97
|
+
const requestPrompt = REVERSE_TRANSLATE_PROMPT
|
|
98
|
+
.replace('{prompt}', prompt)
|
|
99
|
+
.replace('{language}', language);
|
|
100
|
+
const { parsed } = await askOpenAISafe(requestPrompt, model);
|
|
101
|
+
if (!parsed) {
|
|
102
|
+
throw new Error('Failed to parse reverse translation from OpenAI response');
|
|
103
|
+
}
|
|
104
|
+
return parsed;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Converts multiple natural language prompts to Google search keywords concurrently while preserving order.
|
|
108
|
+
*/
|
|
109
|
+
export async function reverseTranslateBatch(params) {
|
|
110
|
+
const { prompts, language = 'en', model = 'gpt-5-mini', maxConcurrency = 100 } = params;
|
|
111
|
+
return mapParallel(prompts, maxConcurrency, p => reverseTranslate({ prompt: p, language, model }));
|
|
112
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a URL, adding scheme if missing (internal helper).
|
|
3
|
+
*/
|
|
4
|
+
export declare function parseUrl(url: string): URL;
|
|
5
|
+
/**
|
|
6
|
+
* Extract the domain from a URL or hostname.
|
|
7
|
+
* Handles incomplete URLs (missing scheme), Google Translate redirects, and subdomains.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractDomain(url: string, withSubdomain?: boolean, resolveGoogleTranslate?: boolean): string;
|
|
10
|
+
//# sourceMappingURL=urls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/src/urls.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAQzC;AAaD;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE,MAAM,EACX,aAAa,GAAE,OAAe,EAC9B,sBAAsB,GAAE,OAAc,GACpC,MAAM,CA6BR"}
|
package/esm/src/urls.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { parse } from 'tldts';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a URL, adding scheme if missing (internal helper).
|
|
4
|
+
*/
|
|
5
|
+
export function parseUrl(url) {
|
|
6
|
+
let normalizedUrl = url.trim();
|
|
7
|
+
if (!normalizedUrl.startsWith('http://') && !normalizedUrl.startsWith('https://') && !normalizedUrl.startsWith('//')) {
|
|
8
|
+
normalizedUrl = 'http://' + normalizedUrl;
|
|
9
|
+
}
|
|
10
|
+
return new URL(normalizedUrl);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Check if a URL is a Google Translate URL (internal helper).
|
|
14
|
+
*/
|
|
15
|
+
function isGoogleTranslateUrl(parsedUrl) {
|
|
16
|
+
return (parsedUrl.hostname === 'translate.google.com' &&
|
|
17
|
+
parsedUrl.pathname.startsWith('/translate') &&
|
|
18
|
+
parsedUrl.searchParams.has('u'));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract the domain from a URL or hostname.
|
|
22
|
+
* Handles incomplete URLs (missing scheme), Google Translate redirects, and subdomains.
|
|
23
|
+
*/
|
|
24
|
+
export function extractDomain(url, withSubdomain = false, resolveGoogleTranslate = true) {
|
|
25
|
+
if (!url) {
|
|
26
|
+
return url;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
let targetUrl = url.trim();
|
|
30
|
+
if (resolveGoogleTranslate) {
|
|
31
|
+
const parsedUrl = parseUrl(targetUrl);
|
|
32
|
+
if (isGoogleTranslateUrl(parsedUrl)) {
|
|
33
|
+
const originalUrl = parsedUrl.searchParams.get('u');
|
|
34
|
+
if (originalUrl != null) {
|
|
35
|
+
targetUrl = originalUrl;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const extracted = parse(targetUrl);
|
|
40
|
+
if (withSubdomain) {
|
|
41
|
+
const fqdn = extracted.hostname ?? '';
|
|
42
|
+
return fqdn.replace(/^www\./, '');
|
|
43
|
+
}
|
|
44
|
+
return extracted.domain ?? url;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return url;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General utility functions for text processing, record formatting, and arrays.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Remove leading whitespace from a string, similar to Python's textwrap.dedent.
|
|
6
|
+
* Also collapses newlines within paragraphs (except for markdown list items).
|
|
7
|
+
*/
|
|
8
|
+
export declare function dedent(text: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Clean a string to make it suitable for use as a column name.
|
|
11
|
+
* Converts to lowercase, replaces non-alphanumeric characters with underscores,
|
|
12
|
+
* and removes consecutive underscores.
|
|
13
|
+
*/
|
|
14
|
+
export declare function cleanColumnName(name: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Formats records in attribute-wise format (column-oriented).
|
|
17
|
+
* Each section shows all values for a single attribute across all records.
|
|
18
|
+
* Equivalent to records_attr_wise.jinja template.
|
|
19
|
+
*
|
|
20
|
+
* @param records - Array of record objects to format
|
|
21
|
+
* @returns Formatted string with records grouped by attribute
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatRecordsAttrWise(records: Array<Record<string, unknown>>): string;
|
|
24
|
+
/**
|
|
25
|
+
* Randomly sample n elements from an array using Fisher-Yates shuffle.
|
|
26
|
+
*/
|
|
27
|
+
export declare function sampleArray<T>(array: Array<T>, n: number): Array<T>;
|
|
28
|
+
/**
|
|
29
|
+
* Deduplicates an array of records based on a single scalar field.
|
|
30
|
+
* Keeps the first occurrence of each unique value and removes subsequent duplicates.
|
|
31
|
+
*/
|
|
32
|
+
export declare function deduplicate<T extends Record<string, unknown>>(records: Array<T>, field: keyof T): Array<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Deduplicates an array of records based on a single scalar field.
|
|
35
|
+
* Keeps the last occurrence of each unique value, removing earlier duplicates.
|
|
36
|
+
*/
|
|
37
|
+
export declare function deduplicateLast<T extends Record<string, unknown>>(records: Array<T>, field: keyof T): Array<T>;
|
|
38
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8B3C;AAwCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAMD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAoCrF;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAYnE;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EACjB,KAAK,EAAE,MAAM,CAAC,GACZ,KAAK,CAAC,CAAC,CAAC,CAoBV;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EACjB,KAAK,EAAE,MAAM,CAAC,GACZ,KAAK,CAAC,CAAC,CAAC,CAgBV"}
|
package/esm/src/utils.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General utility functions for text processing, record formatting, and arrays.
|
|
3
|
+
*/
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Text Processing
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Remove leading whitespace from a string, similar to Python's textwrap.dedent.
|
|
9
|
+
* Also collapses newlines within paragraphs (except for markdown list items).
|
|
10
|
+
*/
|
|
11
|
+
export function dedent(text) {
|
|
12
|
+
/**
|
|
13
|
+
* Check if a line is a markdown list item.
|
|
14
|
+
*/
|
|
15
|
+
function isMarkdownListItem(line) {
|
|
16
|
+
const trimmedLine = line.trim();
|
|
17
|
+
// Unordered lists
|
|
18
|
+
if (trimmedLine.startsWith('- ') ||
|
|
19
|
+
trimmedLine.startsWith('* ') ||
|
|
20
|
+
trimmedLine.startsWith('+ ')) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
// Ordered lists: Detect a number or single letter followed by a dot and space
|
|
24
|
+
return /^\d+\. |^[a-zA-Z]\. /.test(trimmedLine);
|
|
25
|
+
}
|
|
26
|
+
// Clean doc: Remove leading/trailing whitespace and normalize indentation
|
|
27
|
+
const cleanedText = cleanDoc(text);
|
|
28
|
+
// Split into paragraphs
|
|
29
|
+
const paragraphs = cleanedText.split('\n\n');
|
|
30
|
+
// Replace newlines with spaces in non-list paragraphs
|
|
31
|
+
const processedParagraphs = paragraphs.map((p) => isMarkdownListItem(p) ? p : p.replace(/\n/g, ' '));
|
|
32
|
+
return processedParagraphs.join('\n\n').trim();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clean up indentation in a multi-line string (similar to Python's inspect.cleandoc).
|
|
36
|
+
* Removes leading blank lines, trailing blank lines, and common leading whitespace.
|
|
37
|
+
*/
|
|
38
|
+
function cleanDoc(text) {
|
|
39
|
+
const lines = text.split('\n');
|
|
40
|
+
// Remove leading blank lines
|
|
41
|
+
while (lines.length > 0 && lines[0].trim() === '') {
|
|
42
|
+
lines.shift();
|
|
43
|
+
}
|
|
44
|
+
// Remove trailing blank lines
|
|
45
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === '') {
|
|
46
|
+
lines.pop();
|
|
47
|
+
}
|
|
48
|
+
if (lines.length === 0) {
|
|
49
|
+
return '';
|
|
50
|
+
}
|
|
51
|
+
// Find the minimum indentation (ignoring blank lines)
|
|
52
|
+
let minIndent = Infinity;
|
|
53
|
+
for (const line of lines) {
|
|
54
|
+
if (line.trim() !== '') {
|
|
55
|
+
const indent = line.match(/^[ \t]*/)?.[0].length ?? 0;
|
|
56
|
+
minIndent = Math.min(minIndent, indent);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Remove the common leading whitespace
|
|
60
|
+
if (minIndent > 0 && minIndent !== Infinity) {
|
|
61
|
+
return lines.map((line) => line.trim() === '' ? line : line.slice(minIndent)).join('\n');
|
|
62
|
+
}
|
|
63
|
+
return lines.join('\n');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Clean a string to make it suitable for use as a column name.
|
|
67
|
+
* Converts to lowercase, replaces non-alphanumeric characters with underscores,
|
|
68
|
+
* and removes consecutive underscores.
|
|
69
|
+
*/
|
|
70
|
+
export function cleanColumnName(name) {
|
|
71
|
+
return name
|
|
72
|
+
.toLowerCase()
|
|
73
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
74
|
+
.replace(/^_+|_+$/g, '')
|
|
75
|
+
.replace(/_+/g, '_');
|
|
76
|
+
}
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// Record Formatting
|
|
79
|
+
// ============================================================================
|
|
80
|
+
/**
|
|
81
|
+
* Formats records in attribute-wise format (column-oriented).
|
|
82
|
+
* Each section shows all values for a single attribute across all records.
|
|
83
|
+
* Equivalent to records_attr_wise.jinja template.
|
|
84
|
+
*
|
|
85
|
+
* @param records - Array of record objects to format
|
|
86
|
+
* @returns Formatted string with records grouped by attribute
|
|
87
|
+
*/
|
|
88
|
+
export function formatRecordsAttrWise(records) {
|
|
89
|
+
if (!records || records.length === 0) {
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
const attributes = Object.keys(records[0]);
|
|
93
|
+
const sections = [];
|
|
94
|
+
for (const attrName of attributes) {
|
|
95
|
+
const title = attrName.replace(/_/g, ' ')
|
|
96
|
+
.split(' ')
|
|
97
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
98
|
+
.join(' ');
|
|
99
|
+
const values = [];
|
|
100
|
+
for (const record of records) {
|
|
101
|
+
const value = record[attrName];
|
|
102
|
+
if (value == null || value === '') {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
|
|
106
|
+
values.push(JSON.stringify(value));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
values.push(String(value));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (values.length > 0) {
|
|
113
|
+
sections.push(`## ${title}\n\n${values.join(', ')}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return sections.join('\n\n');
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Array Utilities
|
|
120
|
+
// ============================================================================
|
|
121
|
+
/**
|
|
122
|
+
* Randomly sample n elements from an array using Fisher-Yates shuffle.
|
|
123
|
+
*/
|
|
124
|
+
export function sampleArray(array, n) {
|
|
125
|
+
if (n >= array.length) {
|
|
126
|
+
return [...array];
|
|
127
|
+
}
|
|
128
|
+
const shuffled = [...array];
|
|
129
|
+
for (let i = shuffled.length - 1; i > 0; i--) {
|
|
130
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
131
|
+
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|
132
|
+
}
|
|
133
|
+
return shuffled.slice(0, n);
|
|
134
|
+
}
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// Deduplication
|
|
137
|
+
// ============================================================================
|
|
138
|
+
/**
|
|
139
|
+
* Deduplicates an array of records based on a single scalar field.
|
|
140
|
+
* Keeps the first occurrence of each unique value and removes subsequent duplicates.
|
|
141
|
+
*/
|
|
142
|
+
export function deduplicate(records, field) {
|
|
143
|
+
const seen = new Set();
|
|
144
|
+
const result = [];
|
|
145
|
+
for (const record of records) {
|
|
146
|
+
const value = record[field];
|
|
147
|
+
// Skip records where the field is null or undefined
|
|
148
|
+
if (value == null) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
// Only add if we haven't seen this value before
|
|
152
|
+
if (!seen.has(value)) {
|
|
153
|
+
seen.add(value);
|
|
154
|
+
result.push(record);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Deduplicates an array of records based on a single scalar field.
|
|
161
|
+
* Keeps the last occurrence of each unique value, removing earlier duplicates.
|
|
162
|
+
*/
|
|
163
|
+
export function deduplicateLast(records, field) {
|
|
164
|
+
const map = new Map();
|
|
165
|
+
for (const record of records) {
|
|
166
|
+
const value = record[field];
|
|
167
|
+
// Skip records where the field is null or undefined
|
|
168
|
+
if (value == null) {
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
// Always update, so last occurrence wins
|
|
172
|
+
map.set(value, record);
|
|
173
|
+
}
|
|
174
|
+
return Array.from(map.values());
|
|
175
|
+
}
|