{"_id":"fake-tag","_rev":"4189646","name":"fake-tag","description":"A fake template literal tag to trick syntax highlighters, linters and formatters into action.","dist-tags":{"latest":"5.0.0"},"maintainers":[{"name":"jaydenseric","email":"me@jaydenseric.com"}],"time":{"modified":"2026-03-02T02:33:37.000Z","created":"2018-04-30T05:07:38.667Z","5.0.0":"2022-08-20T04:09:43.727Z","4.0.0":"2022-02-10T10:38:39.253Z","3.0.0":"2021-06-07T05:24:25.536Z","2.0.0":"2019-12-23T11:44:44.504Z","1.0.1":"2019-11-13T05:28:04.808Z","1.0.0":"2018-04-30T05:07:38.667Z"},"users":{},"author":{"name":"Jayden Seric","email":"me@jaydenseric.com","url":"https://jaydenseric.com"},"repository":{"type":"git","url":"git+https://github.com/jaydenseric/fake-tag.git"},"versions":{"5.0.0":{"name":"fake-tag","version":"5.0.0","description":"A fake template literal tag to trick syntax highlighters, linters and formatters into action.","license":"MIT","author":{"name":"Jayden Seric","email":"me@jaydenseric.com","url":"https://jaydenseric.com"},"repository":{"type":"git","url":"git+https://github.com/jaydenseric/fake-tag.git"},"homepage":"https://github.com/jaydenseric/fake-tag#readme","bugs":{"url":"https://github.com/jaydenseric/fake-tag/issues"},"funding":"https://github.com/sponsors/jaydenseric","keywords":["es6","dummy","fake","template","literal","string","tag","esm","mjs"],"sideEffects":false,"exports":{".":"./fakeTag.mjs","./fakeTag.mjs":"./fakeTag.mjs","./package.json":"./package.json"},"engines":{"node":"^14.17.0 || ^16.0.0 || >= 18.0.0"},"browserslist":"Node 14.17 - 15 and Node < 15, Node 16 - 17 and Node < 17, Node >= 18, > 0.5%, not OperaMini all, not dead","devDependencies":{"@types/node":"^18.7.8","coverage-node":"^8.0.0","eslint":"^8.22.0","eslint-plugin-simple-import-sort":"^7.0.0","prettier":"^2.7.1","test-director":"^10.0.0","typescript":"^4.7.4"},"scripts":{"eslint":"eslint .","prettier":"prettier -c .","types":"tsc -p jsconfig.json","tests":"coverage-node test.mjs","test":"npm run eslint && npm run prettier && npm run types && npm run tests","prepublishOnly":"npm test"},"gitHead":"ce7e059a9d1851444a707c17ae074aa4189cb91b","_id":"fake-tag@5.0.0","_nodeVersion":"18.7.0","_npmVersion":"8.15.0","dist":{"shasum":"8befc8954791b0656a0f282eec3adb7336af36e5","size":2968,"noattachment":false,"key":"/fake-tag/-/fake-tag-5.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/fake-tag/download/fake-tag-5.0.0.tgz"},"_npmUser":{"name":"jaydenseric","email":"me@jaydenseric.com"},"directories":{},"maintainers":[{"name":"jaydenseric","email":"me@jaydenseric.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fake-tag_5.0.0_1660968583578_0.2639015314241775"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-08-20T04:09:50.122Z","publish_time":1660968583727,"_cnpm_publish_time":1660968583727},"4.0.0":{"name":"fake-tag","version":"4.0.0","description":"A fake template literal tag to trick syntax highlighters, linters and formatters into action.","license":"MIT","author":{"name":"Jayden Seric","email":"me@jaydenseric.com","url":"https://jaydenseric.com"},"repository":{"type":"git","url":"git+https://github.com/jaydenseric/fake-tag.git"},"homepage":"https://github.com/jaydenseric/fake-tag#readme","bugs":{"url":"https://github.com/jaydenseric/fake-tag/issues"},"funding":"https://github.com/sponsors/jaydenseric","keywords":["es6","dummy","fake","template","literal","string","tag","esm","mjs"],"sideEffects":false,"main":"./fakeTag.mjs","exports":{".":"./fakeTag.mjs","./fakeTag.mjs":"./fakeTag.mjs","./package.json":"./package.json"},"engines":{"node":"^12.22.0 || ^14.17.0 || >= 16.0.0"},"browserslist":"Node 12.22 - 13 and Node < 13, Node 14.17 - 15 and Node < 15, Node >= 16, > 0.5%, not OperaMini all, not IE > 0, not dead","devDependencies":{"@types/node":"^17.0.17","coverage-node":"^6.0.1","eslint":"^8.8.0","eslint-plugin-simple-import-sort":"^7.0.0","prettier":"^2.5.1","test-director":"^8.0.2","typescript":"^4.6.0-dev.20220209"},"scripts":{"eslint":"eslint .","prettier":"prettier -c .","types":"tsc -p jsconfig.json","tests":"coverage-node test.mjs","test":"npm run eslint && npm run prettier && npm run types && npm run tests","prepublishOnly":"npm test"},"gitHead":"acb8f03038ee1bfec96548449340b66ca4868dae","_id":"fake-tag@4.0.0","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"shasum":"9dcc5e3b8c4390efb1001bf36886a0c6ce68978e","size":2605,"noattachment":false,"key":"/fake-tag/-/fake-tag-4.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/fake-tag/download/fake-tag-4.0.0.tgz"},"_npmUser":{"name":"jaydenseric","email":"me@jaydenseric.com"},"directories":{},"maintainers":[{"name":"jaydenseric","email":"me@jaydenseric.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fake-tag_4.0.0_1644489519132_0.34392808943966147"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-02-10T10:43:08.257Z","publish_time":1644489519253,"_cnpm_publish_time":1644489519253},"3.0.0":{"name":"fake-tag","version":"3.0.0","description":"A fake template literal tag to trick syntax highlighters, linters and formatters into action.","license":"MIT","author":{"name":"Jayden Seric","email":"me@jaydenseric.com","url":"https://jaydenseric.com"},"repository":{"type":"git","url":"git+https://github.com/jaydenseric/fake-tag.git"},"homepage":"https://github.com/jaydenseric/fake-tag#readme","bugs":{"url":"https://github.com/jaydenseric/fake-tag/issues"},"funding":"https://github.com/sponsors/jaydenseric","keywords":["es6","dummy","fake","template","literal","string","tag"],"sideEffects":false,"main":"./index.js","exports":{".":"./index.js","./package":"./package.json","./package.json":"./package.json"},"engines":{"node":"^12.20 || >= 14.13"},"browserslist":"Node 12.20 - 13 and Node < 13, Node >= 14.13, > 0.5%, not OperaMini all, not IE > 0, not dead","devDependencies":{"coverage-node":"^5.0.1","eslint":"^7.28.0","eslint-config-env":"^20.0.1","eslint-config-prettier":"^8.3.0","eslint-plugin-compat":"^3.9.0","eslint-plugin-import":"^2.23.4","eslint-plugin-jsdoc":"^35.1.3","eslint-plugin-node":"^11.1.0","eslint-plugin-prettier":"^3.4.0","jsdoc-md":"^11.0.0","prettier":"^2.3.1","test-director":"^6.0.0"},"scripts":{"jsdoc":"jsdoc-md","test":"npm run test:eslint && npm run test:prettier && npm run test:jsdoc && npm run test:api","test:eslint":"eslint .","test:prettier":"prettier -c .","test:jsdoc":"jsdoc-md -c","test:api":"coverage-node test.mjs","prepublishOnly":"npm test"},"gitHead":"2fc8aedc3c67ba8743065cf597a3ed5072138f63","_id":"fake-tag@3.0.0","_nodeVersion":"16.3.0","_npmVersion":"7.16.0","dist":{"shasum":"4c7a86b341f15fc3bcf1cacf48eb017215582f31","size":2093,"noattachment":false,"key":"/fake-tag/-/fake-tag-3.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/fake-tag/download/fake-tag-3.0.0.tgz"},"_npmUser":{"name":"jaydenseric","email":"me@jaydenseric.com"},"directories":{},"maintainers":[{"name":"jaydenseric","email":"me@jaydenseric.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fake-tag_3.0.0_1623043465379_0.01710000426614733"},"_hasShrinkwrap":false,"publish_time":1623043465536,"_cnpm_publish_time":1623043465536},"2.0.0":{"name":"fake-tag","version":"2.0.0","description":"A fake template literal tag to trick syntax highlighters, linters and formatters into action.","license":"MIT","author":{"name":"Jayden Seric","email":"me@jaydenseric.com","url":"https://jaydenseric.com"},"repository":{"type":"git","url":"git+https://github.com/jaydenseric/fake-tag.git"},"homepage":"https://github.com/jaydenseric/fake-tag#readme","bugs":{"url":"https://github.com/jaydenseric/fake-tag/issues"},"funding":"https://github.com/sponsors/jaydenseric","keywords":["es6","dummy","fake","template","literal","string","tag"],"main":"index.js","engines":{"node":">=10"},"browserslist":"> 0.2%, not dead, not OperaMini all","devDependencies":{"coverage-node":"^2.0.0","eslint":"^6.8.0","eslint-config-env":"^12.0.1","eslint-config-prettier":"^6.7.0","eslint-plugin-compat":"^3.3.0","eslint-plugin-import":"^2.19.1","eslint-plugin-jsdoc":"^18.4.3","eslint-plugin-node":"^10.0.0","eslint-plugin-prettier":"^3.1.2","prettier":"^1.19.1","test-director":"^3.0.0"},"scripts":{"test":"npm run test:eslint && npm run test:prettier && npm run test:api","test:eslint":"eslint .","test:prettier":"prettier '**/*.{json,yml,md}' -l","test:api":"coverage-node test","prepublishOnly":"npm test"},"gitHead":"6ccff1d2d3ea8f9ce2191de122077ab6bc699aff","_id":"fake-tag@2.0.0","_nodeVersion":"13.5.0","_npmVersion":"6.13.4","dist":{"shasum":"08ea5df950ef8635833186247f569e8406ffb4da","size":2482,"noattachment":false,"key":"/fake-tag/-/fake-tag-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/fake-tag/download/fake-tag-2.0.0.tgz"},"maintainers":[{"name":"jaydenseric","email":"me@jaydenseric.com"}],"_npmUser":{"name":"jaydenseric","email":"me@jaydenseric.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fake-tag_2.0.0_1577101484401_0.2660970625691159"},"_hasShrinkwrap":false,"publish_time":1577101484504,"_cnpm_publish_time":1577101484504},"1.0.1":{"name":"fake-tag","version":"1.0.1","description":"A fake template literal tag to trick syntax highlighters, linters and formatters into action.","license":"MIT","author":{"name":"Jayden Seric","email":"me@jaydenseric.com","url":"https://jaydenseric.com"},"repository":{"type":"git","url":"git+https://github.com/jaydenseric/fake-tag.git"},"homepage":"https://github.com/jaydenseric/fake-tag#readme","bugs":{"url":"https://github.com/jaydenseric/fake-tag/issues"},"keywords":["es6","dummy","fake","template","literal","string","tag"],"main":"index.js","engines":{"node":">=8.10"},"browserslist":"> 0.2%, not dead, not OperaMini all","devDependencies":{"eslint":"^6.6.0","eslint-config-env":"^11.0.0","eslint-config-prettier":"^6.5.0","eslint-plugin-compat":"^3.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-import-order-alphabetical":"^1.0.0","eslint-plugin-jsdoc":"^17.1.2","eslint-plugin-node":"^10.0.0","eslint-plugin-prettier":"^3.1.1","prettier":"^1.19.1","test-director":"^1.0.0"},"scripts":{"test":"npm run test:eslint && npm run test:prettier && npm run test:api","test:eslint":"eslint .","test:prettier":"prettier '**/*.{json,yml,md}' -l","test:api":"node test","prepublishOnly":"npm test"},"gitHead":"14b1273f4654e3fb699c894cf1f6cfcf157f1ca3","_id":"fake-tag@1.0.1","_nodeVersion":"10.17.0","_npmVersion":"6.13.0","dist":{"shasum":"1d59da482240a02bd83500ca98976530ed154b0d","size":2188,"noattachment":false,"key":"/fake-tag/-/fake-tag-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/fake-tag/download/fake-tag-1.0.1.tgz"},"maintainers":[{"name":"jaydenseric","email":"me@jaydenseric.com"}],"_npmUser":{"name":"jaydenseric","email":"me@jaydenseric.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fake-tag_1.0.1_1573622884647_0.08091112696248648"},"_hasShrinkwrap":false,"publish_time":1573622884808,"_cnpm_publish_time":1573622884808},"1.0.0":{"name":"fake-tag","version":"1.0.0","description":"A fake template literal tag to trick linters and formatters into action.","license":"MIT","author":{"name":"Jayden Seric","email":"me@jaydenseric.com","url":"https://jaydenseric.com"},"repository":{"type":"git","url":"git+https://github.com/jaydenseric/fake-tag.git"},"homepage":"https://github.com/jaydenseric/fake-tag#readme","bugs":{"url":"https://github.com/jaydenseric/fake-tag/issues"},"keywords":["es6","dummy","fake","template","literal","string","tag"],"files":["index.js"],"devDependencies":{"ava":"^1.0.0-beta.4","eslint":"^4.19.1","eslint-plugin-ava":"^4.5.1","eslint-plugin-prettier":"^2.5.0","husky":"^0.14.3","lint-staged":"^7.0.4","prettier":"^1.12.1"},"scripts":{"lint":"eslint . --fix && prettier '**/*.{json,md}' --write","test":"ava","watch":"ava -w","precommit":"lint-staged","prepublishOnly":"npm run lint && npm test"},"lint-staged":{"*.js":"eslint","*.{json,md}":"prettier -l"},"eslintConfig":{"env":{"es6":true,"node":true,"browser":true},"extends":["eslint:recommended","plugin:ava/recommended"],"plugins":["ava","prettier"],"rules":{"curly":["error","multi"],"prettier/prettier":"error"}},"prettier":{"proseWrap":"never","singleQuote":true,"semi":false},"gitHead":"77a4f09c9a85595af38eaa3c3f87ce59c620c44e","_id":"fake-tag@1.0.0","_npmVersion":"6.0.0","_nodeVersion":"10.0.0","_npmUser":{"name":"jaydenseric","email":"me@jaydenseric.com"},"dist":{"shasum":"cdf7b4554e780fb16702794d2bfc4a109d873134","size":1571,"noattachment":false,"key":"/fake-tag/-/fake-tag-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/fake-tag/download/fake-tag-1.0.0.tgz"},"maintainers":[{"name":"jaydenseric","email":"me@jaydenseric.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fake-tag_1.0.0_1525064858401_0.3384446329270361"},"_hasShrinkwrap":false,"publish_time":1525064858667,"_cnpm_publish_time":1525064858667}},"readme":"# fake-tag\n\nA fake template literal tag to trick syntax highlighters, linters and formatters into action. Interpolations and escapes are tested.\n\n## Installation\n\nFor [Node.js](https://nodejs.org), to install [`fake-tag`](https://npm.im/fake-tag) with [npm](https://npmjs.com/get-npm), run:\n\n```sh\nnpm install fake-tag\n```\n\nFor [Deno](https://deno.land) and browsers, an example import map:\n\n```json\n{\n  \"imports\": {\n    \"fake-tag\": \"https://unpkg.com/fake-tag@5.0.0/fakeTag.mjs\"\n  }\n}\n```\n\nThen, import and use the template literal tag [`fakeTag`](./fakeTag.mjs).\n\n## Examples\n\nTagging a [GraphQL](https://graphql.org) SDL string with `gql`:\n\n```js\nimport gql from \"fake-tag\";\n\nconst typeDefs = gql`\n  \"A foo.\"\n  type Foo {\n    \"The \\`Foo\\` ID.\"\n    id: ID!\n  }\n`;\n```\n\n## Requirements\n\nSupported runtime environments:\n\n- [Node.js](https://nodejs.org) versions `^14.17.0 || ^16.0.0 || >= 18.0.0`.\n- [Deno](https://deno.land).\n- Browsers matching the [Browserslist](https://browsersl.ist) query [`> 0.5%, not OperaMini all, not dead`](https://browsersl.ist/?q=%3E+0.5%25%2C+not+OperaMini+all%2C+not+dead).\n\nNon [Deno](https://deno.land) projects must configure [TypeScript](https://typescriptlang.org) to use types from the ECMAScript modules that have a `// @ts-check` comment:\n\n- [`compilerOptions.allowJs`](https://typescriptlang.org/tsconfig#allowJs) should be `true`.\n- [`compilerOptions.maxNodeModuleJsDepth`](https://typescriptlang.org/tsconfig#maxNodeModuleJsDepth) should be reasonably large, e.g. `10`.\n- [`compilerOptions.module`](https://typescriptlang.org/tsconfig#module) should be `\"node16\"` or `\"nodenext\"`.\n\n## Exports\n\nThe [npm](https://npmjs.com) package [`fake-tag`](https://npm.im/fake-tag) features [optimal JavaScript module design](https://jaydenseric.com/blog/optimal-javascript-module-design). These ECMAScript modules are exported via the [`package.json`](./package.json) field [`exports`](https://nodejs.org/api/packages.html#exports):\n\n- [`fakeTag.mjs`](./fakeTag.mjs)\n\n## FAQ\n\n### Why not comment tags?\n\nA comment tag looks like this:\n\n```js\nconst QUERY = /* GraphQL */ `\n  {\n    foo\n  }\n`;\n```\n\nThey are far superior to a fake tag:\n\n- No dependency to manage.\n- No inconvenient imports.\n- No bundle size bloat.\n- No runtime overhead.\n\nUnfortunately not all tools support them yet. [`prettier` has since v1.13.0](https://github.com/prettier/prettier/issues/4360#issuecomment-392391729), but [`eslint-plugin-graphql` at v3.1.0 still doesn’t](https://github.com/apollographql/eslint-plugin-graphql/issues/224).\n\n### Why not `String.raw`?\n\nThis may be temptingly simple:\n\n```js\nconst gql = String.raw;\nconst QUERY = gql`\n  {\n    foo\n  }\n`;\n```\n\nHowever, it doesn’t unescape characters. For the usage example, if you `console.log(typeDefs)` before and after replacing the import with `const gql = String.raw` you will see the difference in the type description markdown:\n\n```diff\n    \"A foo.\"\n    type Foo {\n-     \"The `Foo` ID.\"\n+     \"The \\`Foo\\` ID.\"\n      id: ID!\n    }\n```\n","_attachments":{},"homepage":"https://github.com/jaydenseric/fake-tag#readme","bugs":{"url":"https://github.com/jaydenseric/fake-tag/issues"},"license":"MIT"}