@teleporthq/teleport-plugin-next-data-source 0.43.51 → 0.43.53
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/__tests__/related-items-transform.test.ts +204 -0
- package/dist/cjs/transformations/blog-post.d.ts.map +1 -1
- package/dist/cjs/transformations/blog-post.js +1 -1
- package/dist/cjs/transformations/blog-post.js.map +1 -1
- package/dist/cjs/transformations/ecommerce-product.d.ts.map +1 -1
- package/dist/cjs/transformations/ecommerce-product.js +1 -1
- package/dist/cjs/transformations/ecommerce-product.js.map +1 -1
- package/dist/cjs/transformations/index.d.ts.map +1 -1
- package/dist/cjs/transformations/index.js +15 -1
- package/dist/cjs/transformations/index.js.map +1 -1
- package/dist/cjs/transformations/shared-utils.d.ts.map +1 -1
- package/dist/cjs/transformations/shared-utils.js +1 -1
- package/dist/cjs/transformations/shared-utils.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/transformations/blog-post.d.ts.map +1 -1
- package/dist/esm/transformations/blog-post.js +1 -1
- package/dist/esm/transformations/blog-post.js.map +1 -1
- package/dist/esm/transformations/ecommerce-product.d.ts.map +1 -1
- package/dist/esm/transformations/ecommerce-product.js +1 -1
- package/dist/esm/transformations/ecommerce-product.js.map +1 -1
- package/dist/esm/transformations/index.d.ts.map +1 -1
- package/dist/esm/transformations/index.js +15 -1
- package/dist/esm/transformations/index.js.map +1 -1
- package/dist/esm/transformations/shared-utils.d.ts.map +1 -1
- package/dist/esm/transformations/shared-utils.js +1 -1
- package/dist/esm/transformations/shared-utils.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/transformations/blog-post.ts +74 -0
- package/src/transformations/ecommerce-product.ts +88 -0
- package/src/transformations/index.ts +25 -2
- package/src/transformations/shared-utils.ts +20 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"program":{"fileNames":["../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../node_modules/typescript/lib/lib.dom.d.ts","../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../teleport-types/dist/cjs/helper.d.ts","../../../teleport-types/dist/cjs/uidl.d.ts","../../../../node_modules/@babel/types/lib/index.d.ts","../../../teleport-types/dist/cjs/generators.d.ts","../../../teleport-types/dist/cjs/errors.d.ts","../../../teleport-types/dist/cjs/vuidl.d.ts","../../../teleport-types/dist/cjs/index.d.ts","../../../teleport-shared/dist/cjs/constants/index.d.ts","../../../teleport-shared/dist/cjs/utils/string-utils.d.ts","../../../teleport-shared/dist/cjs/utils/uidl-utils.d.ts","../../../teleport-shared/dist/cjs/utils/generic.d.ts","../../../teleport-shared/dist/cjs/utils/js-identifiers.d.ts","../../../teleport-shared/dist/cjs/utils/route-paths.d.ts","../../../teleport-shared/dist/cjs/utils/layout-topology.d.ts","../../../teleport-shared/dist/cjs/index.d.ts","../../src/array-mapper-pagination.ts","../../src/array-mapper-registry.ts","../../../teleport-plugin-common/dist/cjs/builders/ast-builders.d.ts","../../../teleport-plugin-common/dist/cjs/utils/parsed-ast.d.ts","../../../teleport-plugin-common/dist/cjs/builders/style-builders.d.ts","../../../teleport-plugin-common/dist/cjs/builders/hast-builders.d.ts","../../../teleport-plugin-common/dist/cjs/utils/types.d.ts","../../../teleport-plugin-common/dist/cjs/utils/ast-utils.d.ts","../../../teleport-plugin-common/dist/cjs/utils/style-utils.d.ts","../../../teleport-plugin-common/dist/cjs/utils/hast-utils.d.ts","../../../teleport-plugin-common/dist/cjs/utils/url-search-param-sync.d.ts","../../../teleport-plugin-common/dist/cjs/utils/route-utils.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-jsx/types.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-jsx/utils.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-html/types.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-html/index.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-jsx/index.d.ts","../../../teleport-plugin-common/dist/cjs/index.d.ts","../../src/utils.ts","../../src/fetchers/postgresql.ts","../../src/fetchers/mysql.ts","../../src/fetchers/mariadb.ts","../../src/fetchers/redshift.ts","../../src/fetchers/mongodb.ts","../../src/fetchers/redis.ts","../../src/fetchers/firestore.ts","../../src/fetchers/clickhouse.ts","../../src/fetchers/airtable.ts","../../src/fetchers/supabase.ts","../../src/fetchers/turso.ts","../../src/fetchers/rest-api.ts","../../src/fetchers/javascript.ts","../../src/fetchers/utils/header-detection.ts","../../src/fetchers/csv-file.ts","../../src/fetchers/google-sheets.ts","../../src/transformations/shared-utils.ts","../../src/transformations/blog-post.ts","../../src/transformations/ecommerce-product.ts","../../src/transformations/index.ts","../../src/fetchers/teleport.ts","../../src/fetchers/raw-query.ts","../../src/fetchers/index.ts","../../src/validation.ts","../../src/data-source-fetchers.ts","../../src/count-fetchers.ts","../../src/filter-utils.ts","../../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../src/sort-utils.ts","../../src/loading-state.ts","../../src/pagination-plugin.ts","../../src/index.ts","../../src/pagination-with-count.ts","../../../../node_modules/@types/node/assert.d.ts","../../../../node_modules/@types/node/assert/strict.d.ts","../../../../node_modules/buffer/index.d.ts","../../../../node_modules/undici-types/header.d.ts","../../../../node_modules/undici-types/readable.d.ts","../../../../node_modules/undici-types/file.d.ts","../../../../node_modules/undici-types/fetch.d.ts","../../../../node_modules/undici-types/formdata.d.ts","../../../../node_modules/undici-types/connector.d.ts","../../../../node_modules/undici-types/client.d.ts","../../../../node_modules/undici-types/errors.d.ts","../../../../node_modules/undici-types/dispatcher.d.ts","../../../../node_modules/undici-types/global-dispatcher.d.ts","../../../../node_modules/undici-types/global-origin.d.ts","../../../../node_modules/undici-types/pool-stats.d.ts","../../../../node_modules/undici-types/pool.d.ts","../../../../node_modules/undici-types/handlers.d.ts","../../../../node_modules/undici-types/balanced-pool.d.ts","../../../../node_modules/undici-types/agent.d.ts","../../../../node_modules/undici-types/mock-interceptor.d.ts","../../../../node_modules/undici-types/mock-agent.d.ts","../../../../node_modules/undici-types/mock-client.d.ts","../../../../node_modules/undici-types/mock-pool.d.ts","../../../../node_modules/undici-types/mock-errors.d.ts","../../../../node_modules/undici-types/proxy-agent.d.ts","../../../../node_modules/undici-types/api.d.ts","../../../../node_modules/undici-types/cookies.d.ts","../../../../node_modules/undici-types/patch.d.ts","../../../../node_modules/undici-types/filereader.d.ts","../../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../../node_modules/undici-types/websocket.d.ts","../../../../node_modules/undici-types/content-type.d.ts","../../../../node_modules/undici-types/cache.d.ts","../../../../node_modules/undici-types/interceptors.d.ts","../../../../node_modules/undici-types/index.d.ts","../../../../node_modules/@types/node/globals.d.ts","../../../../node_modules/@types/node/async_hooks.d.ts","../../../../node_modules/@types/node/buffer.d.ts","../../../../node_modules/@types/node/child_process.d.ts","../../../../node_modules/@types/node/cluster.d.ts","../../../../node_modules/@types/node/console.d.ts","../../../../node_modules/@types/node/constants.d.ts","../../../../node_modules/@types/node/crypto.d.ts","../../../../node_modules/@types/node/dgram.d.ts","../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../node_modules/@types/node/dns.d.ts","../../../../node_modules/@types/node/dns/promises.d.ts","../../../../node_modules/@types/node/domain.d.ts","../../../../node_modules/@types/node/dom-events.d.ts","../../../../node_modules/@types/node/events.d.ts","../../../../node_modules/@types/node/fs.d.ts","../../../../node_modules/@types/node/fs/promises.d.ts","../../../../node_modules/@types/node/http.d.ts","../../../../node_modules/@types/node/http2.d.ts","../../../../node_modules/@types/node/https.d.ts","../../../../node_modules/@types/node/inspector.d.ts","../../../../node_modules/@types/node/module.d.ts","../../../../node_modules/@types/node/net.d.ts","../../../../node_modules/@types/node/os.d.ts","../../../../node_modules/@types/node/path.d.ts","../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../node_modules/@types/node/process.d.ts","../../../../node_modules/@types/node/punycode.d.ts","../../../../node_modules/@types/node/querystring.d.ts","../../../../node_modules/@types/node/readline.d.ts","../../../../node_modules/@types/node/readline/promises.d.ts","../../../../node_modules/@types/node/repl.d.ts","../../../../node_modules/@types/node/stream.d.ts","../../../../node_modules/@types/node/stream/promises.d.ts","../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../node_modules/@types/node/stream/web.d.ts","../../../../node_modules/@types/node/string_decoder.d.ts","../../../../node_modules/@types/node/test.d.ts","../../../../node_modules/@types/node/timers.d.ts","../../../../node_modules/@types/node/timers/promises.d.ts","../../../../node_modules/@types/node/tls.d.ts","../../../../node_modules/@types/node/trace_events.d.ts","../../../../node_modules/@types/node/tty.d.ts","../../../../node_modules/@types/node/url.d.ts","../../../../node_modules/@types/node/util.d.ts","../../../../node_modules/@types/node/v8.d.ts","../../../../node_modules/@types/node/vm.d.ts","../../../../node_modules/@types/node/wasi.d.ts","../../../../node_modules/@types/node/worker_threads.d.ts","../../../../node_modules/@types/node/zlib.d.ts","../../../../node_modules/@types/node/globals.global.d.ts","../../../../node_modules/@types/node/index.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupSemantic.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/diffLines.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/printDiffs.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts","../../../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts","../../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../../node_modules/@types/jest/index.d.ts","../../../../node_modules/@types/jest/ts3.2/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"14fc7efae8b184b18019a5906c6f6de752823b44ff1acf7924bbdc8877ded21b","9fc4db48f79a228bcdc0a504a05afda71da8082d084b53dd05b3872c1737c4ac","8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","343127c4427e6beba0b34b9b691494eb4d38c017c298869da90f51cf82a7311d","71a689048584cde03cb508408ae7c3b04ad8f10af887865e8b65c27ed9d91488","d9118ed71b9968fea213b070209081a1b1c378b55ddcd026fb1ae8a7f52c15b7","6ba1631f84ef4507073189c4ada06d6de8bac89375ea3b49e34e49006cc44a3f","afa9397f3aa80897cec3ddec1dd6f7c8741106ce96090f74df790a474b114ed6","be3df36f1bc7117ec8362ac989fd22c1fc5d87cdc96949aa8a6555a7eff43a29","016e13cb6b202723f41294ea8028ae51ab987e847808c6f637d5a890954a943c","403723c612eb5754e02e99e0509f13822535b3b559bba19f01cfc7a543919142","ef444c3abed06ad312847e29b4ba4432f7c195314c4bb82a25ce95f95c778a5b","1b61ce81728e5eefe2336faebf4903301c70b9e2ce8f92d79100937fc5ed643a","ab05daec0e36402aa878f9e6bce5bbb4ca1766771a40287cc253744045349777","be1353518da541f11081d0d03139e4d02ee6e8db3fb233d5e4d0622811a14fe6",{"version":"c0ca43993486eeee95a5e3c1ab0c0362861376025516a83378c208849dad6cd6","signature":"8dd10403310bd272432dc4914680cd455a14df308ddef48d584ebd1d6549b1ad"},{"version":"926bc1cfc68d5c76e052b07669cf86d180d0e20848c90e5bec9bda0e0368246b","signature":"5577f4319cf62cef1d9525c258e88cbf0200eadc115cddd5dd69e7e6a3447ab4"},"b7f5a08a542459965e03364a10ce321d28eb5dc96c7cef00a48cb89e455f8532","7d69ac79c9de7620a1bdd926fd4b20b8e968d6467a220eac2a836988ab47c933","d350fc146b46550e424850ab9f7e7d8951156584dbd27bf493e37d7d2300af87","51df45d44f1a2052bd14063736f385bfbdcfee3759fa5597c89f62b3bbdb02e5","10b2bb0a74b12ecbab5003ff91aa8b3da674f81a5d72fdd6f998bfaf664948c8","03a27d1292d90f99bb102194906f19583ca78236337cf9062460062ff8c67b47","3f4fe2fe5f1425cb3e04f5c898d990a1925a7c8a84548a4804f831cfaa2194cb","6ff754e93a1ef94f7a92e7f6f9b67357f3b25836ab36d66202d1d07343186ab7","504f64fcde588e7650963530c4108c700d2bf56e7c381a713e09c106987e9e3c","0f8a91a725deb2bc4f3d64760262135d51a7f5b27e0749424ea90218b719461c","2795b8b6c014ede81ac8f75e75ee7787ea17e9b7abf0f4bf4482265d0caa00eb","1fe41493efdde00b7f7b326310cba7ea78bb55ff75ade0f21f788e1cda8fe9ed","48533e135178c91d9abe0789d1c09802696a42985217396ccfcfd1034a099a0e","dcaef7f7c1f0cb2dba19a1a70cc8d5276faa68e50bc69d6a006d3aaaaa9f7aa7","ffd67adf9464cf9bcddc3954fcd27d59b60e85acb02101fefe8b0eb642a2be2f","a5fb95c2217a6e8d3cb48bfe33a56548dab85c7d84c57b720f03159bc289827b",{"version":"991fce3bbd7f76271e9a010ff7efb0e31bdb0260491b7e80b1c2ac650e82f873","signature":"5f3721970644347fc02e428cd5bce49c5e08b256a39810d8bd60484fdb225e35"},{"version":"d4dfa630db8e4a7e9dd8cd44bb78392174e0f5588119591d103409351c81b9ab","signature":"de06b0c86ca2d89fbaf2a13a72ab5fc755c40e044fa57c8bb38730efd3261022"},{"version":"9b7f0e521e1b4596b39063a0a979487583842211bfd427293b3b8b7bdfa828f5","signature":"d00193c90510e72ce2388a023e353fe46b5cdf19422f5161b9850335a986da2a"},{"version":"5d1a7a46f218bd927028130607a8c552656d4fe8cedaa57efcbf810c6477b09f","signature":"49f95af249a13fe4d6a4e010f6c962a3ad0b8c04b8239776860d739a6c7aebec"},{"version":"2717f6454b3dbb8a7cf5acbbd2f48209ba6d126d736cd858c5b5687ee2652aae","signature":"0c15c7a95261653c1d169de2acd460951fd2da86797be3d66bae181229913028"},{"version":"60b08c9a49795ae888a0c2e9c749470619196d38649eccb3b6a72299707814d0","signature":"42fd47b89f4fd4d1182b4dabb6cf21a207aecc9f18b9c64375a905f71ba7e27e"},{"version":"de2ca6e8f7b95566cde68e681726e04b9ba9e5adc979994fb8c013994e90d86c","signature":"1435e8f6c5c4a872b7ccdd524445c2c0a3841c514f278e9f7fe89dd27f51e22c"},{"version":"4b0cfe9110b745df569d1ae33ad25b968107400285f79d198dc5f08bfcebe7ee","signature":"9252525bdbffa14530825b1742cc1dbac04dd14d6da54858b1e0f10b13d9486a"},{"version":"478ebcfc229746b9e8921c62821870d299c512028dd3841a94884f89c99e14a0","signature":"086cba5e2c20c4c1bd96751364704784fc769c874f961d49511e8a71eb455635"},{"version":"1af30eb6d6b8cbf8c271e9574e0be812a65207e965e37fbe98c7ccd5109c2fb6","signature":"2a7fa42ab3eea43bd9ea8b87a44d66dd187e6b9bd3a92dfac9b94456cd3ee542"},{"version":"05300da7f9381e3535f5713e8448daca93c16e76522b4ed3cb90d643d1ff6751","signature":"05129746e5b08d401ebb1d0286ea7446ac7c867a003dc9c1e4f6ea8e546b4024"},{"version":"3384e38ce8f3eb163e0ff56f6a982a0677f797ba4657eb371214a1a45f32dd14","signature":"57800819a8bf58defe43f6529d610a62678fc94f0df6dd9c463a68fa795d8a5e"},{"version":"c5120a61318f05d981353cc67de4488219516d3bc06c7eb59c764cf94a1374c7","signature":"e174a43044ea557509070815d09a9bad989b1360808b43ca3451ee44391ec49e"},{"version":"3a3882ee0651c8d8ae087c6f34ea75908443ec2cb3457982a162f0cb73dacd64","signature":"37791c8e17a2d09885af3ae90cbf37cfc007d054422efca32fde77600aae2a56"},{"version":"b4f81c99b4783307322c0dda97fa6b295e53ca5c3749bb46dd46ff65114c7939","signature":"19bb513d1d82c0c13dfae8bd4609fdd77d257b213bb6286e2873abac15599b22"},{"version":"7cd4b54cf3a9402b0ae2fce241da97f59b33c69b5aca0f916630c7e8050e0b89","signature":"b3a57d9eea1fff68e106cc6489a3853c0402bd014eb827967e684953192d3907"},{"version":"a53d3edaf0b513e725872307d4cfa5f6f5b7476f3828320c46a0c131a806edac","signature":"7a5c1f79f55d6cfaf4adc1943e71e323072a0225ba261d2d8ba3a7eaec79205f"},{"version":"f9d75e0d8f655f31a1371e49dc01e7063b037860f62d91ab0b44e5ff754330f1","signature":"79f979b9f84ca0e46aacfc04dc7849991e46425604a62d539eb00a0fb9bb0dac"},{"version":"0fe2fa537e82568a7dd1b7ea104c2a1d2b2cd95a32d0050109e52ebd958acb4f","signature":"8babb4c4f48649d024bdbeef0c5bdab6625a0f20edd3e20d28e5e0b1acef358a"},{"version":"e200b7a5260d550db834da0d0d8d3d1a2e72e5cfd67d405330f4f484eac8600e","signature":"442ae53fba87ae9316a8e915889350658093095f1de7f711f9d14e9f95a13e53"},{"version":"d1ea793b9f74e3abe7c1f6ce190ba3801c1f2d380bf30249500a62ed9e090b1c","signature":"52a0625ef14429d619e6a92c74e77959729a57c914d5a3d5c2e7616b0e16b5c3"},{"version":"5aeb59d3916c7bd5177addb6eb1004dfa714ff8d259a4c0076d9f2dea972dd71","signature":"2be959a553b406b4a288d8392d5dcfae8c6cb1b02086a57ac88078d737497eff"},{"version":"0ec5a2b5c22249e2a811e27a2cc368769e007da4d3bff555ab651bc5b714cb2f","signature":"93a3fb96944991bd0c3e262b895ae90e7166670cc7de56a018d026664ad3839c"},{"version":"35a1eb1c55a2d086ba888a0a535a0939f44b123933a812a1b8e8bb3843762827","signature":"8e75557ea51b03d65950ff837701891eb1b6a6d8d3047d67c288daa208de8cc9"},{"version":"4fb8c0cc9c3c0f02789eb46932de57ff337f279eed83405ab60c7fabbffd2479","signature":"dc8beebd62666f0f499f3d19afcd511268409762b733344538c18dd9d269102e"},{"version":"17220b442aa2ba3af423cca0a7214488d4260a2f910d572abf2f52e268f2ad3c","signature":"4cbbfb215a836ee87157ad4215b7fdd736679f08fc39a615706b8367273dcafd"},{"version":"b1f8280cf0bdbe930233ae48df96b6a871a7f24fc0d32f04e6e22f7d84daa529","signature":"b7e105389681fd52ac69f81882168ec249a2b06b1462734e47e8e8d72d8aa702"},{"version":"fe3d7c154d26ff780ce2239874b4ef7b94108e57d2050dd796722f79852378f7","signature":"18ddf6d4cc9e115d8a6c97a4a0f590c0f16e06e862fbf9992486fcbcfe611a55"},"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc",{"version":"516456888ee35d15a2ac3251216d4ca74999771d07c74507a47f22b2c1d7bdfc","signature":"e1552ab0a1a905e2691c385fbdb013f1f25a5a107f28b6fcc3ac44a056922b6a"},{"version":"685a1d01574bdc52a256ae48a706ea080b0d7c9b07767a76e1c750d6c5c85a1e","signature":"3a55e43a9939604ac49f7ec7d51dbe29d01cc88e3035842dbf8125e7cfeb70e2"},{"version":"b843ddef7d7b56bf1e4d013c1d5986c3f31345ba9bf93e152537b58726915ad3","signature":"81edd44b1cc80a705e38f13a4c9238f25ff8181147f1c729f28c00b5ae539eec"},{"version":"4ab59cf224759db0cffb135f0a88cd11a6501604c77ff49164397e85053b8818","signature":"88694ca2f036d189396222dd3e6f2d15ed1a0083a1f96a5553910149dd501342"},{"version":"643868a552706f3347b5c1fe5388344e9f77e0620b2fc950c026d4ce6398539a","signature":"c8dee13888566e8f6872c49d2e2ff8c40f18eca5856298639c21a3b90467adfb"},"0b4bc32128fda7bb0752cf284730dd3a817aae04a3d7f92e3b2d54bd61362fe1","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"5f290ea7efbe9d8431e10df12c0d5672b67988e7c171c2d356749fac70347a55","affectsGlobalScope":true},"39b1a50d543770780b0409a4caacb87f3ff1d510aedfeb7dc06ed44188256f89",{"version":"49c89f8fa09d21c161e6a367448639e032f42d77cc2ec8ab54ecb8fa9a3ad59f","affectsGlobalScope":true},"e4b50850c2a62c7750428e452ee24b167180104d514d5e5c0ca691753365f610","304504c854c47a55ab4a89111a27a2daf8a3614740bd787cc1f2c51e5574239c",{"version":"95f9129a37dcace36e17b061a8484952586ecfe928c9c8ce526de1a2f4aaefa7","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","0f9061846236850a872cb44097d071631e93c8749a8b16c191fe3c2a48faede4","e46fa644658c2d6e5c85e954ea76b92c97d63f0851d3ccdab8c2a80d5962aaa9","1c611ff373ce1958aafc40b328048ac2540ba5c7f373cf2897e0d9aeaabe90a0","a307d22a0130ac94c1a17fffa6d57ac272deb5838cb966a9420911d259cdf1be","d2e415abf6cb81ac9e2700b4db5ea7be76b997e812285b8e5e1e414eb2750b6e","09d6cebdced6aa1181ac1523c8f22a133f5ed80589678b64051f0602f0518374",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"7c35691dc3972ff1507d8dd279d833f540973d0917bde22e191cf7a8feaac29f","affectsGlobalScope":true},"62662d7a886e5cfa870685720fd27b763743ca4d2cf29326f75d76606a64eadd","b8c670688bd228d3cc9c169690b09b687188c50ff263a94df63b207701105ad9","d8e16905907111390d5a943816306ae997dfe56476f14142166f8b13ee322eea","8068c911a1c40bc6c5ffc58c625b21d807778f6aa6d63a73e6f04f88bcac5b79","a1dbce56ad5f3a37caafb9033c9d190a199217d673f5fa099c8968d471a2fdaa","c6f77efcc19f51c8759779b6b6ee0d88046c15c15dadac8ffed729a6620daf39",{"version":"089867511b37a534ae71f3d9bc97acc0b925b7f5dbec113f98c4b49224c694eb","affectsGlobalScope":true},"269d0ea3202820c29a32c1f2a357837a4f1918426844f7e7c90af15ec40d1dc1","66432f885e30cf471573de22a5af5eca9ab46b37b122aec98beadf77e9b7df24","323506ce173f7f865f42f493885ee3dacd18db6359ea1141d57676d3781ce10c",{"version":"034e635df3c014df1d6b1110b724ca0c4d2d324b45a84974c7d6931f9cf95ea7","affectsGlobalScope":true},{"version":"87f9456115554cb0f78f098ddbd585096871c19d2d05274c1b1b4ade3151da78","affectsGlobalScope":true},"ea3ab3727cd6c222d94003ecafa30e8550c61eadcdabbf59514aee76e86211a5","d3cdd41693c5ed6bec4f1a1c399d9501372b14bd341bc46eedacf2854c5df5a7","2de7a21c92226fb8abbeed7a0a9bd8aa6d37e4c68a8c7ff7938c644267e9fcc1","6d6070c5c81ba0bfe58988c69e3ba3149fc86421fd383f253aeb071cbf29cd41","da618f0ea09d95c3b51514de43bf97dab008c85bede58aa57cf95e4984c7c957","48a35b181ecf47dbbc0a7ab4b5ba778d91eaa838ba42bf4aaaead42be77ef39a","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","5195aeb0de306d1c5ca8033457fbcab5987657112fa6d4971cfeb7644493a369","c5dbf0003bc9f0f643e54cd00a3868d1afe85497fecb56be6f2373dc85102924",{"version":"ce73eb199c4bf96c015f069aac161488ed73ebeaea3d87b6d5aa9a968a7b38d4","affectsGlobalScope":true},{"version":"300f8e9de0b0c3482be3e749462b6ebc3dab8a316801f1da0def94aed0cd2018","affectsGlobalScope":true},"4e228e78c1e9b0a75c70588d59288f63a6258e8b1fe4a67b0c53fe03461421d9","962f105729d5b888c8b70e193f6020ee92c6c8144c827de40f80d65dd188ad7f","ac74e2b754fba690036f8221d978f6debb867462b87af254f24e924b677395d0","80858f6de9af22e53aff221fe3590215ea544c2aeb2cc60cf8e08a9c785c8fef",{"version":"068b8ee5c2cd90d7a50f2efadbbe353cb10196a41189a48bf4b2a867363012b4","affectsGlobalScope":true},{"version":"340659b96782f5813aad6c1f89ea1b83b2f3fa993115c7b30366375d9bae5a4e","affectsGlobalScope":true},"6f44a190351ab5e1811abebe007cf60518044772ccc08244f9f241706afa767f","fecdf44bec4ee9c5188e5f2f58c292c9689c02520900dceaaa6e76594de6da90","cf45d0510b661f1da461479851ff902f188edb111777c37055eff12fa986a23a",{"version":"895ca532c15c77cbb6a871af1870b57bcd0ca4f38a1bd69669dd0e95bb58565a","affectsGlobalScope":true},"f2b9440f98d6f94c8105883a2b65aee2fce0248f71f41beafd0a80636f3a565d",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","e222104af6cb9415238ad358488b74d76eceeff238c1268ec6e85655b05341da","69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2","eba230221317c985ab1953ccc3edc517f248b37db4fef7875cb2c8d08aff7be7","b83e796810e475da3564c6515bc0ae9577070596a33d89299b7d99f94ecfd921","b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc","5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09","02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c",{"version":"f624e578325b8c58e55b30c998b1f4c3ec1b61a9fa66373da4250c89b7880d44","affectsGlobalScope":true},{"version":"d3002f620eab4bf6476c9da5c0efb2041d46f7df8b3032a5631bd206abef2c75","affectsGlobalScope":true}],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noImplicitAny":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","sourceMap":true,"target":1},"fileIdsList":[[45],[201,203],[197,198],[197,198,199,200],[202],[204],[110],[146],[147,152,180],[148,159,160,167,177,188],[148,149,159,167],[150,189],[151,152,160,168],[152,177,185],[153,155,159,167],[146,154],[155,156],[159],[157,159],[146,159],[159,160,161,177,188],[159,160,161,174,177,180],[144,193],[155,159,162,167,177,188],[159,160,162,163,167,177,185,188],[162,164,177,185,188],[110,111,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195],[159,165],[166,188,193],[155,159,167,177],[168],[169],[146,170],[171,187,193],[172],[173],[159,174,175],[174,176,189,191],[147,159,177,178,179,180],[147,177,179],[177,178],[180],[181],[146,177],[159,183,184],[183,184],[152,167,177,185],[186],[167,187],[147,162,173,188],[152,189],[177,190],[166,191],[192],[147,152,159,161,170,177,188,191,193],[177,194],[121,125,188],[121,177,188],[116],[118,121,185,188],[167,185],[196],[116,196],[118,121,167,188],[113,114,117,120,147,159,177,188],[113,119],[117,121,147,180,188,196],[147,196],[137,147,196],[115,116,196],[121],[115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143],[121,128,129],[119,121,129,130],[120],[113,116,121],[121,125,129,130],[125],[119,121,124,188],[113,118,119,121,125,128],[147,177],[116,121,137,147,193,196],[45,49],[49],[45,49,61],[60,61,62,63,65,66,67,68,69,70,71,72,73,74],[49,72],[45,49,70],[45,49,61,64],[49,57],[49,77,78,79,81,86,89,91,97,101],[49,99,100,102],[76],[76,90],[77,78,79,80,81,82,83,84,85,86,87,88,89,91,92,97,98],[49,76,96],[45,49,57,58,76,101,102,107],[45,49,57,75,76,101,103,104,105,106],[45,58],[45,49,75],[49,93,94,95],[45,49,57,75,101],[50,51,52,53,54,55,56],[44,45],[44,46,47,48],[43],[43,44],[49,77,78,79,81,86,89,91,97],[49,99],[49,58,76,101,102,107]],"referencedMap":[[104,1],[204,2],[199,3],[201,4],[200,3],[203,5],[205,6],[110,7],[111,7],[146,8],[147,9],[148,10],[149,11],[150,12],[151,13],[152,14],[153,15],[154,16],[155,17],[156,17],[158,18],[157,19],[159,20],[160,21],[161,22],[145,23],[162,24],[163,25],[164,26],[196,27],[165,28],[166,29],[167,30],[168,31],[169,32],[170,33],[171,34],[172,35],[173,36],[174,37],[175,37],[176,38],[177,39],[179,40],[178,41],[180,42],[181,43],[182,44],[183,45],[184,46],[185,47],[186,48],[187,49],[188,50],[189,51],[190,52],[191,53],[192,54],[193,55],[194,56],[128,57],[135,58],[127,57],[142,59],[119,60],[118,61],[141,62],[136,63],[139,64],[121,65],[120,66],[116,67],[115,68],[138,69],[117,70],[122,71],[126,71],[144,72],[143,71],[130,73],[131,74],[133,75],[129,76],[132,77],[137,62],[124,78],[125,79],[134,80],[114,81],[140,82],[60,83],[63,84],[62,85],[75,86],[73,87],[72,84],[74,88],[70,83],[71,88],[65,89],[67,83],[69,84],[66,84],[68,1],[58,90],[102,91],[101,92],[85,93],[84,93],[91,94],[83,93],[92,94],[99,95],[89,93],[79,93],[81,93],[78,93],[77,93],[98,93],[82,93],[80,93],[88,93],[86,93],[97,96],[87,93],[103,1],[108,97],[106,1],[107,98],[109,99],[105,100],[95,84],[96,101],[76,102],[50,84],[57,103],[53,84],[56,84],[52,84],[46,104],[49,105],[44,106],[48,107]],"exportedModulesMap":[[104,1],[204,2],[199,3],[201,4],[200,3],[203,5],[205,6],[110,7],[111,7],[146,8],[147,9],[148,10],[149,11],[150,12],[151,13],[152,14],[153,15],[154,16],[155,17],[156,17],[158,18],[157,19],[159,20],[160,21],[161,22],[145,23],[162,24],[163,25],[164,26],[196,27],[165,28],[166,29],[167,30],[168,31],[169,32],[170,33],[171,34],[172,35],[173,36],[174,37],[175,37],[176,38],[177,39],[179,40],[178,41],[180,42],[181,43],[182,44],[183,45],[184,46],[185,47],[186,48],[187,49],[188,50],[189,51],[190,52],[191,53],[192,54],[193,55],[194,56],[128,57],[135,58],[127,57],[142,59],[119,60],[118,61],[141,62],[136,63],[139,64],[121,65],[120,66],[116,67],[115,68],[138,69],[117,70],[122,71],[126,71],[144,72],[143,71],[130,73],[131,74],[133,75],[129,76],[132,77],[137,62],[124,78],[125,79],[134,80],[114,81],[140,82],[60,83],[63,84],[62,85],[75,86],[73,87],[72,84],[74,88],[70,83],[71,88],[65,89],[67,83],[69,84],[66,84],[68,1],[58,84],[102,108],[101,109],[99,95],[97,84],[103,1],[108,110],[106,1],[107,84],[109,99],[105,83],[95,84],[96,84],[76,84],[50,84],[57,103],[53,84],[56,84],[52,84],[46,104],[49,105],[44,106],[48,107]],"semanticDiagnosticsPerFile":[104,45,204,197,199,201,200,198,203,202,205,110,111,146,147,148,149,150,151,152,153,154,155,156,158,157,159,160,161,145,195,162,163,164,196,165,166,167,168,169,170,171,172,173,174,175,176,177,179,178,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,112,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,128,135,127,142,119,118,141,136,139,121,120,116,115,138,117,122,123,126,113,144,143,130,131,133,129,132,137,124,125,134,114,140,60,63,62,75,73,72,74,70,71,65,67,61,69,66,64,68,58,59,102,101,85,84,91,83,92,99,89,79,81,78,77,98,82,80,88,86,97,87,90,103,108,106,107,109,105,94,95,96,93,76,100,50,57,53,54,56,55,51,52,47,46,43,49,44,48]},"version":"4.9.5"}
|
|
1
|
+
{"program":{"fileNames":["../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../node_modules/typescript/lib/lib.dom.d.ts","../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../teleport-types/dist/cjs/helper.d.ts","../../../teleport-types/dist/cjs/uidl.d.ts","../../../../node_modules/@babel/types/lib/index.d.ts","../../../teleport-types/dist/cjs/generators.d.ts","../../../teleport-types/dist/cjs/errors.d.ts","../../../teleport-types/dist/cjs/vuidl.d.ts","../../../teleport-types/dist/cjs/index.d.ts","../../../teleport-shared/dist/cjs/constants/index.d.ts","../../../teleport-shared/dist/cjs/utils/string-utils.d.ts","../../../teleport-shared/dist/cjs/utils/uidl-utils.d.ts","../../../teleport-shared/dist/cjs/utils/generic.d.ts","../../../teleport-shared/dist/cjs/utils/js-identifiers.d.ts","../../../teleport-shared/dist/cjs/utils/route-paths.d.ts","../../../teleport-shared/dist/cjs/utils/layout-topology.d.ts","../../../teleport-shared/dist/cjs/index.d.ts","../../src/array-mapper-pagination.ts","../../src/array-mapper-registry.ts","../../../teleport-plugin-common/dist/cjs/builders/ast-builders.d.ts","../../../teleport-plugin-common/dist/cjs/utils/parsed-ast.d.ts","../../../teleport-plugin-common/dist/cjs/builders/style-builders.d.ts","../../../teleport-plugin-common/dist/cjs/builders/hast-builders.d.ts","../../../teleport-plugin-common/dist/cjs/utils/types.d.ts","../../../teleport-plugin-common/dist/cjs/utils/ast-utils.d.ts","../../../teleport-plugin-common/dist/cjs/utils/style-utils.d.ts","../../../teleport-plugin-common/dist/cjs/utils/hast-utils.d.ts","../../../teleport-plugin-common/dist/cjs/utils/url-search-param-sync.d.ts","../../../teleport-plugin-common/dist/cjs/utils/route-utils.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-jsx/types.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-jsx/utils.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-html/types.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-html/index.d.ts","../../../teleport-plugin-common/dist/cjs/node-handlers/node-to-jsx/index.d.ts","../../../teleport-plugin-common/dist/cjs/index.d.ts","../../src/utils.ts","../../src/fetchers/postgresql.ts","../../src/fetchers/mysql.ts","../../src/fetchers/mariadb.ts","../../src/fetchers/redshift.ts","../../src/fetchers/mongodb.ts","../../src/fetchers/redis.ts","../../src/fetchers/firestore.ts","../../src/fetchers/clickhouse.ts","../../src/fetchers/airtable.ts","../../src/fetchers/supabase.ts","../../src/fetchers/turso.ts","../../src/fetchers/rest-api.ts","../../src/fetchers/javascript.ts","../../src/fetchers/utils/header-detection.ts","../../src/fetchers/csv-file.ts","../../src/fetchers/google-sheets.ts","../../src/transformations/shared-utils.ts","../../src/transformations/blog-post.ts","../../src/transformations/ecommerce-product.ts","../../src/transformations/index.ts","../../src/fetchers/teleport.ts","../../src/fetchers/raw-query.ts","../../src/fetchers/index.ts","../../src/validation.ts","../../src/data-source-fetchers.ts","../../src/count-fetchers.ts","../../src/filter-utils.ts","../../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../src/sort-utils.ts","../../src/loading-state.ts","../../src/pagination-plugin.ts","../../src/index.ts","../../src/pagination-with-count.ts","../../../../node_modules/@types/node/assert.d.ts","../../../../node_modules/@types/node/assert/strict.d.ts","../../../../node_modules/buffer/index.d.ts","../../../../node_modules/undici-types/header.d.ts","../../../../node_modules/undici-types/readable.d.ts","../../../../node_modules/undici-types/file.d.ts","../../../../node_modules/undici-types/fetch.d.ts","../../../../node_modules/undici-types/formdata.d.ts","../../../../node_modules/undici-types/connector.d.ts","../../../../node_modules/undici-types/client.d.ts","../../../../node_modules/undici-types/errors.d.ts","../../../../node_modules/undici-types/dispatcher.d.ts","../../../../node_modules/undici-types/global-dispatcher.d.ts","../../../../node_modules/undici-types/global-origin.d.ts","../../../../node_modules/undici-types/pool-stats.d.ts","../../../../node_modules/undici-types/pool.d.ts","../../../../node_modules/undici-types/handlers.d.ts","../../../../node_modules/undici-types/balanced-pool.d.ts","../../../../node_modules/undici-types/agent.d.ts","../../../../node_modules/undici-types/mock-interceptor.d.ts","../../../../node_modules/undici-types/mock-agent.d.ts","../../../../node_modules/undici-types/mock-client.d.ts","../../../../node_modules/undici-types/mock-pool.d.ts","../../../../node_modules/undici-types/mock-errors.d.ts","../../../../node_modules/undici-types/proxy-agent.d.ts","../../../../node_modules/undici-types/api.d.ts","../../../../node_modules/undici-types/cookies.d.ts","../../../../node_modules/undici-types/patch.d.ts","../../../../node_modules/undici-types/filereader.d.ts","../../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../../node_modules/undici-types/websocket.d.ts","../../../../node_modules/undici-types/content-type.d.ts","../../../../node_modules/undici-types/cache.d.ts","../../../../node_modules/undici-types/interceptors.d.ts","../../../../node_modules/undici-types/index.d.ts","../../../../node_modules/@types/node/globals.d.ts","../../../../node_modules/@types/node/async_hooks.d.ts","../../../../node_modules/@types/node/buffer.d.ts","../../../../node_modules/@types/node/child_process.d.ts","../../../../node_modules/@types/node/cluster.d.ts","../../../../node_modules/@types/node/console.d.ts","../../../../node_modules/@types/node/constants.d.ts","../../../../node_modules/@types/node/crypto.d.ts","../../../../node_modules/@types/node/dgram.d.ts","../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../node_modules/@types/node/dns.d.ts","../../../../node_modules/@types/node/dns/promises.d.ts","../../../../node_modules/@types/node/domain.d.ts","../../../../node_modules/@types/node/dom-events.d.ts","../../../../node_modules/@types/node/events.d.ts","../../../../node_modules/@types/node/fs.d.ts","../../../../node_modules/@types/node/fs/promises.d.ts","../../../../node_modules/@types/node/http.d.ts","../../../../node_modules/@types/node/http2.d.ts","../../../../node_modules/@types/node/https.d.ts","../../../../node_modules/@types/node/inspector.d.ts","../../../../node_modules/@types/node/module.d.ts","../../../../node_modules/@types/node/net.d.ts","../../../../node_modules/@types/node/os.d.ts","../../../../node_modules/@types/node/path.d.ts","../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../node_modules/@types/node/process.d.ts","../../../../node_modules/@types/node/punycode.d.ts","../../../../node_modules/@types/node/querystring.d.ts","../../../../node_modules/@types/node/readline.d.ts","../../../../node_modules/@types/node/readline/promises.d.ts","../../../../node_modules/@types/node/repl.d.ts","../../../../node_modules/@types/node/stream.d.ts","../../../../node_modules/@types/node/stream/promises.d.ts","../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../node_modules/@types/node/stream/web.d.ts","../../../../node_modules/@types/node/string_decoder.d.ts","../../../../node_modules/@types/node/test.d.ts","../../../../node_modules/@types/node/timers.d.ts","../../../../node_modules/@types/node/timers/promises.d.ts","../../../../node_modules/@types/node/tls.d.ts","../../../../node_modules/@types/node/trace_events.d.ts","../../../../node_modules/@types/node/tty.d.ts","../../../../node_modules/@types/node/url.d.ts","../../../../node_modules/@types/node/util.d.ts","../../../../node_modules/@types/node/v8.d.ts","../../../../node_modules/@types/node/vm.d.ts","../../../../node_modules/@types/node/wasi.d.ts","../../../../node_modules/@types/node/worker_threads.d.ts","../../../../node_modules/@types/node/zlib.d.ts","../../../../node_modules/@types/node/globals.global.d.ts","../../../../node_modules/@types/node/index.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupSemantic.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/diffLines.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/printDiffs.d.ts","../../../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts","../../../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts","../../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../../node_modules/@types/jest/index.d.ts","../../../../node_modules/@types/jest/ts3.2/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"14fc7efae8b184b18019a5906c6f6de752823b44ff1acf7924bbdc8877ded21b","9fc4db48f79a228bcdc0a504a05afda71da8082d084b53dd05b3872c1737c4ac","8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","343127c4427e6beba0b34b9b691494eb4d38c017c298869da90f51cf82a7311d","71a689048584cde03cb508408ae7c3b04ad8f10af887865e8b65c27ed9d91488","d9118ed71b9968fea213b070209081a1b1c378b55ddcd026fb1ae8a7f52c15b7","6ba1631f84ef4507073189c4ada06d6de8bac89375ea3b49e34e49006cc44a3f","afa9397f3aa80897cec3ddec1dd6f7c8741106ce96090f74df790a474b114ed6","be3df36f1bc7117ec8362ac989fd22c1fc5d87cdc96949aa8a6555a7eff43a29","016e13cb6b202723f41294ea8028ae51ab987e847808c6f637d5a890954a943c","403723c612eb5754e02e99e0509f13822535b3b559bba19f01cfc7a543919142","ef444c3abed06ad312847e29b4ba4432f7c195314c4bb82a25ce95f95c778a5b","3e39c53f8d84f8cab50817a177664b09180a2d7eebac4583789268f9fd589b84","ab05daec0e36402aa878f9e6bce5bbb4ca1766771a40287cc253744045349777","be1353518da541f11081d0d03139e4d02ee6e8db3fb233d5e4d0622811a14fe6",{"version":"c0ca43993486eeee95a5e3c1ab0c0362861376025516a83378c208849dad6cd6","signature":"8dd10403310bd272432dc4914680cd455a14df308ddef48d584ebd1d6549b1ad"},{"version":"926bc1cfc68d5c76e052b07669cf86d180d0e20848c90e5bec9bda0e0368246b","signature":"5577f4319cf62cef1d9525c258e88cbf0200eadc115cddd5dd69e7e6a3447ab4"},"b7f5a08a542459965e03364a10ce321d28eb5dc96c7cef00a48cb89e455f8532","7d69ac79c9de7620a1bdd926fd4b20b8e968d6467a220eac2a836988ab47c933","d350fc146b46550e424850ab9f7e7d8951156584dbd27bf493e37d7d2300af87","51df45d44f1a2052bd14063736f385bfbdcfee3759fa5597c89f62b3bbdb02e5","10b2bb0a74b12ecbab5003ff91aa8b3da674f81a5d72fdd6f998bfaf664948c8","03a27d1292d90f99bb102194906f19583ca78236337cf9062460062ff8c67b47","3f4fe2fe5f1425cb3e04f5c898d990a1925a7c8a84548a4804f831cfaa2194cb","6ff754e93a1ef94f7a92e7f6f9b67357f3b25836ab36d66202d1d07343186ab7","504f64fcde588e7650963530c4108c700d2bf56e7c381a713e09c106987e9e3c","0f8a91a725deb2bc4f3d64760262135d51a7f5b27e0749424ea90218b719461c","2795b8b6c014ede81ac8f75e75ee7787ea17e9b7abf0f4bf4482265d0caa00eb","1fe41493efdde00b7f7b326310cba7ea78bb55ff75ade0f21f788e1cda8fe9ed","48533e135178c91d9abe0789d1c09802696a42985217396ccfcfd1034a099a0e","dcaef7f7c1f0cb2dba19a1a70cc8d5276faa68e50bc69d6a006d3aaaaa9f7aa7","ffd67adf9464cf9bcddc3954fcd27d59b60e85acb02101fefe8b0eb642a2be2f","a5fb95c2217a6e8d3cb48bfe33a56548dab85c7d84c57b720f03159bc289827b",{"version":"991fce3bbd7f76271e9a010ff7efb0e31bdb0260491b7e80b1c2ac650e82f873","signature":"5f3721970644347fc02e428cd5bce49c5e08b256a39810d8bd60484fdb225e35"},{"version":"d4dfa630db8e4a7e9dd8cd44bb78392174e0f5588119591d103409351c81b9ab","signature":"de06b0c86ca2d89fbaf2a13a72ab5fc755c40e044fa57c8bb38730efd3261022"},{"version":"9b7f0e521e1b4596b39063a0a979487583842211bfd427293b3b8b7bdfa828f5","signature":"d00193c90510e72ce2388a023e353fe46b5cdf19422f5161b9850335a986da2a"},{"version":"5d1a7a46f218bd927028130607a8c552656d4fe8cedaa57efcbf810c6477b09f","signature":"49f95af249a13fe4d6a4e010f6c962a3ad0b8c04b8239776860d739a6c7aebec"},{"version":"2717f6454b3dbb8a7cf5acbbd2f48209ba6d126d736cd858c5b5687ee2652aae","signature":"0c15c7a95261653c1d169de2acd460951fd2da86797be3d66bae181229913028"},{"version":"60b08c9a49795ae888a0c2e9c749470619196d38649eccb3b6a72299707814d0","signature":"42fd47b89f4fd4d1182b4dabb6cf21a207aecc9f18b9c64375a905f71ba7e27e"},{"version":"de2ca6e8f7b95566cde68e681726e04b9ba9e5adc979994fb8c013994e90d86c","signature":"1435e8f6c5c4a872b7ccdd524445c2c0a3841c514f278e9f7fe89dd27f51e22c"},{"version":"4b0cfe9110b745df569d1ae33ad25b968107400285f79d198dc5f08bfcebe7ee","signature":"9252525bdbffa14530825b1742cc1dbac04dd14d6da54858b1e0f10b13d9486a"},{"version":"478ebcfc229746b9e8921c62821870d299c512028dd3841a94884f89c99e14a0","signature":"086cba5e2c20c4c1bd96751364704784fc769c874f961d49511e8a71eb455635"},{"version":"1af30eb6d6b8cbf8c271e9574e0be812a65207e965e37fbe98c7ccd5109c2fb6","signature":"2a7fa42ab3eea43bd9ea8b87a44d66dd187e6b9bd3a92dfac9b94456cd3ee542"},{"version":"05300da7f9381e3535f5713e8448daca93c16e76522b4ed3cb90d643d1ff6751","signature":"05129746e5b08d401ebb1d0286ea7446ac7c867a003dc9c1e4f6ea8e546b4024"},{"version":"3384e38ce8f3eb163e0ff56f6a982a0677f797ba4657eb371214a1a45f32dd14","signature":"57800819a8bf58defe43f6529d610a62678fc94f0df6dd9c463a68fa795d8a5e"},{"version":"c5120a61318f05d981353cc67de4488219516d3bc06c7eb59c764cf94a1374c7","signature":"e174a43044ea557509070815d09a9bad989b1360808b43ca3451ee44391ec49e"},{"version":"3a3882ee0651c8d8ae087c6f34ea75908443ec2cb3457982a162f0cb73dacd64","signature":"37791c8e17a2d09885af3ae90cbf37cfc007d054422efca32fde77600aae2a56"},{"version":"b4f81c99b4783307322c0dda97fa6b295e53ca5c3749bb46dd46ff65114c7939","signature":"19bb513d1d82c0c13dfae8bd4609fdd77d257b213bb6286e2873abac15599b22"},{"version":"7cd4b54cf3a9402b0ae2fce241da97f59b33c69b5aca0f916630c7e8050e0b89","signature":"b3a57d9eea1fff68e106cc6489a3853c0402bd014eb827967e684953192d3907"},{"version":"a53d3edaf0b513e725872307d4cfa5f6f5b7476f3828320c46a0c131a806edac","signature":"7a5c1f79f55d6cfaf4adc1943e71e323072a0225ba261d2d8ba3a7eaec79205f"},{"version":"4b1968681a0a388f8c7dafafd8799c8a4bfcd1ed7a97feaeff9b8d012d65951f","signature":"79f979b9f84ca0e46aacfc04dc7849991e46425604a62d539eb00a0fb9bb0dac"},{"version":"d4ecb57b6ef0c3bdce8c006166ef105c60fcee7f732806c9ee81277b66cacd53","signature":"8babb4c4f48649d024bdbeef0c5bdab6625a0f20edd3e20d28e5e0b1acef358a"},{"version":"3281413a851a6a7d8da67d9a99a4cff9a20866a70f472a9dc9f3f04832d8cd54","signature":"442ae53fba87ae9316a8e915889350658093095f1de7f711f9d14e9f95a13e53"},{"version":"52f5f04266ce61c91522a3f4d7a04a882dd4c8c6de398df6f29011209aa20755","signature":"52a0625ef14429d619e6a92c74e77959729a57c914d5a3d5c2e7616b0e16b5c3"},{"version":"5aeb59d3916c7bd5177addb6eb1004dfa714ff8d259a4c0076d9f2dea972dd71","signature":"2be959a553b406b4a288d8392d5dcfae8c6cb1b02086a57ac88078d737497eff"},{"version":"0ec5a2b5c22249e2a811e27a2cc368769e007da4d3bff555ab651bc5b714cb2f","signature":"93a3fb96944991bd0c3e262b895ae90e7166670cc7de56a018d026664ad3839c"},{"version":"35a1eb1c55a2d086ba888a0a535a0939f44b123933a812a1b8e8bb3843762827","signature":"8e75557ea51b03d65950ff837701891eb1b6a6d8d3047d67c288daa208de8cc9"},{"version":"4fb8c0cc9c3c0f02789eb46932de57ff337f279eed83405ab60c7fabbffd2479","signature":"dc8beebd62666f0f499f3d19afcd511268409762b733344538c18dd9d269102e"},{"version":"17220b442aa2ba3af423cca0a7214488d4260a2f910d572abf2f52e268f2ad3c","signature":"4cbbfb215a836ee87157ad4215b7fdd736679f08fc39a615706b8367273dcafd"},{"version":"b1f8280cf0bdbe930233ae48df96b6a871a7f24fc0d32f04e6e22f7d84daa529","signature":"b7e105389681fd52ac69f81882168ec249a2b06b1462734e47e8e8d72d8aa702"},{"version":"fe3d7c154d26ff780ce2239874b4ef7b94108e57d2050dd796722f79852378f7","signature":"18ddf6d4cc9e115d8a6c97a4a0f590c0f16e06e862fbf9992486fcbcfe611a55"},"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc",{"version":"516456888ee35d15a2ac3251216d4ca74999771d07c74507a47f22b2c1d7bdfc","signature":"e1552ab0a1a905e2691c385fbdb013f1f25a5a107f28b6fcc3ac44a056922b6a"},{"version":"685a1d01574bdc52a256ae48a706ea080b0d7c9b07767a76e1c750d6c5c85a1e","signature":"3a55e43a9939604ac49f7ec7d51dbe29d01cc88e3035842dbf8125e7cfeb70e2"},{"version":"b843ddef7d7b56bf1e4d013c1d5986c3f31345ba9bf93e152537b58726915ad3","signature":"81edd44b1cc80a705e38f13a4c9238f25ff8181147f1c729f28c00b5ae539eec"},{"version":"4ab59cf224759db0cffb135f0a88cd11a6501604c77ff49164397e85053b8818","signature":"88694ca2f036d189396222dd3e6f2d15ed1a0083a1f96a5553910149dd501342"},{"version":"643868a552706f3347b5c1fe5388344e9f77e0620b2fc950c026d4ce6398539a","signature":"c8dee13888566e8f6872c49d2e2ff8c40f18eca5856298639c21a3b90467adfb"},"0b4bc32128fda7bb0752cf284730dd3a817aae04a3d7f92e3b2d54bd61362fe1","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"5f290ea7efbe9d8431e10df12c0d5672b67988e7c171c2d356749fac70347a55","affectsGlobalScope":true},"39b1a50d543770780b0409a4caacb87f3ff1d510aedfeb7dc06ed44188256f89",{"version":"49c89f8fa09d21c161e6a367448639e032f42d77cc2ec8ab54ecb8fa9a3ad59f","affectsGlobalScope":true},"e4b50850c2a62c7750428e452ee24b167180104d514d5e5c0ca691753365f610","304504c854c47a55ab4a89111a27a2daf8a3614740bd787cc1f2c51e5574239c",{"version":"95f9129a37dcace36e17b061a8484952586ecfe928c9c8ce526de1a2f4aaefa7","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","0f9061846236850a872cb44097d071631e93c8749a8b16c191fe3c2a48faede4","e46fa644658c2d6e5c85e954ea76b92c97d63f0851d3ccdab8c2a80d5962aaa9","1c611ff373ce1958aafc40b328048ac2540ba5c7f373cf2897e0d9aeaabe90a0","a307d22a0130ac94c1a17fffa6d57ac272deb5838cb966a9420911d259cdf1be","d2e415abf6cb81ac9e2700b4db5ea7be76b997e812285b8e5e1e414eb2750b6e","09d6cebdced6aa1181ac1523c8f22a133f5ed80589678b64051f0602f0518374",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"7c35691dc3972ff1507d8dd279d833f540973d0917bde22e191cf7a8feaac29f","affectsGlobalScope":true},"62662d7a886e5cfa870685720fd27b763743ca4d2cf29326f75d76606a64eadd","b8c670688bd228d3cc9c169690b09b687188c50ff263a94df63b207701105ad9","d8e16905907111390d5a943816306ae997dfe56476f14142166f8b13ee322eea","8068c911a1c40bc6c5ffc58c625b21d807778f6aa6d63a73e6f04f88bcac5b79","a1dbce56ad5f3a37caafb9033c9d190a199217d673f5fa099c8968d471a2fdaa","c6f77efcc19f51c8759779b6b6ee0d88046c15c15dadac8ffed729a6620daf39",{"version":"089867511b37a534ae71f3d9bc97acc0b925b7f5dbec113f98c4b49224c694eb","affectsGlobalScope":true},"269d0ea3202820c29a32c1f2a357837a4f1918426844f7e7c90af15ec40d1dc1","66432f885e30cf471573de22a5af5eca9ab46b37b122aec98beadf77e9b7df24","323506ce173f7f865f42f493885ee3dacd18db6359ea1141d57676d3781ce10c",{"version":"034e635df3c014df1d6b1110b724ca0c4d2d324b45a84974c7d6931f9cf95ea7","affectsGlobalScope":true},{"version":"87f9456115554cb0f78f098ddbd585096871c19d2d05274c1b1b4ade3151da78","affectsGlobalScope":true},"ea3ab3727cd6c222d94003ecafa30e8550c61eadcdabbf59514aee76e86211a5","d3cdd41693c5ed6bec4f1a1c399d9501372b14bd341bc46eedacf2854c5df5a7","2de7a21c92226fb8abbeed7a0a9bd8aa6d37e4c68a8c7ff7938c644267e9fcc1","6d6070c5c81ba0bfe58988c69e3ba3149fc86421fd383f253aeb071cbf29cd41","da618f0ea09d95c3b51514de43bf97dab008c85bede58aa57cf95e4984c7c957","48a35b181ecf47dbbc0a7ab4b5ba778d91eaa838ba42bf4aaaead42be77ef39a","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","5195aeb0de306d1c5ca8033457fbcab5987657112fa6d4971cfeb7644493a369","c5dbf0003bc9f0f643e54cd00a3868d1afe85497fecb56be6f2373dc85102924",{"version":"ce73eb199c4bf96c015f069aac161488ed73ebeaea3d87b6d5aa9a968a7b38d4","affectsGlobalScope":true},{"version":"300f8e9de0b0c3482be3e749462b6ebc3dab8a316801f1da0def94aed0cd2018","affectsGlobalScope":true},"4e228e78c1e9b0a75c70588d59288f63a6258e8b1fe4a67b0c53fe03461421d9","962f105729d5b888c8b70e193f6020ee92c6c8144c827de40f80d65dd188ad7f","ac74e2b754fba690036f8221d978f6debb867462b87af254f24e924b677395d0","80858f6de9af22e53aff221fe3590215ea544c2aeb2cc60cf8e08a9c785c8fef",{"version":"068b8ee5c2cd90d7a50f2efadbbe353cb10196a41189a48bf4b2a867363012b4","affectsGlobalScope":true},{"version":"340659b96782f5813aad6c1f89ea1b83b2f3fa993115c7b30366375d9bae5a4e","affectsGlobalScope":true},"6f44a190351ab5e1811abebe007cf60518044772ccc08244f9f241706afa767f","fecdf44bec4ee9c5188e5f2f58c292c9689c02520900dceaaa6e76594de6da90","cf45d0510b661f1da461479851ff902f188edb111777c37055eff12fa986a23a",{"version":"895ca532c15c77cbb6a871af1870b57bcd0ca4f38a1bd69669dd0e95bb58565a","affectsGlobalScope":true},"f2b9440f98d6f94c8105883a2b65aee2fce0248f71f41beafd0a80636f3a565d",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","e222104af6cb9415238ad358488b74d76eceeff238c1268ec6e85655b05341da","69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2","eba230221317c985ab1953ccc3edc517f248b37db4fef7875cb2c8d08aff7be7","b83e796810e475da3564c6515bc0ae9577070596a33d89299b7d99f94ecfd921","b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc","5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09","02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c",{"version":"f624e578325b8c58e55b30c998b1f4c3ec1b61a9fa66373da4250c89b7880d44","affectsGlobalScope":true},{"version":"d3002f620eab4bf6476c9da5c0efb2041d46f7df8b3032a5631bd206abef2c75","affectsGlobalScope":true}],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noImplicitAny":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","sourceMap":true,"target":1},"fileIdsList":[[45],[201,203],[197,198],[197,198,199,200],[202],[204],[110],[146],[147,152,180],[148,159,160,167,177,188],[148,149,159,167],[150,189],[151,152,160,168],[152,177,185],[153,155,159,167],[146,154],[155,156],[159],[157,159],[146,159],[159,160,161,177,188],[159,160,161,174,177,180],[144,193],[155,159,162,167,177,188],[159,160,162,163,167,177,185,188],[162,164,177,185,188],[110,111,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195],[159,165],[166,188,193],[155,159,167,177],[168],[169],[146,170],[171,187,193],[172],[173],[159,174,175],[174,176,189,191],[147,159,177,178,179,180],[147,177,179],[177,178],[180],[181],[146,177],[159,183,184],[183,184],[152,167,177,185],[186],[167,187],[147,162,173,188],[152,189],[177,190],[166,191],[192],[147,152,159,161,170,177,188,191,193],[177,194],[121,125,188],[121,177,188],[116],[118,121,185,188],[167,185],[196],[116,196],[118,121,167,188],[113,114,117,120,147,159,177,188],[113,119],[117,121,147,180,188,196],[147,196],[137,147,196],[115,116,196],[121],[115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143],[121,128,129],[119,121,129,130],[120],[113,116,121],[121,125,129,130],[125],[119,121,124,188],[113,118,119,121,125,128],[147,177],[116,121,137,147,193,196],[45,49],[49],[45,49,61],[60,61,62,63,65,66,67,68,69,70,71,72,73,74],[49,72],[45,49,70],[45,49,61,64],[49,57],[49,77,78,79,81,86,89,91,97,101],[49,99,100,102],[76],[76,90],[77,78,79,80,81,82,83,84,85,86,87,88,89,91,92,97,98],[49,76,96],[45,49,57,58,76,101,102,107],[45,49,57,75,76,101,103,104,105,106],[45,58],[45,49,75],[49,93,94,95],[45,49,57,75,101],[50,51,52,53,54,55,56],[44,45],[44,46,47,48],[43],[43,44],[49,77,78,79,81,86,89,91,97],[49,99],[49,58,76,101,102,107]],"referencedMap":[[104,1],[204,2],[199,3],[201,4],[200,3],[203,5],[205,6],[110,7],[111,7],[146,8],[147,9],[148,10],[149,11],[150,12],[151,13],[152,14],[153,15],[154,16],[155,17],[156,17],[158,18],[157,19],[159,20],[160,21],[161,22],[145,23],[162,24],[163,25],[164,26],[196,27],[165,28],[166,29],[167,30],[168,31],[169,32],[170,33],[171,34],[172,35],[173,36],[174,37],[175,37],[176,38],[177,39],[179,40],[178,41],[180,42],[181,43],[182,44],[183,45],[184,46],[185,47],[186,48],[187,49],[188,50],[189,51],[190,52],[191,53],[192,54],[193,55],[194,56],[128,57],[135,58],[127,57],[142,59],[119,60],[118,61],[141,62],[136,63],[139,64],[121,65],[120,66],[116,67],[115,68],[138,69],[117,70],[122,71],[126,71],[144,72],[143,71],[130,73],[131,74],[133,75],[129,76],[132,77],[137,62],[124,78],[125,79],[134,80],[114,81],[140,82],[60,83],[63,84],[62,85],[75,86],[73,87],[72,84],[74,88],[70,83],[71,88],[65,89],[67,83],[69,84],[66,84],[68,1],[58,90],[102,91],[101,92],[85,93],[84,93],[91,94],[83,93],[92,94],[99,95],[89,93],[79,93],[81,93],[78,93],[77,93],[98,93],[82,93],[80,93],[88,93],[86,93],[97,96],[87,93],[103,1],[108,97],[106,1],[107,98],[109,99],[105,100],[95,84],[96,101],[76,102],[50,84],[57,103],[53,84],[56,84],[52,84],[46,104],[49,105],[44,106],[48,107]],"exportedModulesMap":[[104,1],[204,2],[199,3],[201,4],[200,3],[203,5],[205,6],[110,7],[111,7],[146,8],[147,9],[148,10],[149,11],[150,12],[151,13],[152,14],[153,15],[154,16],[155,17],[156,17],[158,18],[157,19],[159,20],[160,21],[161,22],[145,23],[162,24],[163,25],[164,26],[196,27],[165,28],[166,29],[167,30],[168,31],[169,32],[170,33],[171,34],[172,35],[173,36],[174,37],[175,37],[176,38],[177,39],[179,40],[178,41],[180,42],[181,43],[182,44],[183,45],[184,46],[185,47],[186,48],[187,49],[188,50],[189,51],[190,52],[191,53],[192,54],[193,55],[194,56],[128,57],[135,58],[127,57],[142,59],[119,60],[118,61],[141,62],[136,63],[139,64],[121,65],[120,66],[116,67],[115,68],[138,69],[117,70],[122,71],[126,71],[144,72],[143,71],[130,73],[131,74],[133,75],[129,76],[132,77],[137,62],[124,78],[125,79],[134,80],[114,81],[140,82],[60,83],[63,84],[62,85],[75,86],[73,87],[72,84],[74,88],[70,83],[71,88],[65,89],[67,83],[69,84],[66,84],[68,1],[58,84],[102,108],[101,109],[99,95],[97,84],[103,1],[108,110],[106,1],[107,84],[109,99],[105,83],[95,84],[96,84],[76,84],[50,84],[57,103],[53,84],[56,84],[52,84],[46,104],[49,105],[44,106],[48,107]],"semanticDiagnosticsPerFile":[104,45,204,197,199,201,200,198,203,202,205,110,111,146,147,148,149,150,151,152,153,154,155,156,158,157,159,160,161,145,195,162,163,164,196,165,166,167,168,169,170,171,172,173,174,175,176,177,179,178,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,112,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,128,135,127,142,119,118,141,136,139,121,120,116,115,138,117,122,123,126,113,144,143,130,131,133,129,132,137,124,125,134,114,140,60,63,62,75,73,72,74,70,71,65,67,61,69,66,64,68,58,59,102,101,85,84,91,83,92,99,89,79,81,78,77,98,82,80,88,86,97,87,90,103,108,106,107,109,105,94,95,96,93,76,100,50,57,53,54,56,55,51,52,47,46,43,49,44,48]},"version":"4.9.5"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-post.d.ts","sourceRoot":"","sources":["../../../src/transformations/blog-post.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,QAAO,
|
|
1
|
+
{"version":3,"file":"blog-post.d.ts","sourceRoot":"","sources":["../../../src/transformations/blog-post.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,QAAO,MAoMrD,CAAA"}
|
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* that UIDL components expect.
|
|
5
5
|
*/
|
|
6
6
|
export var generateBlogPostTransformationCode = function () {
|
|
7
|
-
return "\n// ============================================================\n// Blog Post Transformation\n// ============================================================\n\nfunction buildBlogPost(record, options) {\n if (!record || typeof record !== 'object') return record\n options = options || {}\n var currentLang = options.currentLanguage || null\n var mainLang = options.mainLanguage || null\n var assetMap = options.assetMap || {}\n\n var id = record.id !== undefined && record.id !== null ? record.id : null\n\n // i18n-resolved text fields\n var title = resolveI18nField(record, 'title', 'title', currentLang, mainLang) || ''\n var slug = resolveI18nField(record, 'slug', 'slug', currentLang, mainLang) || ''\n var content = resolveI18nField(record, 'content', 'content', currentLang, mainLang) || ''\n var excerpt = resolveI18nField(record, 'excerpt', 'excerpt', currentLang, mainLang) || ''\n var category = resolveI18nField(record, 'category', 'category', currentLang, mainLang) || null\n var metaTitle = resolveI18nField(record, 'meta_title', 'metaTitle', currentLang, mainLang) || null\n var metaDescription = resolveI18nField(record, 'meta_description', 'metaDescription', currentLang, mainLang) || null\n var featuredImageAlt = resolveI18nField(record, 'featured_image_alt', 'featuredImageAlt', currentLang, mainLang) || null\n\n // Status\n var status = record.status || 'draft'\n\n // Asset fields - resolve IDs to URLs\n var rawFeaturedImage = pickFirst(record.featured_image_url, record.featuredImageUrl)\n var TELEPORT_DEFAULT_FEATURED_IMG = 'https://play.teleporthq.io/static/svg/default-img.svg'\n var featuredImageUrl = resolveAssetUrl(rawFeaturedImage, assetMap)\n if (\n !featuredImageUrl ||\n rawFeaturedImage === TELEPORT_DEFAULT_FEATURED_IMG ||\n featuredImageUrl === TELEPORT_DEFAULT_FEATURED_IMG\n ) {\n featuredImageUrl =\n 'data:image/svg+xml;charset=utf-8,' +\n encodeURIComponent(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"240\" viewBox=\"0 0 400 240\"><rect fill=\"#e5e7eb\" width=\"400\" height=\"240\"/><text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" fill=\"#9ca3af\" font-family=\"system-ui,sans-serif\" font-size=\"13\">No image</text></svg>'\n )\n }\n\n var rawAuthorAvatar = pickFirst(record.author_avatar_url, record.authorAvatarUrl)\n var authorAvatarUrl = resolveAssetUrl(rawAuthorAvatar, assetMap)\n\n // Simple pass-through fields\n var authorName = pickFirst(record.author_name, record.authorName)\n var authorEmail = pickFirst(record.author_email, record.authorEmail)\n var readingTimeMinutes = safeNumber(pickFirst(record.reading_time_minutes, record.readingTimeMinutes), null)\n\n // Tags - i18n-resolved then parsed as JSON array\n var rawTags = resolveI18nField(record, 'tags', 'tags', currentLang, mainLang)\n var tags = parseJsonArray(rawTags)\n\n // Gallery images - parse JSON array then resolve each asset URL\n var rawGalleryImages = pickFirst(record.gallery_images, record.galleryImages)\n var parsedGalleryImages = parseJsonArray(rawGalleryImages)\n var galleryImages = resolveAssetUrls(parsedGalleryImages, assetMap)\n\n // Computed: allImages = [featuredImageUrl, ...galleryImages] (skip null featured)\n var allImages = []\n if (featuredImageUrl) allImages.push(featuredImageUrl)\n allImages = allImages.concat(galleryImages)\n\n // Boolean fields\n var isFeatured = coerceBoolean(pickFirst(record.is_featured, record.isFeatured), false)\n var allowComments = record.allow_comments !== undefined\n ? coerceBoolean(record.allow_comments, true)\n : record.allowComments !== undefined\n ? coerceBoolean(record.allowComments, true)\n : true\n\n // Timestamps\n var rawPublishedAt = pickFirst(record.published_at, record.publishedAt)\n var publishedAt = rawPublishedAt != null ? normalizeTimestamp(rawPublishedAt) : null\n\n var rawCreatedAt = pickFirst(record.created_at, record.createdAt, record.created)\n var createdAt = normalizeTimestamp(rawCreatedAt)\n\n var rawUpdatedAt = pickFirst(record.updated_at, record.updatedAt, record.updated)\n var updatedAt = rawUpdatedAt != null ? normalizeTimestamp(rawUpdatedAt) : createdAt\n\n // Computed: created = Unix seconds from createdAt milliseconds\n var created = Math.floor(createdAt / 1000)\n\n return {\n id: id,\n title: title,\n slug: slug,\n content: content,\n excerpt: excerpt,\n status: status,\n category: category,\n tags: tags,\n featuredImageUrl: featuredImageUrl,\n featuredImageAlt: featuredImageAlt,\n galleryImages: galleryImages,\n allImages: allImages,\n authorName: authorName,\n authorEmail: authorEmail,\n author_name: authorName,\n author_email: authorEmail,\n authorAvatarUrl: authorAvatarUrl,\n metaTitle: metaTitle,\n metaDescription: metaDescription,\n readingTimeMinutes: readingTimeMinutes,\n isFeatured: isFeatured,\n allowComments: allowComments,\n publishedAt: publishedAt,\n createdAt: createdAt,\n updatedAt: updatedAt,\n created: created,\n }\n}\n\nfunction transformBlogPosts(records, options) {\n if (!Array.isArray(records)) return []\n return records.map(function(record) { return buildBlogPost(record, options) })\n}\n";
|
|
7
|
+
return "\n// ============================================================\n// Blog Post Transformation\n// ============================================================\n\nfunction buildBlogPost(record, options) {\n if (!record || typeof record !== 'object') return record\n options = options || {}\n var currentLang = options.currentLanguage || null\n var mainLang = options.mainLanguage || null\n var assetMap = options.assetMap || {}\n\n var id = record.id !== undefined && record.id !== null ? record.id : null\n\n // i18n-resolved text fields\n var title = resolveI18nField(record, 'title', 'title', currentLang, mainLang) || ''\n var slug = resolveI18nField(record, 'slug', 'slug', currentLang, mainLang) || ''\n var content = resolveI18nField(record, 'content', 'content', currentLang, mainLang) || ''\n var excerpt = resolveI18nField(record, 'excerpt', 'excerpt', currentLang, mainLang) || ''\n var category = resolveI18nField(record, 'category', 'category', currentLang, mainLang) || null\n var metaTitle = resolveI18nField(record, 'meta_title', 'metaTitle', currentLang, mainLang) || null\n var metaDescription = resolveI18nField(record, 'meta_description', 'metaDescription', currentLang, mainLang) || null\n var featuredImageAlt = resolveI18nField(record, 'featured_image_alt', 'featuredImageAlt', currentLang, mainLang) || null\n\n // Status\n var status = record.status || 'draft'\n\n // Asset fields - resolve IDs to URLs\n var rawFeaturedImage = pickFirst(record.featured_image_url, record.featuredImageUrl)\n var TELEPORT_DEFAULT_FEATURED_IMG = 'https://play.teleporthq.io/static/svg/default-img.svg'\n var featuredImageUrl = resolveAssetUrl(rawFeaturedImage, assetMap)\n if (\n !featuredImageUrl ||\n rawFeaturedImage === TELEPORT_DEFAULT_FEATURED_IMG ||\n featuredImageUrl === TELEPORT_DEFAULT_FEATURED_IMG\n ) {\n featuredImageUrl =\n 'data:image/svg+xml;charset=utf-8,' +\n encodeURIComponent(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"240\" viewBox=\"0 0 400 240\"><rect fill=\"#e5e7eb\" width=\"400\" height=\"240\"/><text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" fill=\"#9ca3af\" font-family=\"system-ui,sans-serif\" font-size=\"13\">No image</text></svg>'\n )\n }\n\n var rawAuthorAvatar = pickFirst(record.author_avatar_url, record.authorAvatarUrl)\n var authorAvatarUrl = resolveAssetUrl(rawAuthorAvatar, assetMap)\n\n // Simple pass-through fields\n var authorName = pickFirst(record.author_name, record.authorName)\n var authorEmail = pickFirst(record.author_email, record.authorEmail)\n var readingTimeMinutes = safeNumber(pickFirst(record.reading_time_minutes, record.readingTimeMinutes), null)\n\n // Tags - i18n-resolved then parsed as JSON array\n var rawTags = resolveI18nField(record, 'tags', 'tags', currentLang, mainLang)\n var tags = parseJsonArray(rawTags)\n\n // Gallery images - parse JSON array then resolve each asset URL\n var rawGalleryImages = pickFirst(record.gallery_images, record.galleryImages)\n var parsedGalleryImages = parseJsonArray(rawGalleryImages)\n var galleryImages = resolveAssetUrls(parsedGalleryImages, assetMap)\n\n // Computed: allImages = [featuredImageUrl, ...galleryImages] (skip null featured)\n var allImages = []\n if (featuredImageUrl) allImages.push(featuredImageUrl)\n allImages = allImages.concat(galleryImages)\n\n // Boolean fields\n var isFeatured = coerceBoolean(pickFirst(record.is_featured, record.isFeatured), false)\n var allowComments = record.allow_comments !== undefined\n ? coerceBoolean(record.allow_comments, true)\n : record.allowComments !== undefined\n ? coerceBoolean(record.allowComments, true)\n : true\n\n // The author's related-post picks. `relatedPosts` carries the TRANSFORMED\n // rows, not ids, so the details page's related-posts rail can map over it and\n // draw an article card per entry; `relatedPostIds` keeps the raw selection.\n // The rows arrive from ONE batched query (getRelatedPostsMap) that\n // transformRecords runs, keyed by id in options.relatedPostsById.\n //\n // MUST mirror buildRelatedBlogPosts in packages/renderer/src/utils/blog-posts.ts\n // (the canvas-preview SSOT): the author's order, UNPUBLISHED posts dropped,\n // self dropped, and the nested build deliberately WITHOUT the map \u2014 two posts\n // pointing at each other is ordinary and would otherwise recurse forever.\n var relatedPostIds = parseRelatedIds(record.related_post_ids)\n var relatedPostsById = options.relatedPostsById\n var relatedPosts = []\n if (relatedPostsById && relatedPostIds.length > 0) {\n var relatedNestedOptions = {\n assetMap: assetMap,\n currentLanguage: currentLang,\n mainLanguage: mainLang,\n }\n for (var rp = 0; rp < relatedPostIds.length; rp++) {\n var relatedId = relatedPostIds[rp]\n if (id != null && relatedId === String(id)) continue\n var relatedRecord = relatedPostsById[relatedId]\n if (!relatedRecord) continue\n // A draft must not reach the storefront through another post's rail.\n // Missing status reads as 'draft', the same default as above.\n if ((relatedRecord.status || 'draft') !== 'published') continue\n relatedPosts.push(buildBlogPost(relatedRecord, relatedNestedOptions))\n }\n }\n\n // Timestamps\n var rawPublishedAt = pickFirst(record.published_at, record.publishedAt)\n var publishedAt = rawPublishedAt != null ? normalizeTimestamp(rawPublishedAt) : null\n\n var rawCreatedAt = pickFirst(record.created_at, record.createdAt, record.created)\n var createdAt = normalizeTimestamp(rawCreatedAt)\n\n var rawUpdatedAt = pickFirst(record.updated_at, record.updatedAt, record.updated)\n var updatedAt = rawUpdatedAt != null ? normalizeTimestamp(rawUpdatedAt) : createdAt\n\n // Computed: created = Unix seconds from createdAt milliseconds\n var created = Math.floor(createdAt / 1000)\n\n return {\n id: id,\n title: title,\n slug: slug,\n content: content,\n excerpt: excerpt,\n status: status,\n category: category,\n tags: tags,\n relatedPostIds: relatedPostIds,\n relatedPosts: relatedPosts,\n featuredImageUrl: featuredImageUrl,\n featuredImageAlt: featuredImageAlt,\n galleryImages: galleryImages,\n allImages: allImages,\n authorName: authorName,\n authorEmail: authorEmail,\n author_name: authorName,\n author_email: authorEmail,\n authorAvatarUrl: authorAvatarUrl,\n metaTitle: metaTitle,\n metaDescription: metaDescription,\n readingTimeMinutes: readingTimeMinutes,\n isFeatured: isFeatured,\n allowComments: allowComments,\n publishedAt: publishedAt,\n createdAt: createdAt,\n updatedAt: updatedAt,\n created: created,\n }\n}\n\nfunction transformBlogPosts(records, options) {\n if (!Array.isArray(records)) return []\n return records.map(function(record) { return buildBlogPost(record, options) })\n}\n\n// Batched fetch of the post rows a set of posts reference as \"related\", keyed by\n// id. Best-effort in the same way as the product side: a table provisioned\n// before the column yields no ids (the read is of an absent property, not of a\n// column \u2014 the SQL never names it), the map stays empty, and the rail stays\n// hidden behind its is_not_empty gate.\nasync function getRelatedPostsMap(getClientFn, records) {\n var map = {}\n if (!Array.isArray(records) || records.length === 0) return map\n\n var wantedIds = []\n for (var i = 0; i < records.length; i++) {\n var ids = parseRelatedIds(records[i] && records[i].related_post_ids)\n for (var j = 0; j < ids.length; j++) {\n if (wantedIds.indexOf(ids[j]) === -1) wantedIds.push(ids[j])\n }\n }\n if (wantedIds.length === 0) return map\n\n var client\n try {\n client = getClientFn()\n await client.connect()\n var result = await client.query('SELECT * FROM teleport_blog_posts WHERE id = ANY($1)', [\n wantedIds,\n ])\n if (result && result.rows) {\n for (var r = 0; r < result.rows.length; r++) {\n var row = result.rows[r]\n if (row && row.id != null) map[String(row.id)] = row\n }\n }\n } catch (e) {\n // Leaves relatedPosts empty rather than failing the page.\n } finally {\n if (client) {\n try { await client.end() } catch (e) { /* ignore */ }\n }\n }\n return map\n}\n";
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=blog-post.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-post.js","sourceRoot":"","sources":["../../../src/transformations/blog-post.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,IAAM,kCAAkC,GAAG;IAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"blog-post.js","sourceRoot":"","sources":["../../../src/transformations/blog-post.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,IAAM,kCAAkC,GAAG;IAChD,OAAO,wtQAkMR,CAAA;AACD,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecommerce-product.d.ts","sourceRoot":"","sources":["../../../src/transformations/ecommerce-product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AA2CvE;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,gBACxC,qBAAqB,EAAE,KACnC,
|
|
1
|
+
{"version":3,"file":"ecommerce-product.d.ts","sourceRoot":"","sources":["../../../src/transformations/ecommerce-product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AA2CvE;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,gBACxC,qBAAqB,EAAE,KACnC,MA+nBF,CAAA"}
|
|
@@ -38,6 +38,6 @@ var flattenCategoriesById = function (categories) {
|
|
|
38
38
|
*/
|
|
39
39
|
export var generateEcommerceProductTransformationCode = function (categories) {
|
|
40
40
|
var categoriesByIdJson = JSON.stringify(flattenCategoriesById(categories));
|
|
41
|
-
return "\n// Category taxonomy (id -> {name, slug, translations}), baked in at export\n// time \u2014 see flattenCategoriesById in ecommerce-product.ts. Empty when the\n// store has no category taxonomy, or products.category_ids simply resolves\n// to nothing.\nvar PRODUCT_CATEGORIES_BY_ID = ".concat(categoriesByIdJson, "\n\n// Resolve a baked category's name to currentLang/mainLang from its\n// translations map (same per-request locale as every other i18n field via\n// resolveI18nField), falling back to the main-language name.\nfunction resolveCategoryName(categoryInfo, currentLang, mainLang) {\n if (currentLang && mainLang && currentLang !== mainLang && categoryInfo.translations) {\n var override = categoryInfo.translations[currentLang]\n if (override && override.name) return override.name\n }\n return categoryInfo.name\n}\n\n// ============================================================\n// E-Commerce Product Transformation\n// ============================================================\n\nfunction buildEcommerceProduct(record, options) {\n if (!record || typeof record !== 'object') return record\n options = options || {}\n var currentLang = options.currentLanguage || null\n var mainLang = options.mainLanguage || null\n var assetMap = options.assetMap || {}\n\n var id = record.id !== undefined && record.id !== null ? record.id : null\n\n // i18n-resolved text fields\n var name = resolveI18nField(record, 'name', 'name', currentLang, mainLang) || ''\n var slug = resolveI18nField(record, 'slug', 'slug', currentLang, mainLang) || ''\n var description = resolveI18nField(record, 'description', 'description', currentLang, mainLang) || ''\n var category = resolveI18nField(record, 'category', 'category', currentLang, mainLang) || null\n var tagsRaw = resolveI18nField(record, 'tags', 'tags', currentLang, mainLang)\n var imageAlt = resolveI18nField(record, 'image_alt', 'imageAlt', currentLang, mainLang) || null\n\n // Computed: plain-text description (HTML stripped)\n var descriptionText = stripHtmlTags(description)\n\n // Numeric fields (with NaN protection)\n var price = safeNumber(record.price, 0)\n var quantity = safeNumber(record.quantity, null)\n\n // Currency\n var currency = (record.currency || 'USD').toUpperCase()\n var rawCurrencySymbol = pickFirst(record.currency_symbol, record.currencySymbol)\n var currencySymbol = rawCurrencySymbol || getCurrencySymbol(currency)\n\n // Status and active (normalize case \u2014 DB / forms may send \"Active\", \"Inactive\", etc.)\n var statusRaw = record.status\n if (statusRaw == null || statusRaw === '') {\n statusRaw = record.active ? 'active' : 'inactive'\n }\n var status =\n typeof statusRaw === 'string'\n ? statusRaw.trim().toLowerCase()\n : String(statusRaw).toLowerCase()\n var active = status === 'active'\n\n // Payment fields\n var paymentType = pickFirst(record.payment_type, record.paymentType) || 'one_time'\n var recurringInterval = pickFirst(record.recurring_interval, record.recurringInterval) || null\n var rawRecurringCount = pickFirst(record.recurring_interval_count, record.recurringIntervalCount)\n var recurringIntervalCount = safeNumber(rawRecurringCount, null)\n\n // Physical product fields\n var sku = record.sku || null\n var weight = safeNumber(record.weight, null)\n var weightUnit = pickFirst(record.weight_unit, record.weightUnit) || null\n var dimensions = record.dimensions || null\n\n // Tags - parse as JSON array (handles JSON strings, arrays, comma-separated)\n var tags = parseJsonArray(tagsRaw)\n\n // Variant AXES (translatable). The i18n-resolved column already carries the\n // display labels for the current language (with the SAME stable keys as the\n // base column); we just parse + normalize. The purchasable combinations live\n // in teleport_product_variants and are fetched by the variant picker widget.\n var variantOptionsRaw = resolveI18nField(record, 'variant_options', 'variantOptions', currentLang, mainLang)\n var variantOptions = normalizeVariantOptions(variantOptionsRaw)\n // Emitted as a STRING ('true'/'false') to match the strict-equality checks the\n // storefront uses (same convention as outOfStock).\n var requiresVariantSelection = variantOptions.length > 0 ? 'true' : 'false'\n\n // Provider fields\n var providerType = pickFirst(record.provider_type, record.providerType) || null\n var providerProductId = pickFirst(record.provider_product_id, record.providerProductId) || null\n var defaultPrice = pickFirst(record.default_price, record.defaultPrice) || null\n\n // Metadata\n var metadata = parseJsonObject(record.metadata)\n\n // Visible custom properties -> [{key,value,kind,color,imageUrl}] for the\n // storefront pills mapper. MUST mirror buildVisibleProductProperties /\n // classifyProductProperty in\n // apps/gui/app/project-page/features/e-commerce/utils/product-property-display.ts\n // (the canvas-preview SSOT) field-for-field: same reserved-key exclusions,\n // same default-VISIBLE (opt-out) rule, same color/image classification. A\n // property is shown unless it is a reserved key, has an empty value, or is\n // explicitly hidden (false) in the _tqPropVisibility map -- so it also\n // renders for products whose form was never opened (no visibility map yet).\n var propVisibility = parseJsonObject(metadata._tqPropVisibility)\n var visibleProperties = []\n Object.keys(metadata).forEach(function (propKey) {\n if (isReservedProductMetadataKey(propKey)) return\n if (propVisibility[propKey] === false) return\n var rawValue = metadata[propKey]\n if (rawValue == null) return\n var propValue = String(rawValue)\n if (propValue.trim() === '') return\n visibleProperties.push(classifyProductProperty(propKey, propValue))\n })\n\n // Assigned category ids -> resolved {id,name,slug} objects for the\n // storefront category pills mapper. The taxonomy itself is not in the DB\n // (categories are authored in the GUI and live only in\n // ecommerceSettings.categories); resolved here against PRODUCT_CATEGORIES_BY_ID,\n // baked in at export time (see flattenCategoriesById). Unknown/stale ids\n // (a deleted category) are silently dropped.\n var categoryIds = parseJsonArray(record.category_ids)\n var categories = []\n for (var ci = 0; ci < categoryIds.length; ci++) {\n var categoryInfo = PRODUCT_CATEGORIES_BY_ID[categoryIds[ci]]\n if (categoryInfo) {\n categories.push({\n id: categoryIds[ci],\n name: resolveCategoryName(categoryInfo, currentLang, mainLang),\n slug: categoryInfo.slug,\n })\n }\n }\n\n // Purchasable variant COMBINATIONS for this product ({id, options map, price,\n // stock, image}). Empty for flat products. Fetched in ONE batched query by\n // transformRecords and passed in via options.variantsByProductId, keyed by\n // product id. The storefront card/details read these to default-select the\n // first in-stock variant, disable dead options, and resolve the chosen id.\n var variantsByProductId = options.variantsByProductId || {}\n var rawVariants = variantsByProductId[id] || []\n var variants = []\n for (var vi = 0; vi < rawVariants.length; vi++) {\n var vrow = rawVariants[vi] || {}\n var vopts = parseJsonObject(vrow.options)\n variants.push({\n id: vrow.id != null ? String(vrow.id) : '',\n options: vopts && typeof vopts === 'object' ? vopts : {},\n price: safeNumber(vrow.price, null),\n quantity: safeNumber(vrow.quantity, null),\n image_url: vrow.image_url ? resolveAssetUrl(vrow.image_url, assetMap) : null,\n })\n }\n\n // -------------------------------------------------------\n // Image resolution (complex multi-step process)\n // -------------------------------------------------------\n\n // Step 1: Get raw image values\n var rawImageUrl = pickFirst(record.image_url, record.mainImage, record.imageUrl)\n var rawGalleryImages = pickFirst(record.gallery_images, record.galleryImages)\n var legacyImages = Array.isArray(record.images)\n ? record.images.filter(function(v) { return typeof v === 'string' })\n : []\n\n // Step 2: Parse gallery images from JSON\n var parsedGalleryImages = parseJsonArray(rawGalleryImages)\n\n // Step 3: Build combined raw images array\n var allRawImages = []\n if (rawImageUrl) allRawImages.push(rawImageUrl)\n allRawImages = allRawImages.concat(parsedGalleryImages).concat(legacyImages)\n\n // Step 4: Resolve all asset URLs first, then deduplicate\n var resolvedAll = resolveAssetUrls(allRawImages, assetMap)\n var resolvedImages = deduplicateStrings(resolvedAll)\n\n // Step 5: Determine mainImage\n var mainImage = rawImageUrl\n ? resolveAssetUrl(rawImageUrl, assetMap)\n : (resolvedImages.length > 0 ? resolvedImages[0] : null)\n\n // Step 6: galleryImages = resolvedImages without mainImage\n var galleryImages = mainImage\n ? resolvedImages.filter(function(url) { return url !== mainImage })\n : resolvedImages.slice()\n\n // Step 7: images = full resolved deduplicated array\n var images = resolvedImages\n\n // Timestamps\n var rawCreatedAt = pickFirst(record.created_at, record.createdAt, record.created)\n var createdAt = normalizeTimestamp(rawCreatedAt)\n\n var rawUpdatedAt = pickFirst(record.updated_at, record.updatedAt, record.updated)\n var updatedAt = rawUpdatedAt != null ? normalizeTimestamp(rawUpdatedAt) : createdAt\n\n // Computed: created = Unix seconds\n var created = Math.floor(createdAt / 1000)\n\n // Computed: outOfStock (emitted as a STRING \u2014 'true' / 'false' \u2014 so it\n // matches the strict equality check the AI generates on product\n // cards/details pages: `ecommerceProduct?.outOfStock === 'true'`.\n // A boolean here would silently fail that comparison (boolean !==\n // string), leaving the Add to Cart button visible on out-of-stock\n // products. NULL/NaN quantity \u2192 'false' (treated as \"unlimited\n // stock\", same as the upstream cart-availability rewriter).\n var outOfStock = (quantity !== null && !isNaN(quantity) && quantity <= 0) ? 'true' : 'false'\n\n // Per-value availability + default-selection flags, derived from the\n // purchasable combinations, so the storefront picker renders its\n // Default / Selected / Unavailable states with NO runtime fetch. The card\n // (N instances) first-paints from these data flags; the details page seeds\n // its selection from the same combinations. axisValueKey (axisKey|valueKey)\n // disambiguates same-named values across axes (Size \"s\" vs Sleeve \"s\").\n // Emitted as STRINGS to match the storefront's string-equality convention.\n var variantAxisKeys = []\n for (var ak = 0; ak < variantOptions.length; ak++) { variantAxisKeys.push(variantOptions[ak].key) }\n var firstVariant = pickFirstAvailableVariant(variants, variantAxisKeys)\n var deadValueKeys = computeDeadVariantKeys(variants, variantOptions)\n for (var ai = 0; ai < variantOptions.length; ai++) {\n var vax = variantOptions[ai]\n for (var vj = 0; vj < vax.values.length; vj++) {\n var vval = vax.values[vj]\n var composite = vax.key + '|' + vval.value\n vval.axisValueKey = composite\n vval.isDead = deadValueKeys[composite] ? 'true' : 'false'\n vval.isDefault =\n firstVariant && firstVariant.options && firstVariant.options[vax.key] === vval.value\n ? 'true'\n : 'false'\n // Whether THIS value renders as a colour swatch vs a text pill. A colour\n // axis whose value has no resolvable colour degrades to a text pill so it\n // is never an invisible empty circle. Emitted as a string to match the\n // picker's string-equality rendering gate. MUST mirror the renderer\n // enrichment in packages/renderer/src/utils/ecommerce-products.ts.\n vval.showSwatch = vax.type === 'color' && vval.color ? 'true' : 'false'\n }\n }\n var defaultVariantId = firstVariant && isVariantInStock(firstVariant) ? firstVariant.id : ''\n var defaultVariantPrice = firstVariant ? formatVariantPrice(firstVariant.price, price) : ''\n // Stringified companions: a data-* attr bound to an ARRAY renders\n // '[object Object]', so the picker's on-mount/click workflows read the\n // combinations + axes from these JSON strings via getAttribute.\n var variantOptionsJson = safeStringifyJson(variantOptions)\n var variantsJson = safeStringifyJson(variants)\n\n return {\n id: id,\n name: name,\n slug: slug,\n description: description,\n descriptionText: descriptionText,\n price: price,\n currency: currency,\n currencySymbol: currencySymbol,\n status: status,\n active: active,\n quantity: quantity,\n paymentType: paymentType,\n recurringInterval: recurringInterval,\n recurringIntervalCount: recurringIntervalCount,\n sku: sku,\n weight: weight,\n weightUnit: weightUnit,\n dimensions: dimensions,\n category: category,\n categories: categories,\n tags: tags,\n imageAlt: imageAlt,\n providerType: providerType,\n providerProductId: providerProductId,\n default_price: defaultPrice,\n metadata: metadata,\n visibleProperties: visibleProperties,\n mainImage: mainImage,\n imageUrl: mainImage,\n image_url: mainImage,\n galleryImages: galleryImages,\n images: images,\n createdAt: createdAt,\n updatedAt: updatedAt,\n created: created,\n outOfStock: outOfStock,\n variantOptions: variantOptions,\n requiresVariantSelection: requiresVariantSelection,\n variants: variants,\n variantOptionsJson: variantOptionsJson,\n variantsJson: variantsJson,\n defaultVariantId: defaultVariantId,\n defaultVariantPrice: defaultVariantPrice,\n }\n}\n\n// --- Variant availability helpers (mirror packages/renderer ecommerce-products) ---\n// A variant is in stock when its quantity is null (unlimited) or > 0.\nfunction isVariantInStock(v) {\n return !v ? false : v.quantity == null || v.quantity > 0\n}\nfunction variantCoversAllAxes(v, axisKeys) {\n if (!v || !v.options) return false\n for (var i = 0; i < axisKeys.length; i++) {\n if (v.options[axisKeys[i]] == null) return false\n }\n return true\n}\n// First in-stock combination covering every axis; falls back to the first\n// covering combination (even if OOS) so a fully-OOS product still has a\n// visual default; null when no combination covers the axes.\nfunction pickFirstAvailableVariant(variants, axisKeys) {\n if (!Array.isArray(variants) || !axisKeys.length) return null\n for (var i = 0; i < variants.length; i++) {\n if (variantCoversAllAxes(variants[i], axisKeys) && isVariantInStock(variants[i])) return variants[i]\n }\n for (var j = 0; j < variants.length; j++) {\n if (variantCoversAllAxes(variants[j], axisKeys)) return variants[j]\n }\n return null\n}\n// Map of composite \"axisKey|valueKey\" -> true for every value that appears in\n// NO in-stock combination (rendered as the Unavailable state).\nfunction computeDeadVariantKeys(variants, axes) {\n // No combinations attached (flat product, zero-variant product, or editor\n // preview) -> nothing is dead; every value stays selectable. Dead-marking is\n // only meaningful relative to combinations that actually exist.\n if (!Array.isArray(variants) || variants.length === 0) return {}\n var alive = {}\n for (var i = 0; i < variants.length; i++) {\n var v = variants[i]\n if (!isVariantInStock(v)) continue\n for (var k in v.options) {\n if (Object.prototype.hasOwnProperty.call(v.options, k)) alive[k + '|' + v.options[k]] = true\n }\n }\n var dead = {}\n for (var a = 0; a < axes.length; a++) {\n var ax = axes[a]\n for (var b = 0; b < ax.values.length; b++) {\n var key = ax.key + '|' + ax.values[b].value\n if (!alive[key]) dead[key] = true\n }\n }\n return dead\n}\n// Variant price with base-price inheritance (null variant price -> product price).\nfunction formatVariantPrice(vprice, basePrice) {\n var p = vprice == null || isNaN(vprice) ? basePrice : vprice\n return String(Number(p).toFixed(2))\n}\nfunction safeStringifyJson(obj) {\n try {\n return JSON.stringify(obj)\n } catch (e) {\n return '[]'\n }\n}\n\n// Parse + normalize the variant_options JSON into render-ready axes. Tolerant of\n// null / malformed / partial data (returns []). Keeps ONLY the fields the pill\n// widget needs; the labels are already language-resolved by the caller.\nfunction normalizeVariantOptions(raw) {\n if (!raw) return []\n var parsed = raw\n if (typeof raw === 'string') {\n try { parsed = JSON.parse(raw) } catch (e) { return [] }\n }\n if (!Array.isArray(parsed)) return []\n var out = []\n for (var i = 0; i < parsed.length; i++) {\n var axis = parsed[i]\n if (!axis || typeof axis !== 'object' || !Array.isArray(axis.values)) continue\n var name = typeof axis.name === 'string' ? axis.name : ''\n var key = typeof axis.key === 'string' && axis.key ? axis.key : name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')\n if (!key) continue\n var type = axis.type === 'color' ? 'color' : 'text'\n var values = []\n for (var j = 0; j < axis.values.length; j++) {\n var v = axis.values[j]\n if (!v || typeof v !== 'object') continue\n var label = typeof v.label === 'string' ? v.label : ''\n var value = typeof v.value === 'string' && v.value ? v.value : label.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')\n if (!value) continue\n var entry = { value: value, label: label }\n if (type === 'color' && typeof v.color === 'string' && v.color) entry.color = v.color\n values.push(entry)\n }\n if (!values.length) continue\n out.push({ key: key, name: name, type: type, values: values })\n }\n return out\n}\n\n// --- Custom-property classification (MUST mirror product-property-display.ts) ---\n\n// Product-attribute keys that can leak into the free-form `metadata` map (e.g.\n// from a payment-provider sync or legacy data) but are NOT user custom\n// properties. Kept in sync with the GUI's RESERVED_PRODUCT_METADATA_KEYS.\nvar RESERVED_PRODUCT_METADATA_KEYS = {\n paymentType: true, recurringInterval: true, recurringIntervalCount: true,\n price: true, currency: true, status: true, sku: true, weightUnit: true,\n dimensions: true, category: true, brand: true, gtin: true, mpn: true,\n condition: true, tags: true,\n}\nfunction isReservedProductMetadataKey(key) {\n return !!RESERVED_PRODUCT_METADATA_KEYS[key] ||\n key.indexOf('mainImage') === 0 ||\n key.indexOf('secondaryImage') === 0 ||\n key.indexOf('_tq') === 0\n}\n\nvar CSS_NAMED_COLORS = {\n aliceblue: 1, antiquewhite: 1, aqua: 1, aquamarine: 1, azure: 1, beige: 1, bisque: 1,\n black: 1, blanchedalmond: 1, blue: 1, blueviolet: 1, brown: 1, burlywood: 1,\n cadetblue: 1, chartreuse: 1, chocolate: 1, coral: 1, cornflowerblue: 1, cornsilk: 1,\n crimson: 1, cyan: 1, darkblue: 1, darkcyan: 1, darkgoldenrod: 1, darkgray: 1,\n darkgrey: 1, darkgreen: 1, darkkhaki: 1, darkmagenta: 1, darkolivegreen: 1,\n darkorange: 1, darkorchid: 1, darkred: 1, darksalmon: 1, darkseagreen: 1,\n darkslateblue: 1, darkslategray: 1, darkslategrey: 1, darkturquoise: 1,\n darkviolet: 1, deeppink: 1, deepskyblue: 1, dimgray: 1, dimgrey: 1, dodgerblue: 1,\n firebrick: 1, floralwhite: 1, forestgreen: 1, fuchsia: 1, gainsboro: 1,\n ghostwhite: 1, gold: 1, goldenrod: 1, gray: 1, grey: 1, green: 1, greenyellow: 1,\n honeydew: 1, hotpink: 1, indianred: 1, indigo: 1, ivory: 1, khaki: 1, lavender: 1,\n lavenderblush: 1, lawngreen: 1, lemonchiffon: 1, lightblue: 1, lightcoral: 1,\n lightcyan: 1, lightgoldenrodyellow: 1, lightgray: 1, lightgrey: 1, lightgreen: 1,\n lightpink: 1, lightsalmon: 1, lightseagreen: 1, lightskyblue: 1, lightslategray: 1,\n lightslategrey: 1, lightsteelblue: 1, lightyellow: 1, lime: 1, limegreen: 1,\n linen: 1, magenta: 1, maroon: 1, mediumaquamarine: 1, mediumblue: 1,\n mediumorchid: 1, mediumpurple: 1, mediumseagreen: 1, mediumslateblue: 1,\n mediumspringgreen: 1, mediumturquoise: 1, mediumvioletred: 1, midnightblue: 1,\n mintcream: 1, mistyrose: 1, moccasin: 1, navajowhite: 1, navy: 1, oldlace: 1,\n olive: 1, olivedrab: 1, orange: 1, orangered: 1, orchid: 1, palegoldenrod: 1,\n palegreen: 1, paleturquoise: 1, palevioletred: 1, papayawhip: 1, peachpuff: 1,\n peru: 1, pink: 1, plum: 1, powderblue: 1, purple: 1, rebeccapurple: 1, red: 1,\n rosybrown: 1, royalblue: 1, saddlebrown: 1, salmon: 1, sandybrown: 1, seagreen: 1,\n seashell: 1, sienna: 1, silver: 1, skyblue: 1, slateblue: 1, slategray: 1,\n slategrey: 1, snow: 1, springgreen: 1, steelblue: 1, tan: 1, teal: 1, thistle: 1,\n tomato: 1, turquoise: 1, violet: 1, wheat: 1, white: 1, whitesmoke: 1, yellow: 1,\n yellowgreen: 1, transparent: 1,\n}\nvar HEX_COLOR_RE = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i\nvar FUNCTIONAL_COLOR_RE = /^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\\((?:[0-9a-z%.,\\s/+-]+)\\)$/i\nvar COLOR_KEY_WORDS = {\n color: 1, colors: 1, colour: 1, colours: 1, shade: 1, shades: 1, hue: 1, hues: 1,\n tint: 1, tints: 1, tone: 1, tones: 1, swatch: 1, swatches: 1,\n}\nfunction splitKeyWords(key) {\n return key.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)\n}\nfunction keyIndicatesColor(key) {\n var normalized = key.toLowerCase()\n if (/colou?r/.test(normalized)) return true\n return splitKeyWords(key).some(function(word) { return !!COLOR_KEY_WORDS[word] })\n}\nfunction resolvePropertyColor(key, value) {\n var v = value.trim()\n if (!v) return ''\n if (HEX_COLOR_RE.test(v) || FUNCTIONAL_COLOR_RE.test(v)) return v\n if (CSS_NAMED_COLORS[v.toLowerCase()] && keyIndicatesColor(key)) return v\n return ''\n}\n\nvar DATA_IMAGE_URI_RE = /^data:image\\//i\nvar ABSOLUTE_URL_RE = /^(?:https?:)?\\/\\//i\nvar IMAGE_EXTENSION_RE = /\\.(?:png|jpe?g|gif|webp|svg|avif|bmp|ico|tiff?|heic|heif)$/i\nvar IMAGE_KEY_WORDS = {\n image: 1, images: 1, img: 1, imgs: 1, photo: 1, photos: 1, picture: 1, pictures: 1,\n pic: 1, pics: 1, thumbnail: 1, thumbnails: 1, thumb: 1, thumbs: 1, icon: 1, icons: 1,\n logo: 1, logos: 1, avatar: 1, avatars: 1, banner: 1, banners: 1, cover: 1, covers: 1,\n gallery: 1, screenshot: 1, screenshots: 1, poster: 1, posters: 1, artwork: 1,\n graphic: 1, graphics: 1, illustration: 1, wallpaper: 1, preview: 1, snapshot: 1,\n media: 1, visual: 1, visuals: 1,\n}\nfunction keyIndicatesImage(key) {\n var normalized = key.toLowerCase()\n if (/(?:image|img|photo|picture|thumb|icon|logo|avatar|banner|gallery|screenshot|poster|artwork|graphic|wallpaper)/.test(normalized)) return true\n return splitKeyWords(key).some(function(word) { return !!IMAGE_KEY_WORDS[word] })\n}\nfunction stripUrlQueryAndHash(url) {\n return url.split(/[?#]/)[0]\n}\nfunction resolvePropertyImage(key, value) {\n var v = value.trim()\n if (!v) return ''\n if (DATA_IMAGE_URI_RE.test(v)) return v\n var isAbsoluteUrl = ABSOLUTE_URL_RE.test(v)\n var isRootRelative = v.charAt(0) === '/' && !isAbsoluteUrl\n if (!isAbsoluteUrl && !isRootRelative) return ''\n if (IMAGE_EXTENSION_RE.test(stripUrlQueryAndHash(v))) return v\n if (isAbsoluteUrl && keyIndicatesImage(key)) return v\n return ''\n}\n\n// Image wins over colour (a URL can never be a CSS colour, but checking image\n// first keeps the precedence explicit), text is the fallback.\nfunction classifyProductProperty(key, value) {\n var imageUrl = resolvePropertyImage(key, value)\n if (imageUrl) return { key: key, value: value, kind: 'image', color: '', imageUrl: imageUrl }\n var color = resolvePropertyColor(key, value)\n if (color) return { key: key, value: value, kind: 'color', color: color, imageUrl: '' }\n return { key: key, value: value, kind: 'text', color: '', imageUrl: '' }\n}\n\nfunction transformEcommerceProducts(records, options) {\n if (!Array.isArray(records)) return []\n return records.map(function(record) { return buildEcommerceProduct(record, options) })\n}\n\n// Batched fetch of the purchasable variant rows for a set of product ids, keyed\n// by product_id, so buildEcommerceProduct can attach product.variants without a\n// per-product query. Best-effort: a store with no variants (or before the table\n// exists) yields an empty map and flat products keep variants: [].\nasync function getVariantsMap(getClientFn, productIds) {\n var map = {}\n if (!Array.isArray(productIds) || productIds.length === 0) return map\n var uniqueIds = []\n var seenIds = {}\n for (var u = 0; u < productIds.length; u++) {\n var pid0 = productIds[u]\n if (pid0 != null && !seenIds[pid0]) { seenIds[pid0] = true; uniqueIds.push(pid0) }\n }\n if (uniqueIds.length === 0) return map\n var client\n try {\n client = getClientFn()\n await client.connect()\n var result = await client.query(\n 'SELECT id, product_id, options, price, quantity, image_url FROM teleport_product_variants WHERE product_id = ANY($1) ORDER BY position ASC, id ASC',\n [uniqueIds]\n )\n if (result && result.rows) {\n for (var r = 0; r < result.rows.length; r++) {\n var row = result.rows[r]\n var pid = row.product_id\n if (!map[pid]) map[pid] = []\n map[pid].push(row)\n }\n }\n } catch (e) {\n // teleport_product_variants may not exist for a non-variant store.\n } finally {\n if (client) {\n try { await client.end() } catch (e) { /* ignore */ }\n }\n }\n return map\n}\n");
|
|
41
|
+
return "\n// Category taxonomy (id -> {name, slug, translations}), baked in at export\n// time \u2014 see flattenCategoriesById in ecommerce-product.ts. Empty when the\n// store has no category taxonomy, or products.category_ids simply resolves\n// to nothing.\nvar PRODUCT_CATEGORIES_BY_ID = ".concat(categoriesByIdJson, "\n\n// Resolve a baked category's name to currentLang/mainLang from its\n// translations map (same per-request locale as every other i18n field via\n// resolveI18nField), falling back to the main-language name.\nfunction resolveCategoryName(categoryInfo, currentLang, mainLang) {\n if (currentLang && mainLang && currentLang !== mainLang && categoryInfo.translations) {\n var override = categoryInfo.translations[currentLang]\n if (override && override.name) return override.name\n }\n return categoryInfo.name\n}\n\n// ============================================================\n// E-Commerce Product Transformation\n// ============================================================\n\nfunction buildEcommerceProduct(record, options) {\n if (!record || typeof record !== 'object') return record\n options = options || {}\n var currentLang = options.currentLanguage || null\n var mainLang = options.mainLanguage || null\n var assetMap = options.assetMap || {}\n\n var id = record.id !== undefined && record.id !== null ? record.id : null\n\n // i18n-resolved text fields\n var name = resolveI18nField(record, 'name', 'name', currentLang, mainLang) || ''\n var slug = resolveI18nField(record, 'slug', 'slug', currentLang, mainLang) || ''\n var description = resolveI18nField(record, 'description', 'description', currentLang, mainLang) || ''\n var category = resolveI18nField(record, 'category', 'category', currentLang, mainLang) || null\n var tagsRaw = resolveI18nField(record, 'tags', 'tags', currentLang, mainLang)\n var imageAlt = resolveI18nField(record, 'image_alt', 'imageAlt', currentLang, mainLang) || null\n\n // Computed: plain-text description (HTML stripped)\n var descriptionText = stripHtmlTags(description)\n\n // Numeric fields (with NaN protection)\n var price = safeNumber(record.price, 0)\n var quantity = safeNumber(record.quantity, null)\n\n // Currency\n var currency = (record.currency || 'USD').toUpperCase()\n var rawCurrencySymbol = pickFirst(record.currency_symbol, record.currencySymbol)\n var currencySymbol = rawCurrencySymbol || getCurrencySymbol(currency)\n\n // Status and active (normalize case \u2014 DB / forms may send \"Active\", \"Inactive\", etc.)\n var statusRaw = record.status\n if (statusRaw == null || statusRaw === '') {\n statusRaw = record.active ? 'active' : 'inactive'\n }\n var status =\n typeof statusRaw === 'string'\n ? statusRaw.trim().toLowerCase()\n : String(statusRaw).toLowerCase()\n var active = status === 'active'\n\n // Payment fields\n var paymentType = pickFirst(record.payment_type, record.paymentType) || 'one_time'\n var recurringInterval = pickFirst(record.recurring_interval, record.recurringInterval) || null\n var rawRecurringCount = pickFirst(record.recurring_interval_count, record.recurringIntervalCount)\n var recurringIntervalCount = safeNumber(rawRecurringCount, null)\n\n // Physical product fields\n var sku = record.sku || null\n var weight = safeNumber(record.weight, null)\n var weightUnit = pickFirst(record.weight_unit, record.weightUnit) || null\n var dimensions = record.dimensions || null\n\n // Tags - parse as JSON array (handles JSON strings, arrays, comma-separated)\n var tags = parseJsonArray(tagsRaw)\n\n // Variant AXES (translatable). The i18n-resolved column already carries the\n // display labels for the current language (with the SAME stable keys as the\n // base column); we just parse + normalize. The purchasable combinations live\n // in teleport_product_variants and are fetched by the variant picker widget.\n var variantOptionsRaw = resolveI18nField(record, 'variant_options', 'variantOptions', currentLang, mainLang)\n var variantOptions = normalizeVariantOptions(variantOptionsRaw)\n // Emitted as a STRING ('true'/'false') to match the strict-equality checks the\n // storefront uses (same convention as outOfStock).\n var requiresVariantSelection = variantOptions.length > 0 ? 'true' : 'false'\n\n // Provider fields\n var providerType = pickFirst(record.provider_type, record.providerType) || null\n var providerProductId = pickFirst(record.provider_product_id, record.providerProductId) || null\n var defaultPrice = pickFirst(record.default_price, record.defaultPrice) || null\n\n // Metadata\n var metadata = parseJsonObject(record.metadata)\n\n // Visible custom properties -> [{key,value,kind,color,imageUrl}] for the\n // storefront pills mapper. MUST mirror buildVisibleProductProperties /\n // classifyProductProperty in\n // apps/gui/app/project-page/features/e-commerce/utils/product-property-display.ts\n // (the canvas-preview SSOT) field-for-field: same reserved-key exclusions,\n // same default-VISIBLE (opt-out) rule, same color/image classification. A\n // property is shown unless it is a reserved key, has an empty value, or is\n // explicitly hidden (false) in the _tqPropVisibility map -- so it also\n // renders for products whose form was never opened (no visibility map yet).\n var propVisibility = parseJsonObject(metadata._tqPropVisibility)\n var visibleProperties = []\n Object.keys(metadata).forEach(function (propKey) {\n if (isReservedProductMetadataKey(propKey)) return\n if (propVisibility[propKey] === false) return\n var rawValue = metadata[propKey]\n if (rawValue == null) return\n var propValue = String(rawValue)\n if (propValue.trim() === '') return\n visibleProperties.push(classifyProductProperty(propKey, propValue))\n })\n\n // Assigned category ids -> resolved {id,name,slug} objects for the\n // storefront category pills mapper. The taxonomy itself is not in the DB\n // (categories are authored in the GUI and live only in\n // ecommerceSettings.categories); resolved here against PRODUCT_CATEGORIES_BY_ID,\n // baked in at export time (see flattenCategoriesById). Unknown/stale ids\n // (a deleted category) are silently dropped.\n var categoryIds = parseJsonArray(record.category_ids)\n var categories = []\n for (var ci = 0; ci < categoryIds.length; ci++) {\n var categoryInfo = PRODUCT_CATEGORIES_BY_ID[categoryIds[ci]]\n if (categoryInfo) {\n categories.push({\n id: categoryIds[ci],\n name: resolveCategoryName(categoryInfo, currentLang, mainLang),\n slug: categoryInfo.slug,\n })\n }\n }\n\n // Purchasable variant COMBINATIONS for this product ({id, options map, price,\n // stock, image}). Empty for flat products. Fetched in ONE batched query by\n // transformRecords and passed in via options.variantsByProductId, keyed by\n // product id. The storefront card/details read these to default-select the\n // first in-stock variant, disable dead options, and resolve the chosen id.\n var variantsByProductId = options.variantsByProductId || {}\n var rawVariants = variantsByProductId[id] || []\n var variants = []\n for (var vi = 0; vi < rawVariants.length; vi++) {\n var vrow = rawVariants[vi] || {}\n var vopts = parseJsonObject(vrow.options)\n variants.push({\n id: vrow.id != null ? String(vrow.id) : '',\n options: vopts && typeof vopts === 'object' ? vopts : {},\n price: safeNumber(vrow.price, null),\n quantity: safeNumber(vrow.quantity, null),\n image_url: vrow.image_url ? resolveAssetUrl(vrow.image_url, assetMap) : null,\n })\n }\n\n // The merchant's related-product picks. `relatedProducts` carries the\n // TRANSFORMED rows, not ids, so the details page's related-products rail can\n // map over it and draw a product card per entry; `relatedProductIds` keeps\n // the raw selection for anything that wants it. The rows arrive from ONE\n // batched query (getRelatedProductsMap) that transformRecords runs, keyed by\n // id in options.relatedProductsById.\n //\n // MUST mirror buildRelatedEcommerceProducts in\n // packages/renderer/src/utils/ecommerce-products.ts (the canvas-preview SSOT):\n // the merchant's order, inactive products dropped, self dropped, and the\n // nested build deliberately WITHOUT the map \u2014 two products referencing each\n // other is the normal case (they are each other's accessories) and threading\n // the map through would recurse until the stack ran out.\n var relatedProductIds = parseRelatedIds(record.related_product_ids)\n var relatedProductsById = options.relatedProductsById\n var relatedProducts = []\n if (relatedProductsById && relatedProductIds.length > 0) {\n var relatedNestedOptions = {\n assetMap: assetMap,\n currentLanguage: currentLang,\n mainLanguage: mainLang,\n variantsByProductId: options.variantsByProductId || {},\n }\n for (var rp = 0; rp < relatedProductIds.length; rp++) {\n var relatedId = relatedProductIds[rp]\n if (id != null && relatedId === String(id)) continue\n var relatedRecord = relatedProductsById[relatedId]\n if (!relatedRecord) continue\n // A product taken off sale must not come back through the back door on\n // every product that references it. Missing status reads as active, the\n // same default the main status normalization uses above.\n var relatedStatusRaw = relatedRecord.status\n var relatedStatus =\n relatedStatusRaw == null || relatedStatusRaw === ''\n ? 'active'\n : String(relatedStatusRaw).trim().toLowerCase()\n if (relatedStatus !== 'active') continue\n relatedProducts.push(buildEcommerceProduct(relatedRecord, relatedNestedOptions))\n }\n }\n\n // -------------------------------------------------------\n // Image resolution (complex multi-step process)\n // -------------------------------------------------------\n\n // Step 1: Get raw image values\n var rawImageUrl = pickFirst(record.image_url, record.mainImage, record.imageUrl)\n var rawGalleryImages = pickFirst(record.gallery_images, record.galleryImages)\n var legacyImages = Array.isArray(record.images)\n ? record.images.filter(function(v) { return typeof v === 'string' })\n : []\n\n // Step 2: Parse gallery images from JSON\n var parsedGalleryImages = parseJsonArray(rawGalleryImages)\n\n // Step 3: Build combined raw images array\n var allRawImages = []\n if (rawImageUrl) allRawImages.push(rawImageUrl)\n allRawImages = allRawImages.concat(parsedGalleryImages).concat(legacyImages)\n\n // Step 4: Resolve all asset URLs first, then deduplicate\n var resolvedAll = resolveAssetUrls(allRawImages, assetMap)\n var resolvedImages = deduplicateStrings(resolvedAll)\n\n // Step 5: Determine mainImage\n var mainImage = rawImageUrl\n ? resolveAssetUrl(rawImageUrl, assetMap)\n : (resolvedImages.length > 0 ? resolvedImages[0] : null)\n\n // Step 6: galleryImages = resolvedImages without mainImage\n var galleryImages = mainImage\n ? resolvedImages.filter(function(url) { return url !== mainImage })\n : resolvedImages.slice()\n\n // Step 7: images = full resolved deduplicated array\n var images = resolvedImages\n\n // Timestamps\n var rawCreatedAt = pickFirst(record.created_at, record.createdAt, record.created)\n var createdAt = normalizeTimestamp(rawCreatedAt)\n\n var rawUpdatedAt = pickFirst(record.updated_at, record.updatedAt, record.updated)\n var updatedAt = rawUpdatedAt != null ? normalizeTimestamp(rawUpdatedAt) : createdAt\n\n // Computed: created = Unix seconds\n var created = Math.floor(createdAt / 1000)\n\n // Computed: outOfStock (emitted as a STRING \u2014 'true' / 'false' \u2014 so it\n // matches the strict equality check the AI generates on product\n // cards/details pages: `ecommerceProduct?.outOfStock === 'true'`.\n // A boolean here would silently fail that comparison (boolean !==\n // string), leaving the Add to Cart button visible on out-of-stock\n // products. NULL/NaN quantity \u2192 'false' (treated as \"unlimited\n // stock\", same as the upstream cart-availability rewriter).\n var outOfStock = (quantity !== null && !isNaN(quantity) && quantity <= 0) ? 'true' : 'false'\n\n // Per-value availability + default-selection flags, derived from the\n // purchasable combinations, so the storefront picker renders its\n // Default / Selected / Unavailable states with NO runtime fetch. The card\n // (N instances) first-paints from these data flags; the details page seeds\n // its selection from the same combinations. axisValueKey (axisKey|valueKey)\n // disambiguates same-named values across axes (Size \"s\" vs Sleeve \"s\").\n // Emitted as STRINGS to match the storefront's string-equality convention.\n var variantAxisKeys = []\n for (var ak = 0; ak < variantOptions.length; ak++) { variantAxisKeys.push(variantOptions[ak].key) }\n var firstVariant = pickFirstAvailableVariant(variants, variantAxisKeys)\n var deadValueKeys = computeDeadVariantKeys(variants, variantOptions)\n for (var ai = 0; ai < variantOptions.length; ai++) {\n var vax = variantOptions[ai]\n for (var vj = 0; vj < vax.values.length; vj++) {\n var vval = vax.values[vj]\n var composite = vax.key + '|' + vval.value\n vval.axisValueKey = composite\n vval.isDead = deadValueKeys[composite] ? 'true' : 'false'\n vval.isDefault =\n firstVariant && firstVariant.options && firstVariant.options[vax.key] === vval.value\n ? 'true'\n : 'false'\n // Whether THIS value renders as a colour swatch vs a text pill. A colour\n // axis whose value has no resolvable colour degrades to a text pill so it\n // is never an invisible empty circle. Emitted as a string to match the\n // picker's string-equality rendering gate. MUST mirror the renderer\n // enrichment in packages/renderer/src/utils/ecommerce-products.ts.\n vval.showSwatch = vax.type === 'color' && vval.color ? 'true' : 'false'\n }\n }\n var defaultVariantId = firstVariant && isVariantInStock(firstVariant) ? firstVariant.id : ''\n var defaultVariantPrice = firstVariant ? formatVariantPrice(firstVariant.price, price) : ''\n // Stringified companions: a data-* attr bound to an ARRAY renders\n // '[object Object]', so the picker's on-mount/click workflows read the\n // combinations + axes from these JSON strings via getAttribute.\n var variantOptionsJson = safeStringifyJson(variantOptions)\n var variantsJson = safeStringifyJson(variants)\n\n return {\n id: id,\n name: name,\n slug: slug,\n description: description,\n descriptionText: descriptionText,\n price: price,\n currency: currency,\n currencySymbol: currencySymbol,\n status: status,\n active: active,\n quantity: quantity,\n paymentType: paymentType,\n recurringInterval: recurringInterval,\n recurringIntervalCount: recurringIntervalCount,\n sku: sku,\n weight: weight,\n weightUnit: weightUnit,\n dimensions: dimensions,\n category: category,\n categories: categories,\n tags: tags,\n relatedProductIds: relatedProductIds,\n relatedProducts: relatedProducts,\n imageAlt: imageAlt,\n providerType: providerType,\n providerProductId: providerProductId,\n default_price: defaultPrice,\n metadata: metadata,\n visibleProperties: visibleProperties,\n mainImage: mainImage,\n imageUrl: mainImage,\n image_url: mainImage,\n galleryImages: galleryImages,\n images: images,\n createdAt: createdAt,\n updatedAt: updatedAt,\n created: created,\n outOfStock: outOfStock,\n variantOptions: variantOptions,\n requiresVariantSelection: requiresVariantSelection,\n variants: variants,\n variantOptionsJson: variantOptionsJson,\n variantsJson: variantsJson,\n defaultVariantId: defaultVariantId,\n defaultVariantPrice: defaultVariantPrice,\n }\n}\n\n// --- Variant availability helpers (mirror packages/renderer ecommerce-products) ---\n// A variant is in stock when its quantity is null (unlimited) or > 0.\nfunction isVariantInStock(v) {\n return !v ? false : v.quantity == null || v.quantity > 0\n}\nfunction variantCoversAllAxes(v, axisKeys) {\n if (!v || !v.options) return false\n for (var i = 0; i < axisKeys.length; i++) {\n if (v.options[axisKeys[i]] == null) return false\n }\n return true\n}\n// First in-stock combination covering every axis; falls back to the first\n// covering combination (even if OOS) so a fully-OOS product still has a\n// visual default; null when no combination covers the axes.\nfunction pickFirstAvailableVariant(variants, axisKeys) {\n if (!Array.isArray(variants) || !axisKeys.length) return null\n for (var i = 0; i < variants.length; i++) {\n if (variantCoversAllAxes(variants[i], axisKeys) && isVariantInStock(variants[i])) return variants[i]\n }\n for (var j = 0; j < variants.length; j++) {\n if (variantCoversAllAxes(variants[j], axisKeys)) return variants[j]\n }\n return null\n}\n// Map of composite \"axisKey|valueKey\" -> true for every value that appears in\n// NO in-stock combination (rendered as the Unavailable state).\nfunction computeDeadVariantKeys(variants, axes) {\n // No combinations attached (flat product, zero-variant product, or editor\n // preview) -> nothing is dead; every value stays selectable. Dead-marking is\n // only meaningful relative to combinations that actually exist.\n if (!Array.isArray(variants) || variants.length === 0) return {}\n var alive = {}\n for (var i = 0; i < variants.length; i++) {\n var v = variants[i]\n if (!isVariantInStock(v)) continue\n for (var k in v.options) {\n if (Object.prototype.hasOwnProperty.call(v.options, k)) alive[k + '|' + v.options[k]] = true\n }\n }\n var dead = {}\n for (var a = 0; a < axes.length; a++) {\n var ax = axes[a]\n for (var b = 0; b < ax.values.length; b++) {\n var key = ax.key + '|' + ax.values[b].value\n if (!alive[key]) dead[key] = true\n }\n }\n return dead\n}\n// Variant price with base-price inheritance (null variant price -> product price).\nfunction formatVariantPrice(vprice, basePrice) {\n var p = vprice == null || isNaN(vprice) ? basePrice : vprice\n return String(Number(p).toFixed(2))\n}\nfunction safeStringifyJson(obj) {\n try {\n return JSON.stringify(obj)\n } catch (e) {\n return '[]'\n }\n}\n\n// Parse + normalize the variant_options JSON into render-ready axes. Tolerant of\n// null / malformed / partial data (returns []). Keeps ONLY the fields the pill\n// widget needs; the labels are already language-resolved by the caller.\nfunction normalizeVariantOptions(raw) {\n if (!raw) return []\n var parsed = raw\n if (typeof raw === 'string') {\n try { parsed = JSON.parse(raw) } catch (e) { return [] }\n }\n if (!Array.isArray(parsed)) return []\n var out = []\n for (var i = 0; i < parsed.length; i++) {\n var axis = parsed[i]\n if (!axis || typeof axis !== 'object' || !Array.isArray(axis.values)) continue\n var name = typeof axis.name === 'string' ? axis.name : ''\n var key = typeof axis.key === 'string' && axis.key ? axis.key : name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')\n if (!key) continue\n var type = axis.type === 'color' ? 'color' : 'text'\n var values = []\n for (var j = 0; j < axis.values.length; j++) {\n var v = axis.values[j]\n if (!v || typeof v !== 'object') continue\n var label = typeof v.label === 'string' ? v.label : ''\n var value = typeof v.value === 'string' && v.value ? v.value : label.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')\n if (!value) continue\n var entry = { value: value, label: label }\n if (type === 'color' && typeof v.color === 'string' && v.color) entry.color = v.color\n values.push(entry)\n }\n if (!values.length) continue\n out.push({ key: key, name: name, type: type, values: values })\n }\n return out\n}\n\n// --- Custom-property classification (MUST mirror product-property-display.ts) ---\n\n// Product-attribute keys that can leak into the free-form `metadata` map (e.g.\n// from a payment-provider sync or legacy data) but are NOT user custom\n// properties. Kept in sync with the GUI's RESERVED_PRODUCT_METADATA_KEYS.\nvar RESERVED_PRODUCT_METADATA_KEYS = {\n paymentType: true, recurringInterval: true, recurringIntervalCount: true,\n price: true, currency: true, status: true, sku: true, weightUnit: true,\n dimensions: true, category: true, brand: true, gtin: true, mpn: true,\n condition: true, tags: true,\n}\nfunction isReservedProductMetadataKey(key) {\n return !!RESERVED_PRODUCT_METADATA_KEYS[key] ||\n key.indexOf('mainImage') === 0 ||\n key.indexOf('secondaryImage') === 0 ||\n key.indexOf('_tq') === 0\n}\n\nvar CSS_NAMED_COLORS = {\n aliceblue: 1, antiquewhite: 1, aqua: 1, aquamarine: 1, azure: 1, beige: 1, bisque: 1,\n black: 1, blanchedalmond: 1, blue: 1, blueviolet: 1, brown: 1, burlywood: 1,\n cadetblue: 1, chartreuse: 1, chocolate: 1, coral: 1, cornflowerblue: 1, cornsilk: 1,\n crimson: 1, cyan: 1, darkblue: 1, darkcyan: 1, darkgoldenrod: 1, darkgray: 1,\n darkgrey: 1, darkgreen: 1, darkkhaki: 1, darkmagenta: 1, darkolivegreen: 1,\n darkorange: 1, darkorchid: 1, darkred: 1, darksalmon: 1, darkseagreen: 1,\n darkslateblue: 1, darkslategray: 1, darkslategrey: 1, darkturquoise: 1,\n darkviolet: 1, deeppink: 1, deepskyblue: 1, dimgray: 1, dimgrey: 1, dodgerblue: 1,\n firebrick: 1, floralwhite: 1, forestgreen: 1, fuchsia: 1, gainsboro: 1,\n ghostwhite: 1, gold: 1, goldenrod: 1, gray: 1, grey: 1, green: 1, greenyellow: 1,\n honeydew: 1, hotpink: 1, indianred: 1, indigo: 1, ivory: 1, khaki: 1, lavender: 1,\n lavenderblush: 1, lawngreen: 1, lemonchiffon: 1, lightblue: 1, lightcoral: 1,\n lightcyan: 1, lightgoldenrodyellow: 1, lightgray: 1, lightgrey: 1, lightgreen: 1,\n lightpink: 1, lightsalmon: 1, lightseagreen: 1, lightskyblue: 1, lightslategray: 1,\n lightslategrey: 1, lightsteelblue: 1, lightyellow: 1, lime: 1, limegreen: 1,\n linen: 1, magenta: 1, maroon: 1, mediumaquamarine: 1, mediumblue: 1,\n mediumorchid: 1, mediumpurple: 1, mediumseagreen: 1, mediumslateblue: 1,\n mediumspringgreen: 1, mediumturquoise: 1, mediumvioletred: 1, midnightblue: 1,\n mintcream: 1, mistyrose: 1, moccasin: 1, navajowhite: 1, navy: 1, oldlace: 1,\n olive: 1, olivedrab: 1, orange: 1, orangered: 1, orchid: 1, palegoldenrod: 1,\n palegreen: 1, paleturquoise: 1, palevioletred: 1, papayawhip: 1, peachpuff: 1,\n peru: 1, pink: 1, plum: 1, powderblue: 1, purple: 1, rebeccapurple: 1, red: 1,\n rosybrown: 1, royalblue: 1, saddlebrown: 1, salmon: 1, sandybrown: 1, seagreen: 1,\n seashell: 1, sienna: 1, silver: 1, skyblue: 1, slateblue: 1, slategray: 1,\n slategrey: 1, snow: 1, springgreen: 1, steelblue: 1, tan: 1, teal: 1, thistle: 1,\n tomato: 1, turquoise: 1, violet: 1, wheat: 1, white: 1, whitesmoke: 1, yellow: 1,\n yellowgreen: 1, transparent: 1,\n}\nvar HEX_COLOR_RE = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i\nvar FUNCTIONAL_COLOR_RE = /^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\\((?:[0-9a-z%.,\\s/+-]+)\\)$/i\nvar COLOR_KEY_WORDS = {\n color: 1, colors: 1, colour: 1, colours: 1, shade: 1, shades: 1, hue: 1, hues: 1,\n tint: 1, tints: 1, tone: 1, tones: 1, swatch: 1, swatches: 1,\n}\nfunction splitKeyWords(key) {\n return key.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)\n}\nfunction keyIndicatesColor(key) {\n var normalized = key.toLowerCase()\n if (/colou?r/.test(normalized)) return true\n return splitKeyWords(key).some(function(word) { return !!COLOR_KEY_WORDS[word] })\n}\nfunction resolvePropertyColor(key, value) {\n var v = value.trim()\n if (!v) return ''\n if (HEX_COLOR_RE.test(v) || FUNCTIONAL_COLOR_RE.test(v)) return v\n if (CSS_NAMED_COLORS[v.toLowerCase()] && keyIndicatesColor(key)) return v\n return ''\n}\n\nvar DATA_IMAGE_URI_RE = /^data:image\\//i\nvar ABSOLUTE_URL_RE = /^(?:https?:)?\\/\\//i\nvar IMAGE_EXTENSION_RE = /\\.(?:png|jpe?g|gif|webp|svg|avif|bmp|ico|tiff?|heic|heif)$/i\nvar IMAGE_KEY_WORDS = {\n image: 1, images: 1, img: 1, imgs: 1, photo: 1, photos: 1, picture: 1, pictures: 1,\n pic: 1, pics: 1, thumbnail: 1, thumbnails: 1, thumb: 1, thumbs: 1, icon: 1, icons: 1,\n logo: 1, logos: 1, avatar: 1, avatars: 1, banner: 1, banners: 1, cover: 1, covers: 1,\n gallery: 1, screenshot: 1, screenshots: 1, poster: 1, posters: 1, artwork: 1,\n graphic: 1, graphics: 1, illustration: 1, wallpaper: 1, preview: 1, snapshot: 1,\n media: 1, visual: 1, visuals: 1,\n}\nfunction keyIndicatesImage(key) {\n var normalized = key.toLowerCase()\n if (/(?:image|img|photo|picture|thumb|icon|logo|avatar|banner|gallery|screenshot|poster|artwork|graphic|wallpaper)/.test(normalized)) return true\n return splitKeyWords(key).some(function(word) { return !!IMAGE_KEY_WORDS[word] })\n}\nfunction stripUrlQueryAndHash(url) {\n return url.split(/[?#]/)[0]\n}\nfunction resolvePropertyImage(key, value) {\n var v = value.trim()\n if (!v) return ''\n if (DATA_IMAGE_URI_RE.test(v)) return v\n var isAbsoluteUrl = ABSOLUTE_URL_RE.test(v)\n var isRootRelative = v.charAt(0) === '/' && !isAbsoluteUrl\n if (!isAbsoluteUrl && !isRootRelative) return ''\n if (IMAGE_EXTENSION_RE.test(stripUrlQueryAndHash(v))) return v\n if (isAbsoluteUrl && keyIndicatesImage(key)) return v\n return ''\n}\n\n// Image wins over colour (a URL can never be a CSS colour, but checking image\n// first keeps the precedence explicit), text is the fallback.\nfunction classifyProductProperty(key, value) {\n var imageUrl = resolvePropertyImage(key, value)\n if (imageUrl) return { key: key, value: value, kind: 'image', color: '', imageUrl: imageUrl }\n var color = resolvePropertyColor(key, value)\n if (color) return { key: key, value: value, kind: 'color', color: color, imageUrl: '' }\n return { key: key, value: value, kind: 'text', color: '', imageUrl: '' }\n}\n\nfunction transformEcommerceProducts(records, options) {\n if (!Array.isArray(records)) return []\n return records.map(function(record) { return buildEcommerceProduct(record, options) })\n}\n\n// Batched fetch of the purchasable variant rows for a set of product ids, keyed\n// by product_id, so buildEcommerceProduct can attach product.variants without a\n// per-product query. Best-effort: a store with no variants (or before the table\n// exists) yields an empty map and flat products keep variants: [].\n// Batched fetch of the product rows a set of products reference as \"related\",\n// keyed by id, so buildEcommerceProduct can attach product.relatedProducts\n// without a query per product.\n//\n// Best-effort by design: a store whose products table predates the column\n// yields no ids at all (the read below is of an absent property, not of a\n// column \u2014 the SQL never names it), the map stays empty, and the details page's\n// rail simply stays hidden behind its is_not_empty gate. Same for a failed\n// query.\nasync function getRelatedProductsMap(getClientFn, records) {\n var map = {}\n if (!Array.isArray(records) || records.length === 0) return map\n\n var wantedIds = []\n for (var i = 0; i < records.length; i++) {\n var ids = parseRelatedIds(records[i] && records[i].related_product_ids)\n for (var j = 0; j < ids.length; j++) {\n if (wantedIds.indexOf(ids[j]) === -1) wantedIds.push(ids[j])\n }\n }\n if (wantedIds.length === 0) return map\n\n var client\n try {\n client = getClientFn()\n await client.connect()\n var result = await client.query('SELECT * FROM teleport_products WHERE id = ANY($1)', [\n wantedIds,\n ])\n if (result && result.rows) {\n for (var r = 0; r < result.rows.length; r++) {\n var row = result.rows[r]\n if (row && row.id != null) map[String(row.id)] = row\n }\n }\n } catch (e) {\n // Leaves relatedProducts empty rather than failing the page.\n } finally {\n if (client) {\n try { await client.end() } catch (e) { /* ignore */ }\n }\n }\n return map\n}\n\nasync function getVariantsMap(getClientFn, productIds) {\n var map = {}\n if (!Array.isArray(productIds) || productIds.length === 0) return map\n var uniqueIds = []\n var seenIds = {}\n for (var u = 0; u < productIds.length; u++) {\n var pid0 = productIds[u]\n if (pid0 != null && !seenIds[pid0]) { seenIds[pid0] = true; uniqueIds.push(pid0) }\n }\n if (uniqueIds.length === 0) return map\n var client\n try {\n client = getClientFn()\n await client.connect()\n var result = await client.query(\n 'SELECT id, product_id, options, price, quantity, image_url FROM teleport_product_variants WHERE product_id = ANY($1) ORDER BY position ASC, id ASC',\n [uniqueIds]\n )\n if (result && result.rows) {\n for (var r = 0; r < result.rows.length; r++) {\n var row = result.rows[r]\n var pid = row.product_id\n if (!map[pid]) map[pid] = []\n map[pid].push(row)\n }\n }\n } catch (e) {\n // teleport_product_variants may not exist for a non-variant store.\n } finally {\n if (client) {\n try { await client.end() } catch (e) { /* ignore */ }\n }\n }\n return map\n}\n");
|
|
42
42
|
};
|
|
43
43
|
//# sourceMappingURL=ecommerce-product.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecommerce-product.js","sourceRoot":"","sources":["../../../src/transformations/ecommerce-product.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,IAAM,qBAAqB,GAAG,UAC5B,UAA+C;IAK/C,IAAM,IAAI,GAGN,EAAE,CAAA;IACN,IAAM,KAAK,GAAG,UAAC,KAA0C;QACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,OAAM;SACP;QACD,KAAmB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;YAArB,IAAM,IAAI,cAAA;YACb,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;oBACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;oBACrB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAChC,CAAA;gBACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;aACrB;SACF;IACH,CAAC,CAAA;IACD,KAAK,CAAC,UAAU,CAAC,CAAA;IACjB,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,IAAM,0CAA0C,GAAG,UACxD,UAAoC;IAEpC,IAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAA;IAE5E,OAAO,uSAKwB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ecommerce-product.js","sourceRoot":"","sources":["../../../src/transformations/ecommerce-product.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,IAAM,qBAAqB,GAAG,UAC5B,UAA+C;IAK/C,IAAM,IAAI,GAGN,EAAE,CAAA;IACN,IAAM,KAAK,GAAG,UAAC,KAA0C;QACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,OAAM;SACP;QACD,KAAmB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;YAArB,IAAM,IAAI,cAAA;YACb,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;oBACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;oBACrB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAChC,CAAA;gBACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;aACrB;SACF;IACH,CAAC,CAAA;IACD,KAAK,CAAC,UAAU,CAAC,CAAA;IACjB,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,IAAM,0CAA0C,GAAG,UACxD,UAAoC;IAEpC,IAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAA;IAE5E,OAAO,uSAKwB,kBAAkB,+z4BAsnBlD,CAAA;AACD,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transformations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAKvE,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,mBAAmB,GAAG,IAAI,CAAA;AAezE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,cAAe,MAAM,KAAG,kBAY5D,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,cACrB,MAAM,eACJ,qBAAqB,EAAE,KACnC,MAgBF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,cAAe,MAAM,KAAG,MAAM,GAAG,IAcnE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,cAAe,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transformations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAKvE,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,mBAAmB,GAAG,IAAI,CAAA;AAezE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,cAAe,MAAM,KAAG,kBAY5D,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,cACrB,MAAM,eACJ,qBAAqB,EAAE,KACnC,MAgBF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,cAAe,MAAM,KAAG,MAAM,GAAG,IAcnE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,cAAe,MAAM,KAAG,MAiE3D,CAAA"}
|
|
@@ -95,6 +95,20 @@ export var getTransformWrapperCode = function (tableName) {
|
|
|
95
95
|
? "\n var variantsByProductId = {}\n try {\n var __variantPids = []\n for (var __i = 0; __i < records.length; __i++) {\n if (records[__i] && records[__i].id != null) __variantPids.push(records[__i].id)\n }\n variantsByProductId = await getVariantsMap(getClientFn, __variantPids)\n } catch (e) {\n // Variant enrichment is best-effort; flat products keep variants: [].\n }"
|
|
96
96
|
: '';
|
|
97
97
|
var variantOption = type === 'ecommerce-product' ? ', variantsByProductId: variantsByProductId' : '';
|
|
98
|
-
|
|
98
|
+
// Related items are resolved for a SINGLE-record fetch only — which is the
|
|
99
|
+
// details page, the one surface that renders them (it looks the row up by
|
|
100
|
+
// slug). A listing fetch returns many rows, and resolving there would run an
|
|
101
|
+
// extra query and then inline up to four fully-transformed entities PER CARD
|
|
102
|
+
// into __NEXT_DATA__ that nothing on that page draws. The canvas renderer
|
|
103
|
+
// draws the same line for the same reason: only the details-page item node
|
|
104
|
+
// passes a resolver.
|
|
105
|
+
//
|
|
106
|
+
// A one-product store's listing does pay for one extra query. That is the
|
|
107
|
+
// whole cost of the heuristic, and it beats plumbing a page-role flag through
|
|
108
|
+
// every fetcher.
|
|
109
|
+
var relatedMapVar = type === 'blog-post' ? 'relatedPostsById' : 'relatedProductsById';
|
|
110
|
+
var relatedMapFn = type === 'blog-post' ? 'getRelatedPostsMap' : 'getRelatedProductsMap';
|
|
111
|
+
var relatedEnrichment = "\n var ".concat(relatedMapVar, " = null\n if (Array.isArray(records) && records.length === 1) {\n try {\n ").concat(relatedMapVar, " = await ").concat(relatedMapFn, "(getClientFn, records)\n } catch (e) {\n // Best-effort; the related rail stays hidden behind its empty gate.\n }\n }");
|
|
112
|
+
return "\nasync function transformRecords(records, getClientFn, reqQuery) {\n var assetMap = {}\n try {\n assetMap = await getAssetMap(getClientFn)\n } catch (e) {\n // Asset resolution is best-effort; continue without it\n }".concat(variantEnrichment).concat(relatedEnrichment, "\n var currentLanguage = (reqQuery && reqQuery.lang) || null\n var mainLanguage = (reqQuery && reqQuery.mainLang) || null\n var options = { assetMap: assetMap, currentLanguage: currentLanguage, mainLanguage: mainLanguage").concat(variantOption, ", ").concat(relatedMapVar, ": ").concat(relatedMapVar, " }\n return ").concat(transformFn, "(records, options)\n}\n");
|
|
99
113
|
};
|
|
100
114
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transformations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAA;AAIhF;;;;GAIG;AACH,IAAM,oBAAoB,GAAG,UAAC,SAAiB;IAC7C,IAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAC5C,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACtC,IAAM,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC5D,kEAAkE;IAClE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAAC,SAAiB;IACxD,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,IAAI,CAAA;KACZ;IACD,IAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;IAC5C,IAAI,IAAI,KAAK,qBAAqB,EAAE;QAClC,OAAO,WAAW,CAAA;KACnB;IACD,IAAI,IAAI,KAAK,mBAAmB,EAAE;QAChC,OAAO,mBAAmB,CAAA;KAC3B;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,IAAM,qBAAqB,GAAG,UACnC,SAAiB,EACjB,UAAoC;IAEpC,IAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAA;KACV;IAED,IAAM,MAAM,GAAG,gCAAgC,EAAE,CAAA;IAEjD,QAAQ,IAAI,EAAE;QACZ,KAAK,WAAW;YACd,OAAO,MAAM,GAAG,kCAAkC,EAAE,CAAA;QACtD,KAAK,mBAAmB;YACtB,OAAO,MAAM,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAAA;QACxE;YACE,OAAO,EAAE,CAAA;KACZ;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,IAAM,sBAAsB,GAAG,UAAC,SAAiB;IACtD,IAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAA;KACZ;IAED,QAAQ,IAAI,EAAE;QACZ,KAAK,WAAW;YACd,OAAO,wDAAwD,CAAA;QACjE,KAAK,mBAAmB;YACtB,OAAO,wDAAwD,CAAA;QACjE;YACE,OAAO,IAAI,CAAA;KACd;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAC,SAAiB;IACvD,IAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAA;KACV;IAED,IAAM,WAAW,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,4BAA4B,CAAA;IAE9F,+EAA+E;IAC/E,+EAA+E;IAC/E,IAAM,iBAAiB,GACrB,IAAI,KAAK,mBAAmB;QAC1B,CAAC,CAAC,0YAUJ;QACE,CAAC,CAAC,EAAE,CAAA;IAER,IAAM,aAAa,GACjB,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE,CAAA;IAElF,OAAO,6OAOJ,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transformations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAA;AAIhF;;;;GAIG;AACH,IAAM,oBAAoB,GAAG,UAAC,SAAiB;IAC7C,IAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAC5C,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACtC,IAAM,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC5D,kEAAkE;IAClE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAAC,SAAiB;IACxD,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,IAAI,CAAA;KACZ;IACD,IAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;IAC5C,IAAI,IAAI,KAAK,qBAAqB,EAAE;QAClC,OAAO,WAAW,CAAA;KACnB;IACD,IAAI,IAAI,KAAK,mBAAmB,EAAE;QAChC,OAAO,mBAAmB,CAAA;KAC3B;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,IAAM,qBAAqB,GAAG,UACnC,SAAiB,EACjB,UAAoC;IAEpC,IAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAA;KACV;IAED,IAAM,MAAM,GAAG,gCAAgC,EAAE,CAAA;IAEjD,QAAQ,IAAI,EAAE;QACZ,KAAK,WAAW;YACd,OAAO,MAAM,GAAG,kCAAkC,EAAE,CAAA;QACtD,KAAK,mBAAmB;YACtB,OAAO,MAAM,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAAA;QACxE;YACE,OAAO,EAAE,CAAA;KACZ;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,IAAM,sBAAsB,GAAG,UAAC,SAAiB;IACtD,IAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAA;KACZ;IAED,QAAQ,IAAI,EAAE;QACZ,KAAK,WAAW;YACd,OAAO,wDAAwD,CAAA;QACjE,KAAK,mBAAmB;YACtB,OAAO,wDAAwD,CAAA;QACjE;YACE,OAAO,IAAI,CAAA;KACd;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAC,SAAiB;IACvD,IAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAA;KACV;IAED,IAAM,WAAW,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,4BAA4B,CAAA;IAE9F,+EAA+E;IAC/E,+EAA+E;IAC/E,IAAM,iBAAiB,GACrB,IAAI,KAAK,mBAAmB;QAC1B,CAAC,CAAC,0YAUJ;QACE,CAAC,CAAC,EAAE,CAAA;IAER,IAAM,aAAa,GACjB,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE,CAAA;IAElF,2EAA2E;IAC3E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,2EAA2E;IAC3E,qBAAqB;IACrB,EAAE;IACF,0EAA0E;IAC1E,8EAA8E;IAC9E,iBAAiB;IACjB,IAAM,aAAa,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAA;IACvF,IAAM,YAAY,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,uBAAuB,CAAA;IAC1F,IAAM,iBAAiB,GAAG,kBACpB,aAAa,gGAGb,aAAa,sBAAY,YAAY,sIAIzC,CAAA;IAEF,OAAO,6OAOJ,iBAAiB,SAAG,iBAAiB,4OAG0D,aAAa,eAAK,aAAa,eAAK,aAAa,0BAC1I,WAAW,4BAErB,CAAA;AACD,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-utils.d.ts","sourceRoot":"","sources":["../../../src/transformations/shared-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,QAAO,
|
|
1
|
+
{"version":3,"file":"shared-utils.d.ts","sourceRoot":"","sources":["../../../src/transformations/shared-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,QAAO,MA6RnD,CAAA"}
|
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* when the table requires blog post or e-commerce product transformations.
|
|
5
5
|
*/
|
|
6
6
|
export var generateSharedTransformationCode = function () {
|
|
7
|
-
return "\n// ============================================================\n// Shared Data Transformation Utilities\n// ============================================================\n\nvar CURRENCY_SYMBOLS = {\n USD: { symbol: '$', position: 'before' },\n EUR: { symbol: '\u20AC', position: 'before' },\n GBP: { symbol: '\u00A3', position: 'before' },\n JPY: { symbol: '\u00A5', position: 'before' },\n CAD: { symbol: 'C$', position: 'before' },\n AUD: { symbol: 'A$', position: 'before' },\n CHF: { symbol: 'CHF', position: 'before' },\n CNY: { symbol: '\u00A5', position: 'before' },\n INR: { symbol: '\u20B9', position: 'before' },\n BRL: { symbol: 'R$', position: 'before' },\n MXN: { symbol: 'MX$', position: 'before' },\n KRW: { symbol: '\u20A9', position: 'before' },\n SGD: { symbol: 'S$', position: 'before' },\n HKD: { symbol: 'HK$', position: 'before' },\n NOK: { symbol: 'kr', position: 'after' },\n SEK: { symbol: 'kr', position: 'after' },\n DKK: { symbol: 'kr', position: 'after' },\n PLN: { symbol: 'z\u0142', position: 'after' },\n CZK: { symbol: 'K\u010D', position: 'after' },\n HUF: { symbol: 'Ft', position: 'after' },\n RON: { symbol: 'lei', position: 'after' },\n TRY: { symbol: '\u20BA', position: 'before' },\n THB: { symbol: '\u0E3F', position: 'before' },\n IDR: { symbol: 'Rp', position: 'before' },\n PHP: { symbol: '\u20B1', position: 'before' },\n ZAR: { symbol: 'R', position: 'before' },\n RUB: { symbol: '\u20BD', position: 'after' },\n NZD: { symbol: 'NZ$', position: 'before' },\n TWD: { symbol: 'NT$', position: 'before' },\n ILS: { symbol: '\u20AA', position: 'before' },\n AED: { symbol: '\u062F.\u0625', position: 'before' },\n SAR: { symbol: '\uFDFC', position: 'before' },\n MYR: { symbol: 'RM', position: 'before' },\n VND: { symbol: '\u20AB', position: 'after' },\n CLP: { symbol: '$', position: 'before' },\n COP: { symbol: '$', position: 'before' },\n ARS: { symbol: '$', position: 'before' },\n PEN: { symbol: 'S/', position: 'before' },\n UAH: { symbol: '\u20B4', position: 'after' },\n BGN: { symbol: '\u043B\u0432', position: 'after' },\n HRK: { symbol: 'kn', position: 'after' },\n ISK: { symbol: 'kr', position: 'after' },\n NGN: { symbol: '\u20A6', position: 'before' },\n KES: { symbol: 'KSh', position: 'before' },\n EGP: { symbol: 'E\u00A3', position: 'before' },\n PKR: { symbol: '\u20A8', position: 'before' },\n BDT: { symbol: '\u09F3', position: 'before' },\n LKR: { symbol: '\u20A8', position: 'before' },\n GHS: { symbol: 'GH\u20B5', position: 'before' },\n}\n\nfunction getCurrencyInfo(currencyCode) {\n if (!currencyCode) return { symbol: '$', position: 'before' }\n var upper = currencyCode.toUpperCase()\n var entry = CURRENCY_SYMBOLS[upper]\n return entry || { symbol: upper, position: 'before' }\n}\n\nfunction getCurrencySymbol(currencyCode) {\n return getCurrencyInfo(currencyCode).symbol\n}\n\nfunction normalizeTimestamp(value) {\n if (value == null) return Date.now()\n if (typeof value === 'number') {\n if (isNaN(value)) return Date.now()\n return value < 100000000000 ? value * 1000 : value\n }\n if (typeof value === 'string') {\n var parsed = Date.parse(value)\n return isNaN(parsed) ? Date.now() : parsed\n }\n return Date.now()\n}\n\nfunction safeNumber(value, defaultValue) {\n if (value == null) return defaultValue\n var n = Number(value)\n return isNaN(n) ? defaultValue : n\n}\n\nfunction parseJsonArray(value) {\n if (!value) return []\n if (Array.isArray(value)) return value.filter(function(item) { return typeof item === 'string' })\n if (typeof value === 'string') {\n try {\n var parsed = JSON.parse(value)\n if (Array.isArray(parsed)) return parsed.filter(function(item) { return typeof item === 'string' })\n return []\n } catch (e) {\n return value.split(',').map(function(s) { return s.trim() }).filter(Boolean)\n }\n }\n return []\n}\n\nfunction parseJsonObject(value) {\n if (value == null) return {}\n if (typeof value === 'object' && !Array.isArray(value)) return value\n if (typeof value === 'string') {\n try {\n var parsed = JSON.parse(value)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) return parsed\n return {}\n } catch (e) {\n return {}\n }\n }\n return {}\n}\n\nvar HTML_ENTITY_MAP = {\n '&': '&', '<': '<', '>': '>', '"': '\"',\n ''': \"'\", ''': \"'\", ''': \"'\", ' ': ' ',\n ' ': ' ', '©': '\u00A9', '®': '\u00AE', '™': '\u2122',\n '…': '\u2026', '—': '\u2014', '–': '\u2013',\n}\n\nfunction decodeHtmlEntities(str) {\n if (!str) return str\n // Decode named and numeric entities\n return str\n .replace(/&(?:#x([0-9a-fA-F]+)|#([0-9]+)|([a-zA-Z]+));/g, function(match, hex, dec, named) {\n if (hex) return String.fromCharCode(parseInt(hex, 16))\n if (dec) return String.fromCharCode(parseInt(dec, 10))\n var namedRef = '&' + named + ';'\n return HTML_ENTITY_MAP[namedRef] || match\n })\n}\n\nfunction stripHtmlTags(html) {\n if (!html || typeof html !== 'string') return ''\n // Remove script and style blocks entirely (including content)\n var cleaned = html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, ' ')\n .replace(/<style[\\s\\S]*?<\\/style>/gi, ' ')\n // Strip remaining tags\n cleaned = cleaned.replace(/<[^>]*>/g, ' ')\n // Decode HTML entities\n cleaned = decodeHtmlEntities(cleaned)\n // Collapse whitespace\n return cleaned.replace(/\\s+/g, ' ').trim()\n}\n\nfunction coerceBoolean(value, defaultValue) {\n if (value === true || value === 'true' || value === 1 || value === '1') return true\n if (value === false || value === 'false' || value === 0 || value === '0') return false\n return defaultValue\n}\n\nfunction pickFirst() {\n for (var i = 0; i < arguments.length; i++) {\n var val = arguments[i]\n if (val !== undefined && val !== null) return val\n }\n return null\n}\n\nfunction resolveI18nField(record, snakeCol, camelCol, currentLang, mainLang) {\n if (currentLang && mainLang && currentLang !== mainLang) {\n // Try language-prefixed snake_case column first, then camelCase\n var langSnakeKey = currentLang + '_' + snakeCol\n if (record[langSnakeKey] !== undefined && record[langSnakeKey] !== null && record[langSnakeKey] !== '') {\n return record[langSnakeKey]\n }\n if (snakeCol !== camelCol) {\n var langCamelKey = currentLang + '_' + camelCol\n if (record[langCamelKey] !== undefined && record[langCamelKey] !== null && record[langCamelKey] !== '') {\n return record[langCamelKey]\n }\n }\n }\n if (record[snakeCol] !== undefined && record[snakeCol] !== null) return record[snakeCol]\n if (snakeCol !== camelCol && record[camelCol] !== undefined && record[camelCol] !== null) return record[camelCol]\n return null\n}\n\n// Asset URL Resolution with TTL-based caching\nvar __assetUrlCache = {}\nvar __assetMapCache = null\nvar __assetMapTimestamp = 0\nvar ASSET_CACHE_TTL_MS = 5 * 60 * 1000 // 5 minutes\n\nfunction isUrl(value) {\n if (!value || typeof value !== 'string') return false\n return value.startsWith('http://') || value.startsWith('https://') || value.startsWith('data:')\n}\n\nfunction resolveAssetUrl(value, assetMap) {\n if (!value || typeof value !== 'string') return null\n if (isUrl(value)) return value\n // Also treat absolute paths (starting with /) as URLs\n if (value.charAt(0) === '/') return value\n if (__assetUrlCache[value]) return __assetUrlCache[value]\n if (assetMap && assetMap[value]) {\n var asset = assetMap[value]\n var resolved = asset.remoteSrc || asset.imageSrc || asset.src || asset.url || value\n __assetUrlCache[value] = resolved\n return resolved\n }\n // Not found in asset map - return as-is (might already be a usable reference)\n return value\n}\n\nfunction resolveAssetUrls(values, assetMap) {\n if (!Array.isArray(values)) return []\n return values\n .map(function(v) { return resolveAssetUrl(v, assetMap) })\n .filter(function(v) { return v != null && typeof v === 'string' })\n}\n\nfunction deduplicateStrings(arr) {\n var seen = {}\n return arr.filter(function(v) {\n if (!v || typeof v !== 'string' || seen[v]) return false\n seen[v] = true\n return true\n })\n}\n\n// Fetches the asset map from the database if available, with TTL-based caching\nasync function getAssetMap(getClientFn) {\n var now = Date.now()\n if (__assetMapCache && (now - __assetMapTimestamp) < ASSET_CACHE_TTL_MS) {\n return __assetMapCache\n }\n // Reset per-URL cache when asset map is refreshed\n __assetUrlCache = {}\n var map = {}\n var client\n try {\n client = getClientFn()\n await client.connect()\n var result = await client.query('SELECT id, src, remote_src, image_src, url FROM teleport_assets')\n if (result && result.rows) {\n result.rows.forEach(function(row) {\n map[row.id] = {\n src: row.src || null,\n remoteSrc: row.remote_src || null,\n imageSrc: row.image_src || null,\n url: row.url || null,\n }\n })\n }\n __assetMapCache = map\n __assetMapTimestamp = now\n } catch (e) {\n // teleport_assets table may not exist - cache empty map with short TTL\n __assetMapCache = map\n __assetMapTimestamp = now\n } finally {\n if (client) {\n try { await client.end() } catch (e) { /* ignore */ }\n }\n }\n return map\n}\n";
|
|
7
|
+
return "\n// ============================================================\n// Shared Data Transformation Utilities\n// ============================================================\n\nvar CURRENCY_SYMBOLS = {\n USD: { symbol: '$', position: 'before' },\n EUR: { symbol: '\u20AC', position: 'before' },\n GBP: { symbol: '\u00A3', position: 'before' },\n JPY: { symbol: '\u00A5', position: 'before' },\n CAD: { symbol: 'C$', position: 'before' },\n AUD: { symbol: 'A$', position: 'before' },\n CHF: { symbol: 'CHF', position: 'before' },\n CNY: { symbol: '\u00A5', position: 'before' },\n INR: { symbol: '\u20B9', position: 'before' },\n BRL: { symbol: 'R$', position: 'before' },\n MXN: { symbol: 'MX$', position: 'before' },\n KRW: { symbol: '\u20A9', position: 'before' },\n SGD: { symbol: 'S$', position: 'before' },\n HKD: { symbol: 'HK$', position: 'before' },\n NOK: { symbol: 'kr', position: 'after' },\n SEK: { symbol: 'kr', position: 'after' },\n DKK: { symbol: 'kr', position: 'after' },\n PLN: { symbol: 'z\u0142', position: 'after' },\n CZK: { symbol: 'K\u010D', position: 'after' },\n HUF: { symbol: 'Ft', position: 'after' },\n RON: { symbol: 'lei', position: 'after' },\n TRY: { symbol: '\u20BA', position: 'before' },\n THB: { symbol: '\u0E3F', position: 'before' },\n IDR: { symbol: 'Rp', position: 'before' },\n PHP: { symbol: '\u20B1', position: 'before' },\n ZAR: { symbol: 'R', position: 'before' },\n RUB: { symbol: '\u20BD', position: 'after' },\n NZD: { symbol: 'NZ$', position: 'before' },\n TWD: { symbol: 'NT$', position: 'before' },\n ILS: { symbol: '\u20AA', position: 'before' },\n AED: { symbol: '\u062F.\u0625', position: 'before' },\n SAR: { symbol: '\uFDFC', position: 'before' },\n MYR: { symbol: 'RM', position: 'before' },\n VND: { symbol: '\u20AB', position: 'after' },\n CLP: { symbol: '$', position: 'before' },\n COP: { symbol: '$', position: 'before' },\n ARS: { symbol: '$', position: 'before' },\n PEN: { symbol: 'S/', position: 'before' },\n UAH: { symbol: '\u20B4', position: 'after' },\n BGN: { symbol: '\u043B\u0432', position: 'after' },\n HRK: { symbol: 'kn', position: 'after' },\n ISK: { symbol: 'kr', position: 'after' },\n NGN: { symbol: '\u20A6', position: 'before' },\n KES: { symbol: 'KSh', position: 'before' },\n EGP: { symbol: 'E\u00A3', position: 'before' },\n PKR: { symbol: '\u20A8', position: 'before' },\n BDT: { symbol: '\u09F3', position: 'before' },\n LKR: { symbol: '\u20A8', position: 'before' },\n GHS: { symbol: 'GH\u20B5', position: 'before' },\n}\n\nfunction getCurrencyInfo(currencyCode) {\n if (!currencyCode) return { symbol: '$', position: 'before' }\n var upper = currencyCode.toUpperCase()\n var entry = CURRENCY_SYMBOLS[upper]\n return entry || { symbol: upper, position: 'before' }\n}\n\nfunction getCurrencySymbol(currencyCode) {\n return getCurrencyInfo(currencyCode).symbol\n}\n\nfunction normalizeTimestamp(value) {\n if (value == null) return Date.now()\n if (typeof value === 'number') {\n if (isNaN(value)) return Date.now()\n return value < 100000000000 ? value * 1000 : value\n }\n if (typeof value === 'string') {\n var parsed = Date.parse(value)\n return isNaN(parsed) ? Date.now() : parsed\n }\n return Date.now()\n}\n\nfunction safeNumber(value, defaultValue) {\n if (value == null) return defaultValue\n var n = Number(value)\n return isNaN(n) ? defaultValue : n\n}\n\nfunction parseJsonArray(value) {\n if (!value) return []\n if (Array.isArray(value)) return value.filter(function(item) { return typeof item === 'string' })\n if (typeof value === 'string') {\n try {\n var parsed = JSON.parse(value)\n if (Array.isArray(parsed)) return parsed.filter(function(item) { return typeof item === 'string' })\n return []\n } catch (e) {\n return value.split(',').map(function(s) { return s.trim() }).filter(Boolean)\n }\n }\n return []\n}\n\n// The related-item picks a merchant/author made: a JSON array of row ids stored\n// in a TEXT column (`related_product_ids` / `related_post_ids`). Mirrors\n// parseRelatedEntityIds in the GUI (apps/gui/app/project-page/features/shared/\n// related-entities/related-entity-ids.ts) \u2014 order-preserving, deduplicated,\n// blanks dropped, tolerant of a comma-separated cell edited by hand.\n//\n// `indexOf` rather than a seen-map on purpose: these lists hold a handful of\n// entries, and an object keyed by arbitrary strings answers truthy for\n// 'constructor'/'toString'.\nfunction parseRelatedIds(value) {\n var raw = parseJsonArray(value)\n var ids = []\n for (var i = 0; i < raw.length; i++) {\n var id = String(raw[i] == null ? '' : raw[i]).trim()\n if (!id || ids.indexOf(id) !== -1) continue\n ids.push(id)\n }\n return ids\n}\n\nfunction parseJsonObject(value) {\n if (value == null) return {}\n if (typeof value === 'object' && !Array.isArray(value)) return value\n if (typeof value === 'string') {\n try {\n var parsed = JSON.parse(value)\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) return parsed\n return {}\n } catch (e) {\n return {}\n }\n }\n return {}\n}\n\nvar HTML_ENTITY_MAP = {\n '&': '&', '<': '<', '>': '>', '"': '\"',\n ''': \"'\", ''': \"'\", ''': \"'\", ' ': ' ',\n ' ': ' ', '©': '\u00A9', '®': '\u00AE', '™': '\u2122',\n '…': '\u2026', '—': '\u2014', '–': '\u2013',\n}\n\nfunction decodeHtmlEntities(str) {\n if (!str) return str\n // Decode named and numeric entities\n return str\n .replace(/&(?:#x([0-9a-fA-F]+)|#([0-9]+)|([a-zA-Z]+));/g, function(match, hex, dec, named) {\n if (hex) return String.fromCharCode(parseInt(hex, 16))\n if (dec) return String.fromCharCode(parseInt(dec, 10))\n var namedRef = '&' + named + ';'\n return HTML_ENTITY_MAP[namedRef] || match\n })\n}\n\nfunction stripHtmlTags(html) {\n if (!html || typeof html !== 'string') return ''\n // Remove script and style blocks entirely (including content)\n var cleaned = html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, ' ')\n .replace(/<style[\\s\\S]*?<\\/style>/gi, ' ')\n // Strip remaining tags\n cleaned = cleaned.replace(/<[^>]*>/g, ' ')\n // Decode HTML entities\n cleaned = decodeHtmlEntities(cleaned)\n // Collapse whitespace\n return cleaned.replace(/\\s+/g, ' ').trim()\n}\n\nfunction coerceBoolean(value, defaultValue) {\n if (value === true || value === 'true' || value === 1 || value === '1') return true\n if (value === false || value === 'false' || value === 0 || value === '0') return false\n return defaultValue\n}\n\nfunction pickFirst() {\n for (var i = 0; i < arguments.length; i++) {\n var val = arguments[i]\n if (val !== undefined && val !== null) return val\n }\n return null\n}\n\nfunction resolveI18nField(record, snakeCol, camelCol, currentLang, mainLang) {\n if (currentLang && mainLang && currentLang !== mainLang) {\n // Try language-prefixed snake_case column first, then camelCase\n var langSnakeKey = currentLang + '_' + snakeCol\n if (record[langSnakeKey] !== undefined && record[langSnakeKey] !== null && record[langSnakeKey] !== '') {\n return record[langSnakeKey]\n }\n if (snakeCol !== camelCol) {\n var langCamelKey = currentLang + '_' + camelCol\n if (record[langCamelKey] !== undefined && record[langCamelKey] !== null && record[langCamelKey] !== '') {\n return record[langCamelKey]\n }\n }\n }\n if (record[snakeCol] !== undefined && record[snakeCol] !== null) return record[snakeCol]\n if (snakeCol !== camelCol && record[camelCol] !== undefined && record[camelCol] !== null) return record[camelCol]\n return null\n}\n\n// Asset URL Resolution with TTL-based caching\nvar __assetUrlCache = {}\nvar __assetMapCache = null\nvar __assetMapTimestamp = 0\nvar ASSET_CACHE_TTL_MS = 5 * 60 * 1000 // 5 minutes\n\nfunction isUrl(value) {\n if (!value || typeof value !== 'string') return false\n return value.startsWith('http://') || value.startsWith('https://') || value.startsWith('data:')\n}\n\nfunction resolveAssetUrl(value, assetMap) {\n if (!value || typeof value !== 'string') return null\n if (isUrl(value)) return value\n // Also treat absolute paths (starting with /) as URLs\n if (value.charAt(0) === '/') return value\n if (__assetUrlCache[value]) return __assetUrlCache[value]\n if (assetMap && assetMap[value]) {\n var asset = assetMap[value]\n var resolved = asset.remoteSrc || asset.imageSrc || asset.src || asset.url || value\n __assetUrlCache[value] = resolved\n return resolved\n }\n // Not found in asset map - return as-is (might already be a usable reference)\n return value\n}\n\nfunction resolveAssetUrls(values, assetMap) {\n if (!Array.isArray(values)) return []\n return values\n .map(function(v) { return resolveAssetUrl(v, assetMap) })\n .filter(function(v) { return v != null && typeof v === 'string' })\n}\n\nfunction deduplicateStrings(arr) {\n var seen = {}\n return arr.filter(function(v) {\n if (!v || typeof v !== 'string' || seen[v]) return false\n seen[v] = true\n return true\n })\n}\n\n// Fetches the asset map from the database if available, with TTL-based caching\nasync function getAssetMap(getClientFn) {\n var now = Date.now()\n if (__assetMapCache && (now - __assetMapTimestamp) < ASSET_CACHE_TTL_MS) {\n return __assetMapCache\n }\n // Reset per-URL cache when asset map is refreshed\n __assetUrlCache = {}\n var map = {}\n var client\n try {\n client = getClientFn()\n await client.connect()\n var result = await client.query('SELECT id, src, remote_src, image_src, url FROM teleport_assets')\n if (result && result.rows) {\n result.rows.forEach(function(row) {\n map[row.id] = {\n src: row.src || null,\n remoteSrc: row.remote_src || null,\n imageSrc: row.image_src || null,\n url: row.url || null,\n }\n })\n }\n __assetMapCache = map\n __assetMapTimestamp = now\n } catch (e) {\n // teleport_assets table may not exist - cache empty map with short TTL\n __assetMapCache = map\n __assetMapTimestamp = now\n } finally {\n if (client) {\n try { await client.end() } catch (e) { /* ignore */ }\n }\n }\n return map\n}\n";
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=shared-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-utils.js","sourceRoot":"","sources":["../../../src/transformations/shared-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,IAAM,gCAAgC,GAAG;IAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"shared-utils.js","sourceRoot":"","sources":["../../../src/transformations/shared-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,IAAM,gCAAgC,GAAG;IAC9C,OAAO,qnUA2RR,CAAA;AACD,CAAC,CAAA"}
|