Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: staylor/react-helmet-async
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: b1ee65880e71df9124c4e01d07c086d8ce2fc63a
Choose a base ref
...
head repository: staylor/react-helmet-async
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9c1cc27d04e508ee28b026094caf6181316262c1
Choose a head ref
  • 19 commits
  • 98 files changed
  • 2 contributors

Commits on Nov 14, 2022

  1. Update constants.js

    slorber authored and staylor committed Nov 14, 2022
    Copy the full SHA
    4d9a2dc View commit details
  2. chore: bump non-major deps

    staylor committed Nov 14, 2022
    Copy the full SHA
    eb63f20 View commit details

Commits on Nov 8, 2023

  1. remove Babel and Enzyme

    use esbuild to compile
    use strict render for all
    add renderContext helper
    clean up types
    staylor committed Nov 8, 2023
    Copy the full SHA
    44f4997 View commit details
  2. types

    staylor committed Nov 8, 2023
    Copy the full SHA
    4f2060f View commit details
  3. Copy the full SHA
    7e9ac3e View commit details
  4. use React 18 render

    staylor committed Nov 8, 2023
    Copy the full SHA
    45633eb View commit details
  5. Update config.yml

    staylor committed Nov 8, 2023
    Copy the full SHA
    227fd12 View commit details
  6. 18 for circleci

    staylor committed Nov 8, 2023
    Copy the full SHA
    b70af38 View commit details
  7. cimg

    staylor committed Nov 8, 2023
    Copy the full SHA
    ecbd155 View commit details
  8. bump deps

    staylor committed Nov 8, 2023
    Copy the full SHA
    9442cbd View commit details
  9. transition anys

    staylor committed Nov 8, 2023
    Copy the full SHA
    375127e View commit details
  10. Update config.yml

    staylor committed Nov 8, 2023
    Copy the full SHA
    1e5ce58 View commit details
  11. Update config.yml

    staylor committed Nov 8, 2023
    Copy the full SHA
    a068554 View commit details
  12. fix: husky and commitlint

    staylor committed Nov 8, 2023
    Copy the full SHA
    501cb0b View commit details
  13. chore: bump version to alpha

    staylor committed Nov 8, 2023
    Copy the full SHA
    fb95d86 View commit details
  14. Copy the full SHA
    5475782 View commit details
  15. chore: bump version

    staylor committed Nov 8, 2023
    Copy the full SHA
    6435fc0 View commit details

Commits on Nov 20, 2023

  1. Copy the full SHA
    867ea57 View commit details
  2. chore: bump to 2.0.0

    staylor committed Nov 20, 2023
    Copy the full SHA
    9c1cc27 View commit details
Showing with 4,848 additions and 7,474 deletions.
  1. +0 −15 .babelrc.js
  2. +12 −2 .circleci/config.yml
  3. +0 −3 .eslintignore
  4. +31 −11 .eslintrc.js
  5. +0 −1 .gitignore
  6. 0 .husky/commit-msg
  7. +2 −2 .npmignore
  8. +1 −1 .nvmrc
  9. +3 −1 .prettierrc
  10. +11 −0 .vscode/settings.json
  11. +29 −0 __tests__/__snapshots__/misc.test.tsx.snap
  12. +0 −5 __tests__/api/__snapshots__/base.test.js.snap
  13. +5 −0 __tests__/api/__snapshots__/base.test.tsx.snap
  14. +0 −17 __tests__/api/__snapshots__/client.test.js.snap
  15. +17 −0 __tests__/api/__snapshots__/client.test.tsx.snap
  16. +0 −49 __tests__/api/__snapshots__/link.test.js.snap
  17. +49 −0 __tests__/api/__snapshots__/link.test.tsx.snap
  18. +0 −35 __tests__/api/__snapshots__/meta.test.js.snap
  19. +35 −0 __tests__/api/__snapshots__/meta.test.tsx.snap
  20. +0 −5 __tests__/api/__snapshots__/noscript.test.js.snap
  21. +5 −0 __tests__/api/__snapshots__/noscript.test.tsx.snap
  22. +0 −13 __tests__/api/__snapshots__/script.test.js.snap
  23. +13 −0 __tests__/api/__snapshots__/script.test.tsx.snap
  24. +5 −5 __tests__/api/__snapshots__/{style.test.js.snap → style.test.tsx.snap}
  25. +0 −53 __tests__/api/__snapshots__/title.test.js.snap
  26. +53 −0 __tests__/api/__snapshots__/title.test.tsx.snap
  27. +18 −17 __tests__/api/{base.test.js → base.test.tsx}
  28. +44 −33 __tests__/api/{bodyAttributes.test.js → bodyAttributes.test.tsx}
  29. +11 −6 __tests__/api/{client.test.js → client.test.tsx}
  30. +81 −62 __tests__/api/{htmlAttributes.test.js → htmlAttributes.test.tsx}
  31. +124 −143 __tests__/api/{link.test.js → link.test.tsx}
  32. +99 −103 __tests__/api/{meta.test.js → meta.test.tsx}
  33. +11 −7 __tests__/api/{noscript.test.js → noscript.test.tsx}
  34. +41 −44 __tests__/api/{script.test.js → script.test.tsx}
  35. +7 −9 __tests__/api/{style.test.js → style.test.tsx}
  36. +4 −3 __tests__/api/{title.test.js → title.test.tsx}
  37. +25 −21 __tests__/api/{titleAttributes.test.js → titleAttributes.test.tsx}
  38. +0 −15 __tests__/api/utils.js
  39. +0 −95 __tests__/deferred.js
  40. +96 −0 __tests__/deferred.test.tsx
  41. +10 −12 __tests__/{fragment.test.js → fragment.test.tsx}
  42. +39 −57 __tests__/{misc.test.js → misc.test.tsx}
  43. +0 −9 __tests__/server/__snapshots__/base.test.js.snap
  44. +9 −0 __tests__/server/__snapshots__/base.test.tsx.snap
  45. +0 −5 __tests__/server/__snapshots__/bodyAttributes.test.js.snap
  46. +5 −0 __tests__/server/__snapshots__/bodyAttributes.test.tsx.snap
  47. +0 −15 __tests__/server/__snapshots__/helmetData.test.js.snap
  48. +15 −0 __tests__/server/__snapshots__/helmetData.test.tsx.snap
  49. +0 −9 __tests__/server/__snapshots__/htmlAttributes.test.js.snap
  50. +9 −0 __tests__/server/__snapshots__/htmlAttributes.test.tsx.snap
  51. +0 −9 __tests__/server/__snapshots__/link.test.js.snap
  52. +9 −0 __tests__/server/__snapshots__/link.test.tsx.snap
  53. +0 −9 __tests__/server/__snapshots__/meta.test.js.snap
  54. +9 −0 __tests__/server/__snapshots__/meta.test.tsx.snap
  55. +0 −5 __tests__/server/__snapshots__/noscript.test.js.snap
  56. +5 −0 __tests__/server/__snapshots__/noscript.test.tsx.snap
  57. +0 −9 __tests__/server/__snapshots__/script.test.js.snap
  58. +9 −0 __tests__/server/__snapshots__/script.test.tsx.snap
  59. +0 −13 __tests__/server/__snapshots__/server.test.js.snap
  60. +13 −0 __tests__/server/__snapshots__/server.test.tsx.snap
  61. +0 −9 __tests__/server/__snapshots__/style.test.js.snap
  62. +9 −0 __tests__/server/__snapshots__/style.test.tsx.snap
  63. +0 −35 __tests__/server/__snapshots__/title.test.js.snap
  64. +35 −0 __tests__/server/__snapshots__/title.test.tsx.snap
  65. +10 −27 __tests__/server/{base.test.js → base.test.tsx}
  66. +7 −14 __tests__/server/{bodyAttributes.test.js → bodyAttributes.test.tsx}
  67. +13 −18 __tests__/server/{helmetData.test.js → helmetData.test.tsx}
  68. +12 −25 __tests__/server/{htmlAttributes.test.js → htmlAttributes.test.tsx}
  69. +12 −31 __tests__/server/{link.test.js → link.test.tsx}
  70. +12 −31 __tests__/server/{meta.test.js → meta.test.tsx}
  71. +8 −19 __tests__/server/{noscript.test.js → noscript.test.tsx}
  72. +12 −31 __tests__/server/{script.test.js → script.test.tsx}
  73. +24 −52 __tests__/server/{server.test.js → server.test.tsx}
  74. +10 −29 __tests__/server/{style.test.js → style.test.tsx}
  75. +40 −107 __tests__/server/{title.test.js → title.test.tsx}
  76. +0 −15 __tests__/server/utils.js
  77. +23 −0 __tests__/setup-test-env.ts
  78. +41 −0 __tests__/utils.tsx
  79. +26 −0 __tests__/window.ts
  80. +21 −0 build.ts
  81. +0 −95 index.d.ts
  82. +0 −5 jest.config.js
  83. +0 −45 jest.setup.js
  84. +38 −47 package.json
  85. +17 −6 src/{Dispatcher.js → Dispatcher.tsx}
  86. +21 −8 src/{HelmetData.js → HelmetData.ts}
  87. +0 −45 src/Provider.js
  88. +33 −0 src/Provider.tsx
  89. +37 −23 src/{client.js → client.ts}
  90. +0 −76 src/constants.js
  91. +79 −0 src/constants.ts
  92. +38 −70 src/{index.js → index.tsx}
  93. +36 −25 src/{server.js → server.ts}
  94. +102 −0 src/types.ts
  95. +40 −20 src/{utils.js → utils.ts}
  96. +21 −0 tsconfig.json
  97. +19 −0 vitest.config.ts
  98. +3,088 −5,638 yarn.lock
15 changes: 0 additions & 15 deletions .babelrc.js

This file was deleted.

14 changes: 12 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ version: 2
jobs:
build:
docker:
- image: circleci/node:16
- image: cimg/node:18.17.1

steps:
- checkout
@@ -18,4 +18,14 @@ jobs:
- node_modules
key: deps-{{ checksum "package.json" }}

- run: yarn test
- run:
name: Tests
command: yarn test

- run:
name: Type checks
command: yarn tsc

- run:
name: ESLint
command: yarn lint
3 changes: 0 additions & 3 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
/lib
/es
/coverage
/node_modules
package.json
package-lock.json
42 changes: 31 additions & 11 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,36 @@
/**
* @type {import('@types/eslint').Linter.BaseConfig}
*/
module.exports = {
extends: ['kyt'],

extends: [
'@remix-run/eslint-config',
'@remix-run/eslint-config/node',
'@remix-run/eslint-config/jest-testing-library',
'prettier',
],
plugins: ['prettier'],
rules: {
'react/static-property-placement': 0,
},

overrides: [
{
files: ['*.test.js'],
rules: {
'react/jsx-props-no-spreading': 0,
'import/order': [
'error',
{
'newlines-between': 'always',
},
],
'prettier/prettier': [
'error',
{
singleQuote: true,
trailingComma: 'es5',
useTabs: false,
tabWidth: 2,
printWidth: 100,
},
],
'testing-library/render-result-naming-convention': 'off',
},
settings: {
jest: {
version: 27,
},
],
},
};
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
es
lib
node_modules
Empty file modified .husky/commit-msg
100644 → 100755
Empty file.
4 changes: 2 additions & 2 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
.babelrc
.eslintrc.json
.eslintrc.js
jest.setup.js
*.config.js
node_modules
src
__tests__
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
16.14.0
18.17.1
4 changes: 3 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
@@ -2,5 +2,7 @@
"singleQuote": true,
"trailingComma": "es5",
"arrowParens": "avoid",
"printWidth": 100
"printWidth": 100,
"useTabs": false,
"tabWidth": 2
}
11 changes: 11 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
29 changes: 29 additions & 0 deletions __tests__/__snapshots__/misc.test.tsx.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`misc > API > encodes special characters 1`] = `"<meta name=\\"description\\" content=\\"This is &quot;quoted&quot; text and &amp; and '.\\" data-rh=\\"true\\">"`;
exports[`misc > API > only adds new tags and preserves tags when rendering additional Helmet instances 1`] = `"<meta name=\\"description\\" content=\\"Test description\\" data-rh=\\"true\\">"`;
exports[`misc > API > only adds new tags and preserves tags when rendering additional Helmet instances 2`] = `"<link href=\\"http://localhost/style.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" data-rh=\\"true\\">"`;
exports[`misc > API > only adds new tags and preserves tags when rendering additional Helmet instances 3`] = `"<meta name=\\"description\\" content=\\"New description\\" data-rh=\\"true\\">"`;
exports[`misc > API > only adds new tags and preserves tags when rendering additional Helmet instances 4`] = `"<link href=\\"http://localhost/style2.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" data-rh=\\"true\\">"`;
exports[`misc > API > only adds new tags and preserves tags when rendering additional Helmet instances 5`] = `"<meta name=\\"description\\" content=\\"Test description\\" data-rh=\\"true\\">"`;
exports[`misc > API > recognizes valid tags regardless of attribute ordering 1`] = `"<meta content=\\"Test Description\\" name=\\"description\\" data-rh=\\"true\\">"`;
exports[`misc > Declarative API > encodes special characters 1`] = `"<meta name=\\"description\\" content=\\"This is &quot;quoted&quot; text and &amp; and '.\\" data-rh=\\"true\\">"`;
exports[`misc > Declarative API > only adds new tags and preserves tags when rendering additional Helmet instances 1`] = `"<meta name=\\"description\\" content=\\"Test description\\" data-rh=\\"true\\">"`;
exports[`misc > Declarative API > only adds new tags and preserves tags when rendering additional Helmet instances 2`] = `"<link href=\\"http://localhost/style.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" data-rh=\\"true\\">"`;
exports[`misc > Declarative API > only adds new tags and preserves tags when rendering additional Helmet instances 3`] = `"<meta name=\\"description\\" content=\\"New description\\" data-rh=\\"true\\">"`;
exports[`misc > Declarative API > only adds new tags and preserves tags when rendering additional Helmet instances 4`] = `"<link href=\\"http://localhost/style2.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" data-rh=\\"true\\">"`;
exports[`misc > Declarative API > only adds new tags and preserves tags when rendering additional Helmet instances 5`] = `"<meta name=\\"description\\" content=\\"Test description\\" data-rh=\\"true\\">"`;
exports[`misc > Declarative API > recognizes valid tags regardless of attribute ordering 1`] = `"<meta content=\\"Test Description\\" name=\\"description\\" data-rh=\\"true\\">"`;
5 changes: 0 additions & 5 deletions __tests__/api/__snapshots__/base.test.js.snap

This file was deleted.

5 changes: 5 additions & 0 deletions __tests__/api/__snapshots__/base.test.tsx.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`base tag > API > sets base tag based on deepest nested component 1`] = `"<base href=\\"http://mysite.com/public\\" data-rh=\\"true\\">"`;
exports[`base tag > Declarative API > sets base tag based on deepest nested component 1`] = `"<base href=\\"http://mysite.com/public\\" data-rh=\\"true\\">"`;
17 changes: 0 additions & 17 deletions __tests__/api/__snapshots__/client.test.js.snap

This file was deleted.

17 changes: 17 additions & 0 deletions __tests__/api/__snapshots__/client.test.tsx.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`onChangeClientState > API > when handling client state change, calls the function with new state, addedTags and removedTags 1`] = `"<base href=\\"http://mysite.com/\\" data-rh=\\"true\\">"`;
exports[`onChangeClientState > API > when handling client state change, calls the function with new state, addedTags and removedTags 2`] = `"<meta charset=\\"utf-8\\" data-rh=\\"true\\">"`;
exports[`onChangeClientState > API > when handling client state change, calls the function with new state, addedTags and removedTags 3`] = `"<link href=\\"http://localhost/helmet\\" rel=\\"canonical\\" data-rh=\\"true\\">"`;
exports[`onChangeClientState > API > when handling client state change, calls the function with new state, addedTags and removedTags 4`] = `"<script src=\\"http://localhost/test.js\\" type=\\"text/javascript\\" data-rh=\\"true\\"></script>"`;
exports[`onChangeClientState > Declarative API > when handling client state change, calls the function with new state, addedTags and removedTags 1`] = `"<base href=\\"http://mysite.com/\\" data-rh=\\"true\\">"`;
exports[`onChangeClientState > Declarative API > when handling client state change, calls the function with new state, addedTags and removedTags 2`] = `"<meta charset=\\"utf-8\\" data-rh=\\"true\\">"`;
exports[`onChangeClientState > Declarative API > when handling client state change, calls the function with new state, addedTags and removedTags 3`] = `"<link href=\\"http://localhost/helmet\\" rel=\\"canonical\\" data-rh=\\"true\\">"`;
exports[`onChangeClientState > Declarative API > when handling client state change, calls the function with new state, addedTags and removedTags 4`] = `"<script src=\\"http://localhost/test.js\\" type=\\"text/javascript\\" data-rh=\\"true\\"></script>"`;
49 changes: 0 additions & 49 deletions __tests__/api/__snapshots__/link.test.js.snap

This file was deleted.

49 changes: 49 additions & 0 deletions __tests__/api/__snapshots__/link.test.tsx.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`link tags > API > allows duplicate link tags if specified in the same component 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet\\" data-rh=\\"true\\">"`;
exports[`link tags > API > allows duplicate link tags if specified in the same component 2`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/component\\" data-rh=\\"true\\">"`;
exports[`link tags > API > does not render tag when primary attribute is null 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/component\\" data-rh=\\"true\\">"`;
exports[`link tags > API > overrides duplicate link tags with a single link tag in a nested component 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/innercomponent\\" data-rh=\\"true\\">"`;
exports[`link tags > API > overrides single link tag with duplicate link tags in a nested component 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/component\\" data-rh=\\"true\\">"`;
exports[`link tags > API > overrides single link tag with duplicate link tags in a nested component 2`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/innercomponent\\" data-rh=\\"true\\">"`;
exports[`link tags > API > sets link tags based on deepest nested component 1`] = `"<link href=\\"http://localhost/style.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
exports[`link tags > API > sets link tags based on deepest nested component 2`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/innercomponent\\" data-rh=\\"true\\">"`;
exports[`link tags > API > sets link tags based on deepest nested component 3`] = `"<link href=\\"http://localhost/inner.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
exports[`link tags > API > tags 'rel' and 'href' properly use 'rel' as the primary identification for this tag, regardless of ordering 1`] = `"<link href=\\"http://localhost/helmet/newest\\" rel=\\"canonical\\" data-rh=\\"true\\">"`;
exports[`link tags > API > tags with rel='stylesheet' uses the href as the primary identification of the tag, regardless of ordering 1`] = `"<link href=\\"http://localhost/style.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
exports[`link tags > API > tags with rel='stylesheet' uses the href as the primary identification of the tag, regardless of ordering 2`] = `"<link rel=\\"stylesheet\\" href=\\"http://localhost/inner.css\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > allows duplicate link tags if specified in the same component 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > allows duplicate link tags if specified in the same component 2`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/component\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > does not render tag when primary attribute is null 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/component\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > overrides duplicate link tags with a single link tag in a nested component 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/innercomponent\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > overrides single link tag with duplicate link tags in a nested component 1`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/component\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > overrides single link tag with duplicate link tags in a nested component 2`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/innercomponent\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > sets link tags based on deepest nested component 1`] = `"<link href=\\"http://localhost/style.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > sets link tags based on deepest nested component 2`] = `"<link rel=\\"canonical\\" href=\\"http://localhost/helmet/innercomponent\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > sets link tags based on deepest nested component 3`] = `"<link href=\\"http://localhost/inner.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > tags 'rel' and 'href' properly use 'rel' as the primary identification for this tag, regardless of ordering 1`] = `"<link href=\\"http://localhost/helmet/newest\\" rel=\\"canonical\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > tags with rel='stylesheet' uses the href as the primary identification of the tag, regardless of ordering 1`] = `"<link href=\\"http://localhost/style.css\\" rel=\\"stylesheet\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
exports[`link tags > Declarative API > tags with rel='stylesheet' uses the href as the primary identification of the tag, regardless of ordering 2`] = `"<link rel=\\"stylesheet\\" href=\\"http://localhost/inner.css\\" type=\\"text/css\\" media=\\"all\\" data-rh=\\"true\\">"`;
Loading