create-napps 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/pdp-template/dist/component-extension.es.js +67 -0
- package/templates/pdp-template/napps.config.json +21 -0
- package/templates/pdp-template/package.json +1 -4
- package/templates/pdp-template/src/customTextBlock.ts +0 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
create-napps - Generate templates for pdp/home/shopbuilder components
|
|
2
2
|
|
|
3
3
|
## Scaffolding Your First NAPPS component extension project
|
|
4
4
|
|
|
@@ -8,23 +8,23 @@
|
|
|
8
8
|
With NPM:
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
npm create napps
|
|
11
|
+
npm create napps@latest
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
With Yarn:
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
yarn create napps
|
|
17
|
+
yarn create napps@latest
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
With PNPM:
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
pnpm create napps
|
|
23
|
+
pnpm create napps@latest
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
With Bun:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
bun create napps
|
|
29
|
+
bun create napps@latest
|
|
30
30
|
```
|
package/dist/index.js
CHANGED
|
@@ -80,4 +80,4 @@ Instructions:
|
|
|
80
80
|
`:``}renderCurrentInput(){return`
|
|
81
81
|
Filtered results for: ${this.inputValue?this.inputValue:n.gray(`Enter something to filter`)}\n`}renderOption(e,t,r){let i;return i=t.disabled?e===r?n.gray().underline(t.title):n.strikethrough().gray(t.title):e===r?n.cyan().underline(t.title):t.title,(t.selected?n.green(s.radioOn):s.radioOff)+` `+i}renderDoneOrInstructions(){if(this.done)return this.value.filter(e=>e.selected).map(e=>e.title).join(`, `);let e=[n.gray(this.hint),this.renderInstructions(),this.renderCurrentInput()];return this.filteredOptions.length&&this.filteredOptions[this.cursor].disabled&&e.push(n.yellow(this.warn)),e.join(` `)}render(){if(this.closed)return;this.firstRender&&this.out.write(r.hide),super.render();let e=[o.symbol(this.done,this.aborted),n.bold(this.msg),o.delimiter(!1),this.renderDoneOrInstructions()].join(` `);this.showMinError&&=(e+=n.red(`You must select a minimum of ${this.minSelected} choices.`),!1),e+=this.renderOptions(this.filteredOptions),this.out.write(this.clear+e),this.clear=a(e,this.out.columns)}}})),ke=g(((e,t)=>{let n=b(),r=Y(),{style:i,clear:a}=J(),{erase:o,cursor:s}=C();t.exports=class extends r{constructor(e={}){super(e),this.msg=e.message,this.value=e.initial,this.initialValue=!!e.initial,this.yesMsg=e.yes||`yes`,this.yesOption=e.yesOption||`(Y/n)`,this.noMsg=e.no||`no`,this.noOption=e.noOption||`(y/N)`,this.render()}reset(){this.value=this.initialValue,this.fire(),this.render()}exit(){this.abort()}abort(){this.done=this.aborted=!0,this.fire(),this.render(),this.out.write(`
|
|
82
82
|
`),this.close()}submit(){this.value=this.value||!1,this.done=!0,this.aborted=!1,this.fire(),this.render(),this.out.write(`
|
|
83
|
-
`),this.close()}_(e,t){return e.toLowerCase()===`y`?(this.value=!0,this.submit()):e.toLowerCase()===`n`?(this.value=!1,this.submit()):this.bell()}render(){this.closed||(this.firstRender?this.out.write(s.hide):this.out.write(a(this.outputText,this.out.columns)),super.render(),this.outputText=[i.symbol(this.done,this.aborted),n.bold(this.msg),i.delimiter(this.done),this.done?this.value?this.yesMsg:this.noMsg:n.gray(this.initialValue?this.yesOption:this.noOption)].join(` `),this.out.write(o.line+s.to(0)+this.outputText))}}})),Ae=g(((e,t)=>{t.exports={TextPrompt:me(),SelectPrompt:he(),TogglePrompt:ge(),DatePrompt:Ee(),NumberPrompt:De(),MultiselectPrompt:Z(),AutocompletePrompt:Oe(),AutocompleteMultiselectPrompt:Q(),ConfirmPrompt:ke()}})),je=g((e=>{let t=e,n=Ae(),r=e=>e;function i(e,t,i={}){return new Promise((a,o)=>{let s=new n[e](t),c=i.onAbort||r,l=i.onSubmit||r,u=i.onExit||r;s.on(`state`,t.onState||r),s.on(`submit`,e=>a(l(e))),s.on(`exit`,e=>a(u(e))),s.on(`abort`,e=>o(c(e)))})}t.text=e=>i(`TextPrompt`,e),t.password=e=>(e.style=`password`,t.text(e)),t.invisible=e=>(e.style=`invisible`,t.text(e)),t.number=e=>i(`NumberPrompt`,e),t.date=e=>i(`DatePrompt`,e),t.confirm=e=>i(`ConfirmPrompt`,e),t.list=e=>{let t=e.separator||`,`;return i(`TextPrompt`,e,{onSubmit:e=>e.split(t).map(e=>e.trim())})},t.toggle=e=>i(`TogglePrompt`,e),t.select=e=>i(`SelectPrompt`,e),t.multiselect=e=>{e.choices=[].concat(e.choices||[]);let t=e=>e.filter(e=>e.selected).map(e=>e.value);return i(`MultiselectPrompt`,e,{onAbort:t,onSubmit:t})},t.autocompleteMultiselect=e=>{e.choices=[].concat(e.choices||[]);let t=e=>e.filter(e=>e.selected).map(e=>e.value);return i(`AutocompleteMultiselectPrompt`,e,{onAbort:t,onSubmit:t})};let a=(e,t)=>Promise.resolve(t.filter(t=>t.title.slice(0,e.length).toLowerCase()===e.toLowerCase()));t.autocomplete=e=>(e.suggest=e.suggest||a,e.choices=[].concat(e.choices||[]),i(`AutocompletePrompt`,e))})),Me=g(((e,t)=>{let n=je(),r=[`suggest`,`format`,`onState`,`validate`,`onRender`,`type`],i=()=>{};async function a(e=[],{onSubmit:t=i,onCancel:s=i}={}){let c={},l=a._override||{};e=[].concat(e);let u,d,f,p,m,h,g=async(e,t,n=!1)=>{if(!(!n&&e.validate&&e.validate(t)!==!0))return e.format?await e.format(t,c):t};for(d of e)if({name:p,type:m}=d,typeof m==`function`&&(m=await m(u,{...c},d),d.type=m),m){for(let e in d){if(r.includes(e))continue;let t=d[e];d[e]=typeof t==`function`?await t(u,{...c},h):t}if(h=d,typeof d.message!=`string`)throw Error(`prompt message is required`);if({name:p,type:m}=d,n[m]===void 0)throw Error(`prompt type (${m}) is not defined`);if(l[d.name]!==void 0&&(u=await g(d,l[d.name]),u!==void 0)){c[p]=u;continue}try{u=a._injected?o(a._injected,d.initial):await n[m](d),c[p]=u=await g(d,u,!0),f=await t(d,u,c)}catch{f=!await s(d,c)}if(f)return c}return c}function o(e,t){let n=e.shift();if(n instanceof Error)throw n;return n===void 0?t:n}function s(e){a._injected=(a._injected||[]).concat(e)}function c(e){a._override=Object.assign({},e)}t.exports=Object.assign(a,{prompt:a,prompts:n,inject:s,override:c})})),Ne=v(g(((e,t)=>{function n(e){e=(Array.isArray(e)?e:e.split(`.`)).map(Number);let t=0,n=process.versions.node.split(`.`).map(Number);for(;t<e.length;t++){if(n[t]>e[t])return!1;if(e[t]>n[t])return!0}return!1}t.exports=n(`8.6.0`)?W():Me()}))(),1);const Pe=[{value:`pdp-template`,title:`Product layout`,description:`A template for creating a PDP Component extension`}],Fe=/^[a-z0-9-]+$/,Ie=process.cwd(),$=async(e,t)=>{let r=await c(e);for(let s of r){let r=n.join(e,s),c=n.join(t,s);(await a(r)).isDirectory()?(await o(c),await $(r,c)):await i(r,c)}},Le=async(e,t)=>{let r=n.join(e,`package.json`);try{let e=await s(r,`utf8`),n=JSON.parse(e);n.name=t,await l(r,JSON.stringify(n,null,2),`utf8`)}catch(e){console.log(e.message)}};(async()=>{try{let{projectName:e,template:i}=await(0,Ne.default)([{type:`select`,name:`template`,message:`Select template`,choices:Pe},{type:`text`,name:`projectName`,message:`Enter your project name`,initial:`my-project`,format:e=>e.toLowerCase().split(` `).join(`-`),validate:e=>Fe.test(e)?!0:`Project name should not contain special characters except hyphen (-)`}]),a=n.join(Ie,e),o=n.resolve(t(import.meta.url),`../../templates`,`${i}`);if(console.log(a),!r.existsSync(a))console.log(`
|
|
83
|
+
`),this.close()}_(e,t){return e.toLowerCase()===`y`?(this.value=!0,this.submit()):e.toLowerCase()===`n`?(this.value=!1,this.submit()):this.bell()}render(){this.closed||(this.firstRender?this.out.write(s.hide):this.out.write(a(this.outputText,this.out.columns)),super.render(),this.outputText=[i.symbol(this.done,this.aborted),n.bold(this.msg),i.delimiter(this.done),this.done?this.value?this.yesMsg:this.noMsg:n.gray(this.initialValue?this.yesOption:this.noOption)].join(` `),this.out.write(o.line+s.to(0)+this.outputText))}}})),Ae=g(((e,t)=>{t.exports={TextPrompt:me(),SelectPrompt:he(),TogglePrompt:ge(),DatePrompt:Ee(),NumberPrompt:De(),MultiselectPrompt:Z(),AutocompletePrompt:Oe(),AutocompleteMultiselectPrompt:Q(),ConfirmPrompt:ke()}})),je=g((e=>{let t=e,n=Ae(),r=e=>e;function i(e,t,i={}){return new Promise((a,o)=>{let s=new n[e](t),c=i.onAbort||r,l=i.onSubmit||r,u=i.onExit||r;s.on(`state`,t.onState||r),s.on(`submit`,e=>a(l(e))),s.on(`exit`,e=>a(u(e))),s.on(`abort`,e=>o(c(e)))})}t.text=e=>i(`TextPrompt`,e),t.password=e=>(e.style=`password`,t.text(e)),t.invisible=e=>(e.style=`invisible`,t.text(e)),t.number=e=>i(`NumberPrompt`,e),t.date=e=>i(`DatePrompt`,e),t.confirm=e=>i(`ConfirmPrompt`,e),t.list=e=>{let t=e.separator||`,`;return i(`TextPrompt`,e,{onSubmit:e=>e.split(t).map(e=>e.trim())})},t.toggle=e=>i(`TogglePrompt`,e),t.select=e=>i(`SelectPrompt`,e),t.multiselect=e=>{e.choices=[].concat(e.choices||[]);let t=e=>e.filter(e=>e.selected).map(e=>e.value);return i(`MultiselectPrompt`,e,{onAbort:t,onSubmit:t})},t.autocompleteMultiselect=e=>{e.choices=[].concat(e.choices||[]);let t=e=>e.filter(e=>e.selected).map(e=>e.value);return i(`AutocompleteMultiselectPrompt`,e,{onAbort:t,onSubmit:t})};let a=(e,t)=>Promise.resolve(t.filter(t=>t.title.slice(0,e.length).toLowerCase()===e.toLowerCase()));t.autocomplete=e=>(e.suggest=e.suggest||a,e.choices=[].concat(e.choices||[]),i(`AutocompletePrompt`,e))})),Me=g(((e,t)=>{let n=je(),r=[`suggest`,`format`,`onState`,`validate`,`onRender`,`type`],i=()=>{};async function a(e=[],{onSubmit:t=i,onCancel:s=i}={}){let c={},l=a._override||{};e=[].concat(e);let u,d,f,p,m,h,g=async(e,t,n=!1)=>{if(!(!n&&e.validate&&e.validate(t)!==!0))return e.format?await e.format(t,c):t};for(d of e)if({name:p,type:m}=d,typeof m==`function`&&(m=await m(u,{...c},d),d.type=m),m){for(let e in d){if(r.includes(e))continue;let t=d[e];d[e]=typeof t==`function`?await t(u,{...c},h):t}if(h=d,typeof d.message!=`string`)throw Error(`prompt message is required`);if({name:p,type:m}=d,n[m]===void 0)throw Error(`prompt type (${m}) is not defined`);if(l[d.name]!==void 0&&(u=await g(d,l[d.name]),u!==void 0)){c[p]=u;continue}try{u=a._injected?o(a._injected,d.initial):await n[m](d),c[p]=u=await g(d,u,!0),f=await t(d,u,c)}catch{f=!await s(d,c)}if(f)return c}return c}function o(e,t){let n=e.shift();if(n instanceof Error)throw n;return n===void 0?t:n}function s(e){a._injected=(a._injected||[]).concat(e)}function c(e){a._override=Object.assign({},e)}t.exports=Object.assign(a,{prompt:a,prompts:n,inject:s,override:c})})),Ne=v(g(((e,t)=>{function n(e){e=(Array.isArray(e)?e:e.split(`.`)).map(Number);let t=0,n=process.versions.node.split(`.`).map(Number);for(;t<e.length;t++){if(n[t]>e[t])return!1;if(e[t]>n[t])return!0}return!1}t.exports=n(`8.6.0`)?W():Me()}))(),1);const Pe=[{value:`pdp-template`,title:`Product layout`,description:`A template for creating a PDP Component extension`}],Fe=/^[a-z0-9-]+$/,Ie=process.cwd(),$=async(e,t)=>{let r=await c(e);for(let s of r){let r=n.join(e,s),c=n.join(t,s);(await a(r)).isDirectory()?(await o(c),await $(r,c)):await i(r,c)}},Le=async(e,t)=>{let r=n.join(e,`package.json`);try{let e=await s(r,`utf8`),n=JSON.parse(e);n.name=t,await l(r,JSON.stringify(n,null,2),`utf8`)}catch(e){console.log(e.message)}},Re=async(e,t)=>{let r=n.join(e,`napps.config.json`);try{let e=await s(r,`utf8`),n=JSON.parse(e);n.projectName=t,await l(r,JSON.stringify(n,null,2),`utf8`)}catch(e){console.log(e.message)}};(async()=>{try{let{projectName:e,template:i}=await(0,Ne.default)([{type:`select`,name:`template`,message:`Select template`,choices:Pe},{type:`text`,name:`projectName`,message:`Enter your project name`,initial:`my-project`,format:e=>e.toLowerCase().split(` `).join(`-`),validate:e=>Fe.test(e)?!0:`Project name should not contain special characters except hyphen (-)`}]),a=n.join(Ie,e),o=n.resolve(t(import.meta.url),`../../templates`,`${i}`);if(console.log(a),!r.existsSync(a))console.log(`Creating directory...`),r.mkdirSync(a,{recursive:!0}),await $(o,a),await Le(a,e),await Re(a,e),console.log(`Finished generating your project ${e}`),console.log(`cd ${e}`),console.log(`yarn/npm install`);else throw Error(`Target directory already exist!`)}catch(e){console.log(e.message)}})();export{};
|
package/package.json
CHANGED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
function _typeof(i) {
|
|
2
|
+
"@babel/helpers - typeof";
|
|
3
|
+
return _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
|
|
4
|
+
return typeof e;
|
|
5
|
+
} : function(e) {
|
|
6
|
+
return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
|
|
7
|
+
}, _typeof(i);
|
|
8
|
+
}
|
|
9
|
+
function toPrimitive(i, a) {
|
|
10
|
+
if (_typeof(i) != "object" || !i) return i;
|
|
11
|
+
var o = i[Symbol.toPrimitive];
|
|
12
|
+
if (o !== void 0) {
|
|
13
|
+
var s = o.call(i, a || "default");
|
|
14
|
+
if (_typeof(s) != "object") return s;
|
|
15
|
+
throw TypeError("@@toPrimitive must return a primitive value.");
|
|
16
|
+
}
|
|
17
|
+
return (a === "string" ? String : Number)(i);
|
|
18
|
+
}
|
|
19
|
+
function toPropertyKey(a) {
|
|
20
|
+
var o = toPrimitive(a, "string");
|
|
21
|
+
return _typeof(o) == "symbol" ? o : o + "";
|
|
22
|
+
}
|
|
23
|
+
function _defineProperty(e, i, o) {
|
|
24
|
+
return (i = toPropertyKey(i)) in e ? Object.defineProperty(e, i, {
|
|
25
|
+
value: o,
|
|
26
|
+
enumerable: !0,
|
|
27
|
+
configurable: !0,
|
|
28
|
+
writable: !0
|
|
29
|
+
}) : e[i] = o, e;
|
|
30
|
+
}
|
|
31
|
+
var ComponentInstance = class {
|
|
32
|
+
constructor(e) {
|
|
33
|
+
_defineProperty(this, "context", void 0), this.context = e;
|
|
34
|
+
}
|
|
35
|
+
onComponentCreated() {}
|
|
36
|
+
onComponentEvent(e, i) {
|
|
37
|
+
if (e === "selectedPropertiesUpdated") {
|
|
38
|
+
let e = i;
|
|
39
|
+
this.onSelectedPropertiesUpdate(e.selectedValues, e.matchingVariantMeta);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
onComponentDestroyed() {}
|
|
44
|
+
onComponentStartLoading() {}
|
|
45
|
+
removeComponent() {
|
|
46
|
+
return this.context.removeComponent();
|
|
47
|
+
}
|
|
48
|
+
onSelectedPropertiesUpdate(e, i) {}
|
|
49
|
+
}, TextBlockComponent = class extends ComponentInstance {
|
|
50
|
+
updateState(e) {
|
|
51
|
+
this.context.updateState(e);
|
|
52
|
+
}
|
|
53
|
+
}, CustomTextBlockComponent = class extends TextBlockComponent {
|
|
54
|
+
async onComponentCreated() {
|
|
55
|
+
this.updateState("Custom Text Block Component Initialized from typescript");
|
|
56
|
+
let e = await productService.getProductById("9097715679480"), i = JSON.stringify(e);
|
|
57
|
+
this.updateState(i);
|
|
58
|
+
let a = await (await fetch("https://napps-mobile-app-teste.myshopify.com/api/2025-10/graphql.json", {
|
|
59
|
+
method: "POST",
|
|
60
|
+
headers: { "Content-Type": "application/json" },
|
|
61
|
+
body: JSON.stringify({ query: "\n query collectionProducts {\n collection(id: \"gid://shopify/Collection/467037552888\") {\n products(first: 250) {\n filters {\n presentation\n label,\n type\n values {\n label,\n swatch {\n color\n },\n count,\n input,\n id\n }\n }\n nodes {\n options(first: 250) {\n id,\n name,\n optionValues {\n id\n name\n swatch {\n color\n }\n }\n }\n }\n }\n }\n }\n " })
|
|
62
|
+
})).json();
|
|
63
|
+
console.log(a), this.updateState(a);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const createComponent = (e) => new CustomTextBlockComponent(e);
|
|
67
|
+
export { createComponent };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"projectName": "",
|
|
3
|
+
"supportedPdpComponents": [],
|
|
4
|
+
"supportedHomeComponents": [],
|
|
5
|
+
"supportedShopBuilderComponents": [],
|
|
6
|
+
"components": [
|
|
7
|
+
{
|
|
8
|
+
"packageName": "",
|
|
9
|
+
"name": "",
|
|
10
|
+
"renderer": "",
|
|
11
|
+
"settings": [
|
|
12
|
+
{
|
|
13
|
+
"id": "",
|
|
14
|
+
"type": "",
|
|
15
|
+
"value": ""
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"identifier": ""
|
|
21
|
+
}
|